From db047023162da51e9217c3cf7e264c9863a97cc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Tue, 26 Sep 2023 22:10:46 +0200 Subject: [PATCH 001/870] Add OTel docs outline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/otel/names.md | 5 ++++- docs/content/otel/otlp.md | 5 ++++- docs/content/otel/tracing.md | 11 ++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/docs/content/otel/names.md b/docs/content/otel/names.md index 89f6515c7..45b94fcc2 100644 --- a/docs/content/otel/names.md +++ b/docs/content/otel/names.md @@ -3,4 +3,7 @@ title: Names weight: 3 --- -TODO: How to iplement OpenTelemetry semantic conventions, and how OpenTelemetry metric and label names are converted to Prometheus. +TODO: This section will contain information on: + +* Mapping Prometheus metric names to OpenTelemetry when using the `OpenTelemetryExporter`. See OpenTelemetry's [Prometheus and OpenMetrics Compatibility](https://opentelemetry.io/docs/specs/otel/compatibility/prometheus_and_openmetrics/). +* Using dots in label and metric names to implement OpenTelemetry's semantic conventions. diff --git a/docs/content/otel/otlp.md b/docs/content/otel/otlp.md index 9c7938d99..345542606 100644 --- a/docs/content/otel/otlp.md +++ b/docs/content/otel/otlp.md @@ -3,4 +3,7 @@ title: OTLP weight: 1 --- -TODO: How to push metrics to an OpenTelemetry endpoint using the OpenTelemetry exporter. +TODO: This section will describe how to push metrics to an OpenTelemetry endpoint using the OpenTelemetry exporter. + +In the meantime, have a look at the example in [examples/example-exporter-opentelemetry](https://github.com/prometheus/client_java/tree/main/examples/example-exporter-opentelemetry). +It has an example Java program with the `OpenTelemetryExporter`, and a Docker compose setting up a pipeline with the OpenTelemetry collector and a Prometheus server. diff --git a/docs/content/otel/tracing.md b/docs/content/otel/tracing.md index 47af209cc..99bcbd6cb 100644 --- a/docs/content/otel/tracing.md +++ b/docs/content/otel/tracing.md @@ -3,4 +3,13 @@ title: Tracing weight: 2 --- -TODO: How to integrate Prometheus metrics with OTel traces. +It is a common scenario that you use the Prometheus Java client for metrics, and the OpenTelemetry Java instrumentation agent for tracing. + +The Prometheus Java client has some awesome features under the hood to support integration with OpenTelemetry tracing: + +* `service.name` and `service.instance.id` are used in OpenTelemetry to uniquely identify a service instance. If an OpenTelemetry Java agent is attached, the Prometheus library will automatically use the same `service.name` and `service.instance.id` as the agent when pushing metrics in OpenTelemetry format. That way the monitoring backend will see that the metrics and the traces are coming from the same instance. +* Exemplars are added automatically if a Prometheus metric is updated in the context of a distributed OpenTelemetry trace. +* If a Span is used as an Exemplar, the Span is marked with the Span attribute `exemplar="true"`. This can be used in the OpenTelemetry's sampling policy to make sure Exemplars are always sampled. + +TODO: We will add more information on integration OTel tracing with Prometheus metrics here. +In the meantime, have a look at the tail sampling end-to-end example in [examples/example-exemplars-tail-sampling](https://github.com/prometheus/client_java/tree/main/examples/example-exemplars-tail-sampling). From 491d226b1fd40a3612d4a888165e23f342379d64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Tue, 26 Sep 2023 23:00:22 +0200 Subject: [PATCH 002/870] Add more 0.16.0 migration docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/migration/simpleclient.md | 58 +++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/docs/content/migration/simpleclient.md b/docs/content/migration/simpleclient.md index 661c1aeea..4f4ebf290 100644 --- a/docs/content/migration/simpleclient.md +++ b/docs/content/migration/simpleclient.md @@ -3,15 +3,17 @@ title: Simpleclient weight: 1 --- -The Prometheus Java client library 1.0.0 is a complete rewrite, and is not backwards compatible with the old `simpleclient` modules for a variety of reasons: +The Prometheus Java client library 1.0.0 is a complete rewrite of the underlying data model, and is not backwards compatible with releases 0.16.0 and older for a variety of reasons: -* We rewrote the underlying data model. The `simpleclient` data model is based on [OpenMetrics](https://openmetrics.io/), which is based on the assumption that each data point has exactly one `double` value (`Collector.Sample.value` in `simpleclient`). With the new Prometheus native histograms this is no longer true. Native histograms have a complex data structure as value. This is the reason why native histograms cannot be exposed in OpenMetrics text format. The new `prometheus-metrics-model` implements the current Prometheus data model and is not based on OpenMetrics. -* We refactored the package names. The simpleclient has package names that are reused by multiple Maven modules, which causes issues with the Java module system. The new `prometheus-metrics` modules each has their own package name, package names are not reused. +* The old data model was based on [OpenMetrics](https://openmetrics.io). Native histograms don't fit with the OpenMetrics model because they don't follow the "every sample has exactly one double value" paradigm. It was a lot cleaner to implement a dedicated `prometheus-metrics-model` than trying to fit native histograms into the existing OpenMetrics-based model. +* Version 0.16.0 and older has multiple Maven modules sharing the same Java package name. This is not supported by the Java module system. To support users of Java modules, we renamed all packages and made sure no package is reused across multiple Maven modules. -Migrating from Simpleclient ---------------------------- +Migration using the Simpleclient Bridge +--------------------------------------- -For users of previous versions of the Prometheus Java client we provide a migration module for bridging the simpleclient `CollectorRegistry` to the new `PromethesuRegistry`. +Good news: Users of version 0.16.0 and older do not need to refactor all their instrumentation code to get started with 1.0.0. + +We provide a migration module for bridging the old simpleclient `CollectorRegistry` to the new `PromethesuRegistry`. To use the bridge, add the following dependency: @@ -50,3 +52,47 @@ SimpleclientCollector.builder() .collectorRegistry(simpleclientRegistry) .register(prometheusRegistry); ``` + +Refactoring the Instrumentation Code +------------------------------------ + +If you decide to get rid of the old 0.16.0 dependencies and use 1.0.0 only, you need to refactor your code: + +Dependencies: + +* `simpleclient` -> `prometheus-metrics-core` +* `simpleclient_hotspot` -> `prometheus-metrics-instrumentation-jvm` +* `simpleclient_httpserver` -> `prometheus-metrics-exporter-httpserver` +* `simpleclient_servlet_jakarta` -> `prometheus-metrics-exporter-servlet-jakarta` + +As long as you are using high-level metric API like `Counter`, `Gauge`, `Histogram`, and `Summary` converting code to the new API is relatively straightforward. You will need to adapt the package name and apply some minor changes like using `builder()` instead of `build()` or using `labelValues()` instead of `labels()`. + +Example of the old 0.16.0 API: + +```java +import io.prometheus.client.Counter; + +Counter counter = Counter.build() + .name("test") + .help("test counter") + .labelNames("path") + .register(); + +counter.labels("/hello-world").inc(); +``` + +Example of the new 1.0.0 API: + +```java +import io.prometheus.metrics.core.metrics.Counter; + +Counter counter = Counter.builder() + .name("test") + .help("test counter") + .labelNames("path") + .register(); + +counter.labelValues("/hello-world").inc(); +``` + +If you are using the low level `Collector` API directly, you should have a look at the new callback metric types, see [/getting-started/callbacks/](../../getting-started/callbacks/). Chances are good that the new callback metrics have an easier way to achieve what you need than the old 0.16.0 code. From 728729c22162e25b0f911ee1953ea8c3fcd3ae75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 09:31:34 +0200 Subject: [PATCH 003/870] Temporarily add shaded dependencies to prepare for releas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 864672026..f6c0aa8e3 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ prometheus-metrics-exporter-opentelemetry prometheus-metrics-instrumentation-jvm prometheus-metrics-simpleclient-bridge - + prometheus-metrics-shaded-dependencies examples benchmarks integration-tests diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index e3b78f14b..f7cad4ce6 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -46,7 +46,7 @@ io.prometheus prometheus-metrics-shaded-opentelemetry - 1.0.0-beta-1 + ${project.version} From a94d774be80784142dc860a9bcf03e770cbdfd31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 09:32:55 +0200 Subject: [PATCH 004/870] [maven-release-plugin] prepare release v1.0.0 --- benchmarks/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exemplars-tail-sampling/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter/it-exporter-httpserver-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-exporter/pom.xml | 4 ++-- integration-tests/pom.xml | 2 +- pom.xml | 4 ++-- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- prometheus-metrics-exporter-httpserver/pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exporter-servlet-jakarta/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- prometheus-metrics-shaded-dependencies/pom.xml | 2 +- .../prometheus-metrics-shaded-opentelemetry/pom.xml | 2 +- .../prometheus-metrics-shaded-protobuf/pom.xml | 2 +- prometheus-metrics-simpleclient-bridge/pom.xml | 4 ++-- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../prometheus-metrics-tracer-initializer/pom.xml | 2 +- .../prometheus-metrics-tracer-otel-agent/pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- 37 files changed, 40 insertions(+), 40 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 9a25ea843..a4b548162 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 benchmarks diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 766239bb9..336a98e73 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.0.0-beta-2-SNAPSHOT + 1.0.0 example-greeting-service diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 994abd895..c0d99cf50 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.0.0-beta-2-SNAPSHOT + 1.0.0 example-hello-world-app diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index f2dee4476..184183369 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0-beta-2-SNAPSHOT + 1.0.0 example-exemplars-tail-sampling diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index 19bece513..c49813754 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0-beta-2-SNAPSHOT + 1.0.0 example-exporter-httpserver diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index 05feaa7e8..99d6743ad 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0-beta-2-SNAPSHOT + 1.0.0 example-exporter-opentelemetry diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 3dbc14da3..53fed0486 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0-beta-2-SNAPSHOT + 1.0.0 example-exporter-servlet-tomcat diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index 720fb621e..9d0ace19d 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0-beta-2-SNAPSHOT + 1.0.0 example-native-histogram diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index 13738efc3..0d455acd4 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0-beta-2-SNAPSHOT + 1.0.0 example-prometheus-properties diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index 46b76f86b..d6aab5d54 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0-beta-2-SNAPSHOT + 1.0.0 example-simpleclient-bridge diff --git a/examples/pom.xml b/examples/pom.xml index a52a32f73..481051e60 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 examples diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index af01b17a1..6f318863a 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.0.0-beta-2-SNAPSHOT + 1.0.0 it-common diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index 2e15dbd60..dd646dc12 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.0.0-beta-2-SNAPSHOT + 1.0.0 it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index 10d6db685..45ca15545 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.0.0-beta-2-SNAPSHOT + 1.0.0 it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index e7cec4152..a2e3eca52 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.0.0-beta-2-SNAPSHOT + 1.0.0 it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 44f065e29..a944e4555 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.0.0-beta-2-SNAPSHOT + 1.0.0 it-exporter-test diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index 2d8b7b851..580f2ef8a 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.0.0-beta-2-SNAPSHOT + 1.0.0 it-exporter @@ -29,7 +29,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - HEAD + v1.0.0 diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index ce770704b..c95fff352 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 integration-tests diff --git a/pom.xml b/pom.xml index f6c0aa8e3..08b7f588a 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 Prometheus Metrics Library http://github.com/prometheus/client_java @@ -25,7 +25,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - HEAD + v1.0.0 diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index 7d556ad5f..02221376f 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 7670d32b2..ea4196e3c 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index 7846bd500..f7a946b57 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index 13edaa55f..d5aba5909 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index f7cad4ce6..6c970262b 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 1a9411d8c..df5dc0034 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 75e07f6d1..f5f79e31f 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index 0212c043b..a2e0912ef 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index b81fb509d..5c1254faf 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-model diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml index 508185dfa..8cf558888 100644 --- a/prometheus-metrics-shaded-dependencies/pom.xml +++ b/prometheus-metrics-shaded-dependencies/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-shaded-dependencies diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml index 3484a5435..7f4ba2e44 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-shaded-opentelemetry diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml index d136434d5..4f01b6ba1 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-shaded-protobuf diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index b4480483b..ef169da3c 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-simpleclient-bridge @@ -72,7 +72,7 @@ io.prometheus prometheus-metrics-config - 1.0.0-beta-2-SNAPSHOT + 1.0.0 compile diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 90927f4d6..1c4d883d2 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index d1571414c..4fd20013c 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index 22995a855..1bbcba70c 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index af73f9d22..b9cc7e555 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index 5f6cee34f..3de9b4308 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.0.0-beta-2-SNAPSHOT + 1.0.0 prometheus-metrics-tracer-otel From 9f2a654675fe50f858cebac09e7d92007c866f31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 09:32:59 +0200 Subject: [PATCH 005/870] [maven-release-plugin] prepare for next development iteration --- benchmarks/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exemplars-tail-sampling/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter/it-exporter-httpserver-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-exporter/pom.xml | 4 ++-- integration-tests/pom.xml | 2 +- pom.xml | 4 ++-- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- prometheus-metrics-exporter-httpserver/pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exporter-servlet-jakarta/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- prometheus-metrics-shaded-dependencies/pom.xml | 2 +- .../prometheus-metrics-shaded-opentelemetry/pom.xml | 2 +- .../prometheus-metrics-shaded-protobuf/pom.xml | 2 +- prometheus-metrics-simpleclient-bridge/pom.xml | 4 ++-- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../prometheus-metrics-tracer-initializer/pom.xml | 2 +- .../prometheus-metrics-tracer-otel-agent/pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- 37 files changed, 40 insertions(+), 40 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index a4b548162..18f8f7b34 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT benchmarks diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 336a98e73..29827ffbe 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.0.0 + 1.1.0-SNAPSHOT example-greeting-service diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index c0d99cf50..bc6db20f7 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.0.0 + 1.1.0-SNAPSHOT example-hello-world-app diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index 184183369..0e77e6206 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0 + 1.1.0-SNAPSHOT example-exemplars-tail-sampling diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index c49813754..1e2e29293 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0 + 1.1.0-SNAPSHOT example-exporter-httpserver diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index 99d6743ad..78d4ce8af 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0 + 1.1.0-SNAPSHOT example-exporter-opentelemetry diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 53fed0486..75f3beeab 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0 + 1.1.0-SNAPSHOT example-exporter-servlet-tomcat diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index 9d0ace19d..b094f76db 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0 + 1.1.0-SNAPSHOT example-native-histogram diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index 0d455acd4..14dad20ff 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0 + 1.1.0-SNAPSHOT example-prometheus-properties diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index d6aab5d54..3abc5f5ba 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.0.0 + 1.1.0-SNAPSHOT example-simpleclient-bridge diff --git a/examples/pom.xml b/examples/pom.xml index 481051e60..0b293cedc 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT examples diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index 6f318863a..ccff0a33c 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.0.0 + 1.1.0-SNAPSHOT it-common diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index dd646dc12..3638eb7e1 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.0.0 + 1.1.0-SNAPSHOT it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index 45ca15545..823997f40 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.0.0 + 1.1.0-SNAPSHOT it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index a2e3eca52..1cef98dd0 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.0.0 + 1.1.0-SNAPSHOT it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index a944e4555..05661f8c0 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.0.0 + 1.1.0-SNAPSHOT it-exporter-test diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index 580f2ef8a..2802e6231 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.0.0 + 1.1.0-SNAPSHOT it-exporter @@ -29,7 +29,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - v1.0.0 + HEAD diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index c95fff352..d2f1a7fb5 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT integration-tests diff --git a/pom.xml b/pom.xml index 08b7f588a..348b58831 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT Prometheus Metrics Library http://github.com/prometheus/client_java @@ -25,7 +25,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - v1.0.0 + HEAD diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index 02221376f..4e8a2328a 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index ea4196e3c..25007d1e9 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index f7a946b57..ceea4b6a2 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index d5aba5909..1495ea259 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 6c970262b..6b7711112 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index df5dc0034..6e09cfdee 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index f5f79e31f..14ad61102 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index a2e0912ef..95c6dfe97 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index 5c1254faf..f5c922707 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-model diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml index 8cf558888..a7ff63c82 100644 --- a/prometheus-metrics-shaded-dependencies/pom.xml +++ b/prometheus-metrics-shaded-dependencies/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-shaded-dependencies diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml index 7f4ba2e44..bc1e62549 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-shaded-opentelemetry diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml index 4f01b6ba1..917892a98 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-shaded-protobuf diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index ef169da3c..5287de079 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-simpleclient-bridge @@ -72,7 +72,7 @@ io.prometheus prometheus-metrics-config - 1.0.0 + 1.1.0-SNAPSHOT compile diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 1c4d883d2..fef4bb904 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index 4fd20013c..aadc50e21 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index 1bbcba70c..7801c6712 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index b9cc7e555..76f7ce66e 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index 3de9b4308..a7396d514 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.0.0 + 1.1.0-SNAPSHOT prometheus-metrics-tracer-otel From 7ff57d17cc4fd30f1b1387e5a6e4d7cd620e985d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 09:52:47 +0200 Subject: [PATCH 006/870] Exclude shaded dependencies from the build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 348b58831..2845c00d0 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ prometheus-metrics-exporter-opentelemetry prometheus-metrics-instrumentation-jvm prometheus-metrics-simpleclient-bridge - prometheus-metrics-shaded-dependencies + examples benchmarks integration-tests diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 6b7711112..424b9afa3 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -46,7 +46,7 @@ io.prometheus prometheus-metrics-shaded-opentelemetry - ${project.version} + 1.0.0 From 312ce6d1b121947f230ecd1dd6739f00127f1394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 10:54:17 +0200 Subject: [PATCH 007/870] Add a paragraph to the simpleclient migration docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/migration/simpleclient.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/content/migration/simpleclient.md b/docs/content/migration/simpleclient.md index 4f4ebf290..5b1ee6a15 100644 --- a/docs/content/migration/simpleclient.md +++ b/docs/content/migration/simpleclient.md @@ -95,4 +95,6 @@ Counter counter = Counter.builder() counter.labelValues("/hello-world").inc(); ``` +Reasons why we changed the API: Changing the package names was a neccessity because the previous package names were incompatible with the Java module system. However, renaming packages requires chaning code anyway, so we decided to clean up some things. For example, the name `builder()` for a builder method is very common in the Java ecosystem, it's used in Spring, Lombok, and so on. So naming the method `builder()` makes the Prometheus library more aligned with the broader Java ecosystem. + If you are using the low level `Collector` API directly, you should have a look at the new callback metric types, see [/getting-started/callbacks/](../../getting-started/callbacks/). Chances are good that the new callback metrics have an easier way to achieve what you need than the old 0.16.0 code. From 8a2d3239ed078da9dc0e022e3d0f47cb5032d13f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 12:48:35 +0200 Subject: [PATCH 008/870] Add OpenTelemetryExporter docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/otel/otlp.md | 38 ++++++++++++++++++++++++--- docs/static/images/otel-pipeline.png | Bin 0 -> 58434 bytes 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 docs/static/images/otel-pipeline.png diff --git a/docs/content/otel/otlp.md b/docs/content/otel/otlp.md index 345542606..d81ed822e 100644 --- a/docs/content/otel/otlp.md +++ b/docs/content/otel/otlp.md @@ -3,7 +3,39 @@ title: OTLP weight: 1 --- -TODO: This section will describe how to push metrics to an OpenTelemetry endpoint using the OpenTelemetry exporter. +The Prometheus Java client library allows you to push metrics to an OpenTelemetry endpoint using the OTLP protocol. -In the meantime, have a look at the example in [examples/example-exporter-opentelemetry](https://github.com/prometheus/client_java/tree/main/examples/example-exporter-opentelemetry). -It has an example Java program with the `OpenTelemetryExporter`, and a Docker compose setting up a pipeline with the OpenTelemetry collector and a Prometheus server. +![Image of a with the Prometheus client library pushing metrics to an OpenTelemetry collector](/images/otel-pipeline.png) + +To implement this, you need to include `prometheus-metrics-exporter` as a dependency + +{{< tabs "uniqueid" >}} +{{< tab "Gradle" >}} +``` +implementation 'io.prometheus:prometheus-metrics-exporter-opentelemetry:1.0.0' +``` +{{< /tab >}} +{{< tab "Maven" >}} +```xml + + io.prometheus + prometheus-metrics-exporter-opentelemetry + 1.0.0 + +``` +{{< /tab >}} +{{< /tabs >}} + +Initialize the `OpenTelemetryExporter` in your Java code: + +```java +OpenTelemetryExporter.builder() + // optional: call configuration methods here + .buildAndStart(); +``` + +By default, the `OpenTelemetryExporter` will push metrics every 60 seconds to `localhost:4317` using `grpc` protocol. You can configure this in code using the [OpenTelemetryExporter.Builder](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html), or at runtime via [`io.prometheus.exporter.opentelemetry.*`](../../config/config/#exporter-opentelemetry-properties) properties. + +In addition to the Prometheus Java client configuration, the exporter also recognizes standard OpenTelemetry configuration. For example, you can set the [OTEL_EXPORTER_OTLP_METRICS_ENDPOINT](https://opentelemetry.io/docs/concepts/sdk-configuration/otlp-exporter-configuration/#otel_exporter_otlp_metrics_endpoint) environment variable to configure the endpoint. The Javadoc for [OpenTelemetryExporter.Builder](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html) shows which settings have corresponding OTel configuration. The intended use case is that if you attach the [OpenTelemetry Java agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation/) for tracing, and use the Prometheus Java client for metrics, it is sufficient to configure the OTel agent because the Prometheus library will pick up the same configuration. + +The [examples/example-exporter-opentelemetry](https://github.com/prometheus/client_java/tree/main/examples/example-exporter-opentelemetry) folder has a docker compose with a complete end-to-end example, including a Java app, the OTel collector, and a Prometheus server. diff --git a/docs/static/images/otel-pipeline.png b/docs/static/images/otel-pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..5cf8eda3dd3d877bea1444d4ae0989eeaa07b621 GIT binary patch literal 58434 zcmaI81z4QPvM`KGa0w9H6Wrb1-GjT^;1WEzYj6m`-GaMAaCaNr-Ql0??!EW?dv?F! zndj}dyQ{lPx~jUmhA>5W38Z(p@4&#okfbCOA!%8 zDG?E3MS#7TrHv^V*rzy`SOG~0L!AEXQknylxmX!!0!ag-ICG)8R1qj-0M*Ol*wvI| zWz1Fg=YZSYfC9?G{^6Yb>Rh@a3(Hz6xBzYGio5Bl+4P;Cs@t2#&OGn~eU4V9IWK69H3HxpB1S7nWZ^&%v6D?TrOf2yz^FlG zI522%bTCLz2^{nX2965`{YM!LOd1^Tf6L0?pZ@9t0R|Rg2?q67pUZ&{M@2U}|dTWMS|89i1*2Q~~cG zspSL)hDGuF3ofNhehvl(v0$mH>8vRy%WZ6LOK)gmZ)8gEZtL)S957yYZcx$I)Y*{O z-PXp=iQAoz^p76gpz`l(22$cbx;R_&k!s2*5{uXaOo`d)8R;2G`QH%}6Y~O0%(#_B z#s2~az44J+I6FIVGcdThxzW3^(Axvd8JM`ZxEL6j8JL;rKt1T3JnWne-RbO{$o?GU zf5s6tbutE6IyhU}+Y$dB*U-q`#hH(k^!G&n`}uR7rtX&iHVOd@Q*pQ{%=lJrvKlR|IzXvkiT)@RyK9Aw{iJRLp3`~ zXMSd0hJUL5JCxS{f$=l3vi=41pS6F7(ELY;|E&ExgaW`4LQ`M z!*AaIhb;UlXn)j#B#r+aFT?*zE&sbkWWPKxFhMXWQ6W`#@MB$AKOMEjmx5E9b-6P> ze<+9`J@ojT*ol_wg73r-qypijp`>DHn5g+uXT+hB65P2M+$7*rPn3+ROp9B!^= zu4Z1TsV{cSPfO){qbq<@4SeGP`LIwJF+ns%C`|BwdiY05bf#Xg&Ag+A2=^n+f&27N z4^6mFae4Ys{{;W%pfyn76o49_m?hi$f1KryN>Ygq$bX;11Rg>fXfhNrW%d79iD_6l2dxk-DsKmjcc9gFwvn_FO^6X!k{s}@W0EDX6<@dU@e`gy=FxLH%$u^uqcrwH>{*ADL^Jt2s zg-1BI>G=4Q$?`b(@md%!b4fib#~hz5ME+T3{M$u97_|5BA4x}xTDMw7$oSN_DN0|7 zkTw?U$j`M&mskB0aRie|f77nLvAxXIB~PW*E>6YuDq%p0vXDVPIJx|vxH?e@;#i@6 z+i3;IT#+)};wQigJsQ<{Folt*OLJD+?!Pjs{5P9uHum$9;c(bWZf51F2!XMy1JLD? z@>e;g=xurbG~4gdR)fGWO;|rcoJe%St+PUtC6kXGQ;~RBR+~~6zNA{n{sYUn{lM;` znmmsE9ATx&6jeHpDbmSmS&rTl7IO*uwxIPQZm;mx65^;qQcmT-nSA)YnHCX75)Ziv zi@lA`d|(^l;Mm)(;V6Fy?*I5}AUr(<1lFBeIcq5&W@4l#B!(QfB*Zqy#3U%rbm1 zn3A7^&4My`>nOkmgy@G5kSKk)lV)xao_tjbzwETlbHo2k%bY_@j%T%6aQ5pM#^U6^ zc6QD<8spKsb7o~QBQrk^(&=!58c2Ta_x_C+0acER@vPvCEYGnSQgE0}mb->&yfA&vQ>?H9y!%iROcMrm5pbiMAi3;!l-6QywE4Db7QBuqlk z<33Qxf6&-ZM31E-oC(EMNG!5^Csu|+V_BDD16ir$@nOX|4c78AI(q~*R zr$EVZJ5ywD9dw+7SX@Rinogj%4o2J^4cR3fxtr`U@G+hDx(MzX8nm=)=tC_XN*?BL zhG=?dGD1Ko9%ge4a};7hN^RwJ<=@uzTe{|aDzSHQq^llR>SayVh*NBI_fg?iB>6($ zFIAH$b?0fRG&b(<8%auC_nOLlA2{d!VH2*DYfFMwXPv4dPega=@!6r zFG})UhCk#ETdTQ9EA6q0>j>^{+nXH#O^!QgJ^4rd^SbjfTKsrKQC-gr^Yu5x-k-G8aj34W+XY8>cgjw@I$ zlU=YBL~uyqu5_zdPH(fp_-G6|x)B9R$IDzSF)E^3Gt1QP#%{6%TG5;7C7Uo2!KuEi z!xR$8F@ww6q?hYAhFVzWGKI$Z7B*rzP9O_5&9(BVOYPc9ZZ&)-*Bm>B9J#?Ii?|ZUjRYj+cGw+nUB}^8v!P?Y%vo3tB%{DVLH6e_wE*PL(#t%GFxfzX@HMv z{g)^)L;LSv3R*z!`H>(m`i9B`d*Tz@+i+~IQhiA%8U2}-EOM%g7mv*$Zc?ZmCjvW7 z%!K{1SlRi7aGuv$R-QTRB+t<-*^P6lox>)Szk!5Y!7j8jIJ%kPjC(0f#QHbQaJe68 z!Tr7MMdjBh$iXGI8#|qAeZ8%V>7sg^OtUaHrV#$7mWj>Lat4aw9}JruzH5v31TeKJ z#Pu3Fe9--2XV(_jZ^-0P)Hy37a@p}NBagl?%28|QPH_^RE-YorFmvJ5s4PYv_aN~l zIQ02uIo4Zw+Ycx&%-p63)rK$6ov`Y3+;=B-N!{I5qY2y%z} z#awdIx0Nvp*sh#v402=**j5GMp4W}dL;Sp7X* zDDPw3JLjEYo;laQJ0u6F#PCYt#cwF$T)>7{_FPBk5~L4+08w#!D0Fhw^tTn@|Rp*Od)}2{?a`#~bp7XPefZc%$%`(!Fp&jo z29qlaOe(_x>h!wcY3F*8w4QCktFPfJk-+|4x?V^eKGJ`wo!A7pSce?Ei_{&oCbKjd z7~{t?SOud{II=HOcu^cyYKi?#=5jdwU*+g*gv}H5O)!qP4d4@)x;A>!rjWeCSV(XR=Ru!mxlN=XZXpGA#?d@OPj zyy^8DvCU@AG>pH9QXg;S;4l(e)59q5a;GB<(^@&J6cN?mk2`{}sDmNbg9pYLRbkul z;_m!R!9h`pQm{3LKZ{m0Uvpp(FrY*tzy0!fnGuhdyANS|CzW~&gVFFpwUqAU#2bj` zLFxIE+b2k6%zrgQ*-asNNvAz)hY(~RfNMM_&Ji~0oXCrovVyOU_+=mR^x=ip6Ei6T zvHPPLzAVwX$lcD1w-DfAzx>^J0ns7$BAtc}MKS{N1tVFROhonT5{{571o_KrG>C_e zQ1uvse#ncVe$;HOYpA#&mnYQ3!gV+;HaP6fe?Rg-f4uu_^__me>)n~oxJCz8(`)eZ zB7aR!T^NhgcYQm45{v3nAqOt{Z$Cb!s;C~vYU^QmxTR{Sl`Mr7i~oHy*TDM&BtxHF z<5hMMiHj%89*reK+pQ3wZ88|=n&6KT=DK;3%A7>^>4sxj54O_xP&vCFVXQNgNQ!qT zU7Mj+9o9DnnKe&u`{bLpGx9dd=x_Q60Dat15Yi5!*>LgzS^L|(0sdUdst?9L5^ z>N0EDFp3@6A`PLvrzZ9Foh>Anr}u%cllw!sO~4?K3pIGxyd9f2am51v+-`!|#Def~ zy3*;o5ee>$K#^=!xUZjs5DtavsXPm%CF;)k!!jT^%Es#wunk*<8@oNtj3tx1Ma~+% zB}wX8Y|Sr12NF#de?Y{I`~>9NYM75qIyXguB_HBG(ttEsnLKjlY>YYEu)+L%D_3-L^Hv#IkRG zY}gb|759|n?_c#Q1nt??M-JIR2jv6yPqj2;+DX#nL`L4&L<^r_&kR~{%m;RQdr-ZB z9veng$Q93HJ_}^phnbmavMd6wVu|;gA-N0KKfj$m7L^k`RlKVGxtI49;2gX|gE9ff zI+Z%!qV=M<=Utp#OvWiv^r@UHbRCT&kTGHY@=*dW@G`cge{d*M%WPj`XW zK{{%kA}O7W+4pn#^Xq*qaL2<4N`bOo=;-@zze|vwc;l;E3ClqEF>FuEezGwM!2?>v zL?1@-jV)wYvY8rHJZ|uU2|+o$#5~#1q!!Hf&gR2WdUs7h zm^F4tqF`SMU061-wb?T>l4W*@9_I|z6G=wpr2?z?zzGUGX>ceGdojyQGZXwZR`a)t zuHdEp1c^YPtb&2oa3fbWTWqnh5EXq~h|+AbNuA!yG{st;)Dy-9IfUmLP2b48ZYHXT zoJE*;CL1-_orK(U;L<>=g`!0CKj!5H9lSQxp`SOB24p|}p_is<|#mv*MlmZf)gLu#z}bi=(v zq%V9;w27kK1f3>kTfz$6S!2-AG}}oz(RQb;P0DOfOzz_l*ee&oPLd5rxYmKi%!5|g z$OPlTbnk%AY@Mc#aM&MGmQGRyQS`)5Jgd$j27F~()eJRDa)K)ol^<)Hnn5xO>Gg@p zoGxzR7^3?a^kWb~3Loc&)KX+P?NF86*@9>m26lTFjXN3 zI4h0I5Uz(i&A;h z$!yf5)uKdh)79xTGQa|0TM&1(-bCcJ|M0~H@5mVQ$Vm&M0a6&VVc#*Xv4SM-u&tBc zcN;JwmFUPAv~PBckradbckyR+#p2#3y`^oj^_X9_7 zMy}qIXrZW}$ckv^{94|KO|*^C$6e8CCraXX<>U(~R+W!|%>Ixk0E^vJKFt6x2LTW{4-x>3%=wjt z83%6ANft%Q!Mh#HgAFwFtFk?2WSEvJ9ML%YL*?bb0SO^8GHTugzO>8uFgK`MQTJ?h z3kuh-xd-(3Zcie?PnK}UbEyIP!ukLQA|6u<3np@PF0?~!XQ4kOLB{}3Sa9b`W)cBf z-xb`cXp#lv%_u$OI(-&&BhG8F`Z6KlV?Id}emvLBf~LG05hAQIyyJU;!Q|VZJ{MAL zRDo<`1!ah6B9g@CYjHC(3@&o_!z$$OXGN}9af#M!=fb*CF(ejhxUu+=Ufb&=+ zP=_$z@t2?aB^WHkU$U1%Anoj{T!wgY5chlWga!9*M+!B@ZKRmQUyA`!ug@pA#Hkno zxK+zbijpbpYCfI{e^Rznd_&?~k*y7G>hd`HiLsM5N=)+`HE%UPlybl|>djQspS5BjB;OCb+K-L4U286!vZldc2Swql_l0sVFf&#-`NK^9B26 zB3javvrJL5GC-YgL{|ZeGB#hD%yL75OR^m)_NR zSna5iXZ(kF%?p&fa18J9p9Q zB`JMX<=&ok(UL2`mCmG z(O%aZF{`_Ul7RRLaY(`JX~&D@c!&cYAEjL=e{e6Fg8;Bys%QDG+rpI9hv?Q9335h!Zl%3!h<<&S{%u($7XHwX5p?i_2&a=ECE0XA5>FT}}J` z!0C@OdMMbFi86)&&Pm-5)yNrd{aDVj5bXC$h}fIr{lRw@Huqn{Lyy&W6PGyeHp_Uj zzd*8}66CY2t)M5T?#PeWat)yQum=)6)XeomYH9oLRQeyzy<51)hY4Y9JsmNaQ{kNx zEZP4tN$>Hcw%llT-sMO}r|#GcN|m(mLqwSXOTsFIz2+;xIZ$kCMw3v;;3wsh_B0`~ z*v!?0m)@m)q0WnNyWCdJ%}{SdlK%Cp&-C-kUj^BrnlOMf8!sX%1lzFio{loMR`e1TB@K;ig{v(H!}Kx!bBjRUpFOl&BF zMjrFx;Zl{kkj%hJ2Skzm6u5~WX9@#hk^UvoT41-(VaEP3?Yt<;Or=6;y|Cz*XKLaG zKNbq8KfO1Wnl$*e0G7_44oQH=i}Qq6B-0gKJ!-PK(d~E1HOJ%iYG-gKPeGvM{CXP&(x9T9&(ZIrXeByj0Ww!2moeLTrl+c~ky64tRAWU< zd@ApAuI&8y_YdxxfEO{BMn)$?x)2^j=seKp&MpT+NPy8v5~^`nvdHL|yAf$ywGxce z^TCk_TaKL|##F>%fM)&UU+O|vaD!(VibB|xC@}Fuq5H9H)f5@YoiQKIvW2yIhpiPb z{tUXBE7wXrvrBdQx7+n5=(l}U{;-*GgqfD&&hYhf($H@GD4PFd7&w*HA9AAUn?#|ovsG8%(; zqWy|r&WeX}9)44;BpqBvK@Jku$sz9(l_<;EXu|vSRVK9(d_U#%zwRF<2;dxUBNg>f zA>w+Z3ftf(w9p5}qA+|jx=<-&^olH%Mh|084uK^J`0*)w)szRibUlgr5`XLm05rI# z_v4yFp{mf-*DLRM@(WQZ`=1HQ^kqGs?xCNN;wiXw$W{GaZOeS!Ey~p#p3C~pa+LcN zBr}}BO`#qdscAhvC0bHt))uj|rGK>&IvG~qWVSB)aqRgr)k1(W;NJAnLfb0%`(Eq#9?7)p&)uCdDBHu`jrC+Os#vb89&qJT_gYsEOy%%Oqi7MYiFq{1!IMtwn zBlE*$m(yTjlM9I`U4Gq;XQOH$ayw)gAfQ3P-)xmGF?a^7mstDw6qlC^ zd)~OGE)T~F{!}VoDNN9abBsNZ)~;R|ZqL%DDc7B5_tvGPvqg01(eeAv%EotRKh|R5 zULk~S2-#SygoLXnjE;v;-Ze1x`^65I37sgMLdQCpHTAU2MC<_tRqZ@f#|l7L@sba% z_$wbi_GKWrTSRZu&igolHa{&ci0{h@mPgWW{~OCvf?`Z&eYwFY+G0=cbi3Fr?c<~>m_eWP>j1MT?YHv*K=%hf4FyHA@V+qq;9Ri0 zHLN;b&GDA*d$w0`&XFuZDb);wyPh-Ybzz6?ttp&NJ*-X4KNtT>fiy=q@mX*!s_G(@ zo}u6Oefs)Q?ug0xFeY=z&4qEbYrjQ9w-pBThLxx+ zl1D=xsxrPi@OLzF_A&3Qm9Qp9zG9B&HVpeKD=^J24Y;sUMc7JD zj)379!V8^>kb}Bi>eJK^tNxv9UgL=x`d@_F9}iiYcGCo0B$Cr4V9^ZTIDO$%6{-(p z4zPmTm5Xa+8s<^b8L_IZI_K}m zW)M8~>6BcCq)e<1~ozI`W`x8~FTxb$7>uiG*J3OMq6{E&7{wB!W)YbminnQ&rsLLjg; zy&sJQ>(YYU33(}3h+cr7_Tg}p`mSAd>3f;*hDJxTV1G1$@nR+S<)DaZCEwj($>W}| z>4;#?8OI;LKzFF&mMIiO`*C8r|r6+=a@YF?XI;`?b z6t<@JiylL2Qbi8I(=-r{aIvwCd#B6gA}SXAKYmvhOC za})>G@BI!{pjjcSi0FvA1}_?J67vsq81rqcgncv_%SGC4cl!2JJ09nksuJBZ=5VQ1 zW=caLmQ};+m*RS4kK8pxeE-lM-rJMw$6B?J%IY@DU7Mn*P{>{dj227X5FxF#co#a`(fsrFBsxZq$IkB1!%V1A08<>XkClleduKAV+E z#GYr~6`UgOUQsSR`~*944bv2U=6JO=l~j$qiiv)~lz(7F%3|N$6aNK_8~d4}-i=SmI1Jl1~JU&1c@x-ifPcu22VQnQTu0dl}~g*O)WvQj>;CvFHsp~YPlhLx4ZE(y_I)iR7hk*8$+|lIc>rwNO^zgZ9S>d~7 zZgRaMp*RP_9H^*#<*!E&$Ikq(ahi7h9|TT-oJ%x>9V(si8 z-TbmTR$EzlC3c$y;-h)n*!rWn{HQ_{O#ciCzd+TMdm%P``CtL2^?$ELb9gugv{=y!rk?rzksa|xz%E{r(Xd+=GRDdDlvI3{lOZlTX= zBKy^uZWm3iX5HuM-K^fvbsz3i31BaVFL4AmgWcr*!_{qq$JJdDldY<$&yQG zgXo&q*%yz?p+fCm4i47< r0ME1J;7rnl8^?06KX>8U7$JGON_w+$Kqa5q;^Lk%& zv087UrGlAZhV{HoNLtR?TaIf+qCr6zxJpU=5fuf#Ol6mk$&9BakJq-q{k)jOFpQ6b z=bJrcw*c=)(ECpN6JhM|a7p9BXrb@p^n1pYqa+a&K2BGsu?#K1s*7*5E=I>}>3na+ zwu0s<(*Qo*_CQPm8dOHsvvP z5FPb=_rumbR%t;X`|NR#HT8z~B3~-)C?XO;dVie%E@Z~f+mcQ%BB*?&D3}~Mto*RZ zM4m>nk$VsGucKJ1gvY6dM#o@R4mf^U2@Qs{^1R5IJQ6Wu%itl!q zrgC`w&8L)Y(cWjuyB~fv#`n2r7cY}{*<+6{|GQB_lIQ6P7hr&ZV*rrG?eZiqmyzv# zsn7g{+Zk^eO}$K$Du(y6amAr0>Lj#W3DbW?FsJ?^gpNG5Cn`({^`&E5wgZtiX!DhF zskVB6xc}ggcQIC&7sgPhsZJEwq<{eAAa=sVO;7wqGB|mD+G0N#OA=UKT08cbs^fWJ zZ*smNv|H`Md%r;joK_HsSxsj)4PWs*ib~e_zA*YD;VXhboc`jW*hz)<)am;?ICi(GV((>nwa0!7N0IfKmg5*cUS!#}|Cmv!-JnPRazYez zC`o{nqH}5e@Or0E9j~UYK8(zBoXi~Y_Ik%;uwXO2cis~d_Z5MpI}?+>c|V1Tw6M8Z z{pYe>p=M;Xw}#}Sj>qg-d7Zv@HQd>q;*od9OFKeM@d*=?&ole`{lmL4V8V#RZ3nij z!{7>_s8SqnX}(tkj=+(S`({}kc4xAFmCSH@(ydX(QgjUWD1MqB-tfyzbv=?Coqk)r z%1;VFJQGP9C2Lw zBTtB_uD((D8%`B)XMMR%wUol|7kB_-0Pi|FL{Ho9qSXhmJo&cn6Q~urfvM)N)6`)- z&K@3wu?l-5J1KAUYU~8<0|1byU#Lsrn{nGLC^jAJ;sJ~DqK_RuFtnd{Xr|TFFr#uU z_f?F-A61XCPyfnyVV&ZF=WrB~qQz)Dh^MdHYl)|~H9vK`yQ^Sv8N6oQKQ#fRrqv2= zK~0P^U$bor*7(2J5KsZ{8VvFCDjKvbLe)Jxorj3kM!klZj5FciSw3v@X zPl+6BC`n=CikV36JW_E@XYp+tB%iEjHfvfZH?#>%#^+o?ny=eREqxCW1(R8Lr zsb)KRxu>md^(J;A7lsC2{>Yg+Lo_uyKVNE z+0xX|nBUTKThnX;B+c?Cd|YPrdA`R&$dFQe-*Qy33~X8F>lB^MBaP*OGeD)LBBIIr zNJN2rXF&T1xkcwN@-6-(AJBtWWA{KqwJ9EIe?QAZ_w{o)N020opxj;-O`x8njk|`m{oMV+N*b*1(5t8i{_M-=iJm> z5Utsx293eBZ+%w3)&JJ?cvxz((pX)st?&C%zT&!MCaX0cPxz+Q`Ll&|bFhWJUqs&s$xor2U)u^-#lybFw=r zk0!n>f!BLq;2Fmnri{@K%h9OQ*R@n{r;|n%rYL-#d>Fm#$FyFi1z{(3ERjcFEs=FJ z5+u#D31fBh9wVFyeMl8dk*d_JdznLHhthp?>Gb+fnK3_V< zYpRX5oFzP(Vh1wa*2so{&6e{`ds%dO5;4pvm*c)`R4KZyrpIYNAk=azS}#!mD~=M{ zcWz6T!QN+H5<>5;CN*1u3Fg^fz+dugIlhidik4|szayV`53i)aa{~*{?u28%-7l96 zBqK}i_W5wK-ux?vLaFZ;DpzDJ z@W|dhmZANgS{xX=&wN)7IvH6g(CO(O_n-(sSUSn-AXXp4wcX4u15WCFyWM6C<9Irr zR{H>_O>ZfvmE{Q1V>oJT(n~sSt4Q!tyJMLN4xa z!SVU2qIV!dz}y3-mZ9UB+U%qGJ!5($nG$IGL;%=102@CT0r4OnFt zf@BUMi|eRXhCy1_hKX5OHdFn^PQPHKj;7T@MZUKR`D7<4!DCz1XZ0R!;HfwNaDl4S zY7if#q(1*$JlAx|&Uhi5PC{v#8gE**UhIrNq&}KW&5TqXomKkvxygzz#(e|ll8c{d$RqH6&&}$3dqIGH zwT)~^)*6Zr=T!kp<9_;{VG%#`aIoqV0Y+gH8OkMee?2`83_$Rir6f#-yID_%jaMiT;V zIdZ2QGqs~wE*0vX?|I#fH8u$fW|1d~{ajcNJ1P1y%cPzd_&lz%#~w988w-K^Ls#Q( z46fE&z3|mnKn!$EBEf!)>hhArXTjZ{S{{|XI)Ti)xY7? zG+wxb(#$(N*5#t7PLE!8zkI~H^M@t0Q`0>JS*EZ)3jdi&$AEYi@?spx3B{ygC|tOL zMD(6uB)nW@*8~r!v-n!0J>FC{>+uCPwa(87WA2TRl+A4;x?ML8p;nqK?37EhX3n%^ojH|N>2f)#pV#`n z(QgOd*L~LU)}^Xc`$#BuyWPVWt1pv6AJLHy%HK>TL5=I4QeyV*hL6p;=%z%r9bK?$ zyr>g+g1SX9j8y0nOhEj=r*P^0P;+VBoL|s#v8xnbi0{R(Gxf=Q{Um9meV%+97Ak-3 z3_WIqun-P?+nJrQoGOH{MsgRwUZosUaP+VN#eH*B+IH7FE0~sKH_xz@kN>#k%&qEN zfgEBh`>cAPqIx6@V_;w`L4p5?mQAR~-C4v=m{-gAG?i@DMgzLVfa(X@>#LkMi_qHw%33ffbpVU>8T#GG7f*I+KE-QJas zv)b`v%`^=?52Qoo%0UHR&jJ^F^^6~5^ex9322cB3MJ@GMAnjb2T#+~KdFVAi>1iVJ z+-3k=2#lup)AFHQ7%)T`@7w)2Yv_NgkbNoR!zdkLrIj}ZU9hs{Hkd*j_>?Fq=0K=IhMvX*7 z%J|80^{DfPz3h*rCd)UQfhvAniT_=o4biUlrdrN+M>ToJ=X*q4Kr9jrx(n`XlX<;}zI>Nx+0A)cg zU=SXDC5?rKOH7VQHpGw@m0MLTyd1Cz$Jy#<_1}g+Qxf(Ype)i#LR`}hW@Q_CeE-HW zX(SQNARj4_&44n(<#rFusuf{otQ4}s%}llih@0R?dt@TXT3_aHl$PLz;8)p}H^wjo zjArmI{5n{#80s;UrJM@Njm?NeG0$`ne>N@Mqcv+ zscGE?iAUm4f`TZu?AW)9=F#5-C7_Gfl03$Yt=E(8-F5lSiqCX4j*=`7R`+?_s9m(6 zL?~y=;Yw;`NQUC!{Y~UGdSH_bQ`Ps!I5Qv@7*mm-3LeI)SOp)YejCxGy}_5@T~&m< zj!~X%6){PzZ&CKuxhzF$+ltAN=%7ub`f#85a#J5sI^C_NlU4P z0Yg3Xi;8>6yb3s0WH^D%mN?;YT!Z5PIb_JetAhDq`)I^a1>J;?9o-A{l@V6CdX2ZI zC$TB81Z|CqYPtk&Nso2h^zuGFd(Q9UN91&sA6wda^&dklvwCGf3egI;pHLd+r1dIV z{hg-=t30%x@5`treeixNOQBZt;a6Xc;efh+%fH69>;VBG!Rn9C44=bJ0@>$n4z(! zuSnth*fYq~`&`D4hiA$1F&J1Kb4)NWmo{(@O1`|DV~%^6CJBZ=!21}v{cVUd<~m3% zX3VXn8u?*UFA6Yy^fNq(B;fOie)bItRAh_F&)X~Y-tFmJq4#9C&8+lh32tjs`6C5S zA%va|Wz8$lqikV$n%mdpZfG0F?~TPBA8!|Q-sEl(bswG0bG z7hZM*^-8^IE4Kb9JZvvLB_%YTvq339)7|=8RV&D;JsI0-yW_WT1N}-0oi*{tq7_Z3 zHQBFJ9_?T{Tr4Nsc2vFEqJX~hDVfSaAy@)~%<-%?j+v^g_|w4Yh*hEbo(9kMg$Do(g+c{|kz*ZJ*ASYc z^W8amCJe*AKb?${scf(MJdH9N_q$df^4-ihRXg!1LDj&3N1}Yq&ok}qO%Q6G$|*Vd zyh6xf6Hrk96DK~zIFifWY5`F}-HGuWD%WflaJL@IcGM8G1H@|sj4MDYBQqCbC0L-e zvZw8pCoRv_?mjM?$iEL_+qGAr$;EgFjEB`_oWi$qLbNT7)bVUL{9;7(*0-14V8zLa zu_Vs{yjX83Z^$CGZ=Ix#iZ6){hTE(ii&q%h@qz5Q1Nr+2#o1U8Y`9}JDW|R;g`j^cp zB~vwNSp0Qs*2o&#qv6?gkb)DV@ZifO~*Ln!YT{bXNrjhluX*%bDg9ozJ7&f`ekKhWxTiOAPhMQOW5e! z9pXwRx#4}@wfsABU^HrBW0RO}-%jCL{xMvzfXqNL<@x(2vr#uwvb94zC+dm<4$abX z^u1%BdTmL37ul}xtkrm;*0*XqQ!yx*SOinDACeJ_Qb-2XMv^%F2hxlW4i}JnYK(rg zfC>4i%UZ|)tgz`}#-${qTILgMefj_>3Nd1PiKZ9Y%-Ds zCD=zYH3LC036ZnuPrLg!1sd2-mm`(3tcxxUnZ|nu@~%rm>i*Jqt$cUe6qc?lj$R|V zeo}YLgLoL9K0NkeN0iAdF+A=typ8k5W9xf!xvr&u)T`t$bzFRGlUe*m*bGl&!rb0T zC6_U9r}!arD4AMd9T@sK$x`5FJM`1;j6O>P^VZuRQSr>>o|0I zVEMB+7Fbk%u5=<-r!mBc^U$jLVI%4CjZKf|3d5FF;LcQ43rWLzs`Ip( z3&>7FKRR*FB0?RS+}{V9E^um(l5sIaD`hbFKH4T^Jafd96$2!}*$EL-d+sBrlMDv& zF^xR}%gVzC(Rg4@W&|Z)ohi2QWk&kmv=P?A>JPgS#zT5Hk*kk@33wH65xg(IFc^d0 zqIG;8&ft~lMD5V#81G5;WsiX+`}|EzA- zVzk~^{r&6p3{7RLRlHPdnzOdufN@y!L$4${g?W1UdJE9?8d#5zIZw>+M3Z5nXkcqW z^s&}z*2V96qjnqr(1owZZlsIEG***tu%g(xp}xJt^oOWCa;u~7AW6q-jK*P3)esva zzTIGz5HgpUL&*8=q4$!O088zQ*r{lJOE4P95dO9v+so?>?qCVI?!@lME2~mhj##U^LCK+A36# z8ZhDg3)hugVi4KQ>w&K0s97A* z8Zc=XrV!{wmW*j-ZLA|qX{)0tC(c#(Uc#=4Sb$VS+F$|P-_*Jat?}mPvazCK{Pq}+ zeNrmRUHIxYJkqhAW1lIrwfz(S5L83ynK~8<-!+^~0-HT=EGySx5t;VPgT3!lglrls ziR)X(+ZS=pF^Uj(cp}{Q{5LZR33;0HD7@#Wts-oA8n2^$*rcaYbpIbs=NKhv({$@; z+qP}nwyJGT+qP{R)3$Bfc2AqrHs++a$1%NyG>pq9b_ig(g57tpLC_>0*-A*?q4) zf7CQ-CSKA9QU%NY%59h5`zZsEBD6Vbyb)^DF)C5zCkA`LS0t8@sFwBO*w)YM!BOq( zrTb)-5Gk3%dlgd%KI%9SPWKlt!XJt2MUZ+dhTW`^3#SB z!X#V0R3m?gmDWA2N*qJijk56aX`;(w30;Hjwx`GaG?-%j8{_YGy>AzI+z)UJ{eA;1 zwlmO49tlp=9~txfgCkcq+Qb>gUX9qS)^<=YG{r{Kn{*8YKqmBRYC%(6_p!q5pAs?3 zi6>!Jj$zFah9iUMP(1EIuNpzxYfwxs+t<>e*UhUt@e=qRva$SckQYi877<%s*H`fy zHi-%Xudq(>@v>R$bV36`CL<~8pHy6xdYvVrqr(_~-8SXvSWpWx4Be0p3`2H9M5B0akzMyQooe2x z@147!LN(nhwmfQL>XVYs6B9>`{QZCSaR~Udcy%3`Y#`054`St(dpY!KL(=p z?+?nhpN5H*TV8I4x;}qg#b^p&P2xC({|po0U8eq3R;Kvf7sZFsp5dWT*kM<5{*D8q zl~*q6~+CHxwB{lwy){BM`IB4v0QFT=4bWyX&b=W31%h08YjZf~hp%tnU&|<9 zKb|0gk8S0wrvg>nHLuFL{W~forsSh@WJpcKoJzMidhwOQ#V(8h!;JJpezh`zW;g8S9a+l%|6%L!8I|qQZyhbUq z?JMk6NY|%d4#(;0FK50V&~Gk#qj20O;|yfkUajn)N;#6xWGao(^ML2;fiwe3Kpfj4 zKX7clap`H+Ou_RMe0J)^Ur*=4seUsBIzSb6{=VO#4gWfD1kTfSb+>(@5NU|7pJI?H zOlb=^v8TanMre`^xV-Zj*+uLs-d$Rn_sU^fPIKs2R9~9DFKCY6W)RvH;#5YX{zlG} zd-9)-i#%qpr>V7S6?raQJ)dR|Wh}3FXUB(miScE1ecNpt|I(^*l|`J*Xa#P!Ke+7& zv028g-xqQIt3!5ls^Re@g)f;Bg;ud1RbmP-K~EYhq?;pzcqSD;N_scnKsj9Yv1lN^ z<+kG(5b3@?weKmD723b8)>@m^IvhRL6wZ(X@yQuX{Zt%(AuIHS1jcYHG?luxV%KxU zVl=JSj(hef^XJI?+^1*|`imeJv%2;tSMEhY%_+5>AE?(jfXdFH0t9xiYfEG9|gS<2|=+UMg{APw%MTituzw;ZuDTbaW9m`gvIc>Q9B|YOhV-a3@qhC{s^$D z?biD@DS(d7YWbS?_d`aW`>aWgqLgFzqZJhSXMbSprr18^-ap4D3nXeL=`I>)d(0JQ6?t)G6G$i05%F~`|U(7f* zL;=F@F^q$>*(XdE3LwQF&vr~_T8@8*G&!B+e-5}VM{me7$y-3QALBwe86T|_8ra+U z+T=dWKl6<$x2vA5@6ar=gXKP|IN82oHe5}{V|0_bLV!V92mJK&VXlN}yr}f^!T^#k z_I@#J#OJYr=e?iuJLKqnO^L?awD$AwOfAiJBp$ldN9{0TE9mLboB7)=2b$s4?NB5K z@y~;2;8lvvbSqki6>@q~kM{%PKwP+l<5r5)i5MA{bs%dQ7mJ;}I}>fRX*P}Be`-9< zj-7ibO=9)%Nn^~zwZq_eFPZshsI_d2Or8I?Dl!G0fv5iW>@+hv5JJh}v2 zJrKaM(r6RWX(Vv9KQd+@G=L!pLjd;)I;R@e7tgv@d{*b%4MO3xD_3e|Mqb)1C(m`! z&-?mbFW0b*8TLJvp6}hZKxIY!dl(uI@t_!*{PVpo?fz@QbKN6b$c0+yaXfVa;*LRbnAGEy54qdI<^?n7(Zxa0$-*b_Ogb17R{pJ1ka3Lm0`KH2%-@@tvyZgI$1*J>WuXH&kEWJt`sW# z=~OEAVkGKekPbDZ~eCfan>l}kS92`)vR^O>5JJeXq{3!O%Kb&r__xyt|-^Y6HXAn*?E zx|^t^>&u6T1dzfHmm=_7rnAEtwv5%K+089RfQu1gAW@Dn1S%O~Qo6nD$_mSRxy?NpAmgM_(wOTspTHGVU>+IlS<{lr}` z$iykV5BFQ28v_+#5nGaPjud>a{u5Jna^e)%1yNqtqnN1KHLc^zlN^;BY#4*8`iowa)6lHpH9yiIMi76Z(sijp(~C!mW0S!LrWJCI)RhYGQ4RcuEbphvBg&FfW5 zJipQGy<;!pyOTm}(-qW&Yn_9XnCAEvp=iKoPrHDjq98sGA7Km-4+5l`B;Cq^MAIUS znt;E0)*3kQgCLX95G3Y6m49YX<)WU@2BkQ`x7AEg0?}YJF1Dx48wZQykyK`X*o?Ui zs1J$IDUc}Dx_qwA^uzsg;-|^rgu05_LYa6B_F;0EFM2X?ss8x~B1_oxkCvE3P7gx& zF8s8QuU(J3Q{b#6C8_LW`}2Q;>0`j4Pr-XPAvb$z7Ex{+1Ry6w7X{5;Pd|w)CX6B^ zVxu8oBgbYb+KTDZH;`n>y;Wh4DSS{9&lSyLPBQ!z=$D1QeMM(BB^FT$Qw2bWc|y!5 z(`3YcoMq#&Ie(tOGrBz~9>_`}_ZsRNXtNE<> z)O|96AQgSiyPtQ`ie=KMB9efvMJn?lH6TUbwOR|2Q2aXH#qDDMW{B_C)l?-BIZ?75 zmS!%8`s!t0zFk7%0>RTPZKfF-)Z4t-d{R0f)Oz^#vA0i;uInz<(g)bwbBRWWBq5Ind5+D zU8zktr_+y^%!%X242G{Tl<9GnfY|l1iKK916c*I2Pz#OW5e<#W$Y?-hIreEEU>Mas zN%Ycpnh3QF11w9J^tZk`P6*r`wj%_kQmeH_n^IX7aQsKGJ0%0HYImGXHkESEFNE#K z)P$69vWcxuk$xn}qQ!Wf$4omkE$1MM4Hppp3!D&O3h!|zlF-|AdBKky79tKqjmao09Tt~15FkQUn-9RH=jbY} zyYvUet|+cC$^lgCQp2g%#SE}kHI$Ry&;Ng~nIR}P4vxuZDUCm#HW?Mkz^tYQHR^jNh}8N2Bv=*bO{FSvt1=F= zMMV{vc>ae|6kH+d6Z2A#iFh$k%BawWD`50egduq=Ahs|N=I&&g6HSx?gI|Zch*;(L zd4l>yaq}ZPPAJ$$3S+r9JiZ zGU4wvO>HwyM)tzF24Z~|A!#Fp*ig<%JjD*i>s1o}5*?T8YE4vVbRrYWaU?{p3NT~n z4N-Ya*@e9b7SdC@_;Z&@)9IfuMXm=GHE31k{|7dt1wFS~oy@Ey zh$lLT{gDAOo{bp&>+vBnKWPnzIjqo(a*b4s?BE8AemRB4qjLDXFP@9GW}MjGJrs&{ z-}TvjB%AGj;fn$J&_rR~!Qod+4U0@pYYZbwj@o8|NeYmzPn?nnn>YgE<5JoPKDjhr zC(9BPc~}kz$K{`*va^E{>Ry&N&i#3paJAOMN$i!{S&R+~wK-rQiPN$gP2nwGC24-^ zL4vRLYun1c0XXjn&M-rXmf0;|Ce!n#n9aySGHB{w3jW6H+Ictb_lONa0xgHb7&L8Qf^yjVwH0BZa-f(^D)9n_AuTE@ z2g3J~8XxDoWi0v&H>KNgieGR2hK)+ z8M%3m+*6?Xm%?&-2LmD)FOOK+0UN3^ESwoouHK(2+fjZsC;vN@P=LQlObuyI#*zF3 zC-EGu;k@d zRJGcgeh{p1At-ZFL_15tiR!>c45Dj>gShcOdt|RPO83CXCWtn@O^OFUu z!}9_gh?F(hF_js?2(74#9H%)NJbufhl1kShbqgUt%q&aoU$XBojQ$~a?C+-cIA&QJ zib%C`8{Srds*tnMdh?i=`gmk(xXp?yHd_D5?D(d~Z1hHps1Aqx16)Tjdi$0q)p?)h&Fv?(bU!K`TY zcm*jc*|$MdWV^C1_#ZonkOL|I0qo=^8Ca@xXK6VV!C&D5$-cL{Ep~yN7?a3Emt;x( z*24jX)G6Cg@=Vl3nTX64m$|+V%56J-!y&@GJzfwDMACf(vz4|2Zi4tQ=`3I}%HsyW zRz0?oZC?o2L=Mr9T@I?*ypq^JWQfv0YP-@8Zs9U#n^s`Cugx`vlQ7>G{5rCGO^^HX zm0_1-${ti~K4$ulfm7W&sgLHTFu$9OQ6XwtNG|i5UarjQ9^BULu^*_Lj<{6RQuU=p z-SY{cR%Zz4P$Kpil(JSp!cap~>b(sLbUcJ7;yOle^;Y>^4<1T+vgFYuYnQTBTGSbr zSk)3L+;CpFN|>NRa^NP=mndwci(Sz=c2n(!=4X>q^>r9Cvnr$Ve;k=1MDw!hKFo)r z zMH+yBKj~9iAj5kYJezV!MsN^?fc)J%R*xg_;C|=Y)^$P8h?{Al6(Gj=9HjtquDNVd zsn9Q`*;>MY3$Jyn;u}AcxKKre(}t(9otLY0Vs{6n4{Sy}`kuuc>+qHaL*9N1W2^8u6Fa4ICKnFXe z6_H0G_0aR1uVlyzQiRF0rQ{W_K2kvaVL0qlWOOiKf)MxOSCK+R*V`L@42toyuTZMDmH9OP=3OCv$k5L}PPMhoSo_goK)ACO)zxnz%uwkENQ&>naSmj2*2-9)!)Ey8 zLH&&}da{XQM-HJAx|QEDlq}mn=*WWv=vqcAe&82(dF_{)G=wdLHW$9A?auZACL+m( z@%mg#CLjMz`(lI-ahQaTJf@<5HC~1JdNH#eV2@WT=H;X6mMrz>2NX$IJVSV~K}?mF zV=XJ&06RRyzxl0yU*H6~CPToE`bpa{^zdnZBGh0Gba)lQDuq<_+7t7qwHs92yIfWz zi^+;;TNz7LDAF%i>IAoZ#bCUlUqL}P$Ewx>L89U{sJ!F|c?0LX{CQ~F&FBN$8jDOu zKBME5$qi94A{*Z~jg(3Jx~&#AtD{kjAC%DN05UP}SRs>O%7JNIxAhc6R=)iL3*%<( zraP4zjliX3HF|P^yE!T*mtDUORwfqQnoGu(NhvPX=G-WDD*VdX3ufqwCUCSIc{04d zwM-{+Pksw#oWwI@qwbJo(%d1+yE?P!7GjwcsL6CVEq-EM(rXg`1Iq~ti2DO$vf5sV=1JnvZ_`~F7CDv;G@twk<86RvH^h#{I*0|z zlk0YMTS}p+c61Yk4`7YG^<3V*rg#EZ#FRKrQT*Irs~~FqM|BR{sa-e3<#yqa{5_Sr zA!qfQeaoit@I&|avlx3S5$4TgQAXI<#w>>9a;B*wUPVL#<*i8sUMJ4i$fGpfJ%?K+ zi37#**{xQh2)!hN$32Xpc^fAEe3V11f)LeK7{-REJihg(`yHcZX;HKUJKbO99^D(# zXtvr@uik0}9)o!qmeHyGE4d%_;KiSl~WlSxN{f880`P^Y#Tw&$wv`=@Mg{$o{J##*jeBj&r-6^ zjlA%$Pzm*11zti!op}2K8t16w+kISWS$K{y+@Z#MA{aE&U+&`ductLsd@{>wRVi@# z-7vE%dF&)pr}Z7|ySB3#8Efx2meo(%7Ldfio5B&e7r4}h;9eJ@U;l@MtV7JFsHj(o zO%2?)P|OR-L>@XAwe1eF)_80HRQa;8NuRD>Sgwwp*AfIzXD0~`y$Du;GRmV4UU9s= zs?G|5SwWGSu(wJQ1QSVu`^CQpC5s+G5IFORTPZbS+X(Q5v8*8P9a==2(LuGA>iEbOG*7OVgzBc+4bamqfk+J8p`p*u^XIbOg9dHG=Q*JXI-(vA*P(MiDF|Rw$xmCZhFmd@?0Aud;M#Oq9IYykTM! zkcWudHhO>vGena8#(Mo2u4FOhuOJVs!0>Lc7+~#HUM+SQLS5sWps{`=zbZ$}QBV;? zr42AFiF>mk#L-N_&C=*mPY9fgJ+TU9Y#I*9tK;T{AA^Gr)Wc0`jC@iY59IPu(ZoP2 z+1<->Vqza8xP2W3xSjiN>i-Z#-=05zpW`y9Fe$@z*EOBB=$c(uf=OSWwKAWA7Eq7O zqrX<`Yvuwwik;}96NAj2l`4XL?nREDlMTL)S!*WYo@$3T{(iT{N|RHUJh*n445-%e zbT|S@6OpsU);I9X=0n!e2_k~0b2*#`b9D|xBN@_VD%;Dn5ym5_&S0lL|83kiEMQW{ zm437*e_{C!FLrxgsC)u`zd#xK7iLn`x^KGs^-}tx!Cl5dHZvlP?Pe!hsvc-vDX`uU zxgV&gyaHPOs~PgYCor&?KQWuAjvsQB&K%EGD7X}z8hA%kN1_5=p5|?(Y@H4zvZ1lS zqZByuvBTv?HgD`xm9;X(wGsFtPgKJbBk!I?u}T^$IJXC4dh+5tS0pj4 zN)nS48IC24ke(n|RMr?z5(kkDE*ZC>DAZCJn~^=~@z3eDoSsKWvD$m}Q+_OIld4ur zO)Cty=4lpt-oenmGkXjlt%U>!7$EZDOJ2H5{^|SUUpxca$qfi-AXB=zXoAErTe~%o z%e|%HQ07eqAQt%y0AZFEi7MvL6I%llS^>v5K=n;?Ts^*ASQ<#S?Id;;02Dh6kc8dM z<&NifUdBB;Sg*S6?x^vZ(O(nIz`@OTq4Wx~v{y+bd7?|EIAUgAdFP>9T7nn=9 zAvB54N^wA6r09hRjK$#8ddneb$|F<3$iW_&r?y(2*#0uCzIWv`SfKprXZzfqhB+F6 zoZ*}63dxVN+-8})(GkHISOULr))l)z=~a=sei4j=@y7_Xa*F?|7)oHly^FVS_uqIe z3Hw}XKewFf@+VuiatJsE=<=38j}|il-M+Iad2n3s*@j$RxR--sQrY;mEISbh*M3l- zrq#DCqcBUrZ~v}*o(FL0nl!!!sC+;74%y}u?R?G+Ai22W+Z-0u;G}TZ>Y1Lbv*{Tw zu`zKtnmk0H@T6zfUNfb*exA2PqQ*!n!@(eP+PmQQQ()%j;FY;*vbzcH-{9sp(W+J) zMizCnL^W&}N#cmJpxgnZIu7t{o|0qJA(hJ$yi-;2V;I!wzQ!!$zykU^c%YYf|2we8 zj6l~EVso7_C9|sy{M#1r8SImMT%z6Mat{dm4d|A#%!DTD(Oc~FWOf~6fuwxsCiiWu zNHAx$vP7BbK_*#=d_UIe-sqy76Yaaj_J>B;P&EIi1XBXjA?A0Uk*|?9zVH8e)-i=< zRpz>!w0J%mh@j^}pjN}lOrB!GJmMj7+;LBf_8%0V{KJUeo-&0kf%UuJ< zcF6s2lON->_!_^U5X?a(ZV?d~;T5uICo=p-EHcSyXq(=8m=X`_ov3Z_;1DhDyn>Zxz(_f&t9Z1%ehZbje>976nbtKSEOHg$piKpP;?2yQK(08{D$p?WF$h zKIh7NDwArqkZmUPLOf|d|M}yi=k0dw^=;lV(*0o%@GY9eM$cN689+Y%HO5z<(~FLtAE;ZR;Qy{FhM!5uIBghl?sX8vM!N-v}7fQ zuL^^9F0LiZ>#FMUTyg{E9QI1xp(eQ}3W$mRk-bd}itHn0XEHmuFAj-{iaL2ZJ}N16 zOG>iO$?wn<8NC?0S7Xj3!IMkZY?;v*2Tu-aI=ztgxEtQM0U(9=Ijh!*=r4}&H0D+U zadfDwZDMW_ORrkvuopQB9<#WzMGQ9$)c*WwxgUGh?G-Jg+l$9em`ID zE(%O42ux}K)rWp^mFbVmN4&~O5}G1TUM)!c8hKf0)AvyV?_rIW{l@(X@1yP;gnN)9rGMt895);>}!G7_W`lc%f@SE>+!l51+gJwhdPU+0sZiWUJDohS|xkMkAAj#FF#}?GVl{E0bj3v`$1tJv>m5 z)zaGct8ycg8@VC?9g%(OK~0laMJiRp!{Iq#ix9=tHrgC9fVmyIwoBM=a8OqNOptGP z1jWF?*i>Y_94F#A9P9O6qxPDd>IHn`tF zQsMFItX0>@d2{mEYEO+0Y%e6=x zONXuX#;pr;ylM6mKXmbKvvSLf1_+w#^I;kun_o>_c2kLZL^i>LVP~^e3|Asym6{}{ z8Jt?k22osoS5tg?Z5+wr0dun1tt|ZhD9SAhtuMPa$oCCdlNNa`9Mb)9(sL}{@gC$N zyQ70!v(vSkd%ReqgQ-hg-!~yT%d@J+pHm8NV-*W+cxhV8u7r4BBMMK0)03AvwUsut znPz8mZ(c;T5pX_su}rZ#zM?8rULL}jMB-7gW9~}6=FZ9f?zv)1w7=&qr>p3iy+x#+ zw?td|w^UNC%BncM5y&Bz5D2*r)SJIn3$g-1N*=03@>ffl@5Q6Bue^xhQ`JLJvo?N; zQXt6G8h(+0UtTJO+NcyF8;!ysbm?_Bed5}R5b@bwi-vjD5{&+k@Wo5>u~Du>QzD^ z(*4A0ex+x&&FYSJGA0F=7=`N?Sp7&NNKOUEBWrPRNC*IxB(wpAhW6$@vJ8jCVHd4- z$~4{X&}v>PH$36830}-X%tW%Ts#ERn?|D@gD}R8=5S}|Ti74Y-Vqf?+xxUnwC3*es_O03{O%N83r^b* z?hcu52FCO=i3snm^#JE+3a5LasBpY$1CReh4ww{CF8|jr*>74+$x5Ni2L1A>e-QoR z5TY1izRNWan@|QDuf%zsPNG^{MhkTPSyoC?6DxkRER^cKlIi3VNGX|f?gI1p0}IY^ zrb9h^Nf*dpP9Qfb<{X~IYb#(>$G11Qw!6{0jjTV9K2%uj;?;8JQ%waQ`;Oy}uS2`X zclrf>g@^z}IdLc&$x0r!pQm;^IjM32)O<}4H7GCcV=ASYVn-qm2L)mSlVv2`w#kFO zk_J4!?>@`K7A4T^Y{!Mf4Ekc#wE~GD*Zfwg(mxe;9}&VjN#liphlfJ~^XiQy(r27( zY;q#GAF-wqq})RMSF;#MD$UBnS(NA;vd;jzXb$lNptv9Ijy?;3ULDKT>D_!xNeq{F zht8-=jzT?4)!x3>!6SMYRA04wW8L)cpXy%c9mwVa$+QF`=)5K4l-c`mGcQG z6;3_coGT!^xH5$9ATxO0Ca}j=HH}-V5{TJ3MSC5%>s!#0g=Di1T)HY3%rKQGr@#|X z$hllJv0SkU!{dI~c04;Yd_=Vt`930_nJew0y+K%kp>$t5{Vh z^$;soW-OcH#G|Lgt9lQ5+#)171_kleEFzvfuN7cD(^Miqa-;(B7JXsuuE>E;ZBSAj zL584FX{L+|x#p!>hB@XO4{=#!oJb0`0nr(b*~!WBsZUQ@ zXcD|{AckbkX8V|4z-EZLN* zt8o1s>r}LpvBXDwkNwYl-p7bY;Q(SPK)u`+9@cOt~>9WX8MHhCqOam^3jen+mmgT`Cik zmgU5_tN(U((cn14vrsUL34gg2req%m`W7f?eUkCz?D?0@-I0%3Ee(?apH)df%ad|H zeSZ*MTpP}Y2m3;e69KibC_l>mVT#=bB70IidR|xb{$fV+cb6tj;5ebfKIMwD zT)%FCCeC{=A<4}yN#*&wWXpMPg0fF0G!8>aK5(^EA%d7};r6)U_;;`u3I9+DWV(VD zNJs8+wP{{jVTWC#>W{01o&XYYuBaMd`Q=58xQIGhi8Y`7Z zZhZ6677xx8`;r=oV>?ka6gbv2*Y+yfYhpKK^3FV^YEv;Tg7hM+nvx6$Vr?8A&x zroPzLA#W}(ma0oQEOlN*pk&TU9ADiK)Da>e4;)kKp)y{j)}@Xo{aowf!te;6%P7lC zw*sH7x%$2Nz>?O1*YP^5{jLo ze8Pq^tHVUNKcI}TNw3-!^SjcM%;y2krs_AIss@?QgFoMN;ZAw9LR;dX`vc$qXFKQ` zWa;yI^~FVtPMWDsxPXFk^Gx{1o&okatN?#Q|15EiYMXzhs%g6GU)fw?c>zy`>E>nT zle5iezw|q%B-s;ObS^|QMH0c}GxH!u5TGIJDF&Jf!AnLwPqvsaml*t0-GWHe1VmvD z?qA{1yqqfpkOFnb^%g`GUIe3m{5K7l4sI*h5I~7O<8NA9EAp~a7TRo!SywCk3oG+T zVGHgMGB`y>>{|2a(|7UP71PS_~REnqAZ%~FO+ zvCw=#2PfbdpVTjDsGcT&8uE3XFgFORpPSqJ*8+I<5UUXvIzG{AW%2Qo2VEf{y;D40 zbbwd*=+4uf4&!k%*gNEQKBOTq_KObWlivSjpgAlc9x`{r*F_4+}wb_UGX@xtvd{vCBuKSDfM@0u|=XrmOG#AMv z`O-mcGfWLo%EO1o=NKxfd%X??I=hiEgJxSQ93~-eGPI5HX|~05gQwVX6|Nh|TEF^J z)J=n7tPiqH0kfeq3x5L;8bagt!o~V{3&G*yr&KeGQ1eFHX4Wcg@)#?1DH)&UNMUZ+ zIjQgMr6g`w--((Gm+&ZaJh58KPYQPq0y%3YeA@n2=&z!sMH~|Hn!`)PkR`C$3kBgCy8X0?n6w`jkJ9r%eWUT&|fp{)f(o z6Z9&gwq9gQ(HRRj82^@eh{E4RuE0n%gyz&~99+(J=5;1kj58 zp#ew?Sr#YN(r_PPq?L>88@Y&A!AH1oqXj4G)W$Z2Rhbhmq<`8EBO`keeqa)CUQrj7 zrNqfc4IuC1(Zx{Du%0iGZx0kWs`$L%isrNlEs76UQ}N`uH`XH{`#|6_)@HuE2fQ zIc@7{H`XX+YJVvI8i@&yonf#Ih1fF9kB1T!NOWi)Htx^5qh+>Byh^BF;HKLb7XEE^>Hu@C-MV zBt|!CWqep$t6jY3hLS;V2WFyN9?;*#u~sv20_73;tseX!=|_kf>JJ@oNko>U$krMN zZQBZKO~o?HgZ(ovAw;e4)7*o!Rk{UIcrnAim*g3;?IO755Sro~Rthp06sb0n6NQ~e z9_&L7uvW(5!jM`YO-md~UOr*qB5rG7F|On^nob zwu>68hdn+DyD9k*+icT~APJ-5;46L;2YYo2| zEB^|8)M;?fsV}o5VFE=iS4wSKh%S3Y3n{Pet6Tm%?suETc-fF8GQ>Cv@F+Gjs zr}4zydJA=Uf-xRmF<9JY9qHU;9C7=gQ0jOR?S`#*I|T99N?g!^19@#WVT2sb${7{W z24o03oB;^$s+#sZ9>vWjML-}}O1&+!?Y4g#C`XvhMx*-h}}du*}xgwKQP zZUVQ|L~>Xc+RdX~;h*-UOSEU(YOS3*@wxte|IxfSlR0@mnpMduuCFI192}AQVPjX* z(P}z78Wc$U2jE*+f%4{NKVb0Zw}pK=t0?{<|&JE=|0X`8Op^Tg^!;V zM3mRdM&@}}CIsEFzDaZ;*}nJG$f!e)>Y4h=^hbr{(pMEB3(Awt$H<5W7TFS2XrWO7Iz7Al5&P=}A)Q-QthK~c`Hpa_PJ^wLMQyanyN zOLiEHn!!8z^?b4{;ql4bCy9%h147z)7 z-sI{cR`~MODU7Cvk@QK@I&e?;Mk-in4Zq@R0`QVOXc#BT$PWOHusC1DK**<90UAiW z%N?lb#cXVtU6s3K5I2e`M%b4*GCYSJXC4bxGHQjkCFzTee(K%dE^_6N`52)Mvz>08 z&n(NVY4V2F9l^iTVZ!o%eK_RDA8Nn^pfH}A*JkMbPH}L709V9!KD#DXW@fN~0K$Ivc75tR)i3$0+*1ANy z{qgau^mKESi0Zv(@=v41%MG$W98twBrmnk5o!%INKPjTa&w zYUJ!TAUO*<9i3f}8z)jqB1V{`w<3zB_`ZXSmh5{4Gd${FLqv*;jCgeG%Y`n~boaFz zBR&boWoI%gR*uT1m&L^+rOCsq-pHwGSfMCqEA`7H8#(pa@#d-FriDoM35jW~2#-Sx}Iu6})-iF5)cfzDpP_E`u0MK_%CSo=< zAJ1H+_0mfwVrY>NR4D#Q4&caZYf!KR^f}O6+tn;MI9bbS+ST{C>EyxDk!HSWwteHzq{EuHMSIq6x`;RUy}s6Hl|LFyB&6B9XaNE2`T)`Z9ET zK1D;b|H8)q=ib8Zuwk9w!bXB(nbqP?_W!c+jndld|7QV6L1_S$(zuY*N?Tc;gQv3i zs;b*+AE)7PJdeM%_^*tgWf_6}7O!-E-7L|2^a#!LHUR5ox7OI_(~Ywg!(ARK(kaFN zD}{$U=)fk>48GD^X`&!QM1hsV-*Frr1zzm9RkE@ESos*m9Sn%V1@-fa`j+8IgGS|+ z6Q;>6>}=xV=;F$={Z@qdOqny)H`K(3L4qt^YFa6lO&IH8^=wY z&nFdRKWj2WvPk40;y{rgX4Q0P9hXtK?mkB4A=cPcBtyPsV1Lj=q`Jq#ZStrntM&co zlExERXT0XuF7Y^>=6qe>DwV2@`H@quaPVB#W;Qr#vo%)|C9Z}?UX2nG4I~H)L+NF@ zD4xS0E!gH#nlR_&M2iQuZ&lyt6MX;Bj?U;@jV@6sYnqj5kEO2=&(Jw&Q#(tJ0<+{9 zQ5#yC22UT_^YS5a{#9Kffw}{faIb7QHY2jwVhz5bymI+(AcVjM$ml6UiEKtN8*+&} z*wiQ9o8i1IZJ>Rv4W%Jb@P~wK9#s&>x=sa#H+|)a4`%&b#Jvu$7%*v_17iMeR*#25 zOfyVzy;)6ivK`gcRdb22xEp6uegd-7*p)sAC2$zAN?Nvf9$ke+g*|@vA>)YhI?)!btIe*}Mc*f{K`b+P0uT`sR)~s4< z{-)ZTtKHY%9gqK|+x^kR)KoS!II3XIn)XOPh0kn)=@TKB;Oi^hGG9)KRsjC;c&BXANV70}|_sP}gMx`>d~a?AeI7 zW(ad%$GYL&Peua!3Bw?xNAco>pQ4&I<-PdkT2?;7yySOeBrp%g2dE3BjpZ?I^kM<@7}9#7#Tm*>AP zOtC{*;60zzYVA3MFb%ZxL0dv|toKTN6&t1|jg2GfXxJ!lP} zMoa>2b91SbJzcCL%sIPOS*C~{^Tj*(91dpaBu%Obdkg_lD z7m8++u)p5TS+3hOogNERvgmb9g(turDp1zy!^w2&LuVFjjMQeF_k7_sty&4nl1oL? z4x^mN&8$4Lk&+u4k&5QNr{lk4P5=SgR%*lAALF0e3*;AUK(`Spezv-5SPvJ@3Jv^$ zEv4ou@ix0ZUjLa5y@vAD{myEJxuS-O0BVnrpk99 ztx7BOacNZhUT55zT5{Pk(RxsnwEn?n)bqyOSAXbiTmNz`v6*WPi@N*+NchYlFJ`FM zq3_TN8Df|aYkygQe+l^>R3&#j)CjF`Cw^-6E;iJgc?Rw}yc_WA-N~8~G z$J6TPCx=4>hZA~C{@X)=iW;1;jz(~O*IS1Qijnfm!NbAyt1`2^5%U9>z^%S2Qm#FY za;GjjvtVD=YQ6#rt*WeV8Cv4vX@A-_!#N!gIg(wy)R@0ERN)^x&t@@O7MICvb7|tG zF`t^lYrc->|0XQDTPP|AGA}JBV^K&)!@_xHJu%Zu`&h!!HaqQBO5|(5W&m^AtND%R zBo+qD!EutFGf|O+q7#DYms%I_(d2u*+{Y=}Xt>(nCgl^G5*nA~=UlEG4#T3{$l%#| zX&3UaB1`8l491ir?VI;dSV(2B zu|8~x%kpPr`071o)zsYO@fUE+tXR4oa99EnNQ4Lg#l(TbH?d=4k019=R6Bibhn=k^ zi^W@sw|=8+UtU7p4%Sb7Gv3=AHkNoa23dTMz~i8uM&Q61633_~L1}{^Dt0yMxdbj$ zg^@_*H(DL+PR!b*ENiRSe|8PXG2XaC%;odw)t)_B8$bgAoq35D^q)EE_o?MoPK$)f z)JzjREnt&oNK`-f<(BD6E*9r)!JnRq4>)j~v^RxJGCtyvyl$FP$e_nM>Zd`ikn-@s z47brOO*eS}^CJXvN9gH0n3vLM)YcXmPfQkyr%o5DR4b)SSHw@{(kV)D{8>&LQ*rpM1kJ9gB%xUlFE?6C zhWgTMIaW}M_XBx{{iV$UgqhabdSPL~)N{dvzlERKFM`_hA7Z-%b|(y6(gli)+`F-H z@cf>D8?`P}^g1NPFRLw}AqG z{3jktS@{DaL`z1FIFGbDgVQ6hA@g0e8> zjRi~i+)8TniflFJ@Mv^(a78vYCbz=(>Jm-Avm4Tv;}s?FiKqWO|64ghdIepl@d@XP zf{+AAvw#m-iPt2&$A%l!+K^$25XxTIP#b#$bj8hWjtr*cG3;J6Dah}twG^&hYQ~P$ zeq~|>_$8rlK=FkGpWUuP+=6HG;0=dumRk0gT~oh0l#$#Zs4*(7AzP`tNrsa7yU5pK zRUv9lRqW^Innut@JU=Ex zi32TmyCcfv+_5G1b0QNlL|jqkQxsf!M9sm(w87#U2Z-FH5lzN5u51@|pTRGx(nll5 zVBZ8>{@tI@q%<*zm{ZrDE(=gZ&er!baF}Uu$oO=f6jq;>+gRp52{Ras zn76GFcYi{W(q84Ghyu)~j%$*zps@3v|#nYE^+mP&ckMJ}CYKsiROVjS#N;Pg8?Q6aWj*o#y zsBFk=^Y-2DdNW6{KgUH%eqkjT(EfIlQnGHrxw>k`YRg~=Y4+jK;!~R>9EszONMJeV zjlYA4yH>&e33*vUOy7P7ZRVpmjn_jMObweOX;4j5Qm6W3DvsqcISPs$4BFIe>pprJ z8vB;YtmmRX&TDplD7r%&$P-G$)~Y%=-3j6XvU0#zW1qlkXSuBFev!bpoeT;ZNec_+ zm|J1F6TBjbp&2QP8Y_NnUGLTU_;vJYs|aT}Bc7m09u5A`p2DZLi+=(slig|(cH<+a z4Tx$@AKGauUzE5Yu)?u0ge|9jMiEgAe*c2(l5Rr9D4zvVrbhO5$@8nn&?F~^F|c)> zXfkn1tQf2K(`2XUnW$q~po*)zTi5uftOTiBCet2z>HwCccL@ZP!!I8!k`?(z10|r5tW%j8=RKYheAj2D=1jLep@TXZ&NRmq}@hxHTpdVW@KaBi@ z**dyeG6vlmY}Y8IW1uxW4 zQB?-%5_y-S_R%pAy4xsQYJU%Wg@-M@uqgu^dU+&7yDNi6S?Cpgvh9PJv&G{USk>X3 zqjPT5&to_41-f|^{D{zwoY&dgpSy^X*uKsd-%Z$-`+)-}@&{tQ#EUF2hRj=2(!IL9*%}1Xv_~r@il}p4A^Uq=w~bE`ft#d%Enx>9c8e9(Aw^Lpk@9+He4`S@0THtT zytKHsc8;)1vP(C>b#{@`Rx9S6nI)d@nmZnP9P@{ZLC!x&{-?`A+X90Vy?j0PdmFr& zhedK=Q8f7t1|OVm?S9G3$(8H&SJH^Vg%Wop%{osjndY=-DeiF?OkZkh^a-H`^yHej z7+DKTEyD4OiS!8ZXk6nX)5-MeXVr@h3AAZ#KeRl?-Ql>huu@09jDvO#$&bBv3CV%S zRJN-irvvWvgbS*G~@I(!dC!rzF-;dyaKTCiAnu zvEf%Ic4!Ho2={S?9EP8g-_(+16%qUL@ipE}$9x%DuNLUl%VsVI*ev=z6J`MKDwgW5GEr zf^v`QG9V(Sf&d@ct-&n;4Ns|GLMva<|3>IYj}?|P<50_Mn-e2sVcDxaI( z%6Nl8dApyD70#gK^pHtcB%=j1T{7(u;d!9P|Hs5ECcnwbK&D&272FlXaa4zJh}yKE zX%($d;qFf&Mf;5)_HXN6uE49W!|FhPP*DO0Imj}6>h)pFY(QJMoEQ~9St>!ky(F!i zj_}08myKkSb~+Q@@a)$*@)Z(Bmk$d=Z7%?I|m?Ze^5{c4dg9Ptf2uO zbP@RA>F?F{lo%Wnqwc#DE9E&Q6*IIZGLF7WTwS@!>2rO|8)%aiCX${n!5{QJ+Yhe9Rvh~l`At$q&Ho*er@IVp++Z8B zi0?9v(oz=k!4hdwvw1S{TAKW3v<75O1iZm?MqBx1VC1q7{J~)deI2#H{D|B6)sh&r z7?Aq0J>&4TV1H-P2ry^*7D6ptEFzmb#R2N3UYVAaeXz$KgIjdZ*=7ezFyMDYP%8T) zRY(o`Sm8gy2)iS&d#3xm{#;PjC<;=;?Oq-?m)PO7pU<9#IdpBsUyIJKxF%w#Ry0cJ zL-0X2zmzmEYD2Ui!D}E?pg}Ejv6B%m<}t@(T35;Z)Vt0C{dVB>>Kg+;MOjPD3`@ly z{Ug(M!13$z3lCqbzhe2}JUAsNWY3RwLu@GF7Qo@J|&S zZ?TN0FDUUO_}Z?*x~i!>TUHwzF3;thE3t5idWk7Zd9K;eo3RDdU4Ov3M*k45Tk2xS z831jZ8}O*s0D^`lpJXmy`x1ETt!ojCQVdxnN#(UoeobI+I6}#vW4$iyD}%Ti`1dJR zhi>E>;cxdg5MWw^GfE2ahy^#9Cq;ivtrw2?vix$LZEpIdcz`VHbPm|Y-%E}H)znsB zPF6+=e?NNH7q3LlNq!1L{6oD#gfxamnI1+x?VG;ly%>dX`NhoFpAtD(Ne0wbWHarX zm>_R*9QYb!Jf?QGV?6@w;|N`TwhlwA$|~#!E+j)And-;-y~}J5a93@dUb+eBIi@|5 zJ}4-BmO!Kl5Z6hT!jPkhbFcl{4=EC;?DCfJ0UMSYV#;LqhHwknw`*~Dj-F0AM~tqE;_iz^|kO}*p7%k1B*n#OukI&lX{8#ppxkM9p>J= zPP!`OtxX4%;Mj91ImU1f9>S5G;9WbD`v5DG`Cc8hBTK(g;HDc$+tsx)` zVufxF`0V969zlra4u*@Dx3H(Zuj>!}e_|_Pr}FqYG(A=&=p6G&nythF zgVy6z%dEfL0uA6BV~YGH3MD`FH|-O>@5!R50XnoOCIo|F>MI$Zpc(S|yZlO(vrsX} zv$+3LT&NXlK6ZT3WdtG@ada=cc)+Odt7r<^D?h)K(KtGJi`fj`wE)*=DIDt^1w}`* zVm5U*Vo!5~JWMnZq5<~)rs}GCVhtMF_Md$!=>BJZNfsIu$qu_r84K+$d$R#7O>GE*## zQxU?Yd6VQ#n9L=i2Y5XRC*a(esBRQfe5WD3Gdrem`-Mw(O%4fUJx~8`!h%8(`RlJH z#Q0_$`uSWsd&+@Q`yC1uO6gm9gC+H>5OJVoGlZ?l!gTaJ31zC(q-#)Rf>o8>W!@GP z2^H_!dDf9B)xRPu_u24QTtulHd_N`#A1Y^@U$y>*M)l%|xu;$xcVRg8pSDJTnl-WU zUU)n=#8Dk5DVvMF*i-m)Q|paWJ1iEzytp09rD*x&Y+pi8bEHB?ks`H8UsA>+%T`w+ z>N1;^#dYrz{BZVxoy!rH)XDwm9~>3Mr-jZpvQz+r6B{BRMVLv$EM{+zf0d<{FC+%R zkA`*XMFd5Y+2sm$C)K8m*w#*|mQ5t=*A7jFYl|sWxt3!WbLLFioiXC0ep2|{>zSFA z&a&%=E-pMvgorE$|MhK(k8PP$PD;-Dw8h?AVQJqY3SA$JqhZ~ z#lm}5a%|J7o(~xfmr;CnqF$f`Ai4J+ zjKWf?gy+Xn(E$%?Z9up>V#EZXAWIcu+~BcQT`TUO%teh6r)9h<#%^Q)@Aq zp~7R8J-*8U=mPmC$B~9LcfxBkx+?rLrkKUWM6v9S*j+Ws-)|$l*N(*4{4fcT;fy1;7L8~4Bnlg93f7U+TXB(MPH3spN+ zM#q^Gr>&PU#hc&w6bLB8uM8_07Mja2lY?tVDokw_p~LAS&uOXJ_MyHvvt}&nURL<< z$M=9``bWo_@XOo$2Ou9mEsK7m(Lhl1tcB|cQ7{AF3M7&}cOXcxBL5`}v+Cbu^$0<( z>M?wo%;s5D!J3J8S3h%h_5^gDrC=UbXClb!`h8lLs}A0XWk--?xH)-qU4Ir#(_e57 z{~Hano>BSam2*FQPDMuNaIud72@ET~#dqk;8v3a&u^SQPQ(zzZ>8faKttoY8Mh}+( z-({`_e$!=^&u-bg_g#LdlUFM2Nf@ z^jYy;pV{~)g)0|k`49PG(5FDa4<5-=9^TqfDEx(n5vC{>NKdmgr9fJCc{#o`uAR?( zDMmaV^(J4yWis=f`_s*2d$lw^*L|feRvOp-o<`eG{w4*N=#8S0RJ?Gr4RU!-5DU8> z4sFiT*aDSgty!)o1ieVTRwTvVq2!0u?JsZW2=aD1fT{2zmQmY?2NN#Sa!S4tE2ICM zQc$8ytg`=co9fi6KFBw(Bb*RFz2Nd(-Q#SSOKpveqL=1{`r?Deg@Fpfdkum&5%H9{ znuLma3~<%YmEyIWu!3qna01afjJJ1K9IhjED>S$ zSjmOqnE2O!Cnl&Xb^%IyBnEqboPb@`K9Ho973>l|hZ+!y|2!`7(TcFg=at@@U$Vv4~Z_ksn!J~%r?yE)xQU&53iiAn{4V$Bi+8950YP_=(-+_zS6(1SUm8g-%$ z*;%L1c(uyETU%vt-4YkbTOb{07?AzrY6+m+y?@Kv6nWYrod%n0B#?3{I_v9Zmp^S> ziUfMf*A&N7PnijPcV}c*x6}6IP~xgGBAs4zv+>83MAJnYkj)C#x$LLV$kJ}3w|VlW zw|Z(rWTSDAOj2{uFC8Y7`0kXlKAXrdETtL&!x&z9+YhfWwJ#+9KQBod= za0+Sd9HoW^r9PDwXkO~6_BAXYX;K|AE#@3d&Kx!J7a}+N=F=1_NE*8jOdfH|f8uw4 zqJVz)m!I>(_#xxFSMrmcC=q{|m{YRn3(e<=(os=?V+LRwtb3ZB`}D2Ab-R<4N$M^I?miOJMuj?%O2 zG502R8KD5*30ql7BrFAPGH&Wh&dgi+-bMqCff$Nr3yA@%@ivSVhj#|VhXR>bqihmJmsL<%`+nCTZ3up6 zCR)a!YIU`Wt3UORBYpV`G&;y2$Liz|XW_e7OE~oQ&`}=Qt=toD^-5KU)r5yz zMXXblQ=X2YQ70}2494#eWc-CPv}D=^;$_8X9J^YYF8jEdaYez-&BKlL(BX@B4t?Bf>=^#*!O5b8pc^+geHoaHX>P+utYO_ajKe!iJ40Wu})ycOpd1FcuYI% zp`3iqBwa-nvR}P5tg-l0X#Ytx|2iTfZvns{$VfWR|NZgNZ_v>uO8n`Do6%M!t)L-l zZ1OFl&>!^CdxH?Izg43Dj?d^DAXiC$wf2`seW6m{c%OVJY064-$>|FeKg(-@P2k`+ zkvGHpQ#meJvf=CBNRg^No(JtFhraYb$2kfacm@4V^$q5iVgq1xX3&l)kY5gsXR)|; zoADKAxj&hNsRy{^@_ChclW7>dR*^aQkESC#Isg;>=aHAEK6|H~t`}G{c@lzQ4gWUN zk})zO{AP$C-P`EnQLhutQ`>T{?jSw(T31;|LPB&G`xp1V%#U{lDgfFrTw8$NfWHf| zNrbN!uZj7HgjwjtEdO%_p`HjiHUg{rUyCz=o
DjolkgXc|%|NokCf1n{HmK0f4@44 zj};>;Dt5>!apXUS_1_0yZlV-l#ul=_(fNNL`5%L(&kRiA|NhtiHR-=M|2yFS!$STw zoBuVl|HrcWclH18;`;x3mH$7xl;5d}(i0;Dh83+>QCwCTpCHU5Jkuj$y=yO@!FPp@ z&Fva@P}%9oWcWt~C+GeU|L~W7znp55eR9jqn)vv_Ld?ag(}E5BCk7hvj|J7C;gXVP zcl%cMALuss-45fES;-R=&D2ZW?+>Aqd7ss9AI?Ye^7C0YnXbO*>gaeMw9Q*mB;VbE zT+Yj!e#R`ARs3NL8t{ABkF6@MeU=;itDhp3%%d%3PEEDZ)}L0bhRlRZ^AD|eS^bh& z05ZNQ)2fq#p(^ubcr4%W&8fT(uF=@NQ<2dSNT$5?s@R&CQX=W&()K^`hR+beycY7o zb}N}T!Q*;Soh#!;sDO@+?rg<3vJd>^;7hAs$7RV+;C28ts~bABt|@-G;q&^f!3g)Y zG>hxFGphQM^Ln0jn#n}nfkGIfuvBF%V#(E&BOqGRyt!9Wv5(2W?Y7J*SKhETlHX;w z<^Bntz}dLrB3T<%DvcBPBp9FHR-Sfk4>!HMV!NtlX8Rkby+(r$)0zx4O63x}1VUo( zyrW5l3ZtHXZES2L!A^{A)yyp$>+nmit zj0N7Y_QeiA8F(3J*O2f)?sDimAHBP{^UL!(Xa4mFqeifvkNfA7=-V}g4=~<8+%Lv@ zd$gb68bFam&pL-n~Xmhj|w+jjv4M}I7Q{<5g?;?quKRSJP^qK z=7cnFRpQS&8s+j}&=CWCzY3jZi^AEthnyk{afqUkE$&XF(O?vLSY_ii?-Jm}amupd8u+ysu64|Uzr=?oa0EQ;;kM~^4o`R?@yvHcAN zZ`Y*wzO0jID7<<- zhPLgmw+HE)*%R1zN}o3wykeY|T$HEE!x7k~wY+j17p%g>CJ4SeKsIe}Rs)m11+nu! ztnOaPftMZQA&uJ^WfPrOjKIlTnG9^p?yYz?i=C`1bH{{fuU}GPZ*1tdSo9JqUV3}G z$DU5!=FNw!Tjd=cUmG`KLN{|`FOHCDB0LQx5|=m^m1W(*Gr zLF72P(d+14AbxoXbF!1u-psw4V!{Dnt_VC^0L6CIfkC$|Sl%>jrx#$D75H+5&bJ@C z4frMYY0hi!^s9&R`x|W5bASE%K2=r{y*ZfJzaGh5WM`MTNQ9eoMQG#4OwwY%Yx{`M zXzR;9e6C&O)6jg!=Yo zU3%lF`8jbE>eI*3<)^FXuI)h#_Kud-fK>g5o2ot3^X6Zh3F_E(GXVi`EFK!PBfQT) zxz765MaAvgUxQ=NNCU)$h53fLuic@1b0VKIKpcx-8EqpgolntSo*&;`bRG{AaAHZS zVQT`ju)_qU(i4WyN#VZi_3W0qV0Zl7(HrdO`Ft;4)0RZddDM^|3|$giT>J(azB?Hy z)rv~kqd(SQzpS3o7=`ly_4a=G zIT;lrO@ZLq_c)c+0+1bwNli7|ySP2y9&Ei{pwt?9rdVy=ZL$9Sbl?93e_%G3O#CgN zF9eguV5z0Tfx7#C@ApN2Ty=FS(yJ+V8ypue*um8q2oMwC=b$i@I4gWgd49y#1MD zLQ-a@xg|U;$JuybdtvcY*Oj7p&#^Js-j174fqzF>?fTE#WncXH6HY z)%4ZyvMo8E!#Subcz=VZy8hgYXE8TirPnJ4oSgIfm&sDg?b$&!Lm!~I($H?9sK{M` z5lz(w1?U_JXhhqpqd-e9@X8K-z|Rbe3#}>m$}%Et)G5*k&;0|O{2)eNI*R4hJo0j$+s<-dhT9RnLDSbAK!k}H{IGeOZ@!)3 z7IB5kg^mC_l!f<%g5gj64GwpZ!|ic^<{8K7PS2ckDZWklU|G$}RKC$P-s9Y4DZj}S z!r*yocRLm-l@JrN=10!g?YR-X9Er}hz=Pt`o@EYxq?g5XFxLhAi|;}0G{M%FC+GTk zOQUKlFNb=(t0#qeRAIoF-%66F9c1j6Hxrk$`@@|xc(rydguv}>sasA%+RG;c$ar`a zUw%t}qtP+I&dT%BdBr5X zlAvyhApNM?=AP#$1&+1NFND!_KgA*avXT!dfC?!aHPubrFUpqy;%1wE`L{=YqtQ)I zcl$LNvk(uEDWSt-H`e2)a_8gn3Tt^MrIVdEG(mjMmbivPpznzknR@R!=if54@VTU+ z8h&hBnR8hSrra#xee~a#(4W@m&FS3Mtff|jlh2ok21M?p_HS&W{q(MQ?snvFFDtxo z>n$o}(N&p4(pAc?&k7*2t+TN6gPgGwKcG-cW+STTLO`nO?-zhWODJx3cg4B%j;N z?48$xTU7ulw2Tw(Nw0$AmAg%*R+ z@4YvhuOszEQyXMxbxsr?JDetY59$YI~ORw6*4t49sz2ZT1&rTu| zIDF5m>YGCY_G~iF7Z(G5Zsl36N49(fK#*b@C(mB`Y76r2Mu1hlG|!{L{1CInnc<7# zuZf#O@j=r*z3p~7TVTcNY%FriZ zFQntA<<}bvQ|eX*dk^{~DC2<+V+XVEa0UyVZ&%Z~PX)G*OIupLm$6ulqwKsnjoBS< zJgi@qDie85ROsUO@r75$wt*w`?T4PL^?KajLtYA8Ud}jReJRmfqy1oc1t($gWBoy3 zwQ2vU$~(xn;R(g-<^!!qM4SFEsP6&+mrEGZTx8gf(jQKoo&eD|_4G+AsJ{>TOSxaFPcTT1Y6M9G#PnXA{kqQ?=yBW@ez~$KSKJH2@v_FS7!f!n@9xmy= zO|l5VbKRlE?{4ls=zRj+tfn*|7ZYCZ9c2Q=&W^pn z5{YCP2GtSGwWL|cE$3}gvrV!Iw3;OGzVQ3hbize4j+Hp!-o}n&-QZ|tEjPL&D$xZ$ zml&W=ofNhw0v}7UekddT&K^gds8q@TpHMmtd->x?&*9P4h*w)zX_CS5^H!?WX5+Tz zD0%BLYr1)m?9Ri_*dHf=xND{qvImdOqS3_e04she<9G_y!$~0JK->KhW*d@tyw~%+ zkjpn^Q^Xq>P`9@D?e54hW4eWaj|*FxlwOEBs1u_6%w4R9l#N1hooV96VRA;Mr)gRC z^Mv2g-?QQO8VlUN88nCwHq*qU(|E2p(wHXR)3JyL14>i)Rn5#(5m z5eNQZvOvo(SzU&3T7eVoVLy^?8n(>{(-+J}r77@N&Z z>Wl_DjKkKWLjaxGr Lu>Ek%tEo{~e4U0*&{bNTg8HG1_u)hj)8WbDu2Q~03SDJm zo?jw}7}eYoP>FRq>ybO@c7|PIA$Xk(eXJVFa3D*wg^XjW21lD8te8bAC z89H#W7-J~BT#E{K?-u|P)tB7YEmVu;CD|73Q#{$y@IN>ctq?jbRN2s(O+Z*1LM9J2 z5RjaCS$}^-Y}?Uvxm8rnT_#8!Ng~EF<$dKlh5*=luIKt<%B0U^{^pXV{g_pU1>ytz zn)Xi_?<_fMo>G|J@e{E8A1$}2*%u|mj1&0)`~=j%3kG{^uBDMlEV zjhJ~@!(WdaN~SsZ?yq_e2)SZnVy?Y^z*?xl*MfDQJgA$e7nR&YeWyE$sr&%bOu-l4 zoi+j-8{7E@rbqM(J@)3&pZZqR8*sgH+am{_z}JM zK$fCO$*9{^S;)1n3RG}|>`uC|(CnNhId-&x@9qhnZIuV+z}K;ZG=XPFfY3&uMv?GO zz_RPUMf#jW@-CGg?BzSJn{?F=t!|B$&dMMai=<*Zxb)KVk!OP&CU*fm&zsM(PXQ;y z=aUoCB|k3poxAS*Fd||(CwFVyVCm9C*c^v>?u|Y_#aPDkK8@i#@YyCYy`r2}$vc?Q zOTRJ#q6n+!*n(0y_R3B9oprTNm1F5=)RiNV4y*PSm*t)JE8>!0N{#I<#+K#9ae5O| zJn|duz=-v$#$JamsdbCGS#X4UtXwxMIXzaX+&vyt&p>ubvz@-}{_3~bg%cRe=lOGj z82z<7)zcalc&`Ru(w=uD7C0|PdmnLdb-w~!)ofFLgW7hp#@pTM*iVinsM?qA^<=e~ z9Z2w|w|kl6t^&wgL#003d?)(N)H@kZtxbjq@FIJhTa#4JUr=K-omY#f_&<`2*z~5q zmxA+jTS@KGVCV!(nKx|2Ec?TMBtm#NFxpPCopZKoxlNE-ZdARWxgNOKo%pjmA$6Y} zg7GfN@s&eC*}YsDV4jYl?jxMX&vDB7d{7oVaNHSQPeqmF!%FHLFbh{a<}V9k;-H_W zZE@j)0w8cJ78g&`wz=fFoqpm5^h9KEecrpLi+?cslSB}4H4WCx{=oN)Oi22!=2QLR z)pBKRCFX^Bu7r(xt7|x3#WTtw_)Ti&B9Ha+HyvX5$6u<|hP(AT`V=AIPJP7i^BR{9 zbJ@@`8_PoZcbbo7lHnqMblxxQB15alzVJTNXbt-{Fzz~WLF>bWVy(!G%}(%Ck%xz9 z7`vVCc>j3J9<1lUN)4GipR|kkdfV+%1xj+xevrq`mtGbsiyHonzf1TuDyybw`C^{Q-|x z^Swv5KxJrD7&ZVobTaq|d|Ce9Xegytb}SGj_{sv+p$ZpXxZ#fvF+!T{K;(M94_YBG z;h)?s3epV&t|zKuQIvuQP8W{}vPcd6R|mbG&JAQqB3fU0A1v5;S-cB3c2F_KxjyM9 zIKZ(GsF`FLmECF9z^fj>rIUk|Gu7F}rY(ys>g?-_Hob?P+w_Xt zBdDpmFkLC@k-VaGA8`MWyZ;zju<4yKUgT*L#@_^X4W^tUJ6$N9Sx^%1VZRW|GR?{Lt$yUic(`mUomdD>tAD`xvO z@#olFn>h88CF%xxFgq1)dAnCUav=T(6T(9d^LN}|NH$vT_V#6ct&{iMF6&w2zee0^ z2{0Vz@Hgxgm#i0u)lmTu`k?$bdKbQoN!v-s;Hv!TQ+Cc-eFCp1SnJ%C5pVhEq6UvO zU7^mHR$D9*ky`V2UwN|+4ITb_2DO`ocrP%hg|Hc>+98Q#u5!Peb9S*|p7XfH2&Omo zD9BL_cUZ@gc`JhnAapPAz1P-)oJVJ77Rr2nyLQ2;2(#`6x`8@9?~n1NQ1HhD90*Cc zZ#U#u8>};e?-(_R@k`O;4Zx2i9js{-OOEsD!9Ni}>e9TA-*4`C?geiAq#gC(J;@e4 zZJr*FpUEUQXN|NFv@+R0>$--=-XCIpns@{;VK>i7+z2hU?_AZGsHbGEM{u@#eA@Jo zSj1*Fv}fnxiCdWBU45IK{+7Oh%AJ~*SGukG{%Cc5CLK%5o&4(kOCtFd_GB#5B<6^) zl=T8QxHEf#Dl;?%&R_lMcEl|9m)mZhGKS`|)3QjbPaRyS5gFnR_-UOmx`pVKjy9{T z^Zt<2nxcE44DW>-zZhy|3ZNgZ(J^_@;W0%SkMn+6XL1qHIB4GNmhEPk}A z8Aqkq?&AR#gwH27+MSlohd(dXGq@MD)n!&fL4lyf)^X9vZhC@TU&Wuai-TajBM&2} zbjx|m>@sm-?2_}xMJPha=EJ(wdxgm-DNaFJ#l^Phli|`#)`gQy*;9r(t7Zl-~2Yzt6tYUS;KvV(jOs<+hO7ChJTVy zipa$i9Onp~LNSa}g~IWYPcj5NbRd=;?cBy_JUDYEW)`8`m^?k`>#V=e&Ww0D2MKx> zb;UxFjXTFNVnB(P$j zdZfiTU$L>f_Gl~cm}kEkWg?%z^Tx}t=(d-@t)n4agzSJA3`CpCmH9Y=?Py^F`N7F& z=4C%dksp^s7WIN~!3#>IC-vtS%p(C4L;A}l;M$`1wjC9%*G?zz4!bbCh=lPS{Lplo z0xCmz$zw>;9R)NWchQ65_C zw_E)&-X0=F;#{!rmon?-kZ}pA`(2@v#vB>7Bin5|(r=JSuy?=h)R2e8#l>aA#tBbE zda&1Kge9)~bGmkp2UyrOg7(~zqOwM{H^z)}(QLfang%Y9yUNXldpc-bHRuqGG7TC4 zNk+7?C5z~-J33{N)Om7TFJ#V>aV}c^>i3gc&;6)l5Y`=Z&vQd3`hFb3N+t$w-hMuQ zrdQaWoct=WI@d~W6~^cu&J6@og^(SO9w zZgsgcxq06z4WGXpDMl~901cJcgdMMU0o8V_y=v%Rs6yP^ss>q)9EoV+xLP*Xx@!H2 znBWZ~RW|TyQX$4Kc;@kXIVV3JEJn5V8wp)k&}bE42oZ$6r=4+89OxuNI7%2tLXmfA zh0W)xdR6M~y_&udJ>38?qKK0cO|j(5-^u0KHj)YeQ5OD@jC%gc00quL@cjd(V}R!jXd zX&59a$SNK`tAC6!J5?r-AK7UvGRUA+Py(kx#G&dgt9p2NNXJO-F8Oqbs87wV_(`JD z7|li%a@S5bk^{RKC02k8Q=#D37;lnXu>Y4~_D7>T;+Ah>BvNa5X*5UR34tfE1(Pf~ zA8}Y*BIj$tA2UmfQDVHU%_aq|T1|5S3g_Z1OF&{o8%S`*tucFAR=9b1_-O6vb+=pa zF%Tk5_{iwWId-W7qY0=e!ZeFr%nYqtNK9-2dc4R2}fY7T>h!MNg6 z2~koPpff-D4HNC$KrkP%{$2Si=w4H!zn;^^Bzgkh)TCh>NVmRlr37ru&Cg#(-de1e z9+=f4skS&*Xf4KRx`SsZ4^@NPjzQ1 z`HQUgMo!z(28R&3X(v+k-a0_`^%%~R0PYCu&B`&vBHDSBAAWBSlfj_~7QRU-?r!BV zvdP}cC|Ykn6-aHR6MuNtSI>7$FS{|UnGw1FO6BA>@HeSX)VSKVK2mA>u(gT+fk1k! zu&?y+4c5M!7Z!)mo<~5~(FN ztbzwGC~1=lgYY54F?RPb#fIvWIP{v7-VLxTGM6=wE>_*s7F0SXyq$R!7*VpalYKn9Si~IKBdD)d1H;)5w zEtyoWG1=}HW_ZpI?B;k2-$*<02w=VDyIrvS#`v1fF+>GmyAwSauFv&#Grvkv6q=?S z4Xbd)f|Hq@khULYjWXXVsf19HAVG%hjG)eibn;EMe|EHgrd7|Eod4o(#zooNkTh)T z#~fN+JxI@-GyJsrE^&aaeu2PYn4lpYf8Or2juFG(#O0Sub*d$Zd{1d!H4=manz5fK z62-SxRFn)lTdp=d+;i?fd2w6}=t0h3^3~AujaR6}VfTr7_&aW=!$166pz~&OAvNxO` zg|;iJ868Xow4J;b>>ag!?UyJEPWRf`tKJGspvL53+z;nVrcN2yFsk02mY2N=7HNPx zzZ_EaMM~yCwxHnO0$mhW%Bg&v_?l`yOKBjKf3!zygZc}h6J0f&-y8G z_$f98^hi27-ZC>E93ZLGr`c?o>{UJ|om`Xy3?dKhMsA|Igie$7P14n%3_Ywwg-;Z- z*_8L{`vs}!|I^HMMm4#tYbi=oiin`JY@`SX;wE$my-G(wI*Nz^LJK6cfPjL62uN=t zy$7V%fPzR1AXPv@l@bX^hlFxJ*Ex5eea`Xzzu&J}^R92^ZEM!d^US=2p09|O3X*M| zb?R3DyJIchz>v_gv`2L%!JDh!TAeQA2v?1k`%~FjDoUI~8(KdCn2-dGqC8?6m0T3S z%-Mc%^nz}M>~?p@dUippw7l1KNHG93uicK2Lmgn6Rl+KvapX6tha67cu#c#Bn-=IcK6TND-&&p^2FAz=7<%5to-wCyF%?16K~PBV|PKv z7ts9RV-vMkPfeHBC)ZfK3}b&CyOW(FIP2*)1*QN8!7kh2w~jWdLL~-h1UT3S&H%va z#r7iLpEwp(#5Ye;=Cr`oRPQAUF3k8vo~DJrdlKg z6AVxlZt{rUdVnpzmdNb6TlA&ty_i{T5rCs11*Np>^o{i@A=@n8-NYW_&GFe5|k{OBD9 zh;NK6^vrsr;bb{)Fjg#%m$j*bmM{ri7Ge2BONf?}Cq8*ZybUot_1jB4o5iKJ`8>{_MnWJPiL@wmjldm*s zZ165oO;n~VsS{88B=)+*e5J3b<`@E_x=bKtHM<`WFs6|Bb&TI8Ha+#==;^g zrXJpy+S?4Bl2caUVSK8TLuu>h7)?W>N(Vy&$CG+7p(xV+9e`kdsVE_Ac7?0$0u4Ke z2mZaXttVByaHYKd**O-LyXzZwOUuJa&NpULo~vLa-w%l!ZGM`R(pu%BzoGGs8RFx4 zhfT^&cYN>XbAal;FJ3IwFCN93B4`rCjY+(koPLR$x8}v=@JsB@Lc;Zy5j}m_hgPpy zhaN3we>(Lr49;T|sP{NETAXSWzcnOuyW(*(bR?+-{=NXbA4wcA8otr}Ql+l|Ykia^ zhYXJ|BD(Sh`r(Twp@9Xh4_JN}m0Vy!C~YFOwg;Exga*x}Tzi|! zxr07cIYV8fl~qS?WCTlN+z7$!wxP6+ zGH(@T8lJ$|bDH$a=IFo=-s`?4ZLU;u)2?#c_dU3r9&Ih;Lwy45cePeVZov)ndq^`# z2DtiJyDSa{?=@gotGx2u)MC=ToV(h5xPMU6JqSyS5E^FeX)(2wg=nP|d@x&<(=inN z90}37yZxNii{!oo&EasuzGdf4whQswdF)7|cCQd1t%iJI<|4gdInkNkz_nq=0nu3} z#E2dR!3mM8=%Wc06tSohgMBVikE$Y_N7Vu3ArDHy%7)_|exk>I7V2Wsd)jrbN1C?K{9&+~Lg3{5;*`&i zjIP*q`8@%e8Z%|Z!#P#>>X7nC<4&q_?$sc)w=B+=bQ$mO&p1k9uF)p{R$?k#|GfFYGrI-+ptz`8gkuCnP6--npyW-!pt=pk zJLn_xiRGYd?CPC^MnxD_D7zwPHdUG6rYZ{*p&bYA?Sz?1)$(0G)b3NI5SM9Ez|y}E zf4=Xak?dq9k+egsG!8bi^uIgce~~+=!X<)F$tYHjlxS|df!jJJdBFLcr==+ z2A<3R7 zV?VK;39(uAd9QvS6V7P23Jt8S^%7*-aImW%Ai|GEiec$&E2OS5sUm%0vobH0tDnZQ z?xy6n-Fz?~S~vnm*Zj;@=TDu@^d63h4n%~na8@;>CpD;ygfK#UkKr*8y^RrSkJ_~N@v%RF*pCnRIIIoi*nXzM=s&NFWU7Na4 z?ixPEy=M)n7Rqu`9qm}*1S;7p1p1~j37eLR z>Mqs@qUYH{vLdqC#*x-DNwioDFYiK&Gie@%KI9Xp)*kDKF4iq^YptDfEiaI7WB^t@ zdNRFdQBfqBEc;ZxUZlS7)3r?(p1?`RPs_P6kp1NAOAUcX@PVreEs14Qwl9rt{+t zJ%P&y)dQ+_&;&uw2L*8+SJb@16pNie;{Ic*d>^pOrhG}hAO7KllH%MC( z$C!EFDxIF@XqPR<){~2AX*6z`P|r}UFTwr(4Hh|^aYaau#_n|)Eq%9) z(!J{^?daCJ&hmCgTD#ZZ6zwI<_#0=+ywUHt;d=A=$!6!Z>A4ajwm%NYv6pZu^Qkb& zOs&tJX_OMGM#@FQ-5QJX4qE+fHu655;&82`Krm3%GVZ#dcJUrMRXG$4QzkXX9XR27 z{Z3bNM=~k}SyzC2QT>R57%PEzK0n2gj8rcsa>gfMav~P_V|=89cGiI~I7{1`xF6zKU%-cl@z0yi(~Tv>EJ zLKxl9Tkagb`8|@=`Hb$)kXh;FA=eq=W3($4K;AZaBYKH;)N8E(v3{UL7w&b9uyS1x}W;CA_^Ir8RZB_j2 z`~;IeF7*Wc?viWQD?zE}#M@(fDor24BG^#ljiJ6SEko5S-}N2D&C}A*(D!)_hu0@I zOU|$t@r#a*?}FU)$#z;B8j6q88Xk>*$#P0F`VMDb7$G^Bum>FZfAWzpP>mSL^)rYp zUD~vOObMaYqnOKUh~=_+yC%gvBN$Xbb1yQ~Ziif`wV5`|590SUxhD+$v_lx%O`vWt%hp4{pEBb@;N)ZN6yk_ek?P8l2E z7YG6oRK@#kr3c6stt2HO(?@AiXK|&SrzcrgIjkkk^u|tofL#=HvMOJKB;#6B?y5&H zbr=;%l>LaGcE?BrtWy?B#=i;N8H94)!p^{j$^S5ZcD-2HAbRD9$5%MN_w4XHU6-q$yQN8R#tYYa0bV-b7t};0*Wv zGuO(pjn6e?=O+>FsPGotz0W{}Z6`{Zz3k7`(faRVK?2T>v@~8h%j*8rO6SNKpPr)x zog@24Q^|p`y{6>OO_K}%>id`YMaa3(3^vf4^S={5xkyg!bv^7)$NwDj*Z(1G)S&K{ zWIPtUs!Gj+jDOAd*VvlOA&)gj`nJ)tC~|fw7}(KKvyOST5$@D#t7UbE*aDo(`egm4 zE6mUPvi-Ztzz~da=bFvbDK)(Q%N{@&dxcE5^bLFwtiKbg@je9!@QA%p{SOcR8aN~muvR-#{=3TWgfA!=m(>1mWhrH};|i^R zX9-|tXvT|nE&6{3>z_9KV~#gGfIfoT33R^`@?2JmWoBaQ`Qv}%{I_3~i~)Uk)!%yk zR;UI9m52O>%aV6YlTvK_6~Er+fA#z=I7~D^ qs!+dL`dimuO^_g<&;PGro-#B%d_<8{1>HRdeA?>zYG@Vv(EkCh2*oM@ literal 0 HcmV?d00001 From d942530483af473b085b08562c5f7a62f34cf353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 13:22:21 +0200 Subject: [PATCH 009/870] Add OTel trace sampling docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/otel/tracing.md | 46 ++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/docs/content/otel/tracing.md b/docs/content/otel/tracing.md index 99bcbd6cb..406575a63 100644 --- a/docs/content/otel/tracing.md +++ b/docs/content/otel/tracing.md @@ -3,13 +3,49 @@ title: Tracing weight: 2 --- -It is a common scenario that you use the Prometheus Java client for metrics, and the OpenTelemetry Java instrumentation agent for tracing. +OpenTelemetry’s [vision statement](https://github.com/open-telemetry/community/blob/main/mission-vision-values.md) says that [telemetry should be loosely coupled](https://github.com/open-telemetry/community/blob/main/mission-vision-values.md#telemetry-should-be-loosely-coupled), allowing end users to pick and choose from the pieces they want without having to bring in the rest of the project, too. In that spirit, you might choose to instrument your Java application with the Prometheus Java client library for metrics, and attach the [OpenTelemetry Java agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation/) to get distributed tracing. -The Prometheus Java client has some awesome features under the hood to support integration with OpenTelemetry tracing: +First, if you attach the [OpenTelemetry Java agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation/) you might want to turn off OTel's built-in metrics, because otherwise you get metrics from both the Prometheus Java client library and the OpenTelemetry agent (technically it's no problem to get both metrics, it's just not a common use case). -* `service.name` and `service.instance.id` are used in OpenTelemetry to uniquely identify a service instance. If an OpenTelemetry Java agent is attached, the Prometheus library will automatically use the same `service.name` and `service.instance.id` as the agent when pushing metrics in OpenTelemetry format. That way the monitoring backend will see that the metrics and the traces are coming from the same instance. +```bash +# This will tell the OpenTelemetry agent not to send metrics, just traces and logs. +export OTEL_METRICS_EXPORTER=none +``` + +Now, start your application with the OpenTelemetry Java agent attached for traces and logs. + +```bash +java -javaagent:path/to/opentelemetry-javaagent.jar -jar myapp.jar +``` + +With the OpenTelemetry Java agent attached, the Prometheus client library will do a lot of magic under the hood. + +* `service.name` and `service.instance.id` are used in OpenTelemetry to uniquely identify a service instance. The Prometheus client library will automatically use the same `service.name` and `service.instance.id` as the agent when pushing metrics in OpenTelemetry format. That way the monitoring backend will see that the metrics and the traces are coming from the same instance. * Exemplars are added automatically if a Prometheus metric is updated in the context of a distributed OpenTelemetry trace. * If a Span is used as an Exemplar, the Span is marked with the Span attribute `exemplar="true"`. This can be used in the OpenTelemetry's sampling policy to make sure Exemplars are always sampled. -TODO: We will add more information on integration OTel tracing with Prometheus metrics here. -In the meantime, have a look at the tail sampling end-to-end example in [examples/example-exemplars-tail-sampling](https://github.com/prometheus/client_java/tree/main/examples/example-exemplars-tail-sampling). +Here's more context on the `exemplar="true"` Span attribute: Many users of tracing libraries don't keep 100% of their trace data, because traces are very repetitive. It is very common to sample only 10% of traces and discard 90%. However, this can be an issue with Exemplars: In 90% of the cases Exemplars would point to a trace that has been thrown away. + +To solve this, the Prometheus Java client library annotates each Span that has been used as an Exemplar with the `exemplar="true"` Span attribute. + +The sampling policy in the OpenTelemetry collector can be configured to keep traces with this attribute. There's no risk that this results in a significant increase in trace data, because new Exemplars are only selected every [`minRetentionPeriodSeconds`](../../config/config/#exemplar-properties) seconds. + +Here's an example of how to configure OpenTelemetry's [tail sampling processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/tailsamplingprocessor/) to sample all Spans marked with `exemplar="true"`, and then discard 90% of the traces: + +```yaml +policies: + [ + { + name: keep-exemplars, + type: string_attribute, + string_attribute: { key: "exemplar", values: [ "true" ] } + }, + { + name: keep-10-percent, + type: probabilistic, + probabilistic: { sampling_percentage: 10 } + }, + ] +``` + +The [examples/example-exemplar-tail-sampling/](https://github.com/prometheus/client_java/tree/main/examples/example-exemplars-tail-sampling) directory has a complete end-to-end example, with a distributed Java application with two services, an OpenTelemetry collector, Prometheus, Tempo as a trace database, and Grafana dashboards. Use docker-compose as described in the example's README to run the example and explore the results. From 089433431934f821b29066362cd44c967b798ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 13:47:37 +0200 Subject: [PATCH 010/870] Add OTel naming docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/otel/names.md | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/docs/content/otel/names.md b/docs/content/otel/names.md index 45b94fcc2..2cd892c3c 100644 --- a/docs/content/otel/names.md +++ b/docs/content/otel/names.md @@ -3,7 +3,26 @@ title: Names weight: 3 --- -TODO: This section will contain information on: +OpenTelemetry naming conventions are different from Prometheus naming conventions. The mapping from OpenTelemetry metric names to Prometheus metric names is well defined in OpenTelemetry's [Prometheus and OpenMetrics Compatibility](https://opentelemetry.io/docs/specs/otel/compatibility/prometheus_and_openmetrics/) spec, and the [OpenTelemetryExporter](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.html) implements that specification. -* Mapping Prometheus metric names to OpenTelemetry when using the `OpenTelemetryExporter`. See OpenTelemetry's [Prometheus and OpenMetrics Compatibility](https://opentelemetry.io/docs/specs/otel/compatibility/prometheus_and_openmetrics/). -* Using dots in label and metric names to implement OpenTelemetry's semantic conventions. +The goal is, if you set up a pipeline as illustrated below, you will see the same metric names in the Prometheus server as if you had exposed Prometheus metrics directly. + +![Image of a with the Prometheus client library pushing metrics to an OpenTelemetry collector](/images/otel-pipeline.png) + +The main steps when converting OpenTelemetry metric names to Prometheus metric names are: + +* Replace dots with underscores. +* If the metric has a unit, append the unit to the metric name, like `_seconds`. +* If the metric type has a suffix, append it, like `_total` for counters. + +Dots in Metric and Label Names +------------------------------ + +OpenTelemetry defines not only a line protocol, but also _semantic conventions_, i.e. standardized metric and label names. For example, OpenTelemetry's [Semantic Conventions for HTTP Metrics](https://opentelemetry.io/docs/specs/otel/metrics/semantic_conventions/http-metrics/) say that if you instrument an HTTP server with OpenTelemetry, you must have a histogram named `http.server.duration`. + +Most names defined in semantic conventions use dots. In the Prometheus server, the dot is an illegal character (this might change in future versions of the Prometheus server). + +The Prometheus Java client library allows dots, so that you can use metric names and label names as defined in OpenTelemetry's semantic conventions. +The dots will automatically be replaced with underscores if you expose metrics in Prometheus format, but you will see the original names with dots if you push your metrics in OpenTelemetry format. + +That way, you can use OTel-compliant metric and label names today when instrumenting your application with the Prometheus Java client, and you are prepared in case your monitoring backend adds features in the future that require OTel-compliant instrumentation. From 839e676cc41602b92006afb359f48ab5bf34c374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 14:54:43 +0200 Subject: [PATCH 011/870] Add doc on the internal architecture MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/internals/_index.md | 4 ++++ docs/content/internals/model.md | 31 +++++++++++++++++++++++++++++++ docs/static/images/model.png | Bin 0 -> 33959 bytes 3 files changed, 35 insertions(+) create mode 100644 docs/content/internals/_index.md create mode 100644 docs/content/internals/model.md create mode 100644 docs/static/images/model.png diff --git a/docs/content/internals/_index.md b/docs/content/internals/_index.md new file mode 100644 index 000000000..f279a3539 --- /dev/null +++ b/docs/content/internals/_index.md @@ -0,0 +1,4 @@ +--- +title: Internals +weight: 6 +--- diff --git a/docs/content/internals/model.md b/docs/content/internals/model.md new file mode 100644 index 000000000..d2dd5148a --- /dev/null +++ b/docs/content/internals/model.md @@ -0,0 +1,31 @@ +--- +title: Model +weight: 1 +--- + +The illustration below shows the internal architecture of the Prometheus Java client library. + +![Internal architecture of the Prometheus Java client library](/images/model.png) + +prometheus-metrics-core +----------------------- + +This is the user facing metrics library, implementing the core metric types, like [Counter](/client_java/api/io/prometheus/metrics/core/metrics/Counter.html), [Gauge](/client_java/api/io/prometheus/metrics/core/metrics/Gauge.html) [Histogram](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.html), and so on. + +All metric types implement the [Collector](/client_java/api/io/prometheus/metrics/model/registry/Collector.html) interface, i.e. they provide a [collect()](/client_java/api/io/prometheus/metrics/model/registry/Collector.html#collect()) method to produce snapshots. + +prometheus-metrics-model +------------------------ + +The model is an internal library, implementing read-only immutable snapshots. These snapshots are returned by the [Collector.collect()](/client_java/api/io/prometheus/metrics/model/registry/Collector.html#collect()) method. + +There is no need for users to use `prometheus-metrics-model` directly. Users should use the API provided by `prometheus-metrics-core`, which includes the core metrics as well as callback metrics. + +However, maintianers of 3rd party metrics libraries might want to use `prometheus-metrics-model` if they want to add Prometheus exposition formats to their metrics library. + +exporters and exposition formats +-------------------------------- + +The `prometheus-metrics-exposition-formats` module converts snapshots to Prometheus exposition formats, like text format, OpenMetrics text format, or Prometheus protobuf format. + +The exporters like `prometheus-metrics-exporter-httpserver` or `prometheus-metrics-exporter-servlet-jakarta` use this to convert snapshots into the right format depending on the `Accept` header in the scrape request. diff --git a/docs/static/images/model.png b/docs/static/images/model.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5094596f0fbe21f7f65f29523873f363fea11c GIT binary patch literal 33959 zcmeFZbyU@D_da+q5d#ziX%VFnX=x;-k!}=_4(SdRloaXilJ4e!L8r7d(%m6(IKPd) z@2v04tTk)?nLlRDoX2N9=Q+nu-S>`b?|ogzPhM91CKeGE0)ezAT(zccW|GBUKTtNnbaG^pVyu1;JWBABx34ySGfg~2B{`mbai5QwW@2*jl#1Omeh{-u-{Csl#7AS6VdDLIXh75N(sO7N+zjK4CX)ft*mm}uyJ%=WW`HN{S;hD71IAs zcZHCamFCiYg23JNQsMv2y1Mz#?dN#|Ly_t{|&3u_y22fll(?TSws1nLj~GtO4*^N<=k9cj~Eyj zo@_0AdoTWpTp%VSgksfkI9K(suz@V3znt4)ZTru5*f^?5IXCj;I5Ide&~&uyrjhDz zv42Zz6(RY0XE`frZ*4>-gQZuRjhVT)j6o+=WShf6W3txK^LQ`m>}V0|^<}@PD5L(& zARnBMw@8t$hm)>4ME}Cb*1@mQQ3egRO08;^J^@7qg^h_?a{Pn70VU;B5o>B{aSD-a zg-20Lx_i4lyPW2~82T#-?>X%T3k^HxlUwsZ0uuomIi4;D+&>5>CVE2g2{S!RcYx!Lk#jHnb(3Z?$quR^JC8rf=$(SPxB+JZ(o$6&FW z)ElR_w>Qc2Y<_n!UG-7T`-61erD_Ur9VpbTbg~YH8!$1vNz7sQ)r()qH&bRzL`-b3P&do<@bP?m zM0tfuOJn1e%M;^BSM(X`Og-3D&&X&jUvu$zf7Qv!36=)Vf91;L-l2fo*7Waz0i^^V zWxBx_R&j3}Vou8#F56GJxg8(L9dcC*Kc%JVySR+@XZ747XryX<)jfBeK|zBHV#nbntpWME{}t;6JTSeuJwUw!c4LAsA- zx#?tqcAP>6uZ6j}4${T`?6hgh6FvLw{YUjRY54!qax=x0cfs%93o9rnJZ~+vU3_dl zQM2AlIq^*Mu?}wrs>h_CN+ym&!eyeuf}qRq;muK-L(4b8WbWn`7A}VyBk2;9s;a8E zxU;eB#OYaCo~PDRJp$wpyrWr-evg(D?`=fH#Kbh9Wv^ckh+_JoS-BCNn5gqaK=Pld zeclWV42)$rWAJv`r?YAKH0p40y z0)AO*IWekT>u|b~Tl}GZYq(I?XtZo|(3HLl58Qy7xqlDcWsk+91Yt-AF(OIQ{^b_pnrYjRA}0z9Z3q8k0;KJS>XFN#s@jlQmo)q24-Y zT;XS8sAGFZ1_p1Olfx5&UwFd*u*FwR`2sD%~>4giCBvKK%Tm` z)#u(~{aSds=Eg?z(Y?d{)wkEKT?6;9TkiWdHkK z;xqVZM^qu0J{K1kyRm#vTU&2OhwXCT<%?HtIPc7vEHo_5%<#G&8&EW^44N@%*TjGR zJUy?x@&mi}F8zW|Ui3+@fb7Pw)tdz@Qm*;=`D*hKAs!x0ibn8gYT5W(*RPir7Z<3P z)>KwTm6z{##`KE?pB=P@%#MstS6QclNziydmy;8)Us;=|b%fv-aM#xAS5du>kLYak z&9yai0hFDHjg8HMJu%yt;R=gYV$KVkmgC1WqR}74i|gH8?=r3|z#UqQI%1RY=BO5S zXDb>xY)%s3ACwrssO(PQQOZ;M*4b%3S|$MjZMZG8v#U!rPmLi+9hZQ>^Yl-fcraP6 z5*37qe7MVyklyKU7a15j7dzFzsL!t!wqQ|clo=0|yk@0nOc548SQ}yLa@nU-FoM9} z^k+NGAKzZ;`SZ`8@)8pAl{gniN*5te=PP7{7FszI5EvmD<6=3j7?3|t{oeWg!+|^6 z5S;r0AdDEL;42d^Z6 zcMMwZ{gwSBK3D#iU*%;wt+!_cY8^MVE6iV2+q`a%WSmHThKwJI`1#7ffX#VFWO?J2i zX%*{pbsJ>o+wYznZsv0`nvPZMPa;pKWsWHr8D;2xPt+d5`hM>(O%Imif@I@~Dt8{r ztM2;_v2U{4w#RWQX!U1GzDB-ff2L12qUOg(>=h>Q;6xlDh}e?PnnNgCGH6|#T_X4P7^+SBr>+w`_6rCYj;XbpdP}EFcZ~v;Kh*h+ zmaVOAwrLyc1lw}5PW!Wf%z5^rNru#4|7WH&Mfj>zxu8_|);;DKTa!)>1j0akCF&Vw zN@eDI3b{mYOp3hx{0uBKcVAzhSa4#p1T&jq=bxkIAVCU|;ev$mi2&1{-ql-tbvyErblkbCwyUoS4UE;Z^2)8RDfTe^8YM={Ic zbw?z=(CJP`dj!4e>cHkxr>!EqE;UWf!=>K&a?LQY;=4lLA3tJ~omRt%y?y=t$@q@P zTn{&{Q}7>u$;!?)Szv_k<>EM`B$*$A+jm6fhwDJTV^AwnGK$dkIC8XX@~^hKq%|ZhG&Iy3=lxaeR(p(%ky6j*z>yfm8x-CR=-=VtcoZVL z3o2bUH5}EE((#O z9sXDY8R0O?wXsFruL3fV@3wTJx$XOquAFDbtJv#)XJ@ql;I;=FFTS;{K&{x!^}OsERoN=u8bMo8YVF)`OD z4%T^I8aGkPB}(dk?}$2Ve5@A@$QD@rKa0J6M)Yc7Zl)Z%?I+8R4>#FaSv4Cx^p%vt4QC)q!1k%9iIso2iTXs! z^GxCb!aziEaH_qX?!?Rl|5LDBD?Anke^^);Ilr4yO<84WX_#SZ?McJnqlKO%)Tn@k znOT^#9=@sScfk9JCJehHEap8aV*2i+KrgYSq%;EL=b%gy*0!~g&3U7sMUWYY7 zj>(ez$xyfVoO?-ol60OBa=0mT3>!{$rNWBt*{uC)tEzH>4L0nG&C@}uup*zmcPYGC zjdjZu3VAFNTiacSb$%S7Q`F(D_2umBY#zsryFvz8G7Qk;@E;%&!c6Hm5gke|tOo$Q zz3o!N>l+x@uBV;-$j9NX-vd#S5_Fa=Ue#O#$$ART_x5&{)ysB7j&;9>CcPsfG6pU- z)iRhvXtdQ z&DrU1KQ3O`GwDkYfpjw&S%5&`Ngr-pmSUn)$t!X{DOk(X)7RIAs)53LfcUi`U4#UF zZmtp?g|~z14atmttdbqFin3s&>D3e?ERu1~m5zsJ_NcAgb$Ob3&MFaZI&?3-Sv=#IbU zWD$aY2|U8a z{TpS;5a7-1gr;g+g1yHtt*n?tic$tMYVQ61eLI$xNw+>+C!U}5&B;N+1vN<~-7}sG z9gt{Ca1H8I)P6}>SrtY{NAr%1#`*gBNk~evu(R{oE{xYs#CUn_{{H>@)~#DzvFsu5 z00(GuY>DSN#6?-y{yE^IlMh9zCMZE zZ;!BD>`5B0vHt;JanLlkZX%4B^D%h1``%Jv8S#jrN|tQ?BdLW1KG(H{t_}>07L|OB z$rNGD^~-<_Ak{WQWJrG{4i{%a*=|m*j|R|2NSb)>nhjeToY9+@m<$(a69^4_c@czr z1#zDeKIrqpJ2-G4<#yW|oev5O1UOEMoNPcRPrfd>*VZvPIr$?k8Y(_ECD!euT~A$C zmq?oEjC2z(N@dZu+?zRrEAbo}ZP*G&Q4H#*6B}YKF2_(B`rrV>2}xuH5KHF`3&rPg zI>5t}u?GDruXm|-CWT1X%3u<%&X%ma>c6inqc#8%8)KD7cUQh(p7k-$H%mV!-(Eb4 zV$^JIZ||F&EKqnfWj!l)bh23>|84Q+p+QfgMJyjPD=WSBs9Edhw^whiv9LWo1)Oqr zx?35^7{|kn&&JRTH7w9=;Lhrjk%~H~C@R7cf?W{aya4#=w$MGIaWXI? zvx%C9bmk@jw3}~0fbGzAY@z|(V;0YuMp|KgpXVr|rNNT<27QHiZhJA-?Y(70Hr4Y| zLzx@-#-^q#tD5`*&1!9*pgej1&hi=s5vOIeXhRBQ*l?omx* zc6wpqcv#o7s-~u~sR<3~`wS(pJW{$j*CxR4dN4jd?sl-Y3^mH2PW|hS1>41Lg>30W z{+ltpM=gnbCkLD8w(mYt`g(e#qyYfTYecREbB^GG>9w|gxqLlxZ=L6hcrd@f>66u? zU3q%?j;4S`!?SIp@7~N8uO1KxY1P;r0YHU{#cb*4Z$KK|aGZMSajK|oMiX3Sdq4m8 zs-`f}w#P(GP@e$&g#siyZAxov>*o*T9cvpCFDXQd^){@YekF!7egt|FmF6Q<-bED^ zI(1H#`08RkiP`{8?|VO&l}+TdDo$x?58noO_IhENgJTHd&}|_I$x?%Y4}$x zPrDNIOcS3s4wH^|Q*-n3gm71(fVo(0-{a`*E;I-WB`&WCDky{sr9^Yt zY6RfR*mL~KQxB69AZ75D&mDx`g$uQ4ne{CGGH37^%GLAi2nRO|ZD+hPKhI@0#75x_ zp&^A|zC0s6y)&U!9`lu%S*hDmDl{p|7l{Z7-M5>JJUsTjaU?T#wr8`Bj)&g8vt0jG zta*;7GQi`Z%s1^Ruc$a%&LRh^r-^9){Mkrhp7f?nTHH{6+-kVQ#`7O}k+id@?G|^R z^Cf@{d+|7llKbS6mt#*yuF{VW9zwn*{f6T;`$>tF4<6`rMKimCiL9@$1J=vfJb(^> z{hK$>Wn@UXY|0GfUD^QFX34~{J8nSLo~!z0+7{*V^3y@O5^WE(6TESz+*oC^W;eFB zd?6&{X;$Vyeo1fIi8>6n7ja)6x^WhT%WA<&)L0btg>z^|s6 z+vG{SxAK$sv%03H?G6Gl_lTBudAFxQ3%qE#Z_>26xPx7gTNe5Q?* zTrABfMHuIx{xx=`3?m#Fq9kuyzik0`M98)#rcz z5Qox%T)-ndBco|=S@FXS!h1Mx_!-tRA|jN7h?F~`(3SQp?=DO2*kcAWJfx=fJe(NF zkXpSh5`r^xUXSNJD>56N1ndbg{`-%#U&s5o zkF{&uX2s+U48luG^`R+|LGe5+OcBb>(CVmd-a}|d0xYFf&Ph+wo#1ml<9FWKg9;0f zb^zS@ub*-&%M1_a)E7*jf?eIZRlm8c-q(^fKILhJiB*#!Pa_sYl(gy&O;R*zua8$#?~cQ{SM0V2bChi<8lkVbUlBb~ZF}f_ zO`n8hO|#N6r2oF~=uQyvGXkcwFlS4_uSXDBYHMl+@-;QFSfpiSGN$1n8Wa>2Sqpc1 z#V^`u5J4Oh@?BcGCw$$wgxEyleD5C2D5KAWKinkl%hxo5M}elE&3rrN3o+Li2!`F! z+q-6-6xdibN8rEiC+ka+5pML#JA;Y)Jp!sw`Q>$ElZEDMR*H*=NGJ04wzrpv_|0%n zm{L(ub;ngY^=Ia97Wslx>~9KyH^-2XH9?Pq)e*k}(A#pqk&)+nTqW~7uO3)F zsiuSN%DE~-i6=9nzpAXK=J&E`9iigqKXYn@;0DnnTPdd#8LW+Taqo=2#?0(O<_+6Z zVm@-ATw{G@WoBjNfj9J8(+B1_2*~(cY-YuhscJ@RRmo-}osH)%u&fFdL$KDRH2fUp6=~~ zth1)v`k9i}@+o1!MEzy!!8%k-*8yp$W=P(JHuKEPjMZdaxlzv<6nI9(K561|b}IvE zidhHtt3wBS46jT~2#JXg=i0(pjk+x+PaV~MbvWvXK>r8wj@;@HV;q}_QiZvRre<7Y zV|r0h(RG5ek$U&60SeEqSo2mEauu%+ORu9vHvizLmmorL7L|oi<6k7Ik zvd|{-!676hWFaaP5emA2a5{uh0+g-}-6~K)4GgFjK7g35r4@gJadu|rfw$B40|rOe z68)9}$c|yC`HTc?Z0w$}zR&Lh8N}p=0~4qiVc_5uUs6&6t?Ue(8JJ2ayw)L15xat@ zb5&@GVK-IkF!b?tJ$&bb1MfM@1iNAfy>Y6IS!wfURy8T&Is{zyL`)SmY8~?H=x);D z(5iG!3vMWE&ItMX`eMqG!P&L`tmHC59`V76<3uyoCQt)9cI=r#f5!RV+?*-=u_9)X z!*YCU>o@Y_t@RK~jv3GOdoUePEBm6kFb^?^)_yQ1K;s=WZm&~-qrAvf3F@?k5m6im zBm3P4-Z*}Ke$W-YBeb_NIPptOja( znm4~garB1r$XSN{?y(q5fA_KNPUKT5T|lc|IYJ!@c;kQ@M?ZO1$u3!_GqE~cs99Il zGMI}V!OfO<4*kTvjUV$Js(`DvzuGB%k=MbrhFq(mK}3xWx6k41?95>{luu1M zci0$T+t9H)IS5)EvVc~$xwN$T_DoYOhXq5>jK_lX*J@j|z|JaEl(4nX$BE*1cZr}? zbXgz030b?OxELxlnW)F4J~)u^`R!K%50a|h{8oT`Xf~L`Y&L|w*sYCu)15+j^>dxe z-J_*mee7U8h}ztCOV1bh^5nmX8_$!1OSFE1HK%;=0196xr^dE0BbB^A>+>CNxax2F zWMyH0#6@7e^S|rviL&>5{~p=B2O)HOmKr)NibgIlEAu$Dwpn;3`QyirtJr6!?Ga|9 zxPUwdU{nb`&;6xdan{}`&nT$cngTpySdHEue7{Tghe5ag*ND2DQ7WXuleN;27cX9n z;zCWCDT^u)4=#v_Y5?S#{4A-dvC&wrtfFGFjDLzvK@ zPi-^IhIP1!?d%wA4%V0{M0yh4dy*PjO)er@twb3VFN%#1CEiKO+e*;>6pB$6VJkV# zz9c|e#^)=~uDuXJ?ioNth>(}pLb~KD=N_O=4oybOUijT<^1*?#Jhh&g%Te~^b=soY z-2pce@I2FN@E{+|*KCeOI@^BTV+^XT{;ds};t*6;e^3Ai0b}HJqO> zV_+}K&0S+Q z94z+fv`#d@@ZjKpEMjqoB1&d0hFX(Ln3%&n)fcQ|QtrHQ^3Hg%n@_bsYj>Mg6Dp~$#&7Sh z0!V({q2m2fTwVnJ-X=AW1OzemXM;<uU(iJeVaoM{^0_)-UvoYfvofP0fk1YM zpWuE0f%OG!BZ5v@XSZj1`eeRcIaBTYQnqkke_#JM2pB#|<<)vBoMz;lA9xT3!GC8M zf)tCER%H%F+EFWpZz;0FuiST>3qg3H-;_!2Tg%#&%hKwFtmMhsmr0ki$OKC$G(RL1 zrKZzuCe*#f+(4oi5}lfy2lR)Zb#=>mmP11e{$8$a;aB7_&j(%J8FWZXzbfvg*_Eh3 zdgX_-Jh@t~h8`OsO_Om$XkPX#1XOlI1YHc`Y?a|USI6a21igg3&Qq)|KGm`|otOg+ zxpEU9Mb_$Z4b`6-svCKCJq|OLGwCZd3r6cDpQJvA<3GYPsq2nuBvQrFmeFHiU4=Du zB3HJNT6%G${Bh@nAr+xj6>Z@IiP_i>pUjAAP&HlSv$DaIGBi4fuRM#hhIM7ZLA5AP zp@U?jON4^2&iNjjx22R_TCiU5(KqZ^OLXoAIex(z9HMsVzdLqBO`_Xq*f^Z=3YNBhXoS{e3JwG?7@lI)rdgXb^I#>f%oKDXIg~2 z=`WI$H00vO32Z7bmqdzd{dhD<@)RK`TRle1xNb44sDyTm_j>7adf}L zcPi7Yj%V#MT*fm9lft{!LNdxf1h&ZL5(Z)@5kb0v56 zuBTh(GR9dqw-ec$vMU1Ps3rjRqUX;x8tA-{*Wth0$cM}w{2zB*d= z?t^uP8x`E2d^wK|je7MD^GbfnuFq_n3AiL58QG=2`0+@m*YC#r3y4U%u35J z*dHt;y_qw{l=+<9gR{y(=Y7Z7 z&5p zi7fLT5tvJwLrwWn`M`Tj)cc5VTiNk#>o@yN&vYXZbvexBmYN@6g#Y9JeP`;)THF8R{l z+6hB)dzagB4fZ78X9LkS=2;vvh3QNR%p7-Q>h$Srs7Pv!BEoaxr?yRC*FJD4cXMq| zTiC0SL|nx{pkG-OM31(OzRbEuC}eO<==AMdRZ;XfwqRmp%GPdRm<$HSWkIluF{EXW z{?2?`7;vQon;E40#MwQ1YfZiT-dwKDdO>9y%wth&85Xjwa+nXH$C)&dTWtk>c}+BM zyNkf^reu>LGQ>+f5_!hZ{q_pN_)isK&zh-)aiDSt3>$pWlRJ8M`sh8;J2%mmCN1gQ zk7mrf`kr3;YR2cs!bN6&7e7u{KpgsoURv(cxG0PM#ctF0_OB^%1M!pSc3MPF!pj`{ ztA>YoEmX!nXHGI(m4pNjMLs?G`R>O}1WqBTzOt_N4GNL3$T^)3N?N|;pMdueN7hBs zsN(%n!;G6(F8R^=>s};LxrFB&c3WacvQjc+irv#Pr7!1a?oU+ynl2$aE_YrcUEt0+9!Kv%ZaiEO`quTW ztbYjYz#o)>(3^WQLSEnBL-M~*4F1qR=56reHsw<-cEhN#jI7JW6dytq+%%}oy{Duy zcI@5l4O|dGvTUYRjr80hWV0C4?sE`r4{&+jcS+bS52MVb^`FaxYTNOi) zjDO3If2&Pfm=+>{-iCFS3ccjrPCQ}EkjTeFT4kPFlDa*E+&z&omNG+zCSdAsZXv$9 ze(~fBNT6IRjniA&-BTu_y&~WGB$E_@XQz_6Tsq2cq2BybG>{dWp=HC`^^S?c*QwS~ z9c(_*(EZMz&fJ5CWg`t@jge**m(hF|5Ig>mO@uVvmTfw;c)=IkjIIzmelyU?WY>@5NWF)7A`<$ zbF^BL&oC(k(HCXg`@^UHhJ9 z_^PrFebjDAjGh7AhihGl=O=nK?@5`x{!X<}f}F+XNr1y6!4v}nqs8a60I`0SNO#6! zlSkV9MDO9>GaYi(_M82tV&lvMd(U%qvXVo}6_v_mvTkk>Nfu^o$JH1QLl>+JuqZ|X z+@yNR+;tN@Q@uY2FPA2_r~FpCsXo6(_+Yc2cS=fGWRm*NmO~#0=S%mq_Q*&P1jynq z|8Z@*dYg_AnZ1yqk2jKcLeFPscrS5ZSND(4YkG1FMC(vwfZt8S4_3%%<2TntE2yrF z8@1j^#yN+Ob^6Ky&4rt&WR2oWNLzC8oGa#AzdU|$PzqBN9^S<>tyq%|0rz?!98MP+ zMAh!UCdO0s|T({L#_{=5y>pl>w4iO+^XJ;(Y}@!6!0OUP8X$;nSplirRBc@{QX^>gl*IHzSUb?0 zinOj20^sFpFCffK(v_PWzmt`_GJK1(?Ca*@nz*?w(|8b7s6qsUGR=Y!OQc~g&i7tA zb|V?tvz7^t*B#25vUG5|5A3Dp^JWK|0wvnY)}!6g55*WTuqe;LqiYU90J?Pehot54 z$$ofjSYGwZq{o#We720-y-Q9-gPV(_?}WOfgIG!islVVm#)T)#mrlP?lx0NFG)m$# z$L^+-7w-sgwlszZMinos7+&GQa6hKA80r1p6F5@(N|fz25{Jv+r?)m9Yy1 zSWn(q_?h)|PW9|uyTv(i*PwKz4%MNCE1s()p1XGTPGyAg)u8iL*(Y!b{KE>`7b2CS zr*ovtVHHhOSww4>_Fld$K?gmQ#HI;{O}syKw_HMfaQDT@&I?I*b|A7e7Gm6@tRUD~ zcsLRgo>NDnSHD4C`@V7z!12g3?!YJmA64&?O{*&r0z)umI3sohAuzG=xqDJ7v5t>} zR{7GUERq}2bo0h@mW8g^6E@7-JCwi~z&fvAT6GiL(o`Hg=PYy4>U1pMmUi=-hIC4L zoUCHQ48+yqi_sSQC9I-}VlirQnS^wF67#9oR?)>$lFAB}fc$=G(5UQHva6yN@ngbc znU@Z~wEpo7+bD|O125LU!x^B?7HNa0eV z2C=&N%TA3gwv**q+uLzul9HMI#5O8uU5FQ=iHsg*(Oo1{SI~m1NiTmX&=9JeZw>vi zeNwPmL0ElC^Llvjp(9V4f-IUth!Dvfd*Kom{dp0efj~GHD32^{#tJy9tZuGSFlsX& zR?Wh*u&~hNkbKeRt(R(Q?XC}rF=E%6K|L(Nxutd;v6&B*$m)k*%hES)Nugd^ij@40 z#qa8flQlQmfA}DOc;|UL4o%+qCIxe;XULkN^0FNRQ!c~u+(3_^uqL?YBFoh^cKeti zy#Y!akREsGau|^1#JY;Wx*8Gk3zdP)O0y(SLV7sg#W{^lWXkKh%Wp|#wE2i&v=3v_ z^?Vv$H}Id(2@@fi;|ep5_Z%*~pOjvxR7ZyA+`wYjJPe)~GONI%kmPz8Lu3S(;XQ2K zk-&=py!zzcP-jU*p=EyuBf%Y&1WBj$8j0+8lgwV{c5{W=6Cggxqpl~A7T~$C z_(sk}GK~Q`vO-qWIAuV{*o3ft)yl$k^q47nY$fk1Cq&z(vToA^NdC<3jtsO{5ZB%h z0zx>kY{+#WNR-I-U;Y^Hn$P&mKV)iY4caYl9}jk#M)g^EIUnfkK%B1ZN*0r7Qp|X;QOSj822~3xHh!f z7`H2TZ+YsLrm#WBCv%%zZA5)#h!8z*e2R*)o4huS?uC9T6zGnHky&ju6b{_D?|&!= zL=%Td!+Ea5)#2sT0&z>jh>ww(+B}G&36cCyLh_Y|BegmMcCz#k*7?Fa!VoO4$6(m- z+EnmKZGKOzu_WzwH|lJ5Lk;VypdloDcuf*!2uZKzaVXH)Wy(#Fc07NC*n9A|{@?1} z%Qf0qwM=E*UPI1->i})b1%N8NoH(`eB6KT?24bSY!Csl&@VWRE=RcQfJ|rEC%&gIs z@ZciyL_ZRaKs@pN+ZOoB0~LLav$JA?-?vxUQrImoo+3*ANg<{!O66&(?B$IT`Cpky zvy?L<4F1s}zm6R!UzbuPrcChDeEbk%hCCeek6S;TpCdm|WyNQk;8!@)=Q&O)^&8>D z`0pmHf)yw-?Nx|r?{fENZGH+0>`8V*)ZzaX*mzZD>GIj?I^rhyfrVRDM?e3KXub8H zR#hoejpkJ|NW*AY5HuuuVc`U1nw{J$ZmT{f z9_9^><*MY$LDS6`2p=)6lARg-fEe+3%laoB`(pK*UnQ%Hs z+hAzNx02oH`Q7P#a8rOlJ^U--pF^1eky}53YR`F3a?mMTHPLFQ zht*QK=OZ2y0*^nKQaLDcZl}4ouFh0lS2MwHI5FK$XO9l~((zMq%Hew=vTYLg`{MZV zZ{j__GYeG2=i4>*giXH3NPe?ZB=y)dEPgRAUo)QgDgsZo$vlkD+}3us=IAVdS%_COS_?P<37PkRA=GU@8*{YhccCtFL()c0Oz?)VHY2P#eB76Kr3(mzk6gR z`$)?(R^#hbVL2fu`+d$e#+}ttVWXsTo7qtX8+2cdS(SFfkKkAoB=Na;KMR5uyyhtX zhYe1W;U;MnX+|JuJ_p)Xjvk(9pH&&lZDV+?t)b@%R72(}(T-V1JZO)}w>wu6BO|O! zI)quAMDKF`yQ^oMp{G_4JIbVI!tU0Wc34{?M%%d_Z4lv|I-KDHRy)5S0fE_k6eEK@ zRr8|^&j!X1-!VS({PTyMj{n#%_X3%(D_MdpSO@7p>o`hvc2?fq$>hc@ReL?21!?DrZ*dKxax-ucYScH7scZ~kLux4P<<7ul6F_r+8#D1G10%Er6p#raSE zbw5~{#&oxtwwN(Nt}OXT9>ZmYmzW1Ch60?*EXg<6K0}(VOr*&|Fud% ze6HW1;>JZ;Jv^Fvp7{n*$Mx?fotKaM!>LNY!&CzO>%n7M)QJUi_zf@K|6Y*qhTO?k zRO>ZOeJD$PaBQ&~`GRG$)DUym{)u1&6FXXQRxjSUb@|bLfyLQL+a;_^f;#6@6o^Wv zI}f-MLL?D$|M4>@+WtL1wD13ICF1`%t(&~pz~hYA!LAwzA^sPu`& z0BREcot?lw=xjzRWSjS<#zaKS1BqsKc9s?gkHnN!6nc@`IdOb`&v&ttjPgo)y>iV6r4n0Y}B%y#po+>=vUR`e>wKpxPD3 zDTT@WQZPw2!3C)F@>GbDWQA<#>OSy(YPZx11Z0}e-whgldt46Blpv7oMNRG_QlC$5OZ0hdjprbSW@u4gHL*Ti##qG%EFNLJBxp`jidIa5( zBooYx`FQ;&s%}5ezOc!)fw{Ta6!J|@)&xrL+(Uv(gq!(f zd^O=TFHWJS&RfwQ0OYL#Z5}L&3X8FrTAqH`1s(@;BO@c%<-YS7m|{Ajin6Zqs^x5R z{(MIiD+kA9(JS2fYt_a&lV#4%{r`$BW1H0BIDy9tDIj7IIGWR^I448e-ZsFaow<*U z0&Zjs>tZ~gt89vV-N%-J@o_D>W{WY0I|eYe_Bxb$vxRb4uL1QIzsp{9g%4tjALd&y z$XNu*4opeIugo=#YEiIrIo}C6IBD~K|4c&eK_5-z_m;7-j$gmjFpDk53P^bz6z`vR zQzm(U4GE*3RA`*vzFkOjsWrA1+1q%4=HTLbLusmfBhHX z92OfdZJu?|5K^|H#496<6*D(yfQ2!NrTIB!S<8L4nGwd*Fo@e2-b@3gNqj;Ake)${ z14Hvd-G&#NU&4SaOZp@^7$?=Fp96Gb3EbtIKT|BWXUKq3o#eqi1N8sV>#qM(H6)qw z!pZ4R1pP1!wQPZqjO3xRXLJ9j+#w+$f!V_3myjgj%DK6H2g?1~vDq#RiPIlVjBB~> zEh!Z0kWy1qQ#1mT0!~nBzk0B@XD7Tl+TC5DS=qh6I=sEL^@N=r21GY*)Gcp%{sF>i zb~d`&7n_hp-c;uiOiWQTO^SW1z=&}}qp**A?&!|~0nKge89nG{=;?ETMk5vV*lN6r zebwVZX@lwmSL966)8AIFUY#osKw`$QI}S9QN|XK)pu~&%KZWTA0n>Mo$hGTwTGTu5 z2GzW69lmI!r`HE!kA<$d@W<=b%o?wz-^+g&kaFzuNuw;#F*tr{SU( z30+-l!3SV^o8@GUZEIV)v=j}dPyY0caZe&DM(#UjH6|tn@aUZ9+XunWbZhKlG^H?J zR9de4T=&Em3MAwE{WFC!F%de*CtrYZ1eb;h{^6#;QG9ikmT!RTbhy0xDuONoXf%`$ zbWpoJ5kQtR@hHmIs@5AWAf;E%QA_s~7805P9vg@GFS`Y4LHx0vWt7nB_~XGe@u-!- z-0G^Qj~+b&WuE!wVuGkru!&*&+-#ln3mHr`;@`i18Ig*YvZnp?_a zx2qKx3{>7~z;XzE)WK?H+8*u)V?IgD;+Nk-VK9tE!4^f;2JDwinYf2Y%dv_M*!$9Y zv(x=y@((KH%z6WDVOdjil<^6*bq6fg*4rQ`GY8fpP#uM6fEEcv$IVO`PpKq3;B*4h zg$?w2#=WWd_zM&iJwWfQFzh;J;BSSkMNPj~ff?#k9v%<~0Tmheej`9n0y3@L23|)L z6VO`x7m`SMDpr3LC+r=cY8y3gIiafY_R?WSR+7QuqThhtsX!X+YJIk!DlN%?EWOaJYDQ zcqGsu_{>!=bpd9>aGpA+=h+PK>VcbP{Q7madcDx)B&@q`Ky-a#GiQwCYyusHbld?_ z!y+SQW^Qh2ZtmBYkSQ+=_j;5=-$d;Hat_*l7_?Of}2TbQST*4Vq| zp2EpIb%8HRRI#N4!cOQ2n2S05LbYv^yM4-7OEa0ys- z$tTYi=NYv^=A5SOO0d`ULww#ji{l8fftKeZdHt|kytY<6M1pf*VAYV|_GhaX@B#0e zmjW`5UUU&T9w=@Iv%SQwCI#5lwYqz&hrLCwgxTkTDmq}g2|P+-jy+29^ep+Z|Vj z&e_PIB((OgS4p|a0-_9$SNxun!x^F!NI5cz-D<8?J)HO8BM@nQiYmly< zY7iIq_V$31CE!VBYGRTyF}2y~r=M|;fs%5zGsX+JE{~|GU7hgEKpGemqYf+>AP!x< zd91Y=Eof+%iA(*dytr7W)DQ@P1R(GOznUo4=K(=wrB&h5(h{)NA5muk_X`NVtDuSi z?jwL6Q%g&oT8A$9a#>5>8z*0*JeuY8JGL)2FJJxy8Ve<5T6}ywNMshlcR<-_xBL#{ z;s;*m9VHD9^x6A9!Mor(!m&I1!}=KnA3UUqd8<4jg$oJmk_dRPunA^-hs-*=T8;O(I_|KMx`o zXb08;CNty(kQif9+`-+CH!&?AJe-ny!peI6x+@``9V-RJ_F!)7aJ|er5@%42|elXGs>QGY^W=>A@e3VaLWh_YV{+y7*;#J4Qn5>VMuM8Ka zspJwcC4y!i&ABWldtwLq>I~S^l$4Z!I#8!8BO@b`Oq=I4VGq=m)w*xk{KosJ!zoGZ zs7lL;YPTavkw$tTz1P^Afj$7(q;o5S^!!H#YJl;yv@QXS`H_8c0?3(G21Y0C?jSsYFMo}UfSF;g2;!4~^=|a0tZwpOOsGy~>G zeC*Lg`b;=Q9{8Exy1Moky2gOOVING(M@L6pK*z@CvgdrHa7cYvdF1ST zUG*UsSrsS>B^uIzu`2NNPrX8R>+#2*@7%!qtE!#?S)A&@13f?ukS46{82VC##~?B0 zDCKO{6E7~S>-|hVgY^EZ=#}D|t&6U%Ct^V>l^|yWE!a+53#cIZJ+pm|u%E0c=L z0#&gEGTiAvCk4r4gtqPl0Ya016Bzq#ArL44Yj_7}vta(f)G`~&vjoMb(-z|T^<6Go zd{Y&WO#(apGUz8*+1W{%XLdnnY-+WYTUakogSWiA+@IMcDJ9ik&sJ{SoAT4sVy0QDCi+#W^GAed?Io-vH#*`|l?~vk0*}VZwaf{?>nP-Eijg2HwWx&&oO-x>t zo6f^yyeLjBjEn1lyqs2{@zr?M3n5>SLS!puNtI3(%~X%y z9lbBiJ?nYq{H?~`(}W6WbCY#PR?FSnP>O+U>E~E;I$RkjPOtmYO=9|M0d_v`$pfL( zxs>x@WOhky4q|&DxJIyCHHa2YPj}ySYC1SFnOa$KI&Ce+22cI|(E@Zdev>{Yibe?N zAnG_iB+tw4vfr7D`H%MX`}b4;+1zphj~{mfp9y%j{y{-;Pp$nAp7WL(b{*~Ye*@A{ zab+cZw)UCgN5(QRTH&_{Quc(1N@WzWRhWR#3X&X9Q(JMzhH_7P$> zmiJ7!Pf6gqPX#K{evqtCG(r#)5Bwvx+E;1;cG+-Nqn59NO@6j~4v-AIKh^QQfp85g z2*IVRwH5M46X+kxSLCvZESY-mIdJa zlmW4wE{6cq;P()mck#_U#8l`a;DL_7oPm5z4L4e9B+zxsabx_Mi{V7kt6k7>via0` zpfcfC6Xd`do10yLX$C^f@Y>Mfcv;{;3Y`7v2X-)9DNr(jdQ-i%BBQv`wxbZ zadCjWbm=47!^6Wj8_+Lmk0Y|Pm$!Z=0fm*5hi9xUtYLk46Bjuj)+Cw?uH8pb<%$0G z<;4`JsRUU&;Ck)hn-IYi!LdN?0Lrql6E{a%dH%C1E0Ao$9+WrOLFy`0&c%m_T~<;O z&t`HePVSyp-EJ-Z^PI5@U4_{exlvGO8P24NcHlpbSNz932EjI{d{EB0+2B5j! zB4p7j1;QU0KPcM5X>omUKqcRMjm5^jVQZU~dXOtPIGCL0pca&N#)hCjfZC-Rq<0_4 zcx|@t-4|cwFLn<*#@=ucQ}60--8;6oXDf?~H?NMaf)U$qGn-IUOVjTkA0=tU7EG;m zbTS~4io=f}1oN*r?=4+hzv2aV#$`QI2K;{T3G-h?61GwnBPB6Pn!gJhDvUXKqa2#y zmokoZ8~|74F{z9Kb-T3GrJjGs1Reu|XcC9jBo%5Gh{bRwpv*@A;7s6g#6g>VqweB! z-1rWf7|#=n?8-`22o|9AHo@i|E1VKn@VAB(TUbw&HsNgqieAWoG@2E5z`3MT+N$JqLiF~yt!%Te#9ZU@-AAN;

8wF2?V!R z$&wj`k~v*m3_S48BY(61gW9{>={v~wK%o)VOp^osDp0}OY6rp-#|U^9AMCn=8Vy^Z zGn6G6Jacqx42eSa0j+$i;hlCiZt^73)#}^343K95u{(mzvOli%$Hn1n#oChBQc@>% zHuI(lk*;6?iOjP`6yD|K_Q7P@Hpn0FGXQnYyA|e{_eNdI9XH<+vU&^^+(=4HtcN3L zFEgo^hz#aLu$R&)=iE=Yv%APN;bYPh~^cSi_RO`1GSI6}}~ z3L-vC*z+^%&x`<>kKvH-?Id+IHB1VR({1VmF#|C5^D4Xc&?~e zX8>ruF|o19dH>k1TfG+Yg&#HOO=~~`{T*i}E!gE;@G^5fZ>=+~@;Oh_=e03M!5oa$ z_4P;PYh7n;TOO0Q7rHd_5N!JiHrp;R{50t)cRl3)U+tZDIM)B)_cduNNP0qd&e!`JU(J{G6ZndOe@d z$7|5*yz@)WmT8}#AD1mJ@whEa<5{3)Idf*Ng6oSgjNc7KrAniH#B1+_G*W_IO))IM z!x+?25rgF)lV(KCMY zV7l)P9CD`5HrBxw9AVHS< z@bsUK7U5@6C}_bn^{cyEBUOuokf!rp!?_twU>J|b2I{(N#Fmx&6?W3l@WTH(cnh1y zkv6l?EuMm9GsAEBoRXr29i^R?OtA+>(6w&^zQ_9$JDV_M%ad%eZ+;8QI1 z@+H}*s~~YnTqHVA{jLxmt&VgLHvtZXdtB$D8tY)XJkSUGPQT{z`1ZC2aWnUcrBv8w z<+(5$J|$j-OINq=5o#fn+ZlI>gHba4x!&3`{ZwV;lIv8{(*BeTl#XzYYA;#7Vn5gZ zRZEXafLSs{ozsIF;R1d;Z$Jd}UrlS5xOKD-52GL_$YieFngT~Nwi*MvR|e~M<4~ZR zcO!W!Ng{z~xAhAJ@vhaOMcI(ysI`w zaQB`mtfN3MM<>ZhlC_vK>1VbNL`-oys6Gl?Cb4%(Y0SI$NYp5 z^$LWbv-aad|Lsg?*gbGU4xDff{ET4-S9maW90*a$r)p83RpzQjaS`QX_i*dO`UhsS zhdWdI!`zYe81(F1ian*Fo9yS0@q8D*HQ1P()EUMTrk+;cL8Hl$eNi6kP}Q$oSKwW6 zF2sJf<*iHKi3aPA`YvMlL^iWWK&A)*m5`{QAVYKW);F-s6VEfI?obR4^|#3Z1t%`m9J=f3>WiI}m48G9t~ zIuK-HX%eaM#3``%C7U0j@7Wq_*7Q#ns|i zjZw)0?D=dW+eX^@txac9lq9-%An1^woSdnLKy59OG-?2IXyvf0tE-1{{MlDPb^g5^ z!qUL%Y_rrE_ZaS0IZad;8*Rqee_#8BlbwC8HHV1!Su#K|*p&AbSLGiv)xR8HD>L$$ zL-j8=A74&pW~1t3=lSSoE(DhH>33#PxmkmjojVcJdpUjVNO_vBbAt4#)~$;-*cb0G z($IvL>UfG9n47J$&P5H zrKQz7((m1CXj*~#MA|md>auN4y)Ge9E%nOWx6+o_G)6b zM}J@|i6d0?uXWEC$66K&oQJixPrWj&a~E@Rat~_AbD1@t98!b7-^Zt+qcG$9@w5Lk zDWdv@_IDlbErmaRP-<2ZZV?rbBT;3ip`@IzED5+FQwy}isZ;Xfdf9EGgvA>9V!bCl z&OaumHbr{Ab(9(CC`?l2)JexV*?2oo=NtXY!+rbni}eMBmW5cN`dWf2fn>nMtyPrw zF!onf%a=RTTGG`+MpVrA#FgE}=tq`2w_331IwI*axYa+bibD~*1z-9sat!1nwzXFc z3`k3YMRWVxW$CfWCyH(1I#b*DxM{>MYic4>6T;p**w;7o>zB^!%XK_PawYbhrnIdG z4-vc8oU*+&v|v(Im*GXtA}q{8>?%kwsJFcST8*7XLQId4&p4cq+~}VrIR&9I7kpdY zsNh_TJX43#j&kyAt(;6%F+pzbQJgd8r!E6+UdUUYsHO!s5T6Z2c~Nrp533PGop64;7|`y zsA_QW!~6H5LQ=FlN7-!yE}cBE&QNjRr^AO#QstwHS8QtTSCoGeCwYmya@MxL8Fd{Y z`4u4cp%B^H_U-Z(<~^KRAunWd9F}&vwLEhwWs@#zUb)Kn9iFYCKto+pniv9uZZj1@4<#79P)%v zoSqtH==#{e-|N}hYzEx+qo zx8hpZ?X}iP2K1Bo>hS7_@c9HrZtTFsXPuYaqBHdVAJM?X7P_Ds>Z@;Q6L-Xz6n z-M3cVxCJ;_bc~QI zD(ewtWLZxflsY^qal)f4&N=@r*WsQ})umu|!r=2fRMmfXI9~y3Y;kT|$eHv%?fC?) z$nX}(Kej*XbSdMi=kYyHb3q_V)73r}{!lShy+7OPWM}GY#Rn@$uE3{H zw@q4@4yYW;JJeItFO~9T+oG6*MP|}lM=2-w?KEb%Ym3g@ivYd6lz=m<| zvkE**)63VF^Zwx3ocKKOwX1|NhkH&$kvm)QN8k}#$Bp|K82p*${lsGt{>S40Mp&x4 z|Ng}UU(pXEasW3WyGSh_A#l@t=5Klp%09q&sYyOz@;qIJqhh*-;L@ep`>D-dgX2Z8W`B;<<;~Yg zy@aGB8JRCs%<*d?CfvrdZqqpxp7rteUK+32R!>w;klPc$JC4MknP~#{W<#lV?8%VW znp-l9MC>6v$JdA>!k_anwhlzQ_7e9I)Fi+hZ4rz)BVj8G?fKBHeiZFgi*9G={BHW5 zwWi+x8>*XCaWV0P`s~kQwtZbWTG=OO1aH~f2i8}*FXacm$o&%Lb9TIMW6cc|;*mcz zx*6%>u9~KE$z*|d8$dgQ$t(wd6vghpmnBM%Z)3J!s=?w>tkAt`wSi%sC!NvjG)|6C z%`)R$g-xhzlW>;6TcoRBPS^G{U3)jr(bn&*bbe^SuTHIa2SdS8^NP|>)7jY*kskHW z-($VUD5BS@gXXS8`4N1PiK!DuJZ6aLRZs{?B@>eH{rZeTb&`)7HYUB47kvT`$vh_N z9`uQp9!uZbn^L=xUffGjY*BJVBnAM+gb`tx$BZ>~*GOT_c)dtqJ%0a;?LU3p%1YF3 z05CR`v-WgT^gcpi9hVE{3*T6ZN>WIt5eyfZ=1pVkDD6*yvSbo6(Q|mRR^{xJoVk!v zLAFL;7tT1PUk*$+73N?m8!dZ6kbhR)BBasa+@7NGWJ7;tQ1v!U$^gX;>OyC2{~9d6 z<3K0x^>5S!$`fLbBeOM7*wA<7(-~QdXd^wSLO(x>HL3cM1oIaCXN)2R?gO>&H-262 z+8&q5OQmm&{UZumd&Gk{G!jv;38g#9!?RClDjfeC6OUnlahXV!mZ+#vTeexULj?+6 zYRMNQL)Mv)HmM^v7SOV7sTGmUhm<#^&&4Vyi!Lubt!%(P7)N*6^sK$o zb+zU1n3$tQxoV;x$~l-2x+b8N0b~>Hs50wH8f+1)0S+Du0oZ&ZK#3y@6$wX`W8S3G z6`sQga#?d}c;Od{B6WPr*^wFBOdhKzN|~Scbe~-nsA{@B+lsvw^^eE>Z^dxDd*hdzE)f>MD--m$SBIcF9a&o?74=? zyjbECgvqU`DQdo_M;82OsWB>1rNQzN0l=pPaXEsO1O`P_Ox$Z`=JsIsGgp*c@Fmlc zK!BjyDjqAfyK&>WkVE1`Md#dPIHvxft`UIlq)@lm?0L1X(u`AUV9Brp19vbIkR;^y z2P>NzXDsXE4c2^5SwV5(A!tnQGCRPhqSAn}y~Yb^K7xC7qiTYB3Lr)MQBA5ojw93k zjoYZj;}a9*b}(-Ego4Vw`y*SJ=cY#%XZt1WTF+unRvpH7k;=fz%59|6l|ZRLRaflV zR@9M#=&3B{O>7sqam(<;wA$iy4&(+9zfe1HB$lNC=@o)|yqr;ej>VTsKL`A4L*C7G z%%5-|u<7vY!d@(XY523>e4^|8j%*WbIFN>ZTW`G5;+q=l!%lR7u|H1unB-BxYqG%#@J^j(fFvc#&gLn6?+%=ISo zX+#7`zo-$Nmn<|9h1&Rt=8Ig{egtTrHpnpkp_-j`eB|f%G>sP^+wRYdtB4hhi=m7`QB%top!1 zxPgA&8sL}s8Jo@`DP^~vd!}qky}LZ9aZS;#Q?h%68VYWWzn<@O3qSDF;a792Q2jV` zNBb7~`ZDl9e|^f(Y&1t6|A|{R*nwd_KD-AUFL?>g3*Y<|uWZ(sck@1z&}k+Sr-i`= zYHjT{^CotSC_X4fK|T+Z!RUOgmLmOdyQQwKF8G7D<|e-X4~??1tfsQ^!raT_dJ7fW zxBcNP3KMZ&g02TXWTIj;k73z6kjV@TxKdxgHgA0S%FKskZK&L_&3SsiX>Cj~_0`Y5 z$p`^&+2Id2$fsgg%Fds9i`YnmB8w`+{7g_srcnoMS12dxVRHk?CL)3nWz>rxHt|vt zAcdq~dQku{b@{OafTjNJDOZ6O2FMX+6k=oY5s{@d-Fb~Yt~Uv;IMj8y^4|iE7Mz-H z|9ShNMyQM`utEgM8DWnFC6&{)<%~_w?LKRDR5a;DU0$O2gf~i2OIi5w{sm^S<61$K z{n|LT#LG5dq{nKdqDCg4W$fqABt*Y!>_VzK%9-+Cw_x3OpD_sO3keAd$~G+b&bU^h zo~*iMPbCSKg)PptYuA{Vm~eq?uFdrg4bW@ODacqh-iGT(QLHNbq=9cn#%R23xAWxC zO@QqF{>7U149=?f2h+IT5YBlu6EH^m+@?DOg1;IE=BRPOH()A!`L!kUpUVe#c zbV#iS7iv?t;Wv)ss0e&7xP?1?6*PkayFn5^=E;*w)zyz7(+6uw9y^wFAwu9t%g8=Q ztJ$$&I08tsVns+5bfep|Jnf~W`5*@>J3j>i8U?Y+Qqp|8EXsxILYi921M%2_ZyCCt zn|mSUFw)WKC;B=-ny;#=qT|$pl}0JDWRf&oYVLA8U!8^_p@A~Q3t57#rsrd^Cpcp3Ir`nBQ^ho$bk6YGB^3>6A}AbxLnOZ{|Pb@}%bO68G>B z#tfJ-Wz07$QypExn#1}8@FV!*PD5}OakBfKW#WG2O2CxX|DD})?AbjR*Pe>`2EL=l zuq$HWv$wHn&mOFSq|`-VhzJYQ!qfTj!DN&9B=oUNszhY?N19Wgf?f1rn*|E%cn}s) zZQtXu#;7Y;oWYQa`KaPjT~iauivV%CE-ES_0=%sWaA5kavTzXEvCWkmx5iWaQo3Fw z+-{~dA}%uncwlqf8LKtmyYTn&dM@l32d@`g3%B+e9sVbGCsafD#t$Wu{V3Pc61%7z zb0ZQfvg~P6G)|XT{bokHmM0o^pdJQk(P3l5FPO`DaK)s$>;(BoUNYsfx3{%P4d40yzi5_1n;S)AoE@MSLt0 z1nu?lieQcx4Sj!s}=mTHaKnr&nH-QE&zXR_WV#$(NIyL z5(ZWWKp*YcpAZhp-)+R|vAlak`oIC}|1{qZ4&+oWx0 zK7bhz?8n|yrh=!u@AO1NS`CTjgh!Ft=is%`U;6ACQVV4lO_*cR9k zZMSf^DFzyoWs($ziOs3QgPI@e>v>L}{sR@zq&lLlXm;fIXZo;HW?Eob!3-60V%X^V z^@z8wa=ljR7_&2VG6$e5WC2v9pz!$8rMma;r}?dy=D{}CTu8+e0ienY+y3p7LrrxH zskODWckXP#Ds|#b6AvV@Z!ct`!Ph#CVhu(cb_AH#VJ-n;FUxgaA^F%z0{p#>P~qGb zMPKRU2PPy)+1dGmw4ui*SnR%h?yVJ}?d@_5oRe@6YHMmr%Y1=1W&$#X`!YeLAzQI+ zthaHvLN5z>7uaf|#_>Vxv2l#~5Tn# zeS%YPoKy!M6;;(nnA`xFYR|PaQQlRfwxJrB7z}11xVvGE+r#!N0OvPYTyf}tWAzB` z{KeeLmF+U@5wPn?19HQm%4%(4L9=IS422IcJAp3i?N({7?Q+_p5kKAkZg-`SxLeue z;?<^C@J4Nd@@0WiV`K!XyHEFvxfR*=cUFZjHzx-~Yo;Ao*J-uOqLii?7yqLw-wR7ewW?a%w0cYno3;@Hun?F5D* z=jq}|p=m>1OU#vt`X!2UQ^QShQYsD()9^DBA~{OL$dMJ(K1#(x^|=~C|NP|RH~G%uDS%LXeWvDI0uMe@5ciPE8k7dKhx*E@B`prb$9__1ZAM-H|33K1*880_m zS~#>2=VfI6&a16e<$sHQOhkJPo%47#$dkS>qwSf$5@w(Xb(&+pXfD2MZ=jqRMJ+j0 z6hpCzO2Ld@?B2rKJIv&0!)9t}<~0F)N2Ex>5kyDst%RA7-uh?19={LGGSYz1=a^3l zq*2^KS<^-azsc%CV)T-J{)_bZ2`CwIPGMb7u|m%SamnqbD#x>_98Hn3Tn$TJxpilw zNbCR#ih$`LxzS6Ow#(_m+Clug#a+IC_*yM~E`#E>?P}WP@+F}csnKnUgYoL&%kzF8 zJC$cIa&X9Pd>4L*{0d)Ky6c%<+Y$BcQVjZtRu>S>lE^Q5?9w$hJIxub;)0k+Sgo*~ z_&A#1P;}DVET>no|8$&aks?xeKKXh5r4F+?j{Fj#Eoz?$qjwpNe(0_SP>TB956#Y` z9*%sp+b7g6SvozMqLYf8mvP~~WpZ8F{6Y1nj03gAV|VxiQx6_G@!czM?VS(oqEc)= zmH^&({dO0k+Acr8C|Oi3=`7!?!P(nLG|}N9g_Xue?w-_c+qN}fiVmTuo8@1fe ze`lzvV$-Hz4f+)r{Pv^Gjqb}f0-}d`E}C5R53?DXPTZQ!Chae82VzQ= zMo}*zCv_rPEoif+fB2|=|E}J#&m%I=Pfz&r@t6N#q{w7rZM^F22j@^zYtQkw(uQ$Z_qWIx-Z6d@cvz*6+ z+9)FMcV&YB&7BsfT}ESv>klvIMz1!YvU%T7XWDY!S*3eGJM&&Am^f_Dul?@-ie;xq!CdMQ= zXvdxFqyRhuM{f;>s=vjnc65q-al2xatW1jkJwj*{Kb?UZqx7Gpy|to1GdMU+9&0~_ zHJt<$tka{T9!n!;^*d(uWsY%52s;Kh=LUvONhXN@>@{4NPLTXc`OacB&zLeXHK$n_ zr6;z=a0|JqOpzt&W#K3$4dEY_FIp5S@}K3*9U2?dTQB;~*)&DlTXsMl@& zt&?-~j3G`!r~Jm&#L%t26fbTIW5WZy`d-P^m+6KgV-b6Q+~g^HX>E0QO@q0H(V z>c-&>1;qgl!n-q(-u=4_`KFERC%ya8)pwu98zw7xH8`lS9-!Dq1~(}k92lOoy%W6w zzgW9^%^U9F4gG?>cWsw$Tb7M;p&;=c@k2}d-oQ-M>T^QGQUlRsl;!ie8s&Q*@saLO zBle45P>Q+Gx&LW?OU+1Y${_yQgM9Zl2Yfq>ix1dMz7E#Qq`R<(eDN_?VsX8iaBgsB$k0f{-t(@0G6o;vbwo)rDX&t?`0f?J}A7pOst>pS&VKfu{Re1P+ZNPo2& zu-p8y=M=Y*jBmB1%C*u@_Uh@nZ;=&>F3?taaP}v;+f~euv63gh-6b6212-C72!EzQ zuT=`$MhA7Fk*j6c>~rNi|NPCf6>jO#084R&Y3^s}R;p-_oJ-2dzlWGMJxH=EpV}y^ zrKYd<;#mM|J1rG?zwv9XK>{Ot*oBv+PfT_JLL8$H*KZx+(iB| zY3(J~^@ zkSFDypPH(3B~2VWHg7`w89EFpJU6cfkx0QROR0vI<3ViQF(ryI0o;jHqu&j1jA~n|S?3yxK@@#sqqE)A^B&yU4H8@R$!WQ3U^{=eN4{!I!DE&ON4gYh@ z9do@-J8^9ehxzNO$tT+_9w^oo%{HriW-G52_Pf8fsQD@D(_>F&zs38kESP8SKE0oN zm_GEV@xH2f$RFRG%kw+w#cJ{dhoiq~2VAB24y48D+bS6*b+fxnNK{D-|9eJfU43A> z(R+H8bt0REJ3fNQuy{`>p_do2RGF`W$F`>*2vKAJh7mtXZ)PZuZt#rX7ZDjd=}w?6 zpmAxpIbaA5l=HVEbTRd73_rB+asQ)TTFe!MznU#(Q&Q=+xomN=l=8iB?sNFWw3%^4 z_0Bam?>`(a5nYXhZjL}E?GnQaI!50HG3_V4Uqi1xE*cu4IeYG1Kj|SpyN0hz?8M2# zlSx+QIkVwQ>xtdQjL)TPcYmav6MuT=;T}e&v*F;DeQ<9JG&JmK=_2Q=m2M!pIW);` z373bB;7~tH!@DEBI=1wNhD$tqqF)c>7stLR)Q++K_vn56c*rzVu3TKe`Bk{J4d!C#D9LwT6D==h%QI zGJxCeV&lF0H$zQkmDtt=tR`KI($TxS)F=Ga6HR?nf2}RAxos+XCeIJ_)TB$MY-koFcvG2p^fjfKzO^1mmJy5Gx9yPd}{WJZo19-&e2x!XW^d(Ih2Sfv@?itrO1{ zk55hEEWAhjdRwjqdZf{wPvbUU={QF*TivR~NytNxDq-{}`BnqKg6blh2md+pGjf|-=^%?PF$97uOv~_dKHe`<46`!I9F@d0t(^9jw+lEhqI!~% zlQY;+XhKSv=;~g);A_!*JpgJZ;RgJtqBAi$=oWw+=H?*}4-a@cBOyit%MLcB zzV=!mq7S%z108b@VptFdVq;_bYxEb0>70OZR>b8QS4U*s><+2iGBXnddVH|BS8s*; zeD5>xAGx?{N|xp%oJ0T7)lKB;rtUt3vO6`R&Y!0&3FNW0P}%o)gKSTAy& zCbg=)*OGw|6bDHSsPJ$lC}-IANAa4h1+5l2*)V?VU;P?2-@lt7z98{%J8WdZj#3HA z+-?gmakk&JYZnS*z|9+(n1rKYV^z+ZH_*{#aU2%+LQx3cI1HcPDl1>3tp)TGJj5tB zoe>hMdOn(Ed>_U8qFcmV>R^=Cfl`D^T#-S~`>J^};Aj zzkd%$tv6~MV5pej*y@4ij&HMl)Q-<*1k*_KFqA(f2t-#kk<+dFYwtJ=;*`@%l?ugH%C!I z|37T!C~YNX#UY*pS8Dj_MFMEOm7GfGV5P!VDgZOJ$0n5zA3ySCLBfM*@)1RVw^org z5rU`#Z8Dn!2Oni0Rzko7eLUlmeM|sRN1^LM(AC$vg$8wT`q}eQrfA!R;FX`B9~v=` ztXgL_dBwwZ2;rb6vhbw+Z^>b4R+um%_=uEDTO!{w{<7WFs(!;x^jsvw;%NQJ2f?jbfuF>ZxJ!kw(WgGliL%na4@QYzSZ4R6mD?AmJx44&Q*`&XXFlA_Tjp z!gtN7Z3$75418m}yu1yCm8g0l3TqVQhUAA2-SSRx)f9DP`a>FCoCQ6N^y7tYjD}XH zSsr^#byvA5FocLeDn`gGIjAA1vuolH!TrR@-0WVv`K z=^wx-20z#q=B-W717Q9=ud6B`AYkZj?L#~3@bfi)+F&s0A??e@RepD_*uHkdrq%BU z^=(6LObfDHr@CJm-)9N0kZlVxzijBx;CJbceinU09eI(u`%8?NC8xR> zddRCU#aZ+UWcJCg4`6{T217<>Nfp{th$nX7mDj~e2(9#Ngp0B{ltaz^O-4p@;V5*MEzC&m zq8&n1e3%G zK9lOLkyZj&CJ47jb%MW2QjNl}#OrWq?)P_FjQUh7sP}z-D26VQ986xg#O()`lCzoo zFo^vbrv0c{PM=0vN`GrnuOT2HTlOrxR@t3kAW;H&|Cq;ld3kM;3H>$HI}GMc%vkTC zfJhhSqTdin&(8c~zTWY}bC#8H3z&8$nA7;w7T+_!W1ZvDe^8hwz;CLgI2U+;fq~y~ z%pZ!7V8?HCyy8$lu3wOi`H2sCz}uK4LDPU!0XL8&;n1!}LrOrqX+m4@Y0pC2@ucQ8 zzCf_))dCwF>&evcJpTnuF`)uChsJuhq^72#uVTk5wQ&?5MUj!Uw${g7#A8(CNsYH8 z`NliSJ#!%|LkWf1rQq6^&sf(n&wr|~kGm?Rf6;*%lH_*u-N72pIkhlkVF^?@doWo!{S2cI_v^0YBq0i7QFh2 z9|_L#Qe!|^kj4FtjNJ5iiU|lJP*jKWkr{*%y^QV8M4I!Dcd?M`umx&GGS9r}t2kAH za_lA)tgu5uM(Zikrn|ZR{Dki*-w|q4Qc-FM8jdwPMVTcQf?7L&Ikeh zoe9mrSg*G}p<>IP*YD8WX0An)k?uiW*t+9CuTEx2@MvZ&#A5kzBxpI(O?$ZVw7BEA1C zkgv9G{?C@J_o|R8Clr4>&j6y2S~x3Z*=lL)|05I#oNzMP=wDaa{r_yrqo7z%B`bMO zl|0Y>KO&0^F6>;nhs>Kj|Ii*v0GTfe*!taX<(oqTpFGibCl@s+wtihOs%#XvHY~G) zmHwbbsKmRX)k@7j-{*?bMk$IOIj3UR+vF+kUCdvB?rb~nHD#!E9G%TJB41e9*IeRh z+O+{H?)nw!J05>%Xm~ibfpiTL7yNjg)ZNrlZbzhQ?n_ux)ZAd&bXS{1wR33|C9jAS z0o%xx0Sb!mcH{;*C!~gw4r0?k8e+vKm9{tz2M+*ni&fmzE+_qz7T**o) KNT!Kjx%Y2R5rcsM literal 0 HcmV?d00001 From 298730a3382c18dc49be958cb4f54e64bdb0bfb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 15:00:08 +0200 Subject: [PATCH 012/870] Fix image URLs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/internals/model.md | 2 +- docs/content/otel/names.md | 2 +- docs/content/otel/otlp.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/content/internals/model.md b/docs/content/internals/model.md index d2dd5148a..1f222c3e4 100644 --- a/docs/content/internals/model.md +++ b/docs/content/internals/model.md @@ -5,7 +5,7 @@ weight: 1 The illustration below shows the internal architecture of the Prometheus Java client library. -![Internal architecture of the Prometheus Java client library](/images/model.png) +![Internal architecture of the Prometheus Java client library](/client_java/images/model.png) prometheus-metrics-core ----------------------- diff --git a/docs/content/otel/names.md b/docs/content/otel/names.md index 2cd892c3c..3d25dd3d4 100644 --- a/docs/content/otel/names.md +++ b/docs/content/otel/names.md @@ -7,7 +7,7 @@ OpenTelemetry naming conventions are different from Prometheus naming convention The goal is, if you set up a pipeline as illustrated below, you will see the same metric names in the Prometheus server as if you had exposed Prometheus metrics directly. -![Image of a with the Prometheus client library pushing metrics to an OpenTelemetry collector](/images/otel-pipeline.png) +![Image of a with the Prometheus client library pushing metrics to an OpenTelemetry collector](/client_java/images/otel-pipeline.png) The main steps when converting OpenTelemetry metric names to Prometheus metric names are: diff --git a/docs/content/otel/otlp.md b/docs/content/otel/otlp.md index d81ed822e..ea39f178f 100644 --- a/docs/content/otel/otlp.md +++ b/docs/content/otel/otlp.md @@ -5,7 +5,7 @@ weight: 1 The Prometheus Java client library allows you to push metrics to an OpenTelemetry endpoint using the OTLP protocol. -![Image of a with the Prometheus client library pushing metrics to an OpenTelemetry collector](/images/otel-pipeline.png) +![Image of a with the Prometheus client library pushing metrics to an OpenTelemetry collector](/client_java/images/otel-pipeline.png) To implement this, you need to include `prometheus-metrics-exporter` as a dependency From 8240ff93d6b6034b85163883468298ec8b0a0a76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 27 Sep 2023 17:36:31 +0200 Subject: [PATCH 013/870] Update docs start page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/_index.md | 69 ++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 40 deletions(-) diff --git a/docs/content/_index.md b/docs/content/_index.md index 2fda09ae1..7ccbab1f3 100644 --- a/docs/content/_index.md +++ b/docs/content/_index.md @@ -2,43 +2,32 @@ title: "client_java" --- -This is the documentation for the upcoming [Prometheus client_java 1.0.0](https://github.com/prometheus/client_java) release. - -These docs are currently in progress. Source code is on the [1.0.x](https://github.com/prometheus/client_java/tree/1.0.x) feature branch. - -Target for the release is end of September 2023. - - +This is the documentation for the [Prometheus Java client library](https://github.com/prometheus/client_java) verion 1.0.0 and higher. + +The main new features of the 1.0.0 release are: + +* **Prometheus native histograms:** Support for the new Prometheus histogram type. +* **OpenTelemetry Exporter:** Push metrics in OTLP format to an OpenTelemetry endpoint. +* **Runtime configuration:** Configure metrics, exporters, and more at runtime using a properties file or system properties. + +**Documentation and Examples** + +In addition to this documentation page we created an [examples/](https://github.com/prometheus/client_java/tree/main/examples) directory with end-to-end scenarios (Docker compose) illustrating new features. + +**Performance Benchmarks** + +Initial performance benchmarks are looking great: All core metric types (including native histograms) allow concurrent updates, so if you instrument a performance critical Web service that utilizes all processor cores in parallel the metrics library will not introduce additional synchronization. See Javadoc comments in [benchmarks/](https://github.com/prometheus/client_java/tree/main/benchmarks) for benchmark results. + +**More Info** + +The Grafana Labs Blog has a post [Introducing the Prometheus Java Client 1.0.0](https://grafana.com/blog/2023/09/27/introducing-the-prometheus-java-client-1.0.0/) with a good overview of the release. + +There will also be a presentation at the [PromCon](https://promcon.io) conference on 29 Sep 2023. Tune in to the live stream on [https://promcon.io](https://promcon.io) or watch the recording on YouTube. + +**For users of the 0.16.0 version and older** + +Updating to the 1.0.0 version is a breaking change. However, there's a `prometheus-metrics-simpleclient-bridge` module available that allows you to use your existing simpleclient 0.16.0 metrics with the new 1.0.0 `PrometheusRegistry`. So you don't need to upgrade your instrumentation code, you can keep using your existing metrics. See the [compatibility > simpleclient](https://prometheus.github.io/client_java/migration/simpleclient/) in the menu on the left. + +The pre 1.0.0 code is now maintained on the [simpleclient](https://github.com/prometheus/client_java/tree/simpleclient) feature branch. + +Not all `simpleclient` modules from 0.16.0 are included in the initial 1.0.0 release. Over the next couple of weeks we will work on porting the remaining modules, starting with `pushgateway` and the Servlet filter. From 2f1fe6599d9cf57e6750b4920bf392fa145c5468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Sat, 30 Sep 2023 19:06:39 +0200 Subject: [PATCH 014/870] Minor update to performance.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/getting-started/performance.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/content/getting-started/performance.md b/docs/content/getting-started/performance.md index de68e3d11..ec4423473 100644 --- a/docs/content/getting-started/performance.md +++ b/docs/content/getting-started/performance.md @@ -51,7 +51,19 @@ In performance critical applications we recommend to use either the classic repr You can either configure this in code for each histogram by calling [classicOnly()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#classicOnly()) or [nativeOnly()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeOnly()), or you use the corresponding [config options](http://localhost:1313/config/config/). -One way to do this via global config for all histograms is to add a file `prometheus.properties` to your classpath with the following line: +One way to do this is with system properties in the command line when you start your application + +```sh +java -Dio.prometheus.metrics.histogramClassicOnly=true my-app.jar +``` + +or + +```sh +java -Dio.prometheus.metrics.histogramNativeOnly=true my-app.jar +``` + +If you don't want to add a command line parameter every time you start your application, you can add a `prometheus.properties` file to your classpath (put it in the `src/main/resources/` directory so that it gets packed into your JAR file). The `prometheus.properties` file should have the following line: ```properties io.prometheus.metrics.histogramClassicOnly=true @@ -63,5 +75,4 @@ or io.prometheus.metrics.histogramNativeOnly=true ``` -Alternatively, you pass the parameter `-Dio.prometheus.metrics.histogramNativeOnly=true` on application startup, or define an external configuration file at runtime as described in the [config section](../../config/config). -Future releases will add support for configuration via environment variable`IO_PROMETHEUS_METRICS_HISTOGRAM_NATIVE_ONLY=true`. +Future releases will add more configuration options, like support for configuration via environment variable`IO_PROMETHEUS_METRICS_HISTOGRAM_NATIVE_ONLY=true`. From 1bce0ebc6093717be083d6883a6b12a70aafee1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Sat, 30 Sep 2023 19:56:24 +0200 Subject: [PATCH 015/870] Add docs on JVM metrics --- docs/content/config/_index.md | 2 +- docs/content/instrumentation/_index.md | 4 + docs/content/instrumentation/jvm.md | 263 +++++++++++++++++++++++++ docs/content/internals/_index.md | 2 +- docs/content/migration/_index.md | 2 +- docs/content/otel/_index.md | 2 +- 6 files changed, 271 insertions(+), 4 deletions(-) create mode 100644 docs/content/instrumentation/_index.md create mode 100644 docs/content/instrumentation/jvm.md diff --git a/docs/content/config/_index.md b/docs/content/config/_index.md index 15545d2a8..dc32223b0 100644 --- a/docs/content/config/_index.md +++ b/docs/content/config/_index.md @@ -1,4 +1,4 @@ --- title: Config -weight: 4 +weight: 5 --- diff --git a/docs/content/instrumentation/_index.md b/docs/content/instrumentation/_index.md new file mode 100644 index 000000000..3e255f9fe --- /dev/null +++ b/docs/content/instrumentation/_index.md @@ -0,0 +1,4 @@ +--- +title: Instrumentation +weight: 3 +--- diff --git a/docs/content/instrumentation/jvm.md b/docs/content/instrumentation/jvm.md new file mode 100644 index 000000000..4b6f90cc7 --- /dev/null +++ b/docs/content/instrumentation/jvm.md @@ -0,0 +1,263 @@ +--- +title: JVM +weight: 1 +--- + +The JVM instrumentation module provides a variety of out-of-the-box JVM and process metrics. To use it, add the following dependency: + +{{< tabs "uniqueid" >}} +{{< tab "Gradle" >}} +``` +implementation 'io.prometheus:prometheus-metrics-instrumentation-jvm:1.0.0' +``` +{{< /tab >}} +{{< tab "Maven" >}} +```xml + + io.prometheus + prometheus-metrics-instrumentation-jvm + 1.0.0 + +``` +{{< /tab >}} +{{< /tabs >}} + +Now, you can register the JVM metrics as follows: + +```java +JvmMetrics.builder().register(); +``` + +The line above will initialize all JVM metrics and register them with the default registry. If you want to register the metrics with a custom `PrometheusRegistry`, you can pass the registry as parameter to the `register()` call. + +The sections below describe the individual classes providing JVM metrics. If you don't want to register all JVM metrics, you can register each of these classes individually rather than using `JvmMetrics`. + +JVM Buffer Pool Metrics +----------------------- + +JVM buffer pool metrics are provided by the [JvmBufferPoolMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetrics.html) class. The data is coming from the [BufferPoolMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/BufferPoolMXBean.html). Example metrics: + +``` +# HELP jvm_buffer_pool_capacity_bytes Bytes capacity of a given JVM buffer pool. +# TYPE jvm_buffer_pool_capacity_bytes gauge +jvm_buffer_pool_capacity_bytes{pool="direct"} 8192.0 +jvm_buffer_pool_capacity_bytes{pool="mapped"} 0.0 +# HELP jvm_buffer_pool_used_buffers Used buffers of a given JVM buffer pool. +# TYPE jvm_buffer_pool_used_buffers gauge +jvm_buffer_pool_used_buffers{pool="direct"} 1.0 +jvm_buffer_pool_used_buffers{pool="mapped"} 0.0 +# HELP jvm_buffer_pool_used_bytes Used bytes of a given JVM buffer pool. +# TYPE jvm_buffer_pool_used_bytes gauge +jvm_buffer_pool_used_bytes{pool="direct"} 8192.0 +jvm_buffer_pool_used_bytes{pool="mapped"} 0.0 +``` + +JVM Class Loading Metrics +------------------------- + +JVM class loading metrics are provided by the [JvmClassLoadingMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.html) class. The data is coming from the [ClassLoadingMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/ClassLoadingMXBean.html). Example metrics: + +``` +# HELP jvm_classes_currently_loaded The number of classes that are currently loaded in the JVM +# TYPE jvm_classes_currently_loaded gauge +jvm_classes_currently_loaded 1109.0 +# HELP jvm_classes_loaded_total The total number of classes that have been loaded since the JVM has started execution +# TYPE jvm_classes_loaded_total counter +jvm_classes_loaded_total 1109.0 +# HELP jvm_classes_unloaded_total The total number of classes that have been unloaded since the JVM has started execution +# TYPE jvm_classes_unloaded_total counter +jvm_classes_unloaded_total 0.0 +``` + +JVM Compilation Metrics +----------------------- + +JVM compilation metrics are provided by the [JvmCompilationMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetrics.html) class. The data is coming from the [CompilationMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/CompilationMXBean.html). Example metrics: + +``` +# HELP jvm_compilation_time_seconds_total The total time in seconds taken for HotSpot class compilation +# TYPE jvm_compilation_time_seconds_total counter +jvm_compilation_time_seconds_total 0.152 +``` + +JVM Garbage Collector Metrics +----------------------------- + +JVM garbage collector metrics are provided by the [JvmGarbageCollectorMetric](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetrics.html) class. The data is coming from the [GarbageCollectorMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/GarbageCollectorMXBean.html). Example metrics: + +``` +# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds. +# TYPE jvm_gc_collection_seconds summary +jvm_gc_collection_seconds_count{gc="PS MarkSweep"} 0 +jvm_gc_collection_seconds_sum{gc="PS MarkSweep"} 0.0 +jvm_gc_collection_seconds_count{gc="PS Scavenge"} 0 +jvm_gc_collection_seconds_sum{gc="PS Scavenge"} 0.0 +``` + +JVM Memory Metrics +------------------ + +JVM memory metrics are provided by the [JvmMemoryMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.html) class. The data is coming from the [MemoryMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/MemoryMXBean.html) and the [MemoryPoolMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html). Example metrics: + +``` +# HELP jvm_memory_committed_bytes Committed (bytes) of a given JVM memory area. +# TYPE jvm_memory_committed_bytes gauge +jvm_memory_committed_bytes{area="heap"} 4.98597888E8 +jvm_memory_committed_bytes{area="nonheap"} 1.1993088E7 +# HELP jvm_memory_init_bytes Initial bytes of a given JVM memory area. +# TYPE jvm_memory_init_bytes gauge +jvm_memory_init_bytes{area="heap"} 5.20093696E8 +jvm_memory_init_bytes{area="nonheap"} 2555904.0 +# HELP jvm_memory_max_bytes Max (bytes) of a given JVM memory area. +# TYPE jvm_memory_max_bytes gauge +jvm_memory_max_bytes{area="heap"} 7.38983936E9 +jvm_memory_max_bytes{area="nonheap"} -1.0 +# HELP jvm_memory_objects_pending_finalization The number of objects waiting in the finalizer queue. +# TYPE jvm_memory_objects_pending_finalization gauge +jvm_memory_objects_pending_finalization 0.0 +# HELP jvm_memory_pool_collection_committed_bytes Committed after last collection bytes of a given JVM memory pool. +# TYPE jvm_memory_pool_collection_committed_bytes gauge +jvm_memory_pool_collection_committed_bytes{pool="PS Eden Space"} 1.30023424E8 +jvm_memory_pool_collection_committed_bytes{pool="PS Old Gen"} 3.47078656E8 +jvm_memory_pool_collection_committed_bytes{pool="PS Survivor Space"} 2.1495808E7 +# HELP jvm_memory_pool_collection_init_bytes Initial after last collection bytes of a given JVM memory pool. +# TYPE jvm_memory_pool_collection_init_bytes gauge +jvm_memory_pool_collection_init_bytes{pool="PS Eden Space"} 1.30023424E8 +jvm_memory_pool_collection_init_bytes{pool="PS Old Gen"} 3.47078656E8 +jvm_memory_pool_collection_init_bytes{pool="PS Survivor Space"} 2.1495808E7 +# HELP jvm_memory_pool_collection_max_bytes Max bytes after last collection of a given JVM memory pool. +# TYPE jvm_memory_pool_collection_max_bytes gauge +jvm_memory_pool_collection_max_bytes{pool="PS Eden Space"} 2.727870464E9 +jvm_memory_pool_collection_max_bytes{pool="PS Old Gen"} 5.542248448E9 +jvm_memory_pool_collection_max_bytes{pool="PS Survivor Space"} 2.1495808E7 +# HELP jvm_memory_pool_collection_used_bytes Used bytes after last collection of a given JVM memory pool. +# TYPE jvm_memory_pool_collection_used_bytes gauge +jvm_memory_pool_collection_used_bytes{pool="PS Eden Space"} 0.0 +jvm_memory_pool_collection_used_bytes{pool="PS Old Gen"} 1249696.0 +jvm_memory_pool_collection_used_bytes{pool="PS Survivor Space"} 0.0 +# HELP jvm_memory_pool_committed_bytes Committed bytes of a given JVM memory pool. +# TYPE jvm_memory_pool_committed_bytes gauge +jvm_memory_pool_committed_bytes{pool="Code Cache"} 4128768.0 +jvm_memory_pool_committed_bytes{pool="Compressed Class Space"} 917504.0 +jvm_memory_pool_committed_bytes{pool="Metaspace"} 6946816.0 +jvm_memory_pool_committed_bytes{pool="PS Eden Space"} 1.30023424E8 +jvm_memory_pool_committed_bytes{pool="PS Old Gen"} 3.47078656E8 +jvm_memory_pool_committed_bytes{pool="PS Survivor Space"} 2.1495808E7 +# HELP jvm_memory_pool_init_bytes Initial bytes of a given JVM memory pool. +# TYPE jvm_memory_pool_init_bytes gauge +jvm_memory_pool_init_bytes{pool="Code Cache"} 2555904.0 +jvm_memory_pool_init_bytes{pool="Compressed Class Space"} 0.0 +jvm_memory_pool_init_bytes{pool="Metaspace"} 0.0 +jvm_memory_pool_init_bytes{pool="PS Eden Space"} 1.30023424E8 +jvm_memory_pool_init_bytes{pool="PS Old Gen"} 3.47078656E8 +jvm_memory_pool_init_bytes{pool="PS Survivor Space"} 2.1495808E7 +# HELP jvm_memory_pool_max_bytes Max bytes of a given JVM memory pool. +# TYPE jvm_memory_pool_max_bytes gauge +jvm_memory_pool_max_bytes{pool="Code Cache"} 2.5165824E8 +jvm_memory_pool_max_bytes{pool="Compressed Class Space"} 1.073741824E9 +jvm_memory_pool_max_bytes{pool="Metaspace"} -1.0 +jvm_memory_pool_max_bytes{pool="PS Eden Space"} 2.727870464E9 +jvm_memory_pool_max_bytes{pool="PS Old Gen"} 5.542248448E9 +jvm_memory_pool_max_bytes{pool="PS Survivor Space"} 2.1495808E7 +# HELP jvm_memory_pool_used_bytes Used bytes of a given JVM memory pool. +# TYPE jvm_memory_pool_used_bytes gauge +jvm_memory_pool_used_bytes{pool="Code Cache"} 4065472.0 +jvm_memory_pool_used_bytes{pool="Compressed Class Space"} 766680.0 +jvm_memory_pool_used_bytes{pool="Metaspace"} 6659432.0 +jvm_memory_pool_used_bytes{pool="PS Eden Space"} 7801536.0 +jvm_memory_pool_used_bytes{pool="PS Old Gen"} 1249696.0 +jvm_memory_pool_used_bytes{pool="PS Survivor Space"} 0.0 +# HELP jvm_memory_used_bytes Used bytes of a given JVM memory area. +# TYPE jvm_memory_used_bytes gauge +jvm_memory_used_bytes{area="heap"} 9051232.0 +jvm_memory_used_bytes{area="nonheap"} 1.1490688E7 +``` + +JVM Memory Pool Allocation Metrics +---------------------------------- + +JVM memory pool allocation metrics are provided by the [JvmMemoryPoolAllocationMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.html) class. The data is obtained by adding a [NotificationListener](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/javax/management/NotificationListener.html) to the [GarbageCollectorMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/GarbageCollectorMXBean.html). Example metrics: + +``` +# HELP jvm_memory_pool_allocated_bytes_total Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously. +# TYPE jvm_memory_pool_allocated_bytes_total counter +jvm_memory_pool_allocated_bytes_total{pool="Code Cache"} 4336448.0 +jvm_memory_pool_allocated_bytes_total{pool="Compressed Class Space"} 875016.0 +jvm_memory_pool_allocated_bytes_total{pool="Metaspace"} 7480456.0 +jvm_memory_pool_allocated_bytes_total{pool="PS Eden Space"} 1.79232824E8 +jvm_memory_pool_allocated_bytes_total{pool="PS Old Gen"} 1428888.0 +jvm_memory_pool_allocated_bytes_total{pool="PS Survivor Space"} 4115280.0 +``` + +JVM Runtime Info Metric +----------------------- + + +The JVM runtime info metric is provided by the [JvmRuntimeInfoMetric](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetric.html) class. The data is obtained via system properties and will not change throughout the lifetime of the application. Example metric: + +``` +# TYPE jvm_runtime info +# HELP jvm_runtime JVM runtime info +jvm_runtime_info{runtime="OpenJDK Runtime Environment",vendor="Oracle Corporation",version="1.8.0_382-b05"} 1 +``` + +JVM Thread Metrics +------------------ + +JVM thread metrics are provided by the [JvmThreadsMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.html) class. The data is coming from the [ThreadMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/ThreadMXBean.html). Example metrics: + +``` +# HELP jvm_threads_current Current thread count of a JVM +# TYPE jvm_threads_current gauge +jvm_threads_current 10.0 +# HELP jvm_threads_daemon Daemon thread count of a JVM +# TYPE jvm_threads_daemon gauge +jvm_threads_daemon 8.0 +# HELP jvm_threads_deadlocked Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers +# TYPE jvm_threads_deadlocked gauge +jvm_threads_deadlocked 0.0 +# HELP jvm_threads_deadlocked_monitor Cycles of JVM-threads that are in deadlock waiting to acquire object monitors +# TYPE jvm_threads_deadlocked_monitor gauge +jvm_threads_deadlocked_monitor 0.0 +# HELP jvm_threads_peak Peak thread count of a JVM +# TYPE jvm_threads_peak gauge +jvm_threads_peak 10.0 +# HELP jvm_threads_started_total Started thread count of a JVM +# TYPE jvm_threads_started_total counter +jvm_threads_started_total 10.0 +# HELP jvm_threads_state Current count of threads by state +# TYPE jvm_threads_state gauge +jvm_threads_state{state="BLOCKED"} 0.0 +jvm_threads_state{state="NEW"} 0.0 +jvm_threads_state{state="RUNNABLE"} 5.0 +jvm_threads_state{state="TERMINATED"} 0.0 +jvm_threads_state{state="TIMED_WAITING"} 2.0 +jvm_threads_state{state="UNKNOWN"} 0.0 +jvm_threads_state{state="WAITING"} 3.0 +``` + +Process Metrics +--------------- + +Process metrics are provided by the [ProcessMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.html) class. The data is coming from the [OperatingSystemMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/OperatingSystemMXBean.html), the [RuntimeMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/RuntimeMXBean.html), and from the `/proc/self/status` file on Linux. The metrics with prefix `process_` are not specific to Java, but should be provided by every Prometheus client library, see [Process Metrics](https://prometheus.io/docs/instrumenting/writing_clientlibs/#process-metrics) in the Prometheus [writing client libraries](https://prometheus.io/docs/instrumenting/writing_clientlibs/#process-metrics) documentation. Example metrics: + +``` +# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. +# TYPE process_cpu_seconds_total counter +process_cpu_seconds_total 1.63 +# HELP process_max_fds Maximum number of open file descriptors. +# TYPE process_max_fds gauge +process_max_fds 524288.0 +# HELP process_open_fds Number of open file descriptors. +# TYPE process_open_fds gauge +process_open_fds 28.0 +# HELP process_resident_memory_bytes Resident memory size in bytes. +# TYPE process_resident_memory_bytes gauge +process_resident_memory_bytes 7.8577664E7 +# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. +# TYPE process_start_time_seconds gauge +process_start_time_seconds 1.693829439767E9 +# HELP process_virtual_memory_bytes Virtual memory size in bytes. +# TYPE process_virtual_memory_bytes gauge +process_virtual_memory_bytes 1.2683624448E10 +``` diff --git a/docs/content/internals/_index.md b/docs/content/internals/_index.md index f279a3539..9cce8243e 100644 --- a/docs/content/internals/_index.md +++ b/docs/content/internals/_index.md @@ -1,4 +1,4 @@ --- title: Internals -weight: 6 +weight: 7 --- diff --git a/docs/content/migration/_index.md b/docs/content/migration/_index.md index cae50cc47..7055c0287 100644 --- a/docs/content/migration/_index.md +++ b/docs/content/migration/_index.md @@ -1,4 +1,4 @@ --- title: Compatibility -weight: 5 +weight: 6 --- diff --git a/docs/content/otel/_index.md b/docs/content/otel/_index.md index 1f637f6b9..79e89d3a5 100644 --- a/docs/content/otel/_index.md +++ b/docs/content/otel/_index.md @@ -1,4 +1,4 @@ --- title: OpenTelemetry -weight: 3 +weight: 4 --- From 28338f74d893d5c68cb7f896e43491181dd8302b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 5 Oct 2023 22:20:59 +0200 Subject: [PATCH 016/870] Fix Java 21 build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../metrics/core/metrics/HistogramTest.java | 4 ++-- .../jvm/JvmThreadsMetricsTest.java | 22 ++++++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index b021bf8ce..2e0df7b01 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -530,7 +530,7 @@ public void testGolangTests() throws NoSuchFieldException, IllegalAccessExceptio "sample_count: 2 " + "sample_sum: -7.0 " + "schema: 2 " + - "zero_threshold: 2.9387358770557188E-39 " + + "zero_threshold: " + Math.pow(2.0, -128.0) + " " + "zero_count: 0 " + "negative_span { offset: 7 length: 2 } " + "negative_delta: 1 " + @@ -564,7 +564,7 @@ public void testGolangTests() throws NoSuchFieldException, IllegalAccessExceptio "sample_count: 2 " + "sample_sum: 7.0 " + "schema: 2 " + - "zero_threshold: 2.9387358770557188E-39 " + + "zero_threshold: " + Math.pow(2.0, -128.0) + " " + "zero_count: 0 " + "positive_span { offset: 7 length: 2 } " + "positive_delta: 1 " + diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java index e88e86811..7be7892a9 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java @@ -107,14 +107,21 @@ public void testIgnoredMetricNotScraped() { @Test public void testInvalidThreadIds() { + try { + int javaVersion = Integer.parseInt(System.getProperty("java.version")); + if (javaVersion >= 21) { + // With Java 21 and newer you can no longer have invalid thread ids. + return; + } + } catch (NumberFormatException ignored) { + } PrometheusRegistry registry = new PrometheusRegistry(); JvmThreadsMetrics.builder().register(registry); - MetricSnapshots snapshots = registry.scrape(); // Number of threads to create with invalid thread ids int numberOfInvalidThreadIds = 2; - Map expected = getCountByState(snapshots); + Map expected = getCountByState(registry.scrape()); expected.compute("UNKNOWN", (key, oldValue) -> oldValue == null ? numberOfInvalidThreadIds : oldValue + numberOfInvalidThreadIds); final CountDownLatch countDownLatch = new CountDownLatch(numberOfInvalidThreadIds); @@ -122,7 +129,7 @@ public void testInvalidThreadIds() { try { // Create and start threads with invalid thread ids (id=0, id=-1, etc.) for (int i = 0; i < numberOfInvalidThreadIds; i++) { - new TestThread(-i, new TestRunnable(countDownLatch)).start(); + new ThreadWithInvalidId(-i, new TestRunnable(countDownLatch)).start(); } Map actual = getCountByState(registry.scrape()); @@ -152,16 +159,21 @@ private Map getCountByState(MetricSnapshots snapshots) { return result; } - private static class TestThread extends Thread { + private static class ThreadWithInvalidId extends Thread { private final long id; - public TestThread(long id, Runnable runnable) { + public ThreadWithInvalidId(long id, Runnable runnable) { super(runnable); setDaemon(true); this.id = id; } + /** + * Note that only Java versions < 21 call this to get the thread id. + * With Java 21 and newer it's no longer possible to make an invalid thread id. + */ + @Override public long getId() { return this.id; } From 586c2f9e4c62553eb157c82b292377521375f554 Mon Sep 17 00:00:00 2001 From: Kibet Theo <61080898+kibettheophilus@users.noreply.github.com> Date: Thu, 5 Oct 2023 03:00:45 +0300 Subject: [PATCH 017/870] Update _index.md Signed-off-by: Kibet Theo <61080898+kibettheophilus@users.noreply.github.com> --- docs/content/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/_index.md b/docs/content/_index.md index 7ccbab1f3..9de934995 100644 --- a/docs/content/_index.md +++ b/docs/content/_index.md @@ -2,7 +2,7 @@ title: "client_java" --- -This is the documentation for the [Prometheus Java client library](https://github.com/prometheus/client_java) verion 1.0.0 and higher. +This is the documentation for the [Prometheus Java client library](https://github.com/prometheus/client_java) version 1.0.0 and higher. The main new features of the 1.0.0 release are: From 5817253028476ab2d17eb6a0613fe3da3bc185f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Sun, 15 Oct 2023 22:08:05 +0200 Subject: [PATCH 018/870] Remove scrape() from getPrometheusName() default implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../exporter/httpserver/HTTPServerSample.java | 13 +---- .../jetty/ExporterServletJettySample.java | 13 +---- .../tomcat/ExporterServletTomcatSample.java | 13 +---- .../metrics/model/registry/Collector.java | 16 +++++- .../model/registry/MultiCollector.java | 16 ++++-- .../model/registry/PrometheusRegistry.java | 7 ++- .../registry/PrometheusRegistryTest.java | 56 +++++++++++++------ .../bridge/SimpleclientCollector.java | 10 ---- 8 files changed, 75 insertions(+), 69 deletions(-) diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java b/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java index 65cb2c27b..9187ecfcb 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java @@ -53,17 +53,8 @@ public static void main(String[] args) throws IOException, InterruptedException gauge.labelValues("outside").set(27.0); if (mode == Mode.error) { - Collector failingCollector = new Collector() { - - @Override - public String getPrometheusName() { - return null; - } - - @Override - public MetricSnapshot collect() { - throw new RuntimeException("Simulating an error."); - } + Collector failingCollector = () -> { + throw new RuntimeException("Simulating an error."); }; PrometheusRegistry.defaultRegistry.register(failingCollector); diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java index 19bbddac2..9e1a22487 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java @@ -57,17 +57,8 @@ public static void main(String[] args) throws Exception { gauge.labelValues("outside").set(27.0); if (mode == Mode.error) { - Collector failingCollector = new Collector() { - - @Override - public String getPrometheusName() { - return null; - } - - @Override - public MetricSnapshot collect() { - throw new RuntimeException("Simulating an error."); - } + Collector failingCollector = () -> { + throw new RuntimeException("Simulating an error."); }; PrometheusRegistry.defaultRegistry.register(failingCollector); diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java index 7e2e31e04..8d13082b7 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java @@ -61,17 +61,8 @@ public static void main(String[] args) throws LifecycleException, IOException { gauge.labelValues("outside").set(27.0); if (mode == Mode.error) { - Collector failingCollector = new Collector() { - - @Override - public String getPrometheusName() { - return null; - } - - @Override - public MetricSnapshot collect() { - throw new RuntimeException("Simulating an error."); - } + Collector failingCollector = () -> { + throw new RuntimeException("Simulating an error."); }; PrometheusRegistry.defaultRegistry.register(failingCollector); diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java index f66d00b67..d180eda63 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java @@ -34,10 +34,20 @@ default MetricSnapshot collect(Predicate includedNames) { } /** - * Override this and return {@code null} if a collector does not have a constant name, - * or if you don't want this library to call {@link #collect()} during registration of this collector. + * This is called in two places: + *

    + *
  1. During registration to check if a metric with that name already exists.
  2. + *
  3. During scrape to check if this collector can be skipped because a name filter is present and the metric name is excluded.
  4. + *
+ * Returning {@code null} means checks are omitted (registration the metric always succeeds), + * and the collector is always scraped (the result is dropped after scraping if a name filter is present and + * the metric name is excluded). + *

+ * If your metric has a name that does not change at runtime it is a good idea to overwrite this and return the name. + *

+ * All metrics in {@code prometheus-metrics-core} override this. */ default String getPrometheusName() { - return collect().getMetadata().getPrometheusName(); + return null; } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java index 92fcf9012..1edb5cfc6 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java @@ -3,9 +3,9 @@ import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import java.util.Collections; import java.util.List; import java.util.function.Predicate; -import java.util.stream.Collectors; /** * Like {@link Collector}, but collecting multiple Snapshots at once. @@ -35,10 +35,18 @@ default MetricSnapshots collect(Predicate includedNames) { } /** - * Override this and return an empty list if the MultiCollector does not return a constant list of names - * (names may be added / removed between scrapes). + * This is called in two places: + *

    + *
  1. During registration to check if a metric with that name already exists.
  2. + *
  3. During scrape to check if the collector can be skipped because a name filter is present and all names are excluded.
  4. + *
+ * Returning an empty list means checks are omitted (registration metric always succeeds), + * and the collector is always scraped (if a name filter is present and all names are excluded the result is dropped). + *

+ * If your collector returns a constant list of metrics that have names that do not change at runtime + * it is a good idea to overwrite this and return the names. */ default List getPrometheusNames() { - return collect().stream().map(snapshot -> snapshot.getMetadata().getPrometheusName()).collect(Collectors.toList()); + return Collections.emptyList(); } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java index 21665499d..0fe565947 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java @@ -40,7 +40,10 @@ public void register(MultiCollector collector) { public void unregister(Collector collector) { collectors.remove(collector); - prometheusNames.remove(collector.getPrometheusName()); + String prometheusName = collector.getPrometheusName(); + if (prometheusName != null) { + prometheusNames.remove(collector.getPrometheusName()); + } } public void unregister(MultiCollector collector) { @@ -88,7 +91,7 @@ public MetricSnapshots scrape(Predicate includedNames) { } for (MultiCollector collector : multiCollectors) { List prometheusNames = collector.getPrometheusNames(); - boolean excluded = true; // the multi-collector is excluded unless at least one name matches + boolean excluded = prometheusNames.size() > 0; // the multi-collector is excluded unless at least one name matches for (String prometheusName : prometheusNames) { if (includedNames.test(prometheusName)) { excluded = false; diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java index a7626713c..498d2354b 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java @@ -9,35 +9,57 @@ public class PrometheusRegistryTest { - Collector noName = new Collector() { + Collector noName = () -> GaugeSnapshot.builder() + .name("no_name_gauge") + .build(); + + Collector counterA1 = new Collector() { @Override public MetricSnapshot collect() { - return GaugeSnapshot.builder() - .name("no_name_gauge") - .build(); + return CounterSnapshot.builder().name("counter_a").build(); } @Override public String getPrometheusName() { - return null; + return "counter_a"; } }; - Collector counterA1 = () -> CounterSnapshot.builder() - .name("counter_a") - .build(); + Collector counterA2 = new Collector() { + @Override + public MetricSnapshot collect() { + return CounterSnapshot.builder().name("counter.a").build(); + } - Collector counterA2 = () -> CounterSnapshot.builder() - .name("counter.a") - .build(); + @Override + public String getPrometheusName() { + return "counter_a"; + } + }; - Collector counterB = () -> CounterSnapshot.builder() - .name("counter_b") - .build(); + Collector counterB = new Collector() { + @Override + public MetricSnapshot collect() { + return CounterSnapshot.builder().name("counter_b").build(); + } - Collector gaugeA = () -> GaugeSnapshot.builder() - .name("gauge_a") - .build(); + @Override + public String getPrometheusName() { + return "counter_b"; + } + }; + + Collector gaugeA = new Collector() { + @Override + public MetricSnapshot collect() { + return GaugeSnapshot.builder().name("gauge_a").build(); + } + + @Override + public String getPrometheusName() { + return "gauge_a"; + } + }; @Test public void registerNoName() { diff --git a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java index a728ef0e1..dfb88dda9 100644 --- a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java +++ b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java @@ -61,16 +61,6 @@ public MetricSnapshots collect() { return convert(simpleclientRegistry.metricFamilySamples()); } - @Override - public MetricSnapshots collect(Predicate includedNames) { - return MultiCollector.super.collect(includedNames); - } - - @Override - public List getPrometheusNames() { - return MultiCollector.super.getPrometheusNames(); - } - private MetricSnapshots convert(Enumeration samples) { MetricSnapshots.Builder result = MetricSnapshots.builder(); while (samples.hasMoreElements()) { From 18bdc332eb66a6600bec896dcfd10a13be6ab0f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Sun, 15 Oct 2023 22:28:53 +0200 Subject: [PATCH 019/870] Remove unneccessary name filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../metrics/exporter/common/PrometheusHttpRequest.java | 7 ++++++- .../metrics/exporter/common/PrometheusScrapeHandler.java | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java index a5502003c..b855ce0dc 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java @@ -62,7 +62,12 @@ default String[] getParameterValues(String name) { } } } - return result.toArray(new String[0]); + if (result.isEmpty()) { + // Servlet API: getParameterValues() returns null if the parameter does not exist. + return null; + } else { + return result.toArray(new String[0]); + } } catch (UnsupportedEncodingException e) { // UTF-8 encoding not supported. throw new RuntimeException(e); diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java index b095007e0..6fae1218e 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java @@ -114,7 +114,7 @@ private MetricSnapshots scrape(PrometheusHttpRequest request) { private Predicate makeNameFilter(String[] includedNames) { Predicate result = null; - if (includedNames != null) { + if (includedNames != null && includedNames.length > 0) { result = MetricNameFilter.builder().nameMustBeEqualTo(includedNames).build(); } if (result != null && nameFilter != null) { From 6843727564f84679e4391dcdfa263ad5c7be4425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Sun, 22 Oct 2023 10:53:48 +0200 Subject: [PATCH 020/870] Fix time unit for process_cpu_seconds_total #881 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../prometheus/metrics/instrumentation/jvm/ProcessMetrics.java | 2 +- .../metrics/instrumentation/jvm/ProcessMetricsTest.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java index 19c9c4bb0..bca58942a 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java @@ -94,7 +94,7 @@ private void register(PrometheusRegistry registry) { // through implemented interfaces until the method can be made accessible and invoked. Long processCpuTime = callLongGetter("getProcessCpuTime", osBean); if (processCpuTime != null) { - callback.call(Unit.millisToSeconds(processCpuTime)); + callback.call(Unit.nanosToSeconds(processCpuTime)); } } catch (Exception ignored) { } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java index e3304f4d9..92f286e01 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java @@ -11,6 +11,7 @@ import java.io.File; import java.io.IOException; import java.lang.management.RuntimeMXBean; +import java.util.concurrent.TimeUnit; import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; import static org.mockito.ArgumentMatchers.any; @@ -29,7 +30,7 @@ public class ProcessMetricsTest { @Before public void setUp() throws IOException { - when(sunOsBean.getProcessCpuTime()).thenReturn(72L); + when(sunOsBean.getProcessCpuTime()).thenReturn(TimeUnit.MILLISECONDS.toNanos(72)); when(sunOsBean.getOpenFileDescriptorCount()).thenReturn(127L); when(sunOsBean.getMaxFileDescriptorCount()).thenReturn(244L); when(runtimeBean.getStartTime()).thenReturn(37100L); From 03378b80f201afd80aa51107bcd2d7979c75d625 Mon Sep 17 00:00:00 2001 From: Maxim Solodovnik Date: Sun, 15 Oct 2023 10:15:03 +0700 Subject: [PATCH 021/870] Fixes issue #871: Automatic-Module-Names are added Signed-off-by: Maxim Solodovnik --- pom.xml | 14 ++++++++++---- prometheus-metrics-config/pom.xml | 4 ++++ prometheus-metrics-core/pom.xml | 4 ++++ prometheus-metrics-exporter-common/pom.xml | 4 ++++ prometheus-metrics-exporter-httpserver/pom.xml | 4 ++++ prometheus-metrics-exporter-opentelemetry/pom.xml | 1 + .../pom.xml | 4 ++++ prometheus-metrics-exposition-formats/pom.xml | 4 ++++ prometheus-metrics-instrumentation-jvm/pom.xml | 4 ++++ prometheus-metrics-model/pom.xml | 4 ++++ prometheus-metrics-simpleclient-bridge/pom.xml | 4 ++++ .../prometheus-metrics-tracer-common/pom.xml | 4 ++++ .../prometheus-metrics-tracer-initializer/pom.xml | 4 ++++ .../prometheus-metrics-tracer-otel-agent/pom.xml | 4 ++++ .../prometheus-metrics-tracer-otel/pom.xml | 4 ++++ 15 files changed, 63 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 2845c00d0..114e35d4a 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,11 @@ The Prometheus Java Metrics Library + + UTF-8 + --module-name-need-to-be-overriden-- + + The Apache Software License, Version 2.0 @@ -64,10 +69,6 @@ integration-tests - - UTF-8 - - ossrh @@ -192,6 +193,11 @@ maven-bundle-plugin 2.4.0 true + + + ${automatic.module.name} + + org.apache.maven.plugins diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index 4e8a2328a..6ed2c6411 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -16,6 +16,10 @@ Configuration for Prometheus metrics and exposition formats. + + io.prometheus.metrics.config + + The Apache Software License, Version 2.0 diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 25007d1e9..ce4d35525 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -32,6 +32,10 @@ + + io.prometheus.metrics.core + + io.prometheus diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index ceea4b6a2..8e64daaba 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -16,6 +16,10 @@ Common functionality for implementing a Prometheus scrape endpoint. + + io.prometheus.metrics.exporter.common + + The Apache Software License, Version 2.0 diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index 1495ea259..069e963bf 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -32,6 +32,10 @@ + + io.prometheus.metrics.exporter.httpserver + + io.prometheus diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 424b9afa3..4367ef43f 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -19,6 +19,7 @@ 1.28.0 ${otel.version}-alpha + io.prometheus.metrics.exporter.opentelemetry diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 6e09cfdee..e562fbdee 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -16,6 +16,10 @@ Jakarta Servlet for exposing a Prometheus scrape endpoint. + + io.prometheus.metrics.exporter.servlet.jakarta + + The Apache Software License, Version 2.0 diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 83267baf7..3a59b3271 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -32,6 +32,10 @@ + + io.prometheus.metrics.expositionformats + + io.prometheus diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index 95c6dfe97..1b42d176d 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -16,6 +16,10 @@ Instrumentation library for JVM metrics + + io.prometheus.metrics.instrumentation.jvm + + The Apache Software License, Version 2.0 diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index f5c922707..1a017636e 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -32,6 +32,10 @@ + + io.prometheus.metrics.model + + diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index 5287de079..49efc4b4f 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -16,6 +16,10 @@ Bridge the old simpleclient CollectorRegistry to the new PrometheusRegistry + + io.prometheus.metrics.simpleclient.bridge + + The Apache Software License, Version 2.0 diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index aadc50e21..e17e57f4a 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -31,4 +31,8 @@ fabian@fstab.de + + + io.prometheus.metrics.tracer.common + diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index 7801c6712..f769c41d5 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -16,6 +16,10 @@ Initialize Prometheus integrations with distributed tracing libraries. + + io.prometheus.metrics.tracer.initializer + + The Apache Software License, Version 2.0 diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index 76f7ce66e..03864b703 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -16,6 +16,10 @@ Prometheus integration with the OpenTelemetry Java agent for distributed tracing. + + io.prometheus.metrics.tracer.otel_agent + + The Apache Software License, Version 2.0 diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index a7396d514..385a892db 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -32,6 +32,10 @@ + + io.prometheus.metrics.tracer.otel + + io.prometheus From ee99bb85e1cc771e6b8b451b143a2af7d521ff01 Mon Sep 17 00:00:00 2001 From: Maxim Solodovnik Date: Mon, 23 Oct 2023 08:40:11 +0700 Subject: [PATCH 022/870] Properties section is moved to proper place Signed-off-by: Maxim Solodovnik --- prometheus-metrics-core/pom.xml | 8 ++++---- prometheus-metrics-exporter-httpserver/pom.xml | 8 ++++---- prometheus-metrics-exposition-formats/pom.xml | 8 ++++---- prometheus-metrics-model/pom.xml | 8 ++++---- .../prometheus-metrics-tracer-common/pom.xml | 8 ++++---- .../prometheus-metrics-tracer-otel/pom.xml | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index ce4d35525..70cc9c1b2 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -16,6 +16,10 @@ Core Prometheus metric types + + io.prometheus.metrics.core + + The Apache Software License, Version 2.0 @@ -32,10 +36,6 @@ - - io.prometheus.metrics.core - - io.prometheus diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index 069e963bf..b2e446fe1 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -16,6 +16,10 @@ HTTP Server providing a Prometheus scrape endpoint. + + io.prometheus.metrics.exporter.httpserver + + The Apache Software License, Version 2.0 @@ -32,10 +36,6 @@ - - io.prometheus.metrics.exporter.httpserver - - io.prometheus diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 3a59b3271..4c58ecc5b 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -16,6 +16,10 @@ Prometheus exposition formats. + + io.prometheus.metrics.expositionformats + + The Apache Software License, Version 2.0 @@ -32,10 +36,6 @@ - - io.prometheus.metrics.expositionformats - - io.prometheus diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index 1a017636e..06d0c56d9 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -16,6 +16,10 @@ Data model for read-only immutable Prometheus metrics snapshots. + + io.prometheus.metrics.model + + The Apache Software License, Version 2.0 @@ -32,10 +36,6 @@ - - io.prometheus.metrics.model - - diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index e17e57f4a..0135ce7e3 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -16,6 +16,10 @@ Common Module for Prometheus integrations with distributed tracing libraries. + + io.prometheus.metrics.tracer.common + + The Apache Software License, Version 2.0 @@ -31,8 +35,4 @@ fabian@fstab.de - - - io.prometheus.metrics.tracer.common - diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index 385a892db..4dcc2d56c 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -16,6 +16,10 @@ Prometheus integration with the OpenTelemetry distributed tracing library. + + io.prometheus.metrics.tracer.otel + + The Apache Software License, Version 2.0 @@ -32,10 +36,6 @@ - - io.prometheus.metrics.tracer.otel - - io.prometheus From cff40ddc7b992efba0bf913212985d3593a2b994 Mon Sep 17 00:00:00 2001 From: ganzuoni <49481173+ganzuoni@users.noreply.github.com> Date: Mon, 30 Oct 2023 22:41:15 +0100 Subject: [PATCH 023/870] Support multi-target pattern (#873) Add multi-target pattern support Signed-off-by: Guido Anzuoni --- docs/content/getting-started/multi-target.md | 114 ++++++++++ .../example-exporter-multi-target/README.md | 33 +++ .../example-exporter-multi-target/pom.xml | 76 +++++++ .../metrics/examples/multitarget/Main.java | 23 ++ .../multitarget/SampleMultiCollector.java | 88 ++++++++ examples/pom.xml | 1 + .../common/PrometheusHttpRequest.java | 4 +- .../common/PrometheusScrapeHandler.java | 5 +- .../httpserver/HttpExchangeAdapter.java | 3 +- .../servlet/jakarta/HttpExchangeAdapter.java | 2 +- .../metrics/model/registry/Collector.java | 23 ++ .../model/registry/MultiCollector.java | 21 +- .../model/registry/PrometheusRegistry.java | 196 ++++++++++-------- .../registry/PrometheusScrapeRequest.java | 11 + 14 files changed, 503 insertions(+), 97 deletions(-) create mode 100644 docs/content/getting-started/multi-target.md create mode 100644 examples/example-exporter-multi-target/README.md create mode 100644 examples/example-exporter-multi-target/pom.xml create mode 100644 examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/Main.java create mode 100644 examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java create mode 100644 prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java diff --git a/docs/content/getting-started/multi-target.md b/docs/content/getting-started/multi-target.md new file mode 100644 index 000000000..6a1c0412c --- /dev/null +++ b/docs/content/getting-started/multi-target.md @@ -0,0 +1,114 @@ +--- +title: Multi-Target Pattern +weight: 7 +--- + +{{< hint type=note >}} +This is for the upcoming release 1.1.0. +{{< /hint >}} + +To support multi-target pattern you can create a custom collector overriding the purposed internal method in ExtendedMultiCollector +see SampleExtendedMultiCollector in io.prometheus.metrics.examples.httpserver + +```java +public class SampleExtendedMultiCollector extends ExtendedMultiCollector { + + public SampleExtendedMultiCollector() { + super(); + } + + @Override + protected MetricSnapshots collectMetricSnapshots(PrometheusScrapeRequest scrapeRequest) { + + GaugeSnapshot.Builder gaugeBuilder = GaugeSnapshot.builder(); + gaugeBuilder.name("x_load").help("process load"); + + CounterSnapshot.Builder counterBuilder = CounterSnapshot.builder(); + counterBuilder.name(PrometheusNaming.sanitizeMetricName("x_calls_total")).help("invocations"); + + String[] targetNames = scrapeRequest.getParameterValues("target"); + String targetName; + String[] procs = scrapeRequest.getParameterValues("proc"); + if (targetNames == null || targetNames.length == 0) { + targetName = "defaultTarget"; + procs = null; //ignore procs param + } else { + targetName = targetNames[0]; + } + Builder counterDataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder(); + io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot.Builder gaugeDataPointBuilder = GaugeSnapshot.GaugeDataPointSnapshot.builder(); + Labels lbls = Labels.of("target", targetName); + + if (procs == null || procs.length == 0) { + counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); + gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); + counterDataPointBuilder.value(70); + gaugeDataPointBuilder.value(Math.random()); + + counterBuilder.dataPoint(counterDataPointBuilder.build()); + gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); + + } else { + for (int i = 0; i < procs.length; i++) { + counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); + gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); + counterDataPointBuilder.value(Math.random()); + gaugeDataPointBuilder.value(Math.random()); + + counterBuilder.dataPoint(counterDataPointBuilder.build()); + gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); + } + } + Collection snaps = new ArrayList(); + snaps.add(counterBuilder.build()); + snaps.add(gaugeBuilder.build()); + MetricSnapshots msnaps = new MetricSnapshots(snaps); + return msnaps; + } + + public List getPrometheusNames() { + List names = new ArrayList(); + names.add("x_calls_total"); + names.add("x_load"); + return names; + } + +} + +``` +`PrometheusScrapeRequest` provides methods to access http-related infos from the request originally received by the endpoint + +```java +public interface PrometheusScrapeRequest { + String getRequestURI(); + + String[] getParameterValues(String name); +} + +``` + + +Sample Prometheus scrape_config + +``` + - job_name: "multi-target" + + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + params: + proc: [proc1, proc2] + relabel_configs: + - source_labels: [__address__] + target_label: __param_target + - source_labels: [__param_target] + target_label: instance + - target_label: __address__ + replacement: localhost:9401 + static_configs: + - targets: ["target1", "target2"] +``` +It's up to the specific MultiCollector implementation how to interpret the _target_ parameter. +It might be an explicit real target (i.e. via host name/ip address) or as an alias in some internal configuration. +The latter is more suitable when the MultiCollector implementation is a proxy (see https://github.com/prometheus/snmp_exporter) +In this case, invoking real target might require extra parameters (e.g. credentials) that might be complex to manage in Prometheus configuration +(not considering the case where the proxy might become an "open relay") \ No newline at end of file diff --git a/examples/example-exporter-multi-target/README.md b/examples/example-exporter-multi-target/README.md new file mode 100644 index 000000000..b21f9ce9e --- /dev/null +++ b/examples/example-exporter-multi-target/README.md @@ -0,0 +1,33 @@ +# Multi-Target pattern example + +## Build + +This example is built as part of the `client_java` project. + +``` +./mvnw package +``` + +## Run + +The build creates a JAR file with the example application in `./examples/example-exporter-multi-target/target/`. + +``` +java -jar ./examples/example-exporter-multi-target/target/example-exporter-multi-target.jar +``` + +## Manually testing the Metrics Endpoint + +Accessing [http://localhost:9400/metrics](http://localhost:9400/metrics) with a Web browser should yield an example of a counter metric. + +``` +# HELP uptime_seconds_total total number of seconds since this application was started +# TYPE uptime_seconds_total counter +uptime_seconds_total 301.0 +``` + +The exporter supports a `debug` URL parameter to quickly view other formats in your Web browser: + +* [http://localhost:9400/metrics?debug=text](http://localhost:9400/metrics?debug=text): Prometheus text format, same as without the `debug` option. +* [http://localhost:9400/metrics?debug=openmetrics](http://localhost:9400/metrics?debug=openmetrics): OpenMetrics text format. +* [http://localhost:9400/metrics?debug=prometheus-protobuf](http://localhost:9400/metrics?debug=prometheus-protobuf): Text representation of the Prometheus protobuf format. diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml new file mode 100644 index 000000000..fa9d1a94a --- /dev/null +++ b/examples/example-exporter-multi-target/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + + io.prometheus + examples + 1.1.0-SNAPSHOT + + + example-exporter-multi-target + + Example - HTTPServer Exporter Multi Target + + Prometheus Metrics Example for multi-target pattern implementation + + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + + fstab + Guido Anzuoni + ganzuoni@gmail.com + + + + + + io.prometheus + prometheus-metrics-core + ${project.version} + + + io.prometheus + prometheus-metrics-instrumentation-jvm + ${project.version} + + + io.prometheus + prometheus-metrics-exporter-httpserver + ${project.version} + + + + + ${project.artifactId} + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + + + io.prometheus.metrics.examples.multitarget.Main + + + + + + + + + diff --git a/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/Main.java b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/Main.java new file mode 100644 index 000000000..da36346b9 --- /dev/null +++ b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/Main.java @@ -0,0 +1,23 @@ +package io.prometheus.metrics.examples.multitarget; + +import java.io.IOException; + +import io.prometheus.metrics.exporter.httpserver.HTTPServer; +import io.prometheus.metrics.model.registry.PrometheusRegistry; + +/** + * Simple example of an application exposing metrics via Prometheus' built-in HTTPServer. + */ +public class Main { + + public static void main(String[] args) throws IOException, InterruptedException { + + SampleMultiCollector xmc = new SampleMultiCollector(); + PrometheusRegistry.defaultRegistry.register(xmc); + HTTPServer server = HTTPServer.builder() + .port(9401) + .buildAndStart(); + + System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + } +} diff --git a/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java new file mode 100644 index 000000000..819bb3028 --- /dev/null +++ b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java @@ -0,0 +1,88 @@ +package io.prometheus.metrics.examples.multitarget; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import io.prometheus.metrics.model.registry.MultiCollector; +import io.prometheus.metrics.model.registry.PrometheusScrapeRequest; +import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot.Builder; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot; +import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.model.snapshots.MetricSnapshot; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import io.prometheus.metrics.model.snapshots.PrometheusNaming; + +public class SampleMultiCollector implements MultiCollector { + + public SampleMultiCollector() { + super(); + } + + @Override + public MetricSnapshots collect() { + return new MetricSnapshots(); + } + + @Override + public MetricSnapshots collect(PrometheusScrapeRequest scrapeRequest) { + return collectMetricSnapshots(scrapeRequest); + } + + protected MetricSnapshots collectMetricSnapshots(PrometheusScrapeRequest scrapeRequest) { + + GaugeSnapshot.Builder gaugeBuilder = GaugeSnapshot.builder(); + gaugeBuilder.name("x_load").help("process load"); + + CounterSnapshot.Builder counterBuilder = CounterSnapshot.builder(); + counterBuilder.name(PrometheusNaming.sanitizeMetricName("x_calls_total")).help("invocations"); + + String[] targetNames = scrapeRequest.getParameterValues("target"); + String targetName; + String[] procs = scrapeRequest.getParameterValues("proc"); + if (targetNames == null || targetNames.length == 0) { + targetName = "defaultTarget"; + procs = null; //ignore procs param + } else { + targetName = targetNames[0]; + } + Builder counterDataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder(); + io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot.Builder gaugeDataPointBuilder = GaugeSnapshot.GaugeDataPointSnapshot.builder(); + Labels lbls = Labels.of("target", targetName); + + if (procs == null || procs.length == 0) { + counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); + gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); + counterDataPointBuilder.value(70); + gaugeDataPointBuilder.value(Math.random()); + + counterBuilder.dataPoint(counterDataPointBuilder.build()); + gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); + + } else { + for (int i = 0; i < procs.length; i++) { + counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); + gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); + counterDataPointBuilder.value(Math.random()); + gaugeDataPointBuilder.value(Math.random()); + + counterBuilder.dataPoint(counterDataPointBuilder.build()); + gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); + } + } + Collection snaps = new ArrayList(); + snaps.add(counterBuilder.build()); + snaps.add(gaugeBuilder.build()); + MetricSnapshots msnaps = new MetricSnapshots(snaps); + return msnaps; + } + + public List getPrometheusNames() { + List names = new ArrayList(); + names.add("x_calls_total"); + names.add("x_load"); + return names; + } + +} diff --git a/examples/pom.xml b/examples/pom.xml index 0b293cedc..61db27a97 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -36,6 +36,7 @@ example-exemplars-tail-sampling example-exporter-servlet-tomcat example-exporter-httpserver + example-exporter-multi-target example-exporter-opentelemetry example-simpleclient-bridge example-native-histogram diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java index b855ce0dc..f7b5346a5 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java @@ -5,7 +5,9 @@ import java.util.ArrayList; import java.util.Enumeration; -public interface PrometheusHttpRequest { +import io.prometheus.metrics.model.registry.PrometheusScrapeRequest; + +public interface PrometheusHttpRequest extends PrometheusScrapeRequest { /** * See {@code jakarta.servlet.http.HttpServletRequest.getQueryString()} diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java index 6fae1218e..5155457df 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java @@ -104,11 +104,12 @@ private Predicate makeNameFilter(ExporterFilterProperties props) { } private MetricSnapshots scrape(PrometheusHttpRequest request) { + Predicate filter = makeNameFilter(request.getParameterValues("name[]")); if (filter != null) { - return registry.scrape(filter); + return registry.scrape(filter, request); } else { - return registry.scrape(); + return registry.scrape(request); } } diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java index 4f1b4f63a..daaeb2dbd 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java @@ -9,6 +9,7 @@ import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; +import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Enumeration; @@ -29,7 +30,7 @@ public HttpExchangeAdapter(HttpExchange httpExchange) { public class HttpRequest implements PrometheusHttpRequest { - @Override + @Override public String getQueryString() { return httpExchange.getRequestURI().getRawQuery(); } diff --git a/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java b/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java index 656d661eb..c55eb7967 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java +++ b/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java @@ -53,7 +53,7 @@ public Request(HttpServletRequest request) { this.request = request; } - @Override + @Override public String getQueryString() { return request.getQueryString(); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java index d180eda63..0c69a89a9 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java @@ -19,6 +19,14 @@ public interface Collector { */ MetricSnapshot collect(); + /** + * Provides Collector with the details of the request issued by Prometheus to allow multi-target pattern implementation + * Override to implement request dependent logic to provide MetricSnapshot + */ + default MetricSnapshot collect(PrometheusScrapeRequest scrapeRequest) { + return collect(); + } + /** * Like {@link #collect()}, but returns {@code null} if {@code includedNames.test(name)} is {@code false}. *

@@ -32,6 +40,21 @@ default MetricSnapshot collect(Predicate includedNames) { return null; } } + + /** + * Like {@link #collect(Predicate)}, but with support for multi-target pattern. + *

+ * Override this if there is a more efficient way than first collecting the snapshot and then discarding it. + */ + default MetricSnapshot collect(Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { + MetricSnapshot result = collect(scrapeRequest); + if (includedNames.test(result.getMetadata().getPrometheusName())) { + return result; + } else { + return null; + } + } + /** * This is called in two places: diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java index 1edb5cfc6..5434c0ec0 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java @@ -18,13 +18,31 @@ public interface MultiCollector { */ MetricSnapshots collect(); + /** + * Provides Collector with the details of the request issued by Prometheus to allow multi-target pattern implementation + * Override to implement request dependent logic to provide MetricSnapshot + */ + default MetricSnapshots collect(PrometheusScrapeRequest scrapeRequest) { + return collect(); + } + + /** * Like {@link #collect()}, but returns only the snapshots where {@code includedNames.test(name)} is {@code true}. *

* Override this if there is a more efficient way than first collecting all snapshot and then discarding the excluded ones. */ default MetricSnapshots collect(Predicate includedNames) { - MetricSnapshots allSnapshots = collect(); + return collect(includedNames, null); + } + + /** + * Like {@link #collect(Predicate)}, but with support for multi-target pattern. + *

+ * Override this if there is a more efficient way than first collecting the snapshot and then discarding it. + */ + default MetricSnapshots collect(Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { + MetricSnapshots allSnapshots = scrapeRequest == null ? collect(): collect(scrapeRequest); MetricSnapshots.Builder result = MetricSnapshots.builder(); for (MetricSnapshot snapshot : allSnapshots) { if (includedNames.test(snapshot.getMetadata().getPrometheusName())) { @@ -34,6 +52,7 @@ default MetricSnapshots collect(Predicate includedNames) { return result.build(); } + /** * This is called in two places: *

    diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java index 0fe565947..a8ab5a762 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java @@ -1,7 +1,6 @@ package io.prometheus.metrics.model.registry; -import io.prometheus.metrics.model.snapshots.MetricSnapshot; -import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; import java.util.List; import java.util.Set; @@ -9,104 +8,119 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; +import io.prometheus.metrics.model.snapshots.MetricSnapshot; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; public class PrometheusRegistry { - public static final PrometheusRegistry defaultRegistry = new PrometheusRegistry(); + public static final PrometheusRegistry defaultRegistry = new PrometheusRegistry(); + + private final Set prometheusNames = ConcurrentHashMap.newKeySet(); + private final List collectors = new CopyOnWriteArrayList<>(); + private final List multiCollectors = new CopyOnWriteArrayList<>(); + + public void register(Collector collector) { + String prometheusName = collector.getPrometheusName(); + if (prometheusName != null) { + if (!prometheusNames.add(prometheusName)) { + throw new IllegalStateException("Can't register " + prometheusName + " because a metric with that name is already registered."); + } + } + collectors.add(collector); + } - private final Set prometheusNames = ConcurrentHashMap.newKeySet(); - private final List collectors = new CopyOnWriteArrayList<>(); - private final List multiCollectors = new CopyOnWriteArrayList<>(); + public void register(MultiCollector collector) { + for (String prometheusName : collector.getPrometheusNames()) { + if (!prometheusNames.add(prometheusName)) { + throw new IllegalStateException("Can't register " + prometheusName + " because that name is already registered."); + } + } + multiCollectors.add(collector); + } - public void register(Collector collector) { - String prometheusName = collector.getPrometheusName(); - if (prometheusName != null) { - if (!prometheusNames.add(prometheusName)) { - throw new IllegalStateException("Can't register " + prometheusName + " because a metric with that name is already registered."); - } - } - collectors.add(collector); - } + public void unregister(Collector collector) { + collectors.remove(collector); + String prometheusName = collector.getPrometheusName(); + if (prometheusName != null) { + prometheusNames.remove(collector.getPrometheusName()); + } + } - public void register(MultiCollector collector) { - for (String prometheusName : collector.getPrometheusNames()) { - if (!prometheusNames.add(prometheusName)) { - throw new IllegalStateException("Can't register " + prometheusName + " because that name is already registered."); - } - } - multiCollectors.add(collector); - } + public void unregister(MultiCollector collector) { + multiCollectors.remove(collector); + for (String prometheusName : collector.getPrometheusNames()) { + prometheusNames.remove(prometheusName(prometheusName)); + } + } - public void unregister(Collector collector) { - collectors.remove(collector); - String prometheusName = collector.getPrometheusName(); - if (prometheusName != null) { - prometheusNames.remove(collector.getPrometheusName()); - } - } + public MetricSnapshots scrape() { + return scrape((PrometheusScrapeRequest) null); + } - public void unregister(MultiCollector collector) { - multiCollectors.remove(collector); - for (String prometheusName : collector.getPrometheusNames()) { - prometheusNames.remove(prometheusName(prometheusName)); - } - } + public MetricSnapshots scrape(PrometheusScrapeRequest scrapeRequest) { + MetricSnapshots.Builder result = MetricSnapshots.builder(); + for (Collector collector : collectors) { + MetricSnapshot snapshot = scrapeRequest == null ? collector.collect() : collector.collect(scrapeRequest); + if (snapshot != null) { + if (result.containsMetricName(snapshot.getMetadata().getName())) { + throw new IllegalStateException(snapshot.getMetadata().getPrometheusName() + ": duplicate metric name."); + } + result.metricSnapshot(snapshot); + } + } + for (MultiCollector collector : multiCollectors) { + MetricSnapshots snaphots = scrapeRequest == null ? collector.collect() : collector.collect(scrapeRequest); + for (MetricSnapshot snapshot : snaphots) { + if (result.containsMetricName(snapshot.getMetadata().getName())) { + throw new IllegalStateException(snapshot.getMetadata().getPrometheusName() + ": duplicate metric name."); + } + result.metricSnapshot(snapshot); + } + } + return result.build(); + } - public MetricSnapshots scrape() { - MetricSnapshots.Builder result = MetricSnapshots.builder(); - for (Collector collector : collectors) { - MetricSnapshot snapshot = collector.collect(); - if (snapshot != null) { - if (result.containsMetricName(snapshot.getMetadata().getName())) { - throw new IllegalStateException(snapshot.getMetadata().getPrometheusName() + ": duplicate metric name."); - } - result.metricSnapshot(snapshot); - } - } - for (MultiCollector collector : multiCollectors) { - for (MetricSnapshot snapshot : collector.collect()) { - if (result.containsMetricName(snapshot.getMetadata().getName())) { - throw new IllegalStateException(snapshot.getMetadata().getPrometheusName() + ": duplicate metric name."); - } - result.metricSnapshot(snapshot); - } - } - return result.build(); - } + public MetricSnapshots scrape(Predicate includedNames) { + if (includedNames == null) { + return scrape(); + } + return scrape(includedNames, null); + } - public MetricSnapshots scrape(Predicate includedNames) { - if (includedNames == null) { - return scrape(); - } - MetricSnapshots.Builder result = MetricSnapshots.builder(); - for (Collector collector : collectors) { - String prometheusName = collector.getPrometheusName(); - if (prometheusName == null || includedNames.test(prometheusName)) { - MetricSnapshot snapshot = collector.collect(includedNames); - if (snapshot != null) { - result.metricSnapshot(snapshot); - } - } - } - for (MultiCollector collector : multiCollectors) { - List prometheusNames = collector.getPrometheusNames(); - boolean excluded = prometheusNames.size() > 0; // the multi-collector is excluded unless at least one name matches - for (String prometheusName : prometheusNames) { - if (includedNames.test(prometheusName)) { - excluded = false; - break; - } - } - if (!excluded) { - for (MetricSnapshot snapshot : collector.collect(includedNames)) { - if (snapshot != null) { - result.metricSnapshot(snapshot); - } - } - } - } - return result.build(); - } + public MetricSnapshots scrape(Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { + if (includedNames == null) { + return scrape(scrapeRequest); + } + MetricSnapshots.Builder result = MetricSnapshots.builder(); + for (Collector collector : collectors) { + String prometheusName = collector.getPrometheusName(); + if (prometheusName == null || includedNames.test(prometheusName)) { + MetricSnapshot snapshot = scrapeRequest == null ? collector.collect(includedNames) : collector.collect(includedNames, scrapeRequest); + if (snapshot != null) { + result.metricSnapshot(snapshot); + } + } + } + for (MultiCollector collector : multiCollectors) { + List prometheusNames = collector.getPrometheusNames(); + boolean excluded = true; // the multi-collector is excluded unless + // at least one name matches + for (String prometheusName : prometheusNames) { + if (includedNames.test(prometheusName)) { + excluded = false; + break; + } + } + if (!excluded) { + MetricSnapshots snaphots = scrapeRequest == null ? collector.collect(includedNames) : collector.collect(includedNames, scrapeRequest); + for (MetricSnapshot snapshot : snaphots) { + if (snapshot != null) { + result.metricSnapshot(snapshot); + } + } + } + } + return result.build(); + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java new file mode 100644 index 000000000..268a326e1 --- /dev/null +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java @@ -0,0 +1,11 @@ +package io.prometheus.metrics.model.registry; + +/** + * Infos extracted from the request received by the endpoint + * + */ +public interface PrometheusScrapeRequest { + + String[] getParameterValues(String name); + +} From 348bf3776f34e55f2a3852610c7892f8ad3f549b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Mon, 30 Oct 2023 23:24:30 +0100 Subject: [PATCH 024/870] Remove automatic module name #884 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index 114e35d4a..9cf80aa67 100644 --- a/pom.xml +++ b/pom.xml @@ -193,11 +193,13 @@ maven-bundle-plugin 2.4.0 true + org.apache.maven.plugins From e9a04680a1f175bd50cf8aab74ea2a5468a73172 Mon Sep 17 00:00:00 2001 From: Greg Eales <0x006EA1E5@users.noreply.github.com> Date: Thu, 2 Nov 2023 20:59:30 +0000 Subject: [PATCH 025/870] #887 otlp exporter exemplars (#883) Signed-off-by: Greg Eales <0x006ea1e5@gmail.com> --- .../pom.xml | 24 +++ .../opentelemetry/OpenTelemetryExporter.java | 10 +- .../otelmodel/PrometheusData.java | 51 ++++++- .../exporter/opentelemetry/ExemplarTest.java | 139 ++++++++++++++++++ 4 files changed, 215 insertions(+), 9 deletions(-) create mode 100644 prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 4367ef43f..175c9a5dd 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -79,6 +79,30 @@ 4.13.2 test + + org.wiremock + wiremock + 3.2.0 + test + + + org.awaitility + awaitility + 4.2.0 + test + + + io.opentelemetry + opentelemetry-proto + 0.17.1 + test + + + io.opentelemetry + opentelemetry-sdk-trace + ${otel.version} + test + diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java index 9c69faf3e..31f263fd9 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java @@ -18,7 +18,8 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -public class OpenTelemetryExporter { +public class OpenTelemetryExporter implements AutoCloseable { + private final PeriodicMetricReader reader; private OpenTelemetryExporter(Builder builder, PrometheusProperties config, PrometheusRegistry registry) { InstrumentationScopeInfo instrumentationScopeInfo = PrometheusInstrumentationScope.loadInstrumentationScopeInfo(); @@ -42,13 +43,18 @@ private OpenTelemetryExporter(Builder builder, PrometheusProperties config, Prom } exporter = exporterBuilder.build(); } - PeriodicMetricReader reader = PeriodicMetricReader.builder(exporter) + reader = PeriodicMetricReader.builder(exporter) .setInterval(Duration.ofSeconds(ConfigHelper.getIntervalSeconds(builder, properties))) .build(); + PrometheusMetricProducer prometheusMetricProducer = new PrometheusMetricProducer(registry, instrumentationScopeInfo, resource); reader.register(prometheusMetricProducer); } + public void close() { + reader.shutdown(); + } + private Resource initResourceAttributes(Builder builder, ExporterOpenTelemetryProperties properties, InstrumentationScopeInfo instrumentationScopeInfo) { String serviceName = ConfigHelper.getServiceName(builder, properties); String serviceNamespace = ConfigHelper.getServiceNamespace(builder, properties); diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java index 353a1623c..56d10847b 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java @@ -1,19 +1,22 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.model.snapshots.DataPointSnapshot; -import io.prometheus.metrics.model.snapshots.Exemplars; +import io.prometheus.metrics.model.snapshots.*; import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.Attributes; import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.AttributesBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.trace.SpanContext; +import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.trace.TraceFlags; +import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.trace.TraceState; import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.Data; import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoubleExemplarData; import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType; import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.PointData; -import io.prometheus.metrics.model.snapshots.Exemplar; -import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.internal.data.ImmutableDoubleExemplarData; -import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; abstract class PrometheusData implements Data { @@ -44,8 +47,41 @@ protected List convertExemplar(Exemplar exemplar) { } protected List convertExemplars(Exemplars exemplars) { - // TODO: Exemplars not implemented yet. - return Collections.emptyList(); + return StreamSupport.stream(exemplars.spliterator(), false) + .map(this::toDoubleExemplarData) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + protected DoubleExemplarData toDoubleExemplarData(Exemplar exemplar) { + if (exemplar == null) { + return null; + } + + AttributesBuilder filteredAttributesBuilder = Attributes.builder(); + String traceId = null; + String spanId = null; + for (Label label : exemplar.getLabels()) { + if (label.getName().equals(Exemplar.TRACE_ID)) { + traceId = label.getValue(); + } + else if (label.getName().equals(Exemplar.SPAN_ID)) { + spanId = label.getValue(); + } else { + filteredAttributesBuilder.put(label.getName(), label.getValue()); + } + } + Attributes filteredAttributes = filteredAttributesBuilder.build(); + + SpanContext spanContext = (traceId != null && spanId != null) + ? SpanContext.create(traceId, spanId, TraceFlags.getSampled(), TraceState.getDefault()) + : SpanContext.getInvalid(); + + return ImmutableDoubleExemplarData.create( + filteredAttributes, + TimeUnit.MILLISECONDS.toNanos(exemplar.getTimestampMillis()), + spanContext, + exemplar.getValue()); } protected long getStartEpochNanos(DataPointSnapshot dataPoint) { @@ -55,4 +91,5 @@ protected long getStartEpochNanos(DataPointSnapshot dataPoint) { protected long getEpochNanos(DataPointSnapshot dataPoint, long currentTimeMillis) { return dataPoint.hasScrapeTimestamp() ? TimeUnit.MILLISECONDS.toNanos(dataPoint.getScrapeTimestampMillis()) : TimeUnit.MILLISECONDS.toNanos(currentTimeMillis); } + } diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java new file mode 100644 index 000000000..0226c131c --- /dev/null +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java @@ -0,0 +1,139 @@ +package io.prometheus.metrics.exporter.opentelemetry; + +import com.github.tomakehurst.wiremock.http.Request; +import com.github.tomakehurst.wiremock.junit.WireMockRule; +import com.github.tomakehurst.wiremock.matching.MatchResult; +import com.github.tomakehurst.wiremock.matching.ValueMatcher; +import com.google.protobuf.InvalidProtocolBufferException; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.context.Scope; +import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; +import io.opentelemetry.proto.metrics.v1.DoubleDataPoint; +import io.opentelemetry.proto.metrics.v1.InstrumentationLibraryMetrics; +import io.opentelemetry.proto.metrics.v1.Metric; +import io.opentelemetry.proto.metrics.v1.ResourceMetrics; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.samplers.Sampler; +import io.prometheus.metrics.core.metrics.Counter; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import org.awaitility.core.ConditionTimeoutException; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import static com.github.tomakehurst.wiremock.client.WireMock.*; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.awaitility.Awaitility.await; + +public class ExemplarTest { + private static final String ENDPOINT_PATH = "/v1/metrics"; + private static final int TIMEOUT = 3; + private static final String INSTRUMENTATION_SCOPE_NAME = "testInstrumentationScope"; + private static final String SPAN_NAME = "test-span"; + public static final String TEST_COUNTER_NAME = "test_counter"; + private Counter testCounter; + private OpenTelemetryExporter openTelemetryExporter; + @Rule + public WireMockRule wireMockRule = new WireMockRule(4317); + + @Before + public void setUp() { + openTelemetryExporter = OpenTelemetryExporter.builder() + .endpoint("http://localhost:4317") + .protocol("http/protobuf") + .intervalSeconds(1) + .buildAndStart(); + + testCounter = Counter.builder() + .name(TEST_COUNTER_NAME) + .withExemplars() + .register(); + + wireMockRule.stubFor(post(ENDPOINT_PATH) + .withHeader("Content-Type", containing("application/x-protobuf")) + .willReturn(ok() + .withHeader("Content-Type", "application/json") + .withBody("{\"partialSuccess\":{}}"))); + } + + @After + public void tearDown() { + PrometheusRegistry.defaultRegistry.unregister(testCounter); + openTelemetryExporter.close(); + } + + @Test + public void sampledExemplarIsForwarded() { + try (SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder() + .setSampler(Sampler.alwaysOn()) + .build()) { + + Tracer test = sdkTracerProvider.get(INSTRUMENTATION_SCOPE_NAME); + Span span = test.spanBuilder(SPAN_NAME) + .startSpan(); + try (Scope scope = span.makeCurrent()) { + testCounter.inc(2); + } + } + + + await().atMost(TIMEOUT, SECONDS) + .ignoreException(com.github.tomakehurst.wiremock.client.VerificationException.class) + .until(() -> { + verify(postRequestedFor(urlEqualTo(ENDPOINT_PATH)) + .withHeader("Content-Type", equalTo("application/x-protobuf")) + .andMatching(getExemplarCountMatcher(1))); + return true; + }); + + } + + @Test(expected = ConditionTimeoutException.class) + public void notSampledExemplarIsNotForwarded() { + try (SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder() + .setSampler(Sampler.alwaysOff()) + .build()) { + + Tracer test = sdkTracerProvider.get(INSTRUMENTATION_SCOPE_NAME); + Span span = test.spanBuilder(SPAN_NAME) + .startSpan(); + try (Scope scope = span.makeCurrent()) { + testCounter.inc(2); + } + } + + await().atMost(TIMEOUT, SECONDS) + .ignoreException(com.github.tomakehurst.wiremock.client.VerificationException.class) + .until(() -> { + verify(postRequestedFor(urlEqualTo(ENDPOINT_PATH)) + .withHeader("Content-Type", equalTo("application/x-protobuf")) + .andMatching(getExemplarCountMatcher(1))); + return true; + }); + + } + + private static ValueMatcher getExemplarCountMatcher(int expectedCount) { + return request -> { + try { + ExportMetricsServiceRequest exportMetricsServiceRequest = ExportMetricsServiceRequest.parseFrom(request.getBody()); + for (ResourceMetrics resourceMetrics : exportMetricsServiceRequest.getResourceMetricsList()) { + for (InstrumentationLibraryMetrics instrumentationLibraryMetrics : resourceMetrics.getInstrumentationLibraryMetricsList()) { + for (Metric metric : instrumentationLibraryMetrics.getMetricsList()) { + for (DoubleDataPoint doubleDataPoint : metric.getDoubleSum().getDataPointsList()) { + if (doubleDataPoint.getExemplarsCount() == expectedCount) { + return MatchResult.exactMatch(); + } + } + } + } + } + } catch (InvalidProtocolBufferException e) { + throw new RuntimeException(e); + } + return MatchResult.noMatch(); + }; + } +} From c4dc8338780594f85d2e9e75518ab24b8b00de42 Mon Sep 17 00:00:00 2001 From: Aleksandr Turchenko Date: Fri, 3 Nov 2023 01:02:43 +0400 Subject: [PATCH 026/870] Fixes issue #887: Sort histogram bounds before validation (#888) Signed-off-by: Aleksandr Turchenko --- .../metrics/simpleclient/bridge/SimpleclientCollector.java | 2 +- .../metrics/simpleclient/bridge/SimpleclientCollectorTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java index dfb88dda9..a775b2f55 100644 --- a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java +++ b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java @@ -288,8 +288,8 @@ private Unit convertUnit(Collector.MetricFamilySamples samples) { private ClassicHistogramBuckets makeBuckets(Map cumulativeBuckets) { List upperBounds = new ArrayList<>(cumulativeBuckets.size()); - Collections.sort(upperBounds); upperBounds.addAll(cumulativeBuckets.keySet()); + Collections.sort(upperBounds); ClassicHistogramBuckets.Builder result = ClassicHistogramBuckets.builder(); long previousCount = 0L; for (Double upperBound : upperBounds) { diff --git a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java index a3445c9af..9d1e8f1b9 100644 --- a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java +++ b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java @@ -94,7 +94,7 @@ public void testHistogramComplete() throws IOException, InterruptedException { .name("response_size_bytes") .help("response size in Bytes") .labelNames("status") - .buckets(64, 256) + .buckets(64, 256, 512.1) .register(origRegistry); histogram.labels("200").observeWithExemplar(38, "trace_id", "1", "span_id", "2"); histogram.labels("200").observeWithExemplar(127, "trace_id", "3", "span_id", "4"); From a192c7887e7542c982d7f07e30fcd2737b4a73ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 2 Nov 2023 22:20:35 +0100 Subject: [PATCH 027/870] Restore automatic module name #884 (#889) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .github/workflows/github-pages.yaml | 2 +- pom.xml | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 30569cd58..6edc0639a 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -62,7 +62,7 @@ jobs: - name: Build client_java run: ./mvnw -B clean install -DskipTests - name: Make Javadoc - run: ./mvnw -B compile javadoc:javadoc javadoc:aggregate + run: ./mvnw -B clean compile javadoc:javadoc javadoc:aggregate - name: Move the Javadoc to docs/static/api/ run: mv ./target/site/apidocs ./docs/static/api && echo && echo 'ls ./docs/static/api' && ls ./docs/static/api - name: Setup Pages diff --git a/pom.xml b/pom.xml index 9cf80aa67..114e35d4a 100644 --- a/pom.xml +++ b/pom.xml @@ -193,13 +193,11 @@ maven-bundle-plugin 2.4.0 true - org.apache.maven.plugins From bc2244d635598813d0845900c4d4db94895ca224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 9 Nov 2023 17:33:05 +0100 Subject: [PATCH 028/870] Fix sliding window rotation #894 (#896) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../metrics/core/metrics/SlidingWindow.java | 9 ++- .../core/metrics/SlidingWindowTest.java | 77 +++++++++++++++++++ 2 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java index b789e809c..62164a48b 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java @@ -2,6 +2,7 @@ import java.lang.reflect.Array; import java.util.concurrent.TimeUnit; +import java.util.function.LongSupplier; import java.util.function.ObjDoubleConsumer; import java.util.function.Supplier; @@ -22,6 +23,7 @@ public class SlidingWindow { private int currentBucket; private long lastRotateTimestampMillis; private final long durationBetweenRotatesMillis; + LongSupplier currentTimeMillis = System::currentTimeMillis; // to be replaced in unit tests /** * Example: If the {@code maxAgeSeconds} is 60 and {@code ageBuckets} is 3, then 3 instances of {@code T} @@ -56,11 +58,14 @@ public synchronized T current() { * Observe a value. */ public synchronized void observe(double value) { - observeFunction.accept(rotate(), value); + rotate(); + for (T t : ringBuffer) { + observeFunction.accept(t, value); + } } private T rotate() { - long timeSinceLastRotateMillis = System.currentTimeMillis() - lastRotateTimestampMillis; + long timeSinceLastRotateMillis = currentTimeMillis.getAsLong() - lastRotateTimestampMillis; while (timeSinceLastRotateMillis > durationBetweenRotatesMillis) { ringBuffer[currentBucket] = constructor.get(); if (++currentBucket >= ringBuffer.length) { diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java new file mode 100644 index 000000000..3b57220f8 --- /dev/null +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java @@ -0,0 +1,77 @@ +package io.prometheus.metrics.core.metrics; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicLong; + +public class SlidingWindowTest { + + static class Observer { + + List values = new ArrayList<>(); + + public void observe(double value) { + values.add(value); + } + + void assertValues(double... expectedValues) { + ArrayList expectedList = new ArrayList<>(); + for (double expectedValue : expectedValues) { + expectedList.add(expectedValue); + } + Assert.assertEquals(expectedList, values); + } + } + + private final AtomicLong currentTimeMillis = new AtomicLong(); + private SlidingWindow ringBuffer; + private final long maxAgeSeconds = 30; + private final int ageBuckets = 5; + private final long timeBetweenRotateMillis = maxAgeSeconds * 1000 / ageBuckets + 2; + + @Before + public void setUp() { + currentTimeMillis.set(System.currentTimeMillis()); + ringBuffer = new SlidingWindow<>(Observer.class, Observer::new, Observer::observe, maxAgeSeconds, ageBuckets); + ringBuffer.currentTimeMillis = currentTimeMillis::get; + } + + @Test + public void testRotate() { + for (int i=0; i first observation evicted + ringBuffer.current().assertValues(2.0); + ringBuffer.observe(3.0); + ringBuffer.current().assertValues(2.0, 3.0); + currentTimeMillis.addAndGet(2 * timeBetweenRotateMillis); // 7/5 of max age + ringBuffer.current().assertValues(3.0); + currentTimeMillis.addAndGet(3 * timeBetweenRotateMillis); // 10/5 of max age + ringBuffer.current().assertValues(); // empty + } +} From 60c2553663b0ca3c6defa1f6622473078f8a35b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Sun, 12 Nov 2023 11:43:15 +0100 Subject: [PATCH 029/870] Fix metric name filter in MultiCollector #891 (#893) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../model/registry/PrometheusRegistry.java | 11 +- .../model/registry/MetricNameFilterTest.java | 15 ++- .../MultiCollectorNameFilterTest.java | 100 ++++++++++++++++++ 3 files changed, 119 insertions(+), 7 deletions(-) create mode 100644 prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java index a8ab5a762..8b059adb3 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java @@ -94,6 +94,8 @@ public MetricSnapshots scrape(Predicate includedNames, PrometheusScrapeR MetricSnapshots.Builder result = MetricSnapshots.builder(); for (Collector collector : collectors) { String prometheusName = collector.getPrometheusName(); + // prometheusName == null means the name is unknown, and we have to scrape to learn the name. + // prometheusName != null means we can skip the scrape if the name is excluded. if (prometheusName == null || includedNames.test(prometheusName)) { MetricSnapshot snapshot = scrapeRequest == null ? collector.collect(includedNames) : collector.collect(includedNames, scrapeRequest); if (snapshot != null) { @@ -103,8 +105,9 @@ public MetricSnapshots scrape(Predicate includedNames, PrometheusScrapeR } for (MultiCollector collector : multiCollectors) { List prometheusNames = collector.getPrometheusNames(); - boolean excluded = true; // the multi-collector is excluded unless - // at least one name matches + // empty prometheusNames means the names are unknown, and we have to scrape to learn the names. + // non-empty prometheusNames means we can exclude the collector if all names are excluded by the filter. + boolean excluded = !prometheusNames.isEmpty(); for (String prometheusName : prometheusNames) { if (includedNames.test(prometheusName)) { excluded = false; @@ -112,8 +115,8 @@ public MetricSnapshots scrape(Predicate includedNames, PrometheusScrapeR } } if (!excluded) { - MetricSnapshots snaphots = scrapeRequest == null ? collector.collect(includedNames) : collector.collect(includedNames, scrapeRequest); - for (MetricSnapshot snapshot : snaphots) { + MetricSnapshots snapshots = scrapeRequest == null ? collector.collect(includedNames) : collector.collect(includedNames, scrapeRequest); + for (MetricSnapshot snapshot : snapshots) { if (snapshot != null) { result.metricSnapshot(snapshot); } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java index 3b74f9dee..91bcf74fc 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java @@ -1,12 +1,21 @@ package io.prometheus.metrics.model.registry; import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Predicate; + public class MetricNameFilterTest { private PrometheusRegistry registry; @@ -21,12 +30,12 @@ public void testCounter() { registry.register(() -> CounterSnapshot.builder() .name("counter1") .help("test counter 1") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder() + .dataPoint(CounterDataPointSnapshot.builder() .labels(Labels.of("path", "/hello")) .value(1.0) .build() ) - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder() + .dataPoint(CounterDataPointSnapshot.builder() .labels(Labels.of("path", "/goodbye")) .value(2.0) .build() @@ -36,7 +45,7 @@ public void testCounter() { registry.register(() -> CounterSnapshot.builder() .name("counter2") .help("test counter 2") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder() + .dataPoint(CounterDataPointSnapshot.builder() .value(1.0) .build() ) diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java new file mode 100644 index 000000000..b36d58aa6 --- /dev/null +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java @@ -0,0 +1,100 @@ +package io.prometheus.metrics.model.registry; + +import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.function.Predicate; + +public class MultiCollectorNameFilterTest { + + private PrometheusRegistry registry; + private boolean[] collectCalled = {false}; + private Predicate includedNames = null; + List prometheusNames = new ArrayList<>(); + + @Before + public void setUp() { + registry = new PrometheusRegistry(); + collectCalled[0] = false; + includedNames = null; + prometheusNames = Collections.emptyList(); + + registry.register(new MultiCollector() { + @Override + public MetricSnapshots collect() { + collectCalled[0] = true; + return MetricSnapshots.builder() + .metricSnapshot(CounterSnapshot.builder() + .name("counter_1") + .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) + .build() + ) + .metricSnapshot(GaugeSnapshot.builder() + .name("gauge_2") + .dataPoint(GaugeDataPointSnapshot.builder().value(1.0).build()) + .build() + ) + .build(); + } + + @Override + public List getPrometheusNames() { + return prometheusNames; + } + }); + } + + @Test + public void testPartialFilter() { + + includedNames = name -> name.equals("counter_1"); + + MetricSnapshots snapshots = registry.scrape(includedNames); + Assert.assertTrue(collectCalled[0]); + Assert.assertEquals(1, snapshots.size()); + Assert.assertEquals("counter_1", snapshots.get(0).getMetadata().getName()); + } + + @Test + public void testPartialFilterWithPrometheusNames() { + + includedNames = name -> name.equals("counter_1"); + prometheusNames = Arrays.asList("counter_1", "gauge_2"); + + MetricSnapshots snapshots = registry.scrape(includedNames); + Assert.assertTrue(collectCalled[0]); + Assert.assertEquals(1, snapshots.size()); + Assert.assertEquals("counter_1", snapshots.get(0).getMetadata().getName()); + } + + @Test + public void testCompleteFilter_CollectCalled() { + + includedNames = name -> !name.equals("counter_1") && !name.equals("gauge_2"); + + MetricSnapshots snapshots = registry.scrape(includedNames); + Assert.assertTrue(collectCalled[0]); + Assert.assertEquals(0, snapshots.size()); + } + + @Test + public void testCompleteFilter_CollectNotCalled() { + + includedNames = name -> !name.equals("counter_1") && !name.equals("gauge_2"); + prometheusNames = Arrays.asList("counter_1", "gauge_2"); + + MetricSnapshots snapshots = registry.scrape(includedNames); + Assert.assertFalse(collectCalled[0]); + Assert.assertEquals(0, snapshots.size()); + } +} From e8b3f87184db6caceebce90595f610b273c0be35 Mon Sep 17 00:00:00 2001 From: Doug Hoard Date: Sun, 12 Nov 2023 05:43:47 -0500 Subject: [PATCH 030/870] Added equals and hashcode. Changed code to catch an empty String (#897) Signed-off-by: dhoard --- .../metrics/model/snapshots/Unit.java | 19 ++++++- .../metrics/model/snapshots/UnitTest.java | 51 +++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java index d73980a97..94827c64c 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java @@ -1,5 +1,7 @@ package io.prometheus.metrics.model.snapshots; +import java.util.Objects; + /** * Some pre-defined units for convenience. You can create your own units with *
    @@ -23,13 +25,13 @@ public class Unit {
         public static final Unit AMPERES = new Unit("amperes");
     
         public Unit(String name) {
    -        this.name = name;
             if (name == null) {
                 throw new NullPointerException("Unit name cannot be null.");
             }
    -        if (name.isEmpty()) {
    +        if (name.trim().isEmpty()) {
                 throw new IllegalArgumentException("Unit name cannot be empty.");
             }
    +        this.name = name.trim();
         }
     
         @Override
    @@ -52,4 +54,17 @@ public static double secondsToMillis(double seconds) {
         public static double kiloBytesToBytes(double kilobytes) {
             return kilobytes * 1024;
         }
    +
    +    @Override
    +    public boolean equals(Object o) {
    +        if (this == o) return true;
    +        if (o == null || getClass() != o.getClass()) return false;
    +        Unit unit = (Unit) o;
    +        return Objects.equals(name, unit.name);
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +        return Objects.hash(name);
    +    }
     }
    diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java
    new file mode 100644
    index 000000000..f88458cc3
    --- /dev/null
    +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java
    @@ -0,0 +1,51 @@
    +package io.prometheus.metrics.model.snapshots;
    +
    +import org.junit.Assert;
    +import org.junit.Test;
    +
    +import static org.junit.Assert.fail;
    +
    +public class UnitTest {
    +
    +    @Test
    +    public void testEmpty() {
    +        try {
    +            new Unit(" ");
    +            fail("Expected IllegalArgumentException");
    +        } catch (IllegalArgumentException e) {
    +            // Expected
    +        }
    +    }
    +
    +    @Test
    +    public void testEquals1() {
    +        Unit unit1 = Unit.BYTES;
    +        Unit unit2 = new Unit("bytes");
    +
    +        Assert.assertEquals(unit2, unit1);
    +    }
    +
    +    @Test
    +    public void testEquals2() {
    +        Unit unit1 = new Unit("bytes ");
    +        Unit unit2 = new Unit("bytes");
    +
    +        Assert.assertEquals(unit2, unit1);
    +    }
    +
    +    @Test
    +    public void testEquals3() {
    +        Unit unit1 = new Unit(" bytes");
    +        Unit unit2 = new Unit("bytes");
    +
    +        Assert.assertEquals(unit2, unit1);
    +    }
    +
    +    @Test
    +    public void testEquals4() {
    +        Unit unit1 = new Unit(" bytes ");
    +        Unit unit2 = new Unit("bytes");
    +
    +        Assert.assertEquals(unit2, unit1);
    +    }
    +}
    
    From dd31ee650585052affa76f3bdfa71e19ceda6c32 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Sun, 12 Nov 2023 12:21:04 +0100
    Subject: [PATCH 031/870] Fix breaking scrape API change #892 (#898)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../httpserver/HttpExchangeAdapter.java       | 11 +++++++++++
     .../servlet/jakarta/HttpExchangeAdapter.java  | 19 +++++++++++++++++++
     .../registry/PrometheusScrapeRequest.java     | 12 +++++++++---
     3 files changed, 39 insertions(+), 3 deletions(-)
    
    diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java
    index daaeb2dbd..3636acedf 100644
    --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java
    +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java
    @@ -49,6 +49,17 @@ public Enumeration getHeaders(String name) {
             public String getMethod() {
                 return httpExchange.getRequestMethod();
             }
    +
    +        @Override
    +        public String getRequestPath() {
    +            URI requestURI = httpExchange.getRequestURI();
    +            String uri = requestURI.toString();
    +            int qx = uri.indexOf('?');
    +            if (qx != -1) {
    +                uri = uri.substring(0, qx);
    +            }
    +            return uri;
    +        }
         }
     
         public class HttpResponse implements PrometheusHttpResponse {
    diff --git a/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java b/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java
    index c55eb7967..afcfb6cbc 100644
    --- a/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java
    +++ b/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java
    @@ -8,6 +8,7 @@
     
     import java.io.IOException;
     import java.io.OutputStream;
    +import java.net.URI;
     import java.util.Enumeration;
     
     public class HttpExchangeAdapter implements PrometheusHttpExchange {
    @@ -67,6 +68,24 @@ public Enumeration getHeaders(String name) {
             public String getMethod() {
                 return request.getMethod();
             }
    +
    +        @Override
    +        public String getRequestPath() {
    +            StringBuilder uri = new StringBuilder();
    +            String contextPath = request.getContextPath();
    +            if (contextPath.startsWith("/")) {
    +                uri.append(contextPath);
    +            }
    +            String servletPath = request.getServletPath();
    +            if (servletPath.startsWith("/")) {
    +                uri.append(servletPath);
    +            }
    +            String pathInfo = request.getPathInfo();
    +            if (pathInfo != null) {
    +                uri.append(pathInfo);
    +            }
    +            return uri.toString();
    +        }
         }
     
         public static class Response implements PrometheusHttpResponse {
    diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java
    index 268a326e1..e8651292e 100644
    --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java
    +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java
    @@ -2,10 +2,16 @@
     
     /**
      * Infos extracted from the request received by the endpoint
    - * 
      */
     public interface PrometheusScrapeRequest {
    -	
    -	String[] getParameterValues(String name);
     
    +	/**
    +	 * Absolute path of the HTTP request.
    +	 */
    +	String getRequestPath();
    +
    +	/**
    +	 * See {@code jakarta.servlet.ServletRequest.getParameterValues(String name)}
    +	 */
    +	String[] getParameterValues(String name);
     }
    
    From edaa65ee91750bb74bbe7c69e41e86b44aff5836 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Sun, 12 Nov 2023 13:55:53 +0100
    Subject: [PATCH 032/870] Bump dependency versions (#899)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../example-greeting-service/pom.xml               |  2 +-
     .../example-greeting-service/version-rules.xml     | 12 ++++++++++++
     .../example-hello-world-app/pom.xml                |  2 +-
     .../example-hello-world-app/version-rules.xml      | 12 ++++++++++++
     examples/example-exporter-servlet-tomcat/pom.xml   |  2 +-
     .../version-rules.xml                              | 12 ++++++++++++
     .../example-simpleclient-bridge/version-rules.xml  | 12 ++++++++++++
     .../version-rules.xml                              |  6 ++++++
     .../it-exporter-servlet-jetty-sample/pom.xml       |  4 ++--
     .../version-rules.xml                              |  6 ++++++
     .../it-exporter-servlet-tomcat-sample/pom.xml      |  2 +-
     .../version-rules.xml                              | 12 ++++++++++++
     .../it-exporter/it-exporter-test/pom.xml           |  2 +-
     .../it-exporter/it-exporter-test/version-rules.xml |  6 ++++++
     integration-tests/it-exporter/version-rules.xml    |  6 ++++++
     integration-tests/pom.xml                          |  2 +-
     integration-tests/version-rules.xml                |  6 ++++++
     .../version-rules.xml                              |  6 ------
     .../version-rules.xml                              |  6 ------
     prometheus-metrics-exporter-opentelemetry/pom.xml  |  8 ++++----
     .../exporter/opentelemetry/ExemplarTest.java       | 14 ++++++++++----
     .../version-rules.xml                              |  6 ++++++
     .../version-rules.xml                              |  6 ------
     prometheus-metrics-instrumentation-jvm/pom.xml     |  2 +-
     .../version-rules.xml                              |  6 ------
     .../version-rules.xml                              |  6 ++++++
     .../version-rules.xml                              |  6 ++++++
     .../version-rules.xml                              |  6 +++---
     28 files changed, 134 insertions(+), 44 deletions(-)
     create mode 100644 examples/example-exemplars-tail-sampling/example-greeting-service/version-rules.xml
     create mode 100644 examples/example-exemplars-tail-sampling/example-hello-world-app/version-rules.xml
     create mode 100644 examples/example-exporter-servlet-tomcat/version-rules.xml
     create mode 100644 examples/example-simpleclient-bridge/version-rules.xml
     create mode 100644 integration-tests/it-exporter/it-exporter-httpserver-sample/version-rules.xml
     create mode 100644 integration-tests/it-exporter/it-exporter-servlet-jetty-sample/version-rules.xml
     create mode 100644 integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/version-rules.xml
     create mode 100644 integration-tests/it-exporter/it-exporter-test/version-rules.xml
     create mode 100644 integration-tests/it-exporter/version-rules.xml
     create mode 100644 integration-tests/version-rules.xml
     create mode 100644 prometheus-metrics-exporter-opentelemetry/version-rules.xml
     create mode 100644 prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/version-rules.xml
     create mode 100644 prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/version-rules.xml
    
    diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    index 29827ffbe..d797655ad 100644
    --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    @@ -50,7 +50,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            10.1.11
    +            10.1.15
             
         
     
    diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/version-rules.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/version-rules.xml
    new file mode 100644
    index 000000000..7b60b893a
    --- /dev/null
    +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/version-rules.xml
    @@ -0,0 +1,12 @@
    +
    +    
    +        
    +            
    +                
    +                .*-M[0-9]+
    +            
    +        
    +    
    +
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    index bc6db20f7..e8b06203c 100644
    --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    @@ -50,7 +50,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            10.1.11
    +            10.1.15
             
         
     
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/version-rules.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/version-rules.xml
    new file mode 100644
    index 000000000..7b60b893a
    --- /dev/null
    +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/version-rules.xml
    @@ -0,0 +1,12 @@
    +
    +    
    +        
    +            
    +                
    +                .*-M[0-9]+
    +            
    +        
    +    
    +
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml
    index 75f3beeab..b4dd55ce3 100644
    --- a/examples/example-exporter-servlet-tomcat/pom.xml
    +++ b/examples/example-exporter-servlet-tomcat/pom.xml
    @@ -50,7 +50,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            10.1.11
    +            10.1.15
             
         
     
    diff --git a/examples/example-exporter-servlet-tomcat/version-rules.xml b/examples/example-exporter-servlet-tomcat/version-rules.xml
    new file mode 100644
    index 000000000..7b60b893a
    --- /dev/null
    +++ b/examples/example-exporter-servlet-tomcat/version-rules.xml
    @@ -0,0 +1,12 @@
    +
    +    
    +        
    +            
    +                
    +                .*-M[0-9]+
    +            
    +        
    +    
    +
    diff --git a/examples/example-simpleclient-bridge/version-rules.xml b/examples/example-simpleclient-bridge/version-rules.xml
    new file mode 100644
    index 000000000..366b579fe
    --- /dev/null
    +++ b/examples/example-simpleclient-bridge/version-rules.xml
    @@ -0,0 +1,12 @@
    +
    +    
    +        
    +            
    +                
    +                .*(alpha|beta)-[0-9]
    +            
    +        
    +    
    +
    diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/version-rules.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/version-rules.xml
    new file mode 100644
    index 000000000..76f8da4fd
    --- /dev/null
    +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    \ No newline at end of file
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    index 823997f40..6d2bc1a45 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    @@ -45,12 +45,12 @@
             
                 org.eclipse.jetty
                 jetty-server
    -            11.0.15
    +            11.0.18
             
             
                 org.eclipse.jetty
                 jetty-servlet
    -            11.0.15
    +            11.0.18
             
         
     
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/version-rules.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/version-rules.xml
    new file mode 100644
    index 000000000..76f8da4fd
    --- /dev/null
    +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    \ No newline at end of file
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    index 1cef98dd0..d0ab3c886 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    @@ -45,7 +45,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            10.1.11
    +            10.1.15
             
         
     
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/version-rules.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/version-rules.xml
    new file mode 100644
    index 000000000..7b60b893a
    --- /dev/null
    +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/version-rules.xml
    @@ -0,0 +1,12 @@
    +
    +    
    +        
    +            
    +                
    +                .*-M[0-9]+
    +            
    +        
    +    
    +
    diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml
    index 05661f8c0..ef92990f1 100644
    --- a/integration-tests/it-exporter/it-exporter-test/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml
    @@ -51,7 +51,7 @@
             
                 commons-io
                 commons-io
    -            2.13.0
    +            2.15.0
                 test
             
             
    diff --git a/integration-tests/it-exporter/it-exporter-test/version-rules.xml b/integration-tests/it-exporter/it-exporter-test/version-rules.xml
    new file mode 100644
    index 000000000..76f8da4fd
    --- /dev/null
    +++ b/integration-tests/it-exporter/it-exporter-test/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    \ No newline at end of file
    diff --git a/integration-tests/it-exporter/version-rules.xml b/integration-tests/it-exporter/version-rules.xml
    new file mode 100644
    index 000000000..76f8da4fd
    --- /dev/null
    +++ b/integration-tests/it-exporter/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    \ No newline at end of file
    diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
    index d2f1a7fb5..223543b6d 100644
    --- a/integration-tests/pom.xml
    +++ b/integration-tests/pom.xml
    @@ -55,7 +55,7 @@
                 
                     org.testcontainers
                     testcontainers
    -                1.17.2
    +                1.19.1
                     test
                 
             
    diff --git a/integration-tests/version-rules.xml b/integration-tests/version-rules.xml
    new file mode 100644
    index 000000000..76f8da4fd
    --- /dev/null
    +++ b/integration-tests/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    \ No newline at end of file
    diff --git a/prometheus-metrics-exporter-common/version-rules.xml b/prometheus-metrics-exporter-common/version-rules.xml
    index 318e865f5..5c6d39593 100644
    --- a/prometheus-metrics-exporter-common/version-rules.xml
    +++ b/prometheus-metrics-exporter-common/version-rules.xml
    @@ -2,11 +2,5 @@
              xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 https://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">
         
    -        
    -            
    -                
    -                [^8].*
    -            
    -        
         
     
    diff --git a/prometheus-metrics-exporter-httpserver/version-rules.xml b/prometheus-metrics-exporter-httpserver/version-rules.xml
    index 318e865f5..5c6d39593 100644
    --- a/prometheus-metrics-exporter-httpserver/version-rules.xml
    +++ b/prometheus-metrics-exporter-httpserver/version-rules.xml
    @@ -2,11 +2,5 @@
              xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 https://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">
         
    -        
    -            
    -                
    -                [^8].*
    -            
    -        
         
     
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index 175c9a5dd..9f6ace627 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -82,7 +82,7 @@
             
                 org.wiremock
                 wiremock
    -            3.2.0
    +            3.3.1
                 test
             
             
    @@ -94,7 +94,7 @@
             
                 io.opentelemetry
                 opentelemetry-proto
    -            0.17.1
    +            1.7.1-alpha
                 test
             
             
    @@ -134,13 +134,13 @@
                         
                             io.opentelemetry
                             opentelemetry-api
    -                        1.29.0
    +                        ${otel.version}
                             ${project.basedir}/src/main/resources/lib/
                         
                         
                             io.opentelemetry
                             opentelemetry-context
    -                        1.29.0
    +                        ${otel.version}
                             ${project.basedir}/src/main/resources/lib/
                         
                     
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java
    index 0226c131c..2482d6857 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java
    @@ -9,9 +9,9 @@
     import io.opentelemetry.api.trace.Tracer;
     import io.opentelemetry.context.Scope;
     import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest;
    -import io.opentelemetry.proto.metrics.v1.DoubleDataPoint;
     import io.opentelemetry.proto.metrics.v1.InstrumentationLibraryMetrics;
     import io.opentelemetry.proto.metrics.v1.Metric;
    +import io.opentelemetry.proto.metrics.v1.NumberDataPoint;
     import io.opentelemetry.proto.metrics.v1.ResourceMetrics;
     import io.opentelemetry.sdk.trace.SdkTracerProvider;
     import io.opentelemetry.sdk.trace.samplers.Sampler;
    @@ -23,7 +23,13 @@
     import org.junit.Rule;
     import org.junit.Test;
     
    -import static com.github.tomakehurst.wiremock.client.WireMock.*;
    +import static com.github.tomakehurst.wiremock.client.WireMock.containing;
    +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
    +import static com.github.tomakehurst.wiremock.client.WireMock.ok;
    +import static com.github.tomakehurst.wiremock.client.WireMock.post;
    +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor;
    +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
    +import static com.github.tomakehurst.wiremock.client.WireMock.verify;
     import static java.util.concurrent.TimeUnit.SECONDS;
     import static org.awaitility.Awaitility.await;
     
    @@ -122,8 +128,8 @@ private static ValueMatcher getExemplarCountMatcher(int expectedCount)
                     for (ResourceMetrics resourceMetrics : exportMetricsServiceRequest.getResourceMetricsList()) {
                         for (InstrumentationLibraryMetrics instrumentationLibraryMetrics : resourceMetrics.getInstrumentationLibraryMetricsList()) {
                             for (Metric metric : instrumentationLibraryMetrics.getMetricsList()) {
    -                            for (DoubleDataPoint doubleDataPoint : metric.getDoubleSum().getDataPointsList()) {
    -                                if (doubleDataPoint.getExemplarsCount() == expectedCount) {
    +                            for (NumberDataPoint numberDataPoint : metric.getSum().getDataPointsList()) {
    +                                if (numberDataPoint.getExemplarsCount() == expectedCount) {
                                         return MatchResult.exactMatch();
                                     }
                                 }
    diff --git a/prometheus-metrics-exporter-opentelemetry/version-rules.xml b/prometheus-metrics-exporter-opentelemetry/version-rules.xml
    new file mode 100644
    index 000000000..76f8da4fd
    --- /dev/null
    +++ b/prometheus-metrics-exporter-opentelemetry/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    \ No newline at end of file
    diff --git a/prometheus-metrics-exporter-servlet-jakarta/version-rules.xml b/prometheus-metrics-exporter-servlet-jakarta/version-rules.xml
    index 318e865f5..5c6d39593 100644
    --- a/prometheus-metrics-exporter-servlet-jakarta/version-rules.xml
    +++ b/prometheus-metrics-exporter-servlet-jakarta/version-rules.xml
    @@ -2,11 +2,5 @@
              xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 https://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">
         
    -        
    -            
    -                
    -                [^8].*
    -            
    -        
         
     
    diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml
    index 1b42d176d..56b2dc46a 100644
    --- a/prometheus-metrics-instrumentation-jvm/pom.xml
    +++ b/prometheus-metrics-instrumentation-jvm/pom.xml
    @@ -58,7 +58,7 @@
             
                 org.mockito
                 mockito-core
    -            4.11.0
    +            5.7.0
                 test
             
             
    diff --git a/prometheus-metrics-instrumentation-jvm/version-rules.xml b/prometheus-metrics-instrumentation-jvm/version-rules.xml
    index 904c3c3a1..5c6d39593 100644
    --- a/prometheus-metrics-instrumentation-jvm/version-rules.xml
    +++ b/prometheus-metrics-instrumentation-jvm/version-rules.xml
    @@ -2,11 +2,5 @@
              xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 https://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">
         
    -        
    -            
    -                
    -                [^9].*
    -            
    -        
         
     
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/version-rules.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/version-rules.xml
    new file mode 100644
    index 000000000..76f8da4fd
    --- /dev/null
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    \ No newline at end of file
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/version-rules.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/version-rules.xml
    new file mode 100644
    index 000000000..76f8da4fd
    --- /dev/null
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    \ No newline at end of file
    diff --git a/prometheus-metrics-simpleclient-bridge/version-rules.xml b/prometheus-metrics-simpleclient-bridge/version-rules.xml
    index 904c3c3a1..c0e533e9e 100644
    --- a/prometheus-metrics-simpleclient-bridge/version-rules.xml
    +++ b/prometheus-metrics-simpleclient-bridge/version-rules.xml
    @@ -2,10 +2,10 @@
              xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 https://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">
         
    -        
    +        
                 
    -                
    -                [^9].*
    +                
    +                .*(alpha|beta)-[0-9]
                 
             
         
    
    From 0f27ea13a6700b13ff72633e082531f9b3b3eddf Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Sun, 12 Nov 2023 12:38:43 +0100
    Subject: [PATCH 033/870] Temporarily add shaded dependencies to prepare for
     release
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     pom.xml                                           | 2 +-
     prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +-
     prometheus-metrics-exposition-formats/pom.xml     | 2 +-
     3 files changed, 3 insertions(+), 3 deletions(-)
    
    diff --git a/pom.xml b/pom.xml
    index 114e35d4a..bda8ea060 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -63,7 +63,7 @@
             prometheus-metrics-exporter-opentelemetry
             prometheus-metrics-instrumentation-jvm
             prometheus-metrics-simpleclient-bridge
    -        
    +        prometheus-metrics-shaded-dependencies
             examples
             benchmarks
             integration-tests
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index 9f6ace627..fa2538a9b 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -47,7 +47,7 @@
             
                 io.prometheus
                 prometheus-metrics-shaded-opentelemetry
    -            1.0.0
    +            ${project.version}
             
             
    
    From cb5a6d58d3eb812956a5baba8e601bfb7bca9ad2 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Sun, 12 Nov 2023 16:21:01 +0100
    Subject: [PATCH 034/870] Update OpenTelemetry version
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../pom.xml                                   | 25 +------------------
     .../opentelemetry/OpenTelemetryExporter.java  | 18 ++++++-------
     .../PrometheusInstrumentationScope.java       |  2 +-
     .../PrometheusMetricProducer.java             | 16 ++++++------
     .../otelmodel/DoublePointDataImpl.java        |  6 ++---
     .../ExponentialHistogramBucketsImpl.java      |  2 +-
     .../ExponentialHistogramPointDataImpl.java    |  8 +++---
     .../otelmodel/HistogramPointDataImpl.java     |  6 ++---
     .../otelmodel/MetricDataFactory.java          |  6 ++---
     .../otelmodel/PointDataImpl.java              |  8 +++---
     .../otelmodel/PrometheusClassicHistogram.java |  8 +++---
     .../otelmodel/PrometheusCounter.java          |  8 +++---
     .../otelmodel/PrometheusData.java             | 20 +++++++--------
     .../otelmodel/PrometheusGauge.java            |  6 ++---
     .../otelmodel/PrometheusInfo.java             |  8 +++---
     .../otelmodel/PrometheusMetricData.java       | 12 ++++-----
     .../otelmodel/PrometheusNativeHistogram.java  | 10 ++++----
     .../otelmodel/PrometheusStateSet.java         |  8 +++---
     .../otelmodel/PrometheusSummary.java          |  6 ++---
     .../otelmodel/PrometheusUnknown.java          |  6 ++---
     .../otelmodel/SummaryPointDataImpl.java       |  8 +++---
     .../otelmodel/ValueAtQuantileImpl.java        |  2 +-
     .../pom.xml                                   | 10 ++------
     23 files changed, 90 insertions(+), 119 deletions(-)
    
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index fa2538a9b..e84bef9b8 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -17,8 +17,7 @@
         
     
         
    -        1.28.0
    -        ${otel.version}-alpha
    +        1.31.0
             io.prometheus.metrics.exporter.opentelemetry
         
     
    @@ -49,28 +48,6 @@
                 prometheus-metrics-shaded-opentelemetry
                 ${project.version}
             
    -        
     
             
             
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java
    index 31f263fd9..a59948002 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java
    @@ -3,15 +3,15 @@
     import io.prometheus.metrics.config.ExporterOpenTelemetryProperties;
     import io.prometheus.metrics.config.PrometheusProperties;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.exporter.otlp.http.metrics.OtlpHttpMetricExporter;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.exporter.otlp.metrics.OtlpGrpcMetricExporter;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.common.InstrumentationScopeInfo;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.export.MetricExporter;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.export.PeriodicMetricReader;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.resources.Resource;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.resources.ResourceBuilder;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.exporter.otlp.http.metrics.OtlpHttpMetricExporter;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.exporter.otlp.metrics.OtlpGrpcMetricExporter;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.common.InstrumentationScopeInfo;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.export.MetricExporter;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.export.PeriodicMetricReader;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.Resource;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.ResourceBuilder;
     
     import java.time.Duration;
     import java.util.HashMap;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java
    index 1f38e66e2..da78e2e41 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java
    @@ -1,6 +1,6 @@
     package io.prometheus.metrics.exporter.opentelemetry;
     
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.common.InstrumentationScopeInfo;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.common.InstrumentationScopeInfo;
     
     import java.util.Properties;
     
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java
    index fc7e047b1..72dd968db 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java
    @@ -12,19 +12,19 @@
     import io.prometheus.metrics.model.snapshots.StateSetSnapshot;
     import io.prometheus.metrics.model.snapshots.SummarySnapshot;
     import io.prometheus.metrics.model.snapshots.UnknownSnapshot;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.Attributes;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.AttributesBuilder;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.common.InstrumentationScopeInfo;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.internal.export.MetricProducer;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.resources.Resource;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.resources.ResourceBuilder;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.AttributesBuilder;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.common.InstrumentationScopeInfo;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.export.CollectionRegistration;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.Resource;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.ResourceBuilder;
     
     import java.util.ArrayList;
     import java.util.Collection;
     import java.util.List;
     
    -class PrometheusMetricProducer implements MetricProducer {
    +class PrometheusMetricProducer implements CollectionRegistration {
     
         private final PrometheusRegistry registry;
         private final Resource resource;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java
    index 6c93f74e7..5f6e22ff1 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java
    @@ -1,8 +1,8 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.Attributes;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoubleExemplarData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoublePointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData;
     
     import java.util.List;
     
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java
    index d365c26fb..2f7c2ca9f 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java
    @@ -1,6 +1,6 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.ExponentialHistogramBuckets;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramBuckets;
     
     import java.util.ArrayList;
     import java.util.List;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java
    index 86d56d2d7..e28deaf65 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java
    @@ -1,9 +1,9 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.Attributes;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoubleExemplarData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.ExponentialHistogramBuckets;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.ExponentialHistogramPointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramBuckets;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramPointData;
     
     import java.util.List;
     
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java
    index 7908bee2b..68e2eefaf 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java
    @@ -1,8 +1,8 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.Attributes;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoubleExemplarData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.HistogramPointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.HistogramPointData;
     
     import java.util.List;
     
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java
    index 8557e0a29..26fb13738 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java
    @@ -7,9 +7,9 @@
     import io.prometheus.metrics.model.snapshots.StateSetSnapshot;
     import io.prometheus.metrics.model.snapshots.SummarySnapshot;
     import io.prometheus.metrics.model.snapshots.UnknownSnapshot;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.common.InstrumentationScopeInfo;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.resources.Resource;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.common.InstrumentationScopeInfo;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.Resource;
     
     public class MetricDataFactory {
     
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java
    index a0b4aed83..c57b0e064 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java
    @@ -1,9 +1,9 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.Attributes;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoubleExemplarData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.ExemplarData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.PointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExemplarData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.PointData;
     
     import java.util.List;
     
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java
    index 08ef9ffc1..03144ed0e 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java
    @@ -2,10 +2,10 @@
     
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
     import io.prometheus.metrics.model.snapshots.HistogramSnapshot;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.AggregationTemporality;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.HistogramData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.HistogramPointData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.AggregationTemporality;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.HistogramData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.HistogramPointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType;
     
     import java.util.ArrayList;
     import java.util.Collection;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java
    index ed58fa5c7..6bf81e945 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java
    @@ -1,9 +1,9 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.AggregationTemporality;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoublePointData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.SumData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.AggregationTemporality;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SumData;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     
     import java.util.Collection;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java
    index 56d10847b..747fa7b25 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java
    @@ -1,16 +1,16 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
     import io.prometheus.metrics.model.snapshots.*;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.Attributes;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.AttributesBuilder;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.trace.SpanContext;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.trace.TraceFlags;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.trace.TraceState;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.Data;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoubleExemplarData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.PointData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.internal.data.ImmutableDoubleExemplarData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.AttributesBuilder;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.trace.SpanContext;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.trace.TraceFlags;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.trace.TraceState;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.Data;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.PointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.internal.data.ImmutableDoubleExemplarData;
     
     import java.util.List;
     import java.util.Objects;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java
    index 1278a6af3..73635e69a 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java
    @@ -1,9 +1,9 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
     import io.prometheus.metrics.model.snapshots.GaugeSnapshot;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoublePointData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.GaugeData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.GaugeData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType;
     
     import java.util.Collection;
     import java.util.List;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java
    index e5244a058..1c7ab6fff 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java
    @@ -1,10 +1,10 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
     import io.prometheus.metrics.model.snapshots.InfoSnapshot;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.AggregationTemporality;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoublePointData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.SumData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.AggregationTemporality;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SumData;
     
     import java.util.Collection;
     import java.util.Collections;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java
    index ddf2160d0..0ecbfd76e 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java
    @@ -3,12 +3,12 @@
     import io.prometheus.metrics.model.snapshots.MetricMetadata;
     import io.prometheus.metrics.model.snapshots.PrometheusNaming;
     import io.prometheus.metrics.model.snapshots.Unit;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.common.InstrumentationScopeInfo;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoublePointData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.SumData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.resources.Resource;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.common.InstrumentationScopeInfo;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SumData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.Resource;
     
     class PrometheusMetricData> implements MetricData {
     
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java
    index 9610a7bf9..e150e44a1 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java
    @@ -2,11 +2,11 @@
     
     import io.prometheus.metrics.model.snapshots.HistogramSnapshot;
     import io.prometheus.metrics.model.snapshots.NativeHistogramBuckets;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.AggregationTemporality;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.ExponentialHistogramBuckets;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.ExponentialHistogramData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.ExponentialHistogramPointData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.AggregationTemporality;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramBuckets;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramPointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType;
     
     import java.util.Collection;
     import java.util.List;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java
    index 9b871d50c..0ebaf572c 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java
    @@ -2,10 +2,10 @@
     
     import io.prometheus.metrics.model.snapshots.Labels;
     import io.prometheus.metrics.model.snapshots.StateSetSnapshot;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.AggregationTemporality;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoublePointData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.SumData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.AggregationTemporality;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SumData;
     
     import java.util.ArrayList;
     import java.util.Collection;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java
    index a89bc4058..7b7ba858b 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java
    @@ -2,9 +2,9 @@
     
     import io.prometheus.metrics.model.snapshots.Quantile;
     import io.prometheus.metrics.model.snapshots.SummarySnapshot;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.SummaryData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.SummaryPointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SummaryData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SummaryPointData;
     
     import java.util.Collection;
     import java.util.List;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java
    index 2f717a652..064774420 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java
    @@ -1,9 +1,9 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
     import io.prometheus.metrics.model.snapshots.UnknownSnapshot;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoublePointData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.GaugeData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.MetricDataType;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.GaugeData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType;
     
     import java.util.Collection;
     import java.util.List;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java
    index 0e9c61c1f..f5af6589c 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java
    @@ -1,9 +1,9 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.api.common.Attributes;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.DoubleExemplarData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.SummaryPointData;
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.ValueAtQuantile;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SummaryPointData;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ValueAtQuantile;
     
     import java.util.ArrayList;
     import java.util.List;
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java
    index fafc2be77..4d1c2002f 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java
    @@ -1,6 +1,6 @@
     package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
     
    -import io.prometheus.metrics.shaded.io_opentelemetry_1_28_0.sdk.metrics.data.ValueAtQuantile;
    +import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ValueAtQuantile;
     
     public class ValueAtQuantileImpl implements ValueAtQuantile {
     
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    index bc1e62549..05389d1ee 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    @@ -16,9 +16,8 @@
         
     
         
    -        1.28.0
    -        ${otel.version}-alpha
    -        1_28_0
    +        1.31.0
    +        1_31_0
         
     
         
    @@ -48,11 +47,6 @@
                 opentelemetry-sdk
                 ${otel.version}
             
    -        
    -            io.opentelemetry
    -            opentelemetry-semconv
    -            ${otel.semconv.version}
    -        
             
                 io.opentelemetry
                 opentelemetry-exporter-otlp
    
    From 0ae1ec08deb54b03bfb40b7b69f41c8f7522d730 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Sun, 12 Nov 2023 16:32:34 +0100
    Subject: [PATCH 035/870] [maven-release-plugin] prepare release v1.1.0
    
    ---
     benchmarks/pom.xml                                            | 2 +-
     .../example-greeting-service/pom.xml                          | 2 +-
     .../example-hello-world-app/pom.xml                           | 2 +-
     examples/example-exemplars-tail-sampling/pom.xml              | 2 +-
     examples/example-exporter-httpserver/pom.xml                  | 2 +-
     examples/example-exporter-multi-target/pom.xml                | 2 +-
     examples/example-exporter-opentelemetry/pom.xml               | 2 +-
     examples/example-exporter-servlet-tomcat/pom.xml              | 2 +-
     examples/example-native-histogram/pom.xml                     | 2 +-
     examples/example-prometheus-properties/pom.xml                | 2 +-
     examples/example-simpleclient-bridge/pom.xml                  | 2 +-
     examples/pom.xml                                              | 2 +-
     integration-tests/it-common/pom.xml                           | 2 +-
     .../it-exporter/it-exporter-httpserver-sample/pom.xml         | 2 +-
     .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml      | 2 +-
     .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml     | 2 +-
     integration-tests/it-exporter/it-exporter-test/pom.xml        | 2 +-
     integration-tests/it-exporter/pom.xml                         | 4 ++--
     integration-tests/pom.xml                                     | 2 +-
     pom.xml                                                       | 4 ++--
     prometheus-metrics-config/pom.xml                             | 2 +-
     prometheus-metrics-core/pom.xml                               | 2 +-
     prometheus-metrics-exporter-common/pom.xml                    | 2 +-
     prometheus-metrics-exporter-httpserver/pom.xml                | 2 +-
     prometheus-metrics-exporter-opentelemetry/pom.xml             | 2 +-
     prometheus-metrics-exporter-servlet-jakarta/pom.xml           | 2 +-
     prometheus-metrics-exposition-formats/pom.xml                 | 2 +-
     prometheus-metrics-instrumentation-jvm/pom.xml                | 2 +-
     prometheus-metrics-model/pom.xml                              | 2 +-
     prometheus-metrics-shaded-dependencies/pom.xml                | 2 +-
     .../prometheus-metrics-shaded-opentelemetry/pom.xml           | 2 +-
     .../prometheus-metrics-shaded-protobuf/pom.xml                | 2 +-
     prometheus-metrics-simpleclient-bridge/pom.xml                | 4 ++--
     prometheus-metrics-tracer/pom.xml                             | 2 +-
     .../prometheus-metrics-tracer-common/pom.xml                  | 2 +-
     .../prometheus-metrics-tracer-initializer/pom.xml             | 2 +-
     .../prometheus-metrics-tracer-otel-agent/pom.xml              | 2 +-
     .../prometheus-metrics-tracer-otel/pom.xml                    | 2 +-
     38 files changed, 41 insertions(+), 41 deletions(-)
    
    diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
    index 18f8f7b34..1fc1b45f2 100644
    --- a/benchmarks/pom.xml
    +++ b/benchmarks/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         benchmarks
    diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    index d797655ad..1c699d4ec 100644
    --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         example-greeting-service
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    index e8b06203c..d48a5a627 100644
    --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         example-hello-world-app
    diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml
    index 0e77e6206..7482831b2 100644
    --- a/examples/example-exemplars-tail-sampling/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         example-exemplars-tail-sampling
    diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml
    index 1e2e29293..524b00e33 100644
    --- a/examples/example-exporter-httpserver/pom.xml
    +++ b/examples/example-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         example-exporter-httpserver
    diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml
    index fa9d1a94a..d3ad59be2 100644
    --- a/examples/example-exporter-multi-target/pom.xml
    +++ b/examples/example-exporter-multi-target/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         example-exporter-multi-target
    diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml
    index 78d4ce8af..cbd85a325 100644
    --- a/examples/example-exporter-opentelemetry/pom.xml
    +++ b/examples/example-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         example-exporter-opentelemetry
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml
    index b4dd55ce3..caabaa0ad 100644
    --- a/examples/example-exporter-servlet-tomcat/pom.xml
    +++ b/examples/example-exporter-servlet-tomcat/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         example-exporter-servlet-tomcat
    diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml
    index b094f76db..c519cb092 100644
    --- a/examples/example-native-histogram/pom.xml
    +++ b/examples/example-native-histogram/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         example-native-histogram
    diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml
    index 14dad20ff..e7ccdacb3 100644
    --- a/examples/example-prometheus-properties/pom.xml
    +++ b/examples/example-prometheus-properties/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         example-prometheus-properties
    diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml
    index 3abc5f5ba..cf8dd8eb8 100644
    --- a/examples/example-simpleclient-bridge/pom.xml
    +++ b/examples/example-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         example-simpleclient-bridge
    diff --git a/examples/pom.xml b/examples/pom.xml
    index 61db27a97..3817ee353 100644
    --- a/examples/pom.xml
    +++ b/examples/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         examples
    diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml
    index ccff0a33c..2d4665483 100644
    --- a/integration-tests/it-common/pom.xml
    +++ b/integration-tests/it-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         it-common
    diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    index 3638eb7e1..5cb35c318 100644
    --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         it-exporter-httpserver-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    index 6d2bc1a45..54e6d3dab 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         it-exporter-servlet-jetty-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    index d0ab3c886..be71fb3db 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         it-exporter-servlet-tomcat-sample
    diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml
    index ef92990f1..88d1a1964 100644
    --- a/integration-tests/it-exporter/it-exporter-test/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         it-exporter-test
    diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml
    index 2802e6231..82e49c8e5 100644
    --- a/integration-tests/it-exporter/pom.xml
    +++ b/integration-tests/it-exporter/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         it-exporter
    @@ -29,7 +29,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        HEAD
    +        v1.1.0
         
     
         
    diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
    index 223543b6d..987e8d0b2 100644
    --- a/integration-tests/pom.xml
    +++ b/integration-tests/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         integration-tests
    diff --git a/pom.xml b/pom.xml
    index bda8ea060..db5c2a62e 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -5,7 +5,7 @@
     
         io.prometheus
         client_java
    -    1.1.0-SNAPSHOT
    +    1.1.0
     
         Prometheus Metrics Library
         http://github.com/prometheus/client_java
    @@ -30,7 +30,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        HEAD
    +        v1.1.0
         
     
         
    diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml
    index 6ed2c6411..e0a4d469d 100644
    --- a/prometheus-metrics-config/pom.xml
    +++ b/prometheus-metrics-config/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-config
    diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml
    index 70cc9c1b2..9ab34cbe6 100644
    --- a/prometheus-metrics-core/pom.xml
    +++ b/prometheus-metrics-core/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-core
    diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml
    index 8e64daaba..78ac62b9e 100644
    --- a/prometheus-metrics-exporter-common/pom.xml
    +++ b/prometheus-metrics-exporter-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-exporter-common
    diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml
    index b2e446fe1..e1a8519ce 100644
    --- a/prometheus-metrics-exporter-httpserver/pom.xml
    +++ b/prometheus-metrics-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-exporter-httpserver
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index e84bef9b8..fc05aa5e3 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-exporter-opentelemetry
    diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    index e562fbdee..46c79695c 100644
    --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-exporter-servlet-jakarta
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index 471b29da5..1703f0f77 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-exposition-formats
    diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml
    index 56b2dc46a..f452d488b 100644
    --- a/prometheus-metrics-instrumentation-jvm/pom.xml
    +++ b/prometheus-metrics-instrumentation-jvm/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-instrumentation-jvm
    diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml
    index 06d0c56d9..b3d56a29f 100644
    --- a/prometheus-metrics-model/pom.xml
    +++ b/prometheus-metrics-model/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-model
    diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml
    index a7ff63c82..30f980c79 100644
    --- a/prometheus-metrics-shaded-dependencies/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-shaded-dependencies
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    index 05389d1ee..39818a25d 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-shaded-opentelemetry
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    index 917892a98..aaf664ef8 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-shaded-protobuf
    diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml
    index 49efc4b4f..72577ec03 100644
    --- a/prometheus-metrics-simpleclient-bridge/pom.xml
    +++ b/prometheus-metrics-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0-SNAPSHOT
    +        1.1.0
         
     
         prometheus-metrics-simpleclient-bridge
    @@ -76,7 +76,7 @@
             
                 io.prometheus
                 prometheus-metrics-config
    -            1.1.0-SNAPSHOT
    +            1.1.0
                 compile
             
         
    diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml
    index fef4bb904..b27041f59 100644
    --- a/prometheus-metrics-tracer/pom.xml
    +++ b/prometheus-metrics-tracer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         client_java
    -    1.1.0-SNAPSHOT
    +    1.1.0
       
     
       prometheus-metrics-tracer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    index 0135ce7e3..9297bf610 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.1.0-SNAPSHOT
    +    1.1.0
       
     
       prometheus-metrics-tracer-common
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    index f769c41d5..697f5b700 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.1.0-SNAPSHOT
    +    1.1.0
       
     
       prometheus-metrics-tracer-initializer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    index 03864b703..524c2f0b6 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.1.0-SNAPSHOT
    +    1.1.0
       
     
       prometheus-metrics-tracer-otel-agent
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    index 4dcc2d56c..b2f6f781b 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.1.0-SNAPSHOT
    +    1.1.0
       
     
       prometheus-metrics-tracer-otel
    
    From 49afd6fc998b66b2843cc8255dbe7efeafac01ee Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Sun, 12 Nov 2023 16:32:37 +0100
    Subject: [PATCH 036/870] [maven-release-plugin] prepare for next development
     iteration
    
    ---
     benchmarks/pom.xml                                            | 2 +-
     .../example-greeting-service/pom.xml                          | 2 +-
     .../example-hello-world-app/pom.xml                           | 2 +-
     examples/example-exemplars-tail-sampling/pom.xml              | 2 +-
     examples/example-exporter-httpserver/pom.xml                  | 2 +-
     examples/example-exporter-multi-target/pom.xml                | 2 +-
     examples/example-exporter-opentelemetry/pom.xml               | 2 +-
     examples/example-exporter-servlet-tomcat/pom.xml              | 2 +-
     examples/example-native-histogram/pom.xml                     | 2 +-
     examples/example-prometheus-properties/pom.xml                | 2 +-
     examples/example-simpleclient-bridge/pom.xml                  | 2 +-
     examples/pom.xml                                              | 2 +-
     integration-tests/it-common/pom.xml                           | 2 +-
     .../it-exporter/it-exporter-httpserver-sample/pom.xml         | 2 +-
     .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml      | 2 +-
     .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml     | 2 +-
     integration-tests/it-exporter/it-exporter-test/pom.xml        | 2 +-
     integration-tests/it-exporter/pom.xml                         | 4 ++--
     integration-tests/pom.xml                                     | 2 +-
     pom.xml                                                       | 4 ++--
     prometheus-metrics-config/pom.xml                             | 2 +-
     prometheus-metrics-core/pom.xml                               | 2 +-
     prometheus-metrics-exporter-common/pom.xml                    | 2 +-
     prometheus-metrics-exporter-httpserver/pom.xml                | 2 +-
     prometheus-metrics-exporter-opentelemetry/pom.xml             | 2 +-
     prometheus-metrics-exporter-servlet-jakarta/pom.xml           | 2 +-
     prometheus-metrics-exposition-formats/pom.xml                 | 2 +-
     prometheus-metrics-instrumentation-jvm/pom.xml                | 2 +-
     prometheus-metrics-model/pom.xml                              | 2 +-
     prometheus-metrics-shaded-dependencies/pom.xml                | 2 +-
     .../prometheus-metrics-shaded-opentelemetry/pom.xml           | 2 +-
     .../prometheus-metrics-shaded-protobuf/pom.xml                | 2 +-
     prometheus-metrics-simpleclient-bridge/pom.xml                | 4 ++--
     prometheus-metrics-tracer/pom.xml                             | 2 +-
     .../prometheus-metrics-tracer-common/pom.xml                  | 2 +-
     .../prometheus-metrics-tracer-initializer/pom.xml             | 2 +-
     .../prometheus-metrics-tracer-otel-agent/pom.xml              | 2 +-
     .../prometheus-metrics-tracer-otel/pom.xml                    | 2 +-
     38 files changed, 41 insertions(+), 41 deletions(-)
    
    diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
    index 1fc1b45f2..b57d082df 100644
    --- a/benchmarks/pom.xml
    +++ b/benchmarks/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         benchmarks
    diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    index 1c699d4ec..5e58d1e78 100644
    --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         example-greeting-service
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    index d48a5a627..98b910a47 100644
    --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         example-hello-world-app
    diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml
    index 7482831b2..d0d0d2d4c 100644
    --- a/examples/example-exemplars-tail-sampling/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         example-exemplars-tail-sampling
    diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml
    index 524b00e33..b556efaf3 100644
    --- a/examples/example-exporter-httpserver/pom.xml
    +++ b/examples/example-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         example-exporter-httpserver
    diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml
    index d3ad59be2..1bc04d401 100644
    --- a/examples/example-exporter-multi-target/pom.xml
    +++ b/examples/example-exporter-multi-target/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         example-exporter-multi-target
    diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml
    index cbd85a325..06cae160a 100644
    --- a/examples/example-exporter-opentelemetry/pom.xml
    +++ b/examples/example-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         example-exporter-opentelemetry
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml
    index caabaa0ad..50cb17c84 100644
    --- a/examples/example-exporter-servlet-tomcat/pom.xml
    +++ b/examples/example-exporter-servlet-tomcat/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         example-exporter-servlet-tomcat
    diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml
    index c519cb092..4f7180bad 100644
    --- a/examples/example-native-histogram/pom.xml
    +++ b/examples/example-native-histogram/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         example-native-histogram
    diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml
    index e7ccdacb3..60249fbee 100644
    --- a/examples/example-prometheus-properties/pom.xml
    +++ b/examples/example-prometheus-properties/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         example-prometheus-properties
    diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml
    index cf8dd8eb8..981255de6 100644
    --- a/examples/example-simpleclient-bridge/pom.xml
    +++ b/examples/example-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         example-simpleclient-bridge
    diff --git a/examples/pom.xml b/examples/pom.xml
    index 3817ee353..aaf81b19f 100644
    --- a/examples/pom.xml
    +++ b/examples/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         examples
    diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml
    index 2d4665483..04198dc37 100644
    --- a/integration-tests/it-common/pom.xml
    +++ b/integration-tests/it-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         it-common
    diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    index 5cb35c318..846018037 100644
    --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         it-exporter-httpserver-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    index 54e6d3dab..eca28e70f 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         it-exporter-servlet-jetty-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    index be71fb3db..558590380 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         it-exporter-servlet-tomcat-sample
    diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml
    index 88d1a1964..7300b9318 100644
    --- a/integration-tests/it-exporter/it-exporter-test/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         it-exporter-test
    diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml
    index 82e49c8e5..c54b423f8 100644
    --- a/integration-tests/it-exporter/pom.xml
    +++ b/integration-tests/it-exporter/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         it-exporter
    @@ -29,7 +29,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        v1.1.0
    +        HEAD
         
     
         
    diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
    index 987e8d0b2..d76fae256 100644
    --- a/integration-tests/pom.xml
    +++ b/integration-tests/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         integration-tests
    diff --git a/pom.xml b/pom.xml
    index db5c2a62e..27aa8721f 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -5,7 +5,7 @@
     
         io.prometheus
         client_java
    -    1.1.0
    +    1.2.0-SNAPSHOT
     
         Prometheus Metrics Library
         http://github.com/prometheus/client_java
    @@ -30,7 +30,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        v1.1.0
    +        HEAD
         
     
         
    diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml
    index e0a4d469d..2247a8e8f 100644
    --- a/prometheus-metrics-config/pom.xml
    +++ b/prometheus-metrics-config/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-config
    diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml
    index 9ab34cbe6..7773301d0 100644
    --- a/prometheus-metrics-core/pom.xml
    +++ b/prometheus-metrics-core/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-core
    diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml
    index 78ac62b9e..53828db1d 100644
    --- a/prometheus-metrics-exporter-common/pom.xml
    +++ b/prometheus-metrics-exporter-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-common
    diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml
    index e1a8519ce..b99959fc4 100644
    --- a/prometheus-metrics-exporter-httpserver/pom.xml
    +++ b/prometheus-metrics-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-httpserver
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index fc05aa5e3..8b67e75d9 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-opentelemetry
    diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    index 46c79695c..204ff2fa7 100644
    --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-servlet-jakarta
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index 1703f0f77..8f071f855 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-exposition-formats
    diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml
    index f452d488b..f55dd9c6f 100644
    --- a/prometheus-metrics-instrumentation-jvm/pom.xml
    +++ b/prometheus-metrics-instrumentation-jvm/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-instrumentation-jvm
    diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml
    index b3d56a29f..f45d5b6fb 100644
    --- a/prometheus-metrics-model/pom.xml
    +++ b/prometheus-metrics-model/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-model
    diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml
    index 30f980c79..395fcdfd8 100644
    --- a/prometheus-metrics-shaded-dependencies/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-shaded-dependencies
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    index 39818a25d..73f96d5f5 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-shaded-opentelemetry
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    index aaf664ef8..224571946 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-shaded-protobuf
    diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml
    index 72577ec03..10d9ac8d6 100644
    --- a/prometheus-metrics-simpleclient-bridge/pom.xml
    +++ b/prometheus-metrics-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.1.0
    +        1.2.0-SNAPSHOT
         
     
         prometheus-metrics-simpleclient-bridge
    @@ -76,7 +76,7 @@
             
                 io.prometheus
                 prometheus-metrics-config
    -            1.1.0
    +            1.2.0-SNAPSHOT
                 compile
             
         
    diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml
    index b27041f59..98286194e 100644
    --- a/prometheus-metrics-tracer/pom.xml
    +++ b/prometheus-metrics-tracer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         client_java
    -    1.1.0
    +    1.2.0-SNAPSHOT
       
     
       prometheus-metrics-tracer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    index 9297bf610..ed86d6249 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.1.0
    +    1.2.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-common
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    index 697f5b700..8c5657755 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.1.0
    +    1.2.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-initializer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    index 524c2f0b6..19db2bdf6 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.1.0
    +    1.2.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-otel-agent
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    index b2f6f781b..a5a34c38b 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.1.0
    +    1.2.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-otel
    
    From 608e92421f562b4d23a7e156a3bf2664f7f7143b Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Sun, 12 Nov 2023 17:09:05 +0100
    Subject: [PATCH 037/870] Exclude shaded dependencies from the build
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     pom.xml                                           | 2 +-
     prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +-
     prometheus-metrics-exposition-formats/pom.xml     | 2 +-
     3 files changed, 3 insertions(+), 3 deletions(-)
    
    diff --git a/pom.xml b/pom.xml
    index 27aa8721f..dd91272fd 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -63,7 +63,7 @@
             prometheus-metrics-exporter-opentelemetry
             prometheus-metrics-instrumentation-jvm
             prometheus-metrics-simpleclient-bridge
    -        prometheus-metrics-shaded-dependencies
    +        
             examples
             benchmarks
             integration-tests
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index 8b67e75d9..b99ee75cf 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -46,7 +46,7 @@
             
                 io.prometheus
                 prometheus-metrics-shaded-opentelemetry
    -            ${project.version}
    +            1.1.0
             
     
             
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index 8f071f855..c1f0fdf77 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -50,7 +50,7 @@
             
                 io.prometheus
                 prometheus-metrics-shaded-protobuf
    -            ${project.version}
    +            1.1.0
             
     
             
    
    From 881755ae207edad0661710f7c8f32c00515b68a0 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Sun, 12 Nov 2023 17:11:29 +0100
    Subject: [PATCH 038/870] Update README
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     MAINTAINER_NOTES.md | 4 ++--
     README.md           | 2 --
     2 files changed, 2 insertions(+), 4 deletions(-)
    
    diff --git a/MAINTAINER_NOTES.md b/MAINTAINER_NOTES.md
    index 593603a3a..90f030c23 100644
    --- a/MAINTAINER_NOTES.md
    +++ b/MAINTAINER_NOTES.md
    @@ -11,8 +11,8 @@ Use the [Versions Maven Plugin](https://www.mojohaus.org/versions-maven-plugin/i
     ## Release
     
     ```
    -./mvnw release:prepare -DreleaseVersion=0.16.0 -DdevelopmentVersion=0.16.1-SNAPSHOT
    -./mvnw release:perform -DreleaseVersion=0.16.0 -DdevelopmentVersion=0.16.1-SNAPSHOT
    +./mvnw release:prepare -DreleaseVersion=1.2.0 -DdevelopmentVersion=1.3.0-SNAPSHOT
    +./mvnw release:perform -DreleaseVersion=1.2.0 -DdevelopmentVersion=1.3.0-SNAPSHOT
     ```
     
     `release:prepare` does Github tags and commits, while `release:perform` signs the artifacts and uploads them to the staging repositoring on [https://oss.sonatype.org](https://oss.sonatype.org).
    diff --git a/README.md b/README.md
    index bcab4daf1..0cf4f3b80 100644
    --- a/README.md
    +++ b/README.md
    @@ -2,8 +2,6 @@
     
     [![Build Status](https://circleci.com/gh/prometheus/client_java.svg?style=svg)](https://circleci.com/gh/prometheus/client_java)
     
    -Release date for 1.0.0 is 27 Sep 2023. Pre-releases are [available](https://github.com/prometheus/client_java/releases).
    -
     # Documentation
     
     [https://prometheus.github.io/client_java](https://prometheus.github.io/client_java)
    
    From 60f72b6d27d31a4a566670cebdfb2699073c705a Mon Sep 17 00:00:00 2001
    From: Sean Roberts 
    Date: Wed, 15 Nov 2023 07:54:44 -0600
    Subject: [PATCH 039/870] Update metric-types.md: typo (#900)
    
    Signed-off-by: Sean Roberts 
    ---
     docs/content/getting-started/metric-types.md | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/docs/content/getting-started/metric-types.md b/docs/content/getting-started/metric-types.md
    index 51d07bdbf..d3451b3d9 100644
    --- a/docs/content/getting-started/metric-types.md
    +++ b/docs/content/getting-started/metric-types.md
    @@ -54,7 +54,7 @@ Histogram
     Histograms are for observing distributions, like latency distributions for HTTP services or the distribution of request sizes.
     Unlike with counters and gauges, each histogram data point has a complex data structure representing different aspects of the distribution:
     
    -* Count: The toal number of observations.
    +* Count: The total number of observations.
     * Sum: The sum of all observed values, e.g. the total time spent serving requests.
     * Buckets: The histogram buckets representing the distribution.
     
    
    From 1fd8c7df9f88981a603ce4821f5637b719f663ea Mon Sep 17 00:00:00 2001
    From: choi se 
    Date: Wed, 17 Jan 2024 19:25:59 +0900
    Subject: [PATCH 040/870] Add Backwards-Compatibility (#911)
    
    * Add Backwards-Compatibility
    - metrics name
    
    Signed-off-by: thinker0 
    
    * Update code
    
    Signed-off-by: thinker0 
    
    * Update code
    
    Signed-off-by: thinker0 
    
    ---------
    
    Signed-off-by: thinker0 
    ---
     .../bridge/SimpleclientCollector.java            | 16 +++++++++-------
     1 file changed, 9 insertions(+), 7 deletions(-)
    
    diff --git a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java
    index a775b2f55..e1b5a3113 100644
    --- a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java
    +++ b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java
    @@ -1,5 +1,7 @@
     package io.prometheus.metrics.simpleclient.bridge;
     
    +import static io.prometheus.metrics.model.snapshots.PrometheusNaming.sanitizeMetricName;
    +
     import io.prometheus.client.Collector;
     import io.prometheus.client.CollectorRegistry;
     import io.prometheus.metrics.config.PrometheusProperties;
    @@ -99,7 +101,7 @@ private MetricSnapshots convert(Enumeration sampl
     
         private MetricSnapshot convertCounter(Collector.MetricFamilySamples samples) {
             CounterSnapshot.Builder counter = CounterSnapshot.builder()
    -                .name(stripSuffix(samples.name, "_total"))
    +                .name(sanitizeMetricName(samples.name))
                     .help(samples.help)
                     .unit(convertUnit(samples));
             Map dataPoints = new HashMap<>();
    @@ -123,7 +125,7 @@ private MetricSnapshot convertCounter(Collector.MetricFamilySamples samples) {
     
         private MetricSnapshot convertGauge(Collector.MetricFamilySamples samples) {
             GaugeSnapshot.Builder gauge = GaugeSnapshot.builder()
    -                .name(samples.name)
    +                .name(sanitizeMetricName(samples.name))
                     .help(samples.help)
                     .unit(convertUnit(samples));
             for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    @@ -141,7 +143,7 @@ private MetricSnapshot convertGauge(Collector.MetricFamilySamples samples) {
     
         private MetricSnapshot convertHistogram(Collector.MetricFamilySamples samples, boolean isGaugeHistogram) {
             HistogramSnapshot.Builder histogram = HistogramSnapshot.builder()
    -                .name(samples.name)
    +                .name(sanitizeMetricName(samples.name))
                     .help(samples.help)
                     .unit(convertUnit(samples))
                     .gaugeHistogram(isGaugeHistogram);
    @@ -181,7 +183,7 @@ private MetricSnapshot convertHistogram(Collector.MetricFamilySamples samples, b
     
         private MetricSnapshot convertSummary(Collector.MetricFamilySamples samples) {
             SummarySnapshot.Builder summary = SummarySnapshot.builder()
    -                .name(samples.name)
    +                .name(sanitizeMetricName(samples.name))
                     .help(samples.help)
                     .unit(convertUnit(samples));
             Map dataPoints = new HashMap<>();
    @@ -225,7 +227,7 @@ private MetricSnapshot convertSummary(Collector.MetricFamilySamples samples) {
     
         private MetricSnapshot convertStateSet(Collector.MetricFamilySamples samples) {
             StateSetSnapshot.Builder stateSet = StateSetSnapshot.builder()
    -                .name(samples.name)
    +                .name(sanitizeMetricName(samples.name))
                     .help(samples.help);
             Map dataPoints = new HashMap<>();
             for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    @@ -254,7 +256,7 @@ private MetricSnapshot convertStateSet(Collector.MetricFamilySamples samples) {
     
         private MetricSnapshot convertUnknown(Collector.MetricFamilySamples samples) {
             UnknownSnapshot.Builder unknown = UnknownSnapshot.builder()
    -                .name(samples.name)
    +                .name(sanitizeMetricName(samples.name))
                     .help(samples.help)
                     .unit(convertUnit(samples));
             for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    @@ -334,7 +336,7 @@ private Labels labelsWithout(Collector.MetricFamilySamples.Sample sample, String
     
         private MetricSnapshot convertInfo(Collector.MetricFamilySamples samples) {
             InfoSnapshot.Builder info = InfoSnapshot.builder()
    -                .name(stripSuffix(samples.name, "_info"))
    +                .name(sanitizeMetricName(samples.name))
                     .help(samples.help);
             for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
                 info.dataPoint(InfoSnapshot.InfoDataPointSnapshot.builder()
    
    From b2298884a93d5d884e4128aee9af5b18eb439819 Mon Sep 17 00:00:00 2001
    From: "Capt. Cutlass" <5120290+ParanoidUser@users.noreply.github.com>
    Date: Fri, 19 Jan 2024 10:47:15 -0500
    Subject: [PATCH 041/870] fix: broken links and minor typos (#913)
    
    Signed-off-by: Capt. Cutlass <5120290+ParanoidUser@users.noreply.github.com>
    ---
     docs/content/config/config.md                |  4 ++--
     docs/content/exporters/httpserver.md         |  6 +++---
     docs/content/exporters/spring.md             |  4 ++--
     docs/content/getting-started/metric-types.md | 10 +++++-----
     docs/content/getting-started/performance.md  |  4 ++--
     docs/content/getting-started/registry.md     |  2 +-
     docs/content/internals/model.md              |  2 +-
     docs/content/migration/simpleclient.md       |  2 +-
     8 files changed, 17 insertions(+), 17 deletions(-)
    
    diff --git a/docs/content/config/config.md b/docs/content/config/config.md
    index 285637f5d..43a396174 100644
    --- a/docs/content/config/config.md
    +++ b/docs/content/config/config.md
    @@ -46,8 +46,8 @@ Metrics Properties
     | io.prometheus.metrics.histogramNativeMaxZeroThreshold | [Histogram.Builder.nativeMaxZeroThreshold()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeMaxZeroThreshold(double)) | |
     | io.prometheus.metrics.histogramNativeMaxNumberOfBuckets | [Histogram.Builder.nativeMaxNumberOfBuckets()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeMaxNumberOfBuckets(int)) | |
     | io.prometheus.metrics.histogramNativeResetDurationSeconds | [Histogram.Builder.nativeResetDuration()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeResetDuration(long,java.util.concurrent.TimeUnit)) | |
    -| io.prometheus.metrics.summaryQuantiles | [Summary.Builder.quantile(double)](https://prometheus.github.io/client_java/api/io/prometheus/metrics/core/metrics/Summary.Builder.html#quantile(double)) | (4) |
    -| io.prometheus.metrics.summaryQuantileErrors | [Summary.Builder.quantile(double, double)](ihttps://prometheus.github.io/client_java/api/io/prometheus/metrics/core/metrics/Summary.Builder.html#quantile(double,double)) | (5) |
    +| io.prometheus.metrics.summaryQuantiles | [Summary.Builder.quantile(double)](/client_java/api/io/prometheus/metrics/core/metrics/Summary.Builder.html#quantile(double)) | (4) |
    +| io.prometheus.metrics.summaryQuantileErrors | [Summary.Builder.quantile(double, double)](/client_java/api/io/prometheus/metrics/core/metrics/Summary.Builder.html#quantile(double,double)) | (5) |
     | io.prometheus.metrics.summaryMaxAgeSeconds | [Summary.Builder.maxAgeSeconds()](/client_java/api/io/prometheus/metrics/core/metrics/Summary.Builder.html#maxAgeSeconds(long)) | |
     | io.prometheus.metrics.summaryNumberOfAgeBuckets | [Summary.Builder.numberOfAgeBuckets()](/client_java/api/io/prometheus/metrics/core/metrics/Summary.Builder.html#numberOfAgeBuckets(int)) | |
     
    diff --git a/docs/content/exporters/httpserver.md b/docs/content/exporters/httpserver.md
    index 17824775f..e524b4cd1 100644
    --- a/docs/content/exporters/httpserver.md
    +++ b/docs/content/exporters/httpserver.md
    @@ -13,7 +13,7 @@ HTTPServer server = HTTPServer.builder()
     
     By default, `HTTPServer` binds to any IP address, you can change this with [hostname()](/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#hostname(java.lang.String)) or [inetAddress()](/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#inetAddress(java.net.InetAddress)).
     
    -`HTTPServer` is configured with three endoints:
    +`HTTPServer` is configured with three endpoints:
     
     * `/metrics` for Prometheus scraping.
     * `/-/healthy` for simple health checks.
    @@ -24,8 +24,8 @@ The default handler can be changed with [defaultHandler()](/client_java/api/io/p
     Authentication and HTTPS
     ------------------------
     
    -* [authenticator()](https://prometheus.github.io/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#authenticator(com.sun.net.httpserver.Authenticator)) is for configuring authentication.
    -* [httpsConfigurator()](https://prometheus.github.io/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#httpsConfigurator(com.sun.net.httpserver.HttpsConfigurator)) is for configuring HTTPS.
    +* [authenticator()](/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#authenticator(com.sun.net.httpserver.Authenticator)) is for configuring authentication.
    +* [httpsConfigurator()](/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#httpsConfigurator(com.sun.net.httpserver.HttpsConfigurator)) is for configuring HTTPS.
     
     You can find an example of authentication and SSL in the [jmx_exporter](https://github.com/prometheus/jmx_exporter).
     
    diff --git a/docs/content/exporters/spring.md b/docs/content/exporters/spring.md
    index e2c0a4f64..73e4b2549 100644
    --- a/docs/content/exporters/spring.md
    +++ b/docs/content/exporters/spring.md
    @@ -21,7 +21,7 @@ Use the Prometheus Metrics Library in Spring
     
     However, you may have your reasons why you want to use the Prometheus metrics library in Spring anyway. Maybe you want full support for all Prometheus metric types, or you want to use the new Prometheus native histograms.
     
    -The easiest way to use the Prometheus metrics library in Spring is to configure the [PrometheusMetricsServlet](http://localhost:1313/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) to expose metrics.
    +The easiest way to use the Prometheus metrics library in Spring is to configure the [PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) to expose metrics.
     
     Dependencies:
     
    @@ -68,7 +68,7 @@ public class DemoApplication {
     }
     ```
     
    -The important part are the last three lines: They configure the [PrometheusMetricsServlet](http://localhost:1313/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) to expose metrics on `/metrics`:
    +The important part are the last three lines: They configure the [PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) to expose metrics on `/metrics`:
     
     ```java
     @Bean
    diff --git a/docs/content/getting-started/metric-types.md b/docs/content/getting-started/metric-types.md
    index d3451b3d9..e10d51e9a 100644
    --- a/docs/content/getting-started/metric-types.md
    +++ b/docs/content/getting-started/metric-types.md
    @@ -61,7 +61,7 @@ Unlike with counters and gauges, each histogram data point has a complex data st
     Prometheus supports two flavors of histograms:
     
     * Classic histograms: Bucket boundaries are explicitly defined when the histogram is created.
    -* Native histograms (exponential histograms): Infinitly many virtual buckets.
    +* Native histograms (exponential histograms): Infinitely many virtual buckets.
     
     By default, histograms maintain both flavors. Which one is used depends on the scrape request from the Prometheus server.
     * By default, the Prometheus server will scrape metrics in OpenMetrics format and get the classic histogram flavor.
    @@ -91,7 +91,7 @@ The histogram builder provides a lot of configuration for fine-tuning the histog
     * `classicBuckets(...)`: Set the classic bucket boundaries. Default buckets are `.005`, `.01`, `.025`, `.05`, `.1`, `.25`, `.5`, `1`, `2.5`, `5`, `and 10`. The default bucket boundaries are designed for measuring request durations in seconds.
     * `nativeMaxNumberOfBuckets()`: Upper limit for the number of native histogram buckets. Default is 160. When the maximum is reached, the native histogram automatically reduces resolution to stay below the limit.
     
    -See Javadoc for [Histogram.Builder](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html) for a complete list of options. Some options can be configured at runtime, see [config](/config/config).
    +See Javadoc for [Histogram.Builder](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html) for a complete list of options. Some options can be configured at runtime, see [config](../../config/config).
     
     Histograms and summaries are both used for observing distributions. Therefore, the both implement the `DistributionDataPoint` interface. Using the `DistributionDataPoint` interface directly gives you the option to switch between histograms and summaries later with minimal code changes.
     
    @@ -148,19 +148,19 @@ Summary requestLatency = Summary.builder()
     requestLatency.labelValues("ok").observe(2.7);
     ```
     
    -The example above creates a summary with the 50th percentile (median), the 95th percentila, and the 99th percentile. Quantiles are optional, you can create a summary without quantiles if all you need is the count and the sum.
    +The example above creates a summary with the 50th percentile (median), the 95th percentile, and the 99th percentile. Quantiles are optional, you can create a summary without quantiles if all you need is the count and the sum.
     
     {{< hint type=note >}}
     The terms "percentile" and "quantile" mean the same thing. We use percentile when we express it as a number in [0, 100], and we use quantile when we express it as a number in [0.0, 1.0].
     {{< /hint >}}
     
    -The second parameter to `quantile()` is the maximum acceptable error. The call `.quantile(0.5, 0.01)` means that the actual quantile is somewhere in [0.49, 0.51]. Higher presicion means higher memory usage.
    +The second parameter to `quantile()` is the maximum acceptable error. The call `.quantile(0.5, 0.01)` means that the actual quantile is somewhere in [0.49, 0.51]. Higher precision means higher memory usage.
     
     The 0.0 quantile (min value) and the 1.0 quantile (max value) are special cases because you can get the precise values (error 0.0) with almost no memory overhead.
     
     Quantile values are calculated based on a 5 minutes moving time window. The default time window can be changed with `maxAgeSeconds()` and `numberOfAgeBuckets()`.
     
    -Some options can be configured at runtime, see [config](/config/config).
    +Some options can be configured at runtime, see [config](../../config/config).
     
     In general you should prefer histograms over summaries. The Prometheus query language has a function [histogram_quantile()](https://prometheus.io/docs/prometheus/latest/querying/functions/#histogram_quantile) for calculating quantiles from histograms. The advantage of query-time quantile calculation is that you can aggregate histograms before calculating the quantile. With summaries you must use the quantile with all its labels as it is.
     
    diff --git a/docs/content/getting-started/performance.md b/docs/content/getting-started/performance.md
    index ec4423473..43e95c430 100644
    --- a/docs/content/getting-started/performance.md
    +++ b/docs/content/getting-started/performance.md
    @@ -26,7 +26,7 @@ You could increment the counter above like this:
     requestCount.labelValue("/", "200").inc();
     ```
     
    -However, the line above does not only increment the counter, it also lookus up the label values to find the right data point.
    +However, the line above does not only increment the counter, it also looks up the label values to find the right data point.
     
     In high performance applications you can optimize this by looking up the data point only once:
     
    @@ -49,7 +49,7 @@ While this default provides the flexibility to scrape different representations
     
     In performance critical applications we recommend to use either the classic representation or the native representation, but not both.
     
    -You can either configure this in code for each histogram by calling [classicOnly()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#classicOnly()) or [nativeOnly()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeOnly()), or you use the corresponding [config options](http://localhost:1313/config/config/).
    +You can either configure this in code for each histogram by calling [classicOnly()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#classicOnly()) or [nativeOnly()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeOnly()), or you use the corresponding [config options](../../config/config/).
     
     One way to do this is with system properties in the command line when you start your application
     
    diff --git a/docs/content/getting-started/registry.md b/docs/content/getting-started/registry.md
    index 403d834dd..7ae1bcbff 100644
    --- a/docs/content/getting-started/registry.md
    +++ b/docs/content/getting-started/registry.md
    @@ -34,7 +34,7 @@ Counter eventsTotal = Counter.builder()
     Registering a Metric with Multiple Registries
     ---------------------------------------------
     
    -As an alternative to calling `register()` direclty, you can `build()` metrics without registering them,
    +As an alternative to calling `register()` directly, you can `build()` metrics without registering them,
     and register them later:
     
     ```java
    diff --git a/docs/content/internals/model.md b/docs/content/internals/model.md
    index 1f222c3e4..e02517777 100644
    --- a/docs/content/internals/model.md
    +++ b/docs/content/internals/model.md
    @@ -21,7 +21,7 @@ The model is an internal library, implementing read-only immutable snapshots. Th
     
     There is no need for users to use `prometheus-metrics-model` directly. Users should use the API provided by `prometheus-metrics-core`, which includes the core metrics as well as callback metrics.
     
    -However, maintianers of 3rd party metrics libraries might want to use `prometheus-metrics-model` if they want to add Prometheus exposition formats to their metrics library.
    +However, maintainers of 3rd party metrics libraries might want to use `prometheus-metrics-model` if they want to add Prometheus exposition formats to their metrics library.
     
     exporters and exposition formats
     --------------------------------
    diff --git a/docs/content/migration/simpleclient.md b/docs/content/migration/simpleclient.md
    index 5b1ee6a15..a954c9c04 100644
    --- a/docs/content/migration/simpleclient.md
    +++ b/docs/content/migration/simpleclient.md
    @@ -95,6 +95,6 @@ Counter counter = Counter.builder()
     counter.labelValues("/hello-world").inc();
     ```
     
    -Reasons why we changed the API: Changing the package names was a neccessity because the previous package names were incompatible with the Java module system. However, renaming packages requires chaning code anyway, so we decided to clean up some things. For example, the name `builder()` for a builder method is very common in the Java ecosystem, it's used in Spring, Lombok, and so on. So naming the method `builder()` makes the Prometheus library more aligned with the broader Java ecosystem.
    +Reasons why we changed the API: Changing the package names was a necessity because the previous package names were incompatible with the Java module system. However, renaming packages requires changing code anyway, so we decided to clean up some things. For example, the name `builder()` for a builder method is very common in the Java ecosystem, it's used in Spring, Lombok, and so on. So naming the method `builder()` makes the Prometheus library more aligned with the broader Java ecosystem.
     
     If you are using the low level `Collector` API directly, you should have a look at the new callback metric types, see [/getting-started/callbacks/](../../getting-started/callbacks/). Chances are good that the new callback metrics have an easier way to achieve what you need than the old 0.16.0 code.
    
    From bf6bc2c12a12ae481f9cca91fde446bdfd1967df Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Mon, 22 Jan 2024 13:49:45 +0100
    Subject: [PATCH 042/870] Fix flaky JVM Thread metrics test (#915)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../metrics/instrumentation/jvm/JvmThreadsMetricsTest.java   | 5 +++--
     1 file changed, 3 insertions(+), 2 deletions(-)
    
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java
    index 7be7892a9..94cadc268 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java
    @@ -108,8 +108,9 @@ public void testIgnoredMetricNotScraped() {
         @Test
         public void testInvalidThreadIds() {
             try {
    -            int javaVersion = Integer.parseInt(System.getProperty("java.version"));
    -            if (javaVersion >= 21) {
    +            String javaVersion = System.getProperty("java.version"); // Example: "21.0.2"
    +            String majorJavaVersion = javaVersion.replaceAll("\\..*", ""); // Example: "21"
    +            if (Integer.parseInt(majorJavaVersion) >= 21) {
                     // With Java 21 and newer you can no longer have invalid thread ids.
                     return;
                 }
    
    From e6edcabcccfe01645b1e19603a44add34259a9f0 Mon Sep 17 00:00:00 2001
    From: Kinshuk Bairagi 
    Date: Fri, 9 Feb 2024 19:24:59 +0530
    Subject: [PATCH 043/870] Support for Dropwizard Instrumentation with 1.0.0
     (#912)
    
    * Rename project simpleclient-archive/simpleclient_dropwizard to prometheus-metrics-instrumentation-dropwizard
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Implement DropwizardExports
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Label Changes Attempt 1
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Label Changes Attempt2
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Support for Custom Labels
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Minor Refactor
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Add builder for dwexports and change package name to dw5
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Rename package to dw5
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Rename to dropwizard5
    
    Signed-off-by: Kinshuk Bairagi 
    
    ---------
    
    Signed-off-by: Kinshuk Bairagi 
    ---
     pom.xml                                       |   1 +
     .../pom.xml                                   |  40 +-
     .../dropwizard5/DropwizardExports.java        | 221 +++++++++++
     .../dropwizard5/labels/CustomLabelMapper.java |  34 +-
     .../labels}/GraphiteNamePattern.java          |   4 +-
     .../dropwizard5/labels}/MapperConfig.java     |   2 +-
     .../dropwizard5/DropwizardExportsTest.java    | 255 +++++++++++++
     .../labels/CustomLabelMapperTest.java         | 210 +++++++++++
     .../labels}/GraphiteNamePatternTest.java      |   2 +-
     .../dropwizard5/labels}/MapperConfigTest.java |   3 +-
     .../version-rules.xml                         |   0
     .../client/dropwizard/DropwizardExports.java  | 201 ----------
     .../samplebuilder/DefaultSampleBuilder.java   |  29 --
     .../samplebuilder/SampleBuilder.java          |  23 --
     .../dropwizard/DropwizardExportsTest.java     | 352 ------------------
     .../CustomMappingSampleBuilderTest.java       | 182 ---------
     .../DefaultSampleBuilderTest.java             |  31 --
     17 files changed, 735 insertions(+), 855 deletions(-)
     rename {simpleclient-archive/simpleclient_dropwizard => prometheus-metrics-instrumentation-dropwizard5}/pom.xml (61%)
     create mode 100644 prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java
     rename simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/CustomMappingSampleBuilder.java => prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java (69%)
     rename {simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder => prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels}/GraphiteNamePattern.java (95%)
     rename {simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder => prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels}/MapperConfig.java (98%)
     create mode 100644 prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java
     create mode 100644 prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java
     rename {simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder => prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels}/GraphiteNamePatternTest.java (98%)
     rename {simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder => prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels}/MapperConfigTest.java (94%)
     rename {simpleclient-archive/simpleclient_dropwizard => prometheus-metrics-instrumentation-dropwizard5}/version-rules.xml (100%)
     delete mode 100644 simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/DropwizardExports.java
     delete mode 100644 simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/DefaultSampleBuilder.java
     delete mode 100644 simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/SampleBuilder.java
     delete mode 100644 simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/DropwizardExportsTest.java
     delete mode 100644 simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/CustomMappingSampleBuilderTest.java
     delete mode 100644 simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/DefaultSampleBuilderTest.java
    
    diff --git a/pom.xml b/pom.xml
    index dd91272fd..145abe041 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -62,6 +62,7 @@
             prometheus-metrics-exporter-httpserver
             prometheus-metrics-exporter-opentelemetry
             prometheus-metrics-instrumentation-jvm
    +        prometheus-metrics-instrumentation-dropwizard5
             prometheus-metrics-simpleclient-bridge
             
             examples
    diff --git a/simpleclient-archive/simpleclient_dropwizard/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    similarity index 61%
    rename from simpleclient-archive/simpleclient_dropwizard/pom.xml
    rename to prometheus-metrics-instrumentation-dropwizard5/pom.xml
    index 4366d9e15..eb07172f0 100644
    --- a/simpleclient-archive/simpleclient_dropwizard/pom.xml
    +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    @@ -5,17 +5,21 @@
         
             io.prometheus
             client_java
    -        1.0.0-beta-2-SNAPSHOT
    +        1.2.0-SNAPSHOT
         
     
    -    simpleclient_dropwizard
    +    prometheus-metrics-instrumentation-dropwizard5
         bundle
     
    -    Prometheus Java Simpleclient Dropwizard
    +    Prometheus Metrics Instrumentation - Dropwizard 5.x
         
    -        Collector of data from Dropwizard metrics library.
    +        Instrumentation library for Dropwizard metrics 5.x
         
     
    +    
    +        io.prometheus.metrics.instrumentation.dropwizard5
    +    
    +
         
             
                 The Apache Software License, Version 2.0
    @@ -29,17 +33,25 @@
                 Francois Visconte
                 f.visconte@gmail.com
             
    +
    +        
    +            kingster
    +            Kinshuk Bairagi
    +            hi@kinsh.uk
    +        
    +
         
    +
         
             
                 io.prometheus
    -            simpleclient
    +            prometheus-metrics-core
                 ${project.version}
             
             
    -            io.dropwizard.metrics
    +            io.dropwizard.metrics5
                 metrics-core
    -            4.2.9
    +            5.0.0
                 provided
             
             
    @@ -61,6 +73,20 @@
                 4.6.1
                 test
             
    +
    +        
    +            io.prometheus
    +            prometheus-metrics-exporter-httpserver
    +            ${project.version}
    +            test
    +        
    +        
    +            io.prometheus
    +            prometheus-metrics-exposition-formats
    +            ${project.version}
    +            test
    +        
    +
         
     
     
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java
    new file mode 100644
    index 000000000..9748504a4
    --- /dev/null
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java
    @@ -0,0 +1,221 @@
    +package io.prometheus.metrics.instrumentation.dropwizard5;
    +
    +import io.dropwizard.metrics5.Timer;
    +import io.dropwizard.metrics5.*;
    +import io.prometheus.metrics.instrumentation.dropwizard5.labels.CustomLabelMapper;
    +import io.prometheus.metrics.model.registry.MultiCollector;
    +import io.prometheus.metrics.model.registry.PrometheusRegistry;
    +import io.prometheus.metrics.model.snapshots.*;
    +
    +import java.util.*;
    +import java.util.concurrent.TimeUnit;
    +import java.util.logging.Level;
    +import java.util.logging.Logger;
    +
    +/**
    + * Collect Dropwizard metrics from a MetricRegistry.
    + */
    +public class DropwizardExports implements MultiCollector {
    +    private static final Logger LOGGER = Logger.getLogger(DropwizardExports.class.getName());
    +    private final MetricRegistry registry;
    +    private final MetricFilter metricFilter;
    +    private final Optional labelMapper;
    +
    +    /**
    +     * Creates a new DropwizardExports and {@link MetricFilter#ALL}.
    +     *
    +     * @param registry a metric registry to export in prometheus.
    +     */
    +    DropwizardExports(MetricRegistry registry) {
    +        super();
    +        this.registry = registry;
    +        this.metricFilter = MetricFilter.ALL;
    +        this.labelMapper = Optional.empty();
    +    }
    +
    +    /**
    +     * Creates a new DropwizardExports with a custom {@link MetricFilter}.
    +     *
    +     * @param registry     a metric registry to export in prometheus.
    +     * @param metricFilter a custom metric filter.
    +     */
    +    public DropwizardExports(MetricRegistry registry, MetricFilter metricFilter) {
    +        this.registry = registry;
    +        this.metricFilter = metricFilter;
    +        this.labelMapper = Optional.empty();
    +    }
    +
    +    /**
    +     * @param registry     a metric registry to export in prometheus.
    +     * @param metricFilter a custom metric filter.
    +     * @param labelMapper  a labelMapper to use to map labels.
    +     */
    +    public DropwizardExports(MetricRegistry registry, MetricFilter metricFilter, CustomLabelMapper labelMapper) {
    +        this.registry = registry;
    +        this.metricFilter = metricFilter;
    +        this.labelMapper = Optional.ofNullable(labelMapper);
    +    }
    +
    +    private static String getHelpMessage(String metricName, Metric metric) {
    +        return String.format("Generated from Dropwizard metric import (metric=%s, type=%s)",
    +                metricName, metric.getClass().getName());
    +    }
    +
    +
    +    private static MetricMetadata getMetricMetaData(String metricName, Metric metric) {
    +        return new MetricMetadata(PrometheusNaming.sanitizeMetricName(metricName), getHelpMessage(metricName, metric));
    +    }
    +
    +    /**
    +     * Export counter as Prometheus Gauge.
    +     */
    +    MetricSnapshot fromCounter(String dropwizardName, Counter counter) {
    +        MetricMetadata metadata = getMetricMetaData(dropwizardName, counter);
    +        CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder().value(Long.valueOf(counter.getCount()).doubleValue());
    +        labelMapper.map(mapper -> dataPointBuilder.labels(mapper.getLabels(dropwizardName, Collections.emptyList(), Collections.emptyList())));
    +        return new CounterSnapshot(metadata, Collections.singletonList(dataPointBuilder.build()));
    +    }
    +
    +    /**
    +     * Export gauge as a prometheus gauge.
    +     */
    +    MetricSnapshot fromGauge(String dropwizardName, Gauge gauge) {
    +        Object obj = gauge.getValue();
    +        double value;
    +        if (obj instanceof Number) {
    +            value = ((Number) obj).doubleValue();
    +        } else if (obj instanceof Boolean) {
    +            value = ((Boolean) obj) ? 1 : 0;
    +        } else {
    +            LOGGER.log(Level.FINE, String.format("Invalid type for Gauge %s: %s", PrometheusNaming.sanitizeMetricName(dropwizardName),
    +                    obj == null ? "null" : obj.getClass().getName()));
    +            return null;
    +        }
    +        MetricMetadata metadata = getMetricMetaData(dropwizardName, gauge);
    +        GaugeSnapshot.GaugeDataPointSnapshot.Builder dataPointBuilder = GaugeSnapshot.GaugeDataPointSnapshot.builder().value(value);
    +        labelMapper.map(mapper -> dataPointBuilder.labels(mapper.getLabels(dropwizardName, Collections.emptyList(), Collections.emptyList())));
    +        return new GaugeSnapshot(metadata, Collections.singletonList(dataPointBuilder.build()));
    +    }
    +
    +    /**
    +     * Export a histogram snapshot as a prometheus SUMMARY.
    +     *
    +     * @param dropwizardName metric name.
    +     * @param snapshot       the histogram snapshot.
    +     * @param count          the total sample count for this snapshot.
    +     * @param factor         a factor to apply to histogram values.
    +     */
    +    MetricSnapshot fromSnapshotAndCount(String dropwizardName, Snapshot snapshot, long count, double factor, String helpMessage) {
    +        Quantiles quantiles = Quantiles.builder()
    +                .quantile(0.5, snapshot.getMedian() * factor)
    +                .quantile(0.75, snapshot.get75thPercentile() * factor)
    +                .quantile(0.95, snapshot.get95thPercentile() * factor)
    +                .quantile(0.98, snapshot.get98thPercentile() * factor)
    +                .quantile(0.99, snapshot.get99thPercentile() * factor)
    +                .quantile(0.999, snapshot.get999thPercentile() * factor)
    +                .build();
    +
    +        MetricMetadata metadata = new MetricMetadata(PrometheusNaming.sanitizeMetricName(dropwizardName), helpMessage);
    +        SummarySnapshot.SummaryDataPointSnapshot.Builder dataPointBuilder = SummarySnapshot.SummaryDataPointSnapshot.builder().quantiles(quantiles).count(count);
    +        labelMapper.map(mapper -> dataPointBuilder.labels(mapper.getLabels(dropwizardName, Collections.emptyList(), Collections.emptyList())));
    +        return new SummarySnapshot(metadata, Collections.singletonList(dataPointBuilder.build()));
    +    }
    +
    +    /**
    +     * Convert histogram snapshot.
    +     */
    +    MetricSnapshot fromHistogram(String dropwizardName, Histogram histogram) {
    +        return fromSnapshotAndCount(dropwizardName, histogram.getSnapshot(), histogram.getCount(), 1.0,
    +                getHelpMessage(dropwizardName, histogram));
    +    }
    +
    +    /**
    +     * Export Dropwizard Timer as a histogram. Use TIME_UNIT as time unit.
    +     */
    +    MetricSnapshot fromTimer(String dropwizardName, Timer timer) {
    +        return fromSnapshotAndCount(dropwizardName, timer.getSnapshot(), timer.getCount(),
    +                1.0D / TimeUnit.SECONDS.toNanos(1L), getHelpMessage(dropwizardName, timer));
    +    }
    +
    +    /**
    +     * Export a Meter as a prometheus COUNTER.
    +     */
    +    MetricSnapshot fromMeter(String dropwizardName, Meter meter) {
    +        MetricMetadata metadata = getMetricMetaData(dropwizardName + "_total", meter);
    +        CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder().value(meter.getCount());
    +        labelMapper.map(mapper -> dataPointBuilder.labels(mapper.getLabels(dropwizardName, Collections.emptyList(), Collections.emptyList())));
    +        return new CounterSnapshot(metadata, Collections.singletonList(dataPointBuilder.build()));
    +    }
    +
    +    @Override
    +    public MetricSnapshots collect() {
    +        MetricSnapshots.Builder metricSnapshots = MetricSnapshots.builder();
    +        for (SortedMap.Entry entry : registry.getGauges(metricFilter).entrySet()) {
    +            Optional.ofNullable(fromGauge(entry.getKey().getKey(), entry.getValue())).map(metricSnapshots::metricSnapshot);
    +        }
    +        for (SortedMap.Entry entry : registry.getCounters(metricFilter).entrySet()) {
    +            metricSnapshots.metricSnapshot(fromCounter(entry.getKey().getKey(), entry.getValue()));
    +        }
    +        for (SortedMap.Entry entry : registry.getHistograms(metricFilter).entrySet()) {
    +            metricSnapshots.metricSnapshot(fromHistogram(entry.getKey().getKey(), entry.getValue()));
    +        }
    +        for (SortedMap.Entry entry : registry.getTimers(metricFilter).entrySet()) {
    +            metricSnapshots.metricSnapshot(fromTimer(entry.getKey().getKey(), entry.getValue()));
    +        }
    +        for (SortedMap.Entry entry : registry.getMeters(metricFilter).entrySet()) {
    +            metricSnapshots.metricSnapshot(fromMeter(entry.getKey().getKey(), entry.getValue()));
    +        }
    +        return metricSnapshots.build();
    +    }
    +
    +    public static Builder builder() {
    +        return new Builder();
    +    }
    +
    +    //Builder class for DropwizardExports
    +    public static class Builder {
    +        private MetricRegistry registry;
    +        private MetricFilter metricFilter;
    +        private CustomLabelMapper labelMapper;
    +
    +        private Builder() {
    +            this.metricFilter = MetricFilter.ALL;
    +        }
    +
    +        public Builder dropwizardRegistry(MetricRegistry registry) {
    +            this.registry = registry;
    +            return this;
    +        }
    +
    +        public Builder metricFilter(MetricFilter metricFilter) {
    +            this.metricFilter = metricFilter;
    +            return this;
    +        }
    +
    +        public Builder customLabelMapper(CustomLabelMapper labelMapper) {
    +            this.labelMapper = labelMapper;
    +            return this;
    +        }
    +
    +        DropwizardExports build() {
    +            if (registry == null) {
    +                throw new IllegalArgumentException("MetricRegistry must be set");
    +            }
    +            if (labelMapper == null) {
    +                return new DropwizardExports(registry, metricFilter);
    +            } else {
    +                return new DropwizardExports(registry, metricFilter, labelMapper);
    +            }
    +        }
    +
    +        public void register() {
    +            register(PrometheusRegistry.defaultRegistry);
    +        }
    +
    +        public void register(PrometheusRegistry registry) {
    +            DropwizardExports dropwizardExports = build();
    +            registry.register(dropwizardExports);
    +        }
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/CustomMappingSampleBuilder.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java
    similarity index 69%
    rename from simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/CustomMappingSampleBuilder.java
    rename to prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java
    index 30435b7ce..1739f6fa6 100644
    --- a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/CustomMappingSampleBuilder.java
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java
    @@ -1,25 +1,22 @@
    -package io.prometheus.client.dropwizard.samplebuilder;
    +package io.prometheus.metrics.instrumentation.dropwizard5.labels;
     
    -import io.prometheus.client.Collector;
    +import io.prometheus.metrics.model.snapshots.Labels;
     
     import java.util.ArrayList;
    -import java.util.Collections;
     import java.util.List;
     import java.util.Map;
     
     /**
    - * Custom {@link SampleBuilder} implementation to allow Dropwizard metrics to be translated to Prometheus metrics including custom labels and names.
    + * A LabelMapper to allow Dropwizard metrics to be translated to Prometheus metrics including custom labels and names.
      * Prometheus metric name and labels are extracted from the Dropwizard name based on the provided list of {@link MapperConfig}s.
      * The FIRST matching config will be used.
    - * If no config is matched, the {@link DefaultSampleBuilder} is used.
      */
    -public class CustomMappingSampleBuilder implements SampleBuilder {
    +public class CustomLabelMapper  {
         private final List compiledMapperConfigs;
    -    private final DefaultSampleBuilder defaultMetricSampleBuilder = new DefaultSampleBuilder();
     
    -    public CustomMappingSampleBuilder(final List mapperConfigs) {
    +    public CustomLabelMapper(final List mapperConfigs) {
             if (mapperConfigs == null || mapperConfigs.isEmpty()) {
    -            throw new IllegalArgumentException("CustomMappingSampleBuilder needs some mapper configs!");
    +            throw new IllegalArgumentException("CustomLabelMapper needs some mapper configs!");
             }
     
             this.compiledMapperConfigs = new ArrayList(mapperConfigs.size());
    @@ -28,8 +25,8 @@ public CustomMappingSampleBuilder(final List mapperConfigs) {
             }
         }
     
    -    @Override
    -    public Collector.MetricFamilySamples.Sample createSample(final String dropwizardName, final String nameSuffix, final List additionalLabelNames, final List additionalLabelValues, final double value) {
    +
    +    public Labels getLabels(final String dropwizardName, final List additionalLabelNames, final List additionalLabelValues){
             if (dropwizardName == null) {
                 throw new IllegalArgumentException("Dropwizard metric name cannot be null");
             }
    @@ -47,21 +44,10 @@ public Collector.MetricFamilySamples.Sample createSample(final String dropwizard
                 final NameAndLabels nameAndLabels = getNameAndLabels(matchingConfig.mapperConfig, params);
                 nameAndLabels.labelNames.addAll(additionalLabelNames);
                 nameAndLabels.labelValues.addAll(additionalLabelValues);
    -            return defaultMetricSampleBuilder.createSample(
    -                    nameAndLabels.name, nameSuffix,
    -                    nameAndLabels.labelNames,
    -                    nameAndLabels.labelValues,
    -                    value
    -            );
    +            return Labels.of(nameAndLabels.labelNames, nameAndLabels.labelValues);
             }
     
    -
    -        return defaultMetricSampleBuilder.createSample(
    -                dropwizardName, nameSuffix,
    -                additionalLabelNames,
    -                additionalLabelValues,
    -                value
    -        );
    +        return Labels.of(additionalLabelNames, additionalLabelValues);
         }
     
         protected NameAndLabels getNameAndLabels(final MapperConfig config, final Map parameters) {
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/GraphiteNamePattern.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePattern.java
    similarity index 95%
    rename from simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/GraphiteNamePattern.java
    rename to prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePattern.java
    index 45767e3fc..4823c736f 100644
    --- a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/GraphiteNamePattern.java
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePattern.java
    @@ -1,11 +1,11 @@
    -package io.prometheus.client.dropwizard.samplebuilder;
    +package io.prometheus.metrics.instrumentation.dropwizard5.labels;
     
     import java.util.HashMap;
     import java.util.Map;
     import java.util.regex.Matcher;
     import java.util.regex.Pattern;
     
    -import static io.prometheus.client.dropwizard.samplebuilder.MapperConfig.METRIC_GLOB_REGEX;
    +import static io.prometheus.metrics.instrumentation.dropwizard5.labels.MapperConfig.METRIC_GLOB_REGEX;
     
     /**
      * GraphiteNamePattern is initialised with a simplified glob pattern that only allows '*' as special character.
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/MapperConfig.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java
    similarity index 98%
    rename from simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/MapperConfig.java
    rename to prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java
    index 887226635..c1eb1ae08 100644
    --- a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/MapperConfig.java
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java
    @@ -1,4 +1,4 @@
    -package io.prometheus.client.dropwizard.samplebuilder;
    +package io.prometheus.metrics.instrumentation.dropwizard5.labels;
     
     import java.util.HashMap;
     import java.util.Map;
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java
    new file mode 100644
    index 000000000..ae27ce62c
    --- /dev/null
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java
    @@ -0,0 +1,255 @@
    +package io.prometheus.metrics.instrumentation.dropwizard5;
    +
    +import io.dropwizard.metrics5.*;
    +import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
    +import io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExports;
    +import io.prometheus.metrics.model.registry.PrometheusRegistry;
    +import io.prometheus.metrics.model.snapshots.SummarySnapshot;
    +import org.junit.Before;
    +import org.junit.Test;
    +
    +import java.io.ByteArrayOutputStream;
    +import java.io.IOException;
    +import java.nio.charset.StandardCharsets;
    +import java.util.concurrent.TimeUnit;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +
    +public class DropwizardExportsTest {
    +
    +    private PrometheusRegistry registry = new PrometheusRegistry();
    +    private MetricRegistry metricRegistry;
    +
    +
    +    @Before
    +    public void setUp() {
    +        metricRegistry = new MetricRegistry();
    +        DropwizardExports.builder().dropwizardRegistry(metricRegistry).register(registry);
    +    }
    +
    +
    +    @Test
    +    public void testCounter()  {
    +        metricRegistry.counter("foo.bar").inc(1);
    +        String expected = "# TYPE foo_bar counter\n" +
    +                "# HELP foo_bar Generated from Dropwizard metric import (metric=foo.bar, type=io.dropwizard.metrics5.Counter)\n" +
    +                "foo_bar_total 1.0\n" +
    +                "# EOF\n";
    +
    +        assertEquals(expected, convertToOpenMetricsFormat());
    +    }
    +
    +    @Test
    +    public void testGauge()  {
    +        Gauge integerGauge = new Gauge() {
    +            @Override
    +            public Integer getValue() {
    +                return 1234;
    +            }
    +        };
    +        Gauge doubleGauge = new Gauge() {
    +            @Override
    +            public Double getValue() {
    +                return 1.234D;
    +            }
    +        };
    +        Gauge longGauge = new Gauge() {
    +            @Override
    +            public Long getValue() {
    +                return 1234L;
    +            }
    +        };
    +        Gauge floatGauge = new Gauge() {
    +            @Override
    +            public Float getValue() {
    +                return 0.1234F;
    +            }
    +        };
    +        Gauge booleanGauge = new Gauge() {
    +            @Override
    +            public Boolean getValue() {
    +                return true;
    +            }
    +        };
    +
    +        metricRegistry.register("double.gauge", doubleGauge);
    +        metricRegistry.register("long.gauge", longGauge);
    +        metricRegistry.register("integer.gauge", integerGauge);
    +        metricRegistry.register("float.gauge", floatGauge);
    +        metricRegistry.register("boolean.gauge", booleanGauge);
    +
    +        String expected = "# TYPE boolean_gauge gauge\n" +
    +                "# HELP boolean_gauge Generated from Dropwizard metric import (metric=boolean.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$5)\n" +
    +                "boolean_gauge 1.0\n" +
    +                "# TYPE double_gauge gauge\n" +
    +                "# HELP double_gauge Generated from Dropwizard metric import (metric=double.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$2)\n" +
    +                "double_gauge 1.234\n" +
    +                "# TYPE float_gauge gauge\n" +
    +                "# HELP float_gauge Generated from Dropwizard metric import (metric=float.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$4)\n" +
    +                "float_gauge 0.1234000027179718\n" +
    +                "# TYPE integer_gauge gauge\n" +
    +                "# HELP integer_gauge Generated from Dropwizard metric import (metric=integer.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$1)\n" +
    +                "integer_gauge 1234.0\n" +
    +                "# TYPE long_gauge gauge\n" +
    +                "# HELP long_gauge Generated from Dropwizard metric import (metric=long.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$3)\n" +
    +                "long_gauge 1234.0\n" +
    +                "# EOF\n";
    +
    +        assertEquals(expected, convertToOpenMetricsFormat());
    +    }
    +
    +    @Test
    +    public void testInvalidGaugeType()  {
    +        Gauge invalidGauge = new Gauge() {
    +            @Override
    +            public String getValue() {
    +                return "foobar";
    +            }
    +        };
    +
    +        metricRegistry.register("invalid_gauge", invalidGauge);
    +
    +        String expected = "# EOF\n";
    +        assertEquals(expected, convertToOpenMetricsFormat());
    +    }
    +
    +    @Test
    +    public void testGaugeReturningNullValue() {
    +        Gauge invalidGauge = new Gauge() {
    +            @Override
    +            public String getValue() {
    +                return null;
    +            }
    +        };
    +        metricRegistry.register("invalid_gauge", invalidGauge);
    +        String expected = "# EOF\n";
    +        assertEquals(expected, convertToOpenMetricsFormat());
    +    }
    +
    +    @Test
    +    public void testHistogram() throws IOException {
    +        // just test the standard mapper
    +        final MetricRegistry metricRegistry = new MetricRegistry();
    +        PrometheusRegistry pmRegistry = new PrometheusRegistry();
    +        DropwizardExports.builder().dropwizardRegistry(metricRegistry).register(pmRegistry);
    +
    +        Histogram hist = metricRegistry.histogram("hist");
    +        int i = 0;
    +        while (i < 100) {
    +            hist.update(i);
    +            i += 1;
    +        }
    +
    +        String expected = "# TYPE hist summary\n" +
    +                "# HELP hist Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram)\n" +
    +                "hist{quantile=\"0.5\"} 49.0\n" +
    +                "hist{quantile=\"0.75\"} 74.0\n" +
    +                "hist{quantile=\"0.95\"} 94.0\n" +
    +                "hist{quantile=\"0.98\"} 97.0\n" +
    +                "hist{quantile=\"0.99\"} 98.0\n" +
    +                "hist{quantile=\"0.999\"} 99.0\n" +
    +                "hist_count 100\n" +
    +                "# EOF\n";
    +        assertEquals(expected, convertToOpenMetricsFormat(pmRegistry));
    +    }
    +
    +    @Test
    +    public void testMeter()  {
    +        Meter meter = metricRegistry.meter("meter");
    +        meter.mark();
    +        meter.mark();
    +
    +        String expected = "# TYPE meter counter\n" +
    +                "# HELP meter Generated from Dropwizard metric import (metric=meter_total, type=io.dropwizard.metrics5.Meter)\n" +
    +                "meter_total 2.0\n" +
    +                "# EOF\n";
    +        assertEquals(expected, convertToOpenMetricsFormat());
    +
    +    }
    +
    +    @Test
    +    public void testTimer() throws InterruptedException {
    +        final MetricRegistry metricRegistry = new MetricRegistry();
    +        DropwizardExports exports = new DropwizardExports(metricRegistry);
    +        Timer t = metricRegistry.timer("timer");
    +        Timer.Context time = t.time();
    +        Thread.sleep(100L);
    +        long timeSpentNanos = time.stop();
    +        double timeSpentMillis = TimeUnit.NANOSECONDS.toMillis(timeSpentNanos);
    +        System.out.println(timeSpentMillis);
    +
    +        SummarySnapshot.SummaryDataPointSnapshot dataPointSnapshot = (SummarySnapshot.SummaryDataPointSnapshot) exports.collect().stream().flatMap(i -> i.getDataPoints().stream()).findFirst().get();
    +        // We slept for 1Ms so we ensure that all timers are above 1ms:
    +        assertTrue(dataPointSnapshot.getQuantiles().size() > 1);
    +        dataPointSnapshot.getQuantiles().forEach( i-> {
    +            System.out.println(i.getQuantile() + " : " + i.getValue());
    +            assertTrue(i.getValue() > timeSpentMillis/1000d);
    +        });
    +        assertEquals(1, dataPointSnapshot.getCount());
    +    }
    +
    +    @Test
    +    public void testThatMetricHelpUsesOriginalDropwizardName() {
    +
    +        metricRegistry.timer("my.application.namedTimer1");
    +        metricRegistry.counter("my.application.namedCounter1");
    +        metricRegistry.meter("my.application.namedMeter1");
    +        metricRegistry.histogram("my.application.namedHistogram1");
    +        metricRegistry.register("my.application.namedGauge1", new ExampleDoubleGauge());
    +
    +        String expected  = "# TYPE my_application_namedCounter1 counter\n" +
    +                "# HELP my_application_namedCounter1 Generated from Dropwizard metric import (metric=my.application.namedCounter1, type=io.dropwizard.metrics5.Counter)\n" +
    +                "my_application_namedCounter1_total 0.0\n" +
    +                "# TYPE my_application_namedGauge1 gauge\n" +
    +                "# HELP my_application_namedGauge1 Generated from Dropwizard metric import (metric=my.application.namedGauge1, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$ExampleDoubleGauge)\n" +
    +                "my_application_namedGauge1 0.0\n" +
    +                "# TYPE my_application_namedHistogram1 summary\n" +
    +                "# HELP my_application_namedHistogram1 Generated from Dropwizard metric import (metric=my.application.namedHistogram1, type=io.dropwizard.metrics5.Histogram)\n" +
    +                "my_application_namedHistogram1{quantile=\"0.5\"} 0.0\n" +
    +                "my_application_namedHistogram1{quantile=\"0.75\"} 0.0\n" +
    +                "my_application_namedHistogram1{quantile=\"0.95\"} 0.0\n" +
    +                "my_application_namedHistogram1{quantile=\"0.98\"} 0.0\n" +
    +                "my_application_namedHistogram1{quantile=\"0.99\"} 0.0\n" +
    +                "my_application_namedHistogram1{quantile=\"0.999\"} 0.0\n" +
    +                "my_application_namedHistogram1_count 0\n" +
    +                "# TYPE my_application_namedMeter1 counter\n" +
    +                "# HELP my_application_namedMeter1 Generated from Dropwizard metric import (metric=my.application.namedMeter1_total, type=io.dropwizard.metrics5.Meter)\n" +
    +                "my_application_namedMeter1_total 0.0\n" +
    +                "# TYPE my_application_namedTimer1 summary\n" +
    +                "# HELP my_application_namedTimer1 Generated from Dropwizard metric import (metric=my.application.namedTimer1, type=io.dropwizard.metrics5.Timer)\n" +
    +                "my_application_namedTimer1{quantile=\"0.5\"} 0.0\n" +
    +                "my_application_namedTimer1{quantile=\"0.75\"} 0.0\n" +
    +                "my_application_namedTimer1{quantile=\"0.95\"} 0.0\n" +
    +                "my_application_namedTimer1{quantile=\"0.98\"} 0.0\n" +
    +                "my_application_namedTimer1{quantile=\"0.99\"} 0.0\n" +
    +                "my_application_namedTimer1{quantile=\"0.999\"} 0.0\n" +
    +                "my_application_namedTimer1_count 0\n" +
    +                "# EOF\n";
    +        assertEquals(expected, convertToOpenMetricsFormat());
    +    }
    +
    +
    +    private static class ExampleDoubleGauge implements Gauge {
    +        @Override
    +        public Double getValue() {
    +            return 0.0;
    +        }
    +    }
    +
    +    private String convertToOpenMetricsFormat(PrometheusRegistry _registry)  {
    +        ByteArrayOutputStream out = new ByteArrayOutputStream();
    +        OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true);
    +        try {
    +            writer.write(out, _registry.scrape());
    +            return out.toString(StandardCharsets.UTF_8.name());
    +        } catch (IOException e) {
    +            throw new RuntimeException(e);
    +        }
    +    }
    +
    +    private String convertToOpenMetricsFormat() {
    +        return convertToOpenMetricsFormat(registry);
    +    }
    +}
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java
    new file mode 100644
    index 000000000..e6bbdbed8
    --- /dev/null
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java
    @@ -0,0 +1,210 @@
    +package io.prometheus.metrics.instrumentation.dropwizard5.labels;
    +
    +import io.dropwizard.metrics5.MetricFilter;
    +import io.dropwizard.metrics5.MetricRegistry;
    +import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
    +import io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExports;
    +import io.prometheus.metrics.model.snapshots.MetricSnapshots;
    +import org.junit.Before;
    +import org.junit.Test;
    +
    +import java.io.ByteArrayOutputStream;
    +import java.io.IOException;
    +import java.nio.charset.StandardCharsets;
    +import java.util.*;
    +
    +import static org.junit.Assert.assertEquals;
    +
    +public class CustomLabelMapperTest {
    +    private MetricRegistry metricRegistry;
    +
    +
    +    @Before
    +    public void setUp() {
    +        metricRegistry = new MetricRegistry();
    +    }
    +
    +    @Test(expected = IllegalArgumentException.class)
    +    public void test_WHEN_EmptyConfig_THEN_Fail() {
    +        final CustomLabelMapper converter = new CustomLabelMapper(Collections.emptyList());
    +    }
    +
    +    @Test
    +    public void test_WHEN_NoMatches_THEN_ShouldReturnDefaultSample() {
    +        final List mapperConfigs = Arrays.asList(
    +                new MapperConfig("client-nope.*.*.*"),
    +                new MapperConfig("*.client-nope.*.*.*"),
    +                new MapperConfig("not.even.this.*.*.*")
    +        );
    +        final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs);
    +        DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper);
    +
    +        metricRegistry.counter("app.okhttpclient.client.HttpClient.service.total").inc(1);
    +        System.out.println(convertToOpenMetricsFormat(dropwizardExports.collect()));
    +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient_service counter\n" +
    +                "# HELP app_okhttpclient_client_HttpClient_service Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.service.total, type=io.dropwizard.metrics5.Counter)\n" +
    +                "app_okhttpclient_client_HttpClient_service_total 1.0\n" +
    +                "# EOF\n";
    +
    +        assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
    +    }
    +
    +    @Test
    +    public void test_WHEN_OneMatch_THEN_ShouldReturnConverted() {
    +        final Map labels = new HashMap();
    +        labels.put("service", "${0}");
    +        final MapperConfig mapperConfig = new MapperConfig(
    +                "app.okhttpclient.client.HttpClient.*.total",
    +                "app.okhttpclient.client.HttpClient.total",
    +                labels
    +        );
    +        final List mapperConfigs = Arrays.asList(
    +                new MapperConfig("client-nope.*.*.*"),
    +                mapperConfig,
    +                new MapperConfig("not.even.this.*.*.*")
    +        );
    +        final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs);
    +        DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper);
    +
    +        metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.total").inc(1);
    +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService counter\n" +
    +                "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_total{service=\"greatService\"} 1.0\n" +
    +                "# EOF\n";
    +        assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
    +    }
    +
    +    @Test
    +    public void test_WHEN_MoreMatches_THEN_ShouldReturnFirstOne() {
    +        final Map labels = new HashMap();
    +        labels.put("service", "${0}");
    +        final MapperConfig mapperConfig = new MapperConfig(
    +                "app.okhttpclient.client.HttpClient.*.total",
    +                "app.okhttpclient.client.HttpClient.total",
    +                labels
    +        );
    +        final List mapperConfigs = Arrays.asList(
    +                new MapperConfig("client-nope.*.*.*"),
    +                mapperConfig,
    +                new MapperConfig("app.okhttpclient.client.HttpClient.*.*") // this matches as well
    +        );
    +        final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs);
    +        DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper);
    +
    +        metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.total").inc(1);
    +
    +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService counter\n" +
    +                "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_total{service=\"greatService\"} 1.0\n" +
    +                "# EOF\n";
    +        assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
    +    }
    +
    +    @Test
    +    public void test_WHEN_MoreMatchesReverseOrder_THEN_ShouldReturnFirstOne() {
    +        final Map labels = new LinkedHashMap();
    +        labels.put("service", "${0}");
    +        labels.put("status", "${1}");
    +        final MapperConfig mapperConfig = new MapperConfig(
    +                "app.okhttpclient.client.HttpClient.*.*",
    +                "app.okhttpclient.client.HttpClient",
    +                labels
    +        );
    +        final List mapperConfigs = Arrays.asList(
    +                new MapperConfig("client-nope.*.*.*"),
    +                mapperConfig,
    +                new MapperConfig("app.okhttpclient.client.HttpClient.*.total") // this matches as well
    +        );
    +
    +        final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs);
    +        DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper);
    +        metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.400").inc(1);
    +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService_400 counter\n" +
    +                "# HELP app_okhttpclient_client_HttpClient_greatService_400 Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_400_total{service=\"greatService\",status=\"400\"} 1.0\n" +
    +                "# EOF\n";
    +        assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
    +
    +    }
    +
    +    @Test
    +    public void test_WHEN_MoreToFormatInLabelsAndName_THEN_ShouldReturnCorrectSample() {
    +        final Map labels = new LinkedHashMap();
    +        labels.put("service", "${0}_${1}");
    +        labels.put("status", "s_${1}");
    +        final MapperConfig mapperConfig = new MapperConfig(
    +                "app.okhttpclient.client.HttpClient.*.*",
    +                "app.okhttpclient.client.HttpClient.${0}",
    +                labels
    +        );
    +        final List mapperConfigs = Arrays.asList(
    +                new MapperConfig("client-nope.*.*.*"),
    +                mapperConfig,
    +                new MapperConfig("app.okhttpclient.client.HttpClient.*.total") // this matches as well
    +        );
    +
    +
    +        final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs);
    +        DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry,MetricFilter.ALL,  labelMapper);
    +        metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.400").inc(1);
    +        System.out.println(convertToOpenMetricsFormat(dropwizardExports.collect()));
    +
    +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService_400 counter\n" +
    +                "# HELP app_okhttpclient_client_HttpClient_greatService_400 Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_400_total{service=\"greatService_400\",status=\"s_400\"} 1.0\n" +
    +                "# EOF\n";
    +        assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
    +    }
    +
    +
    +    @Test
    +    public void test_WHEN_AdditionalLabels_THEN_ShouldReturnCorrectSample() {
    +        final Map labels = new LinkedHashMap();
    +        labels.put("service", "${0}");
    +        labels.put("status", "s_${1}");
    +        final MapperConfig mapperConfig = new MapperConfig(
    +                "app.okhttpclient.client.HttpClient.*.*",
    +                "app.okhttpclient.client.HttpClient.${0}",
    +                labels
    +        );
    +        final List mapperConfigs = Arrays.asList(
    +                new MapperConfig("client-nope.*.*.*"),
    +                mapperConfig,
    +                new MapperConfig("app.okhttpclient.client.HttpClient.*.total") // this matches as well
    +        );
    +
    +        final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs);
    +        DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry,MetricFilter.ALL,  labelMapper);
    +        metricRegistry.histogram("app.okhttpclient.client.HttpClient.greatService.400");
    +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService_400 summary\n" +
    +                "# HELP app_okhttpclient_client_HttpClient_greatService_400 Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Histogram)\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.5\"} 0.0\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.75\"} 0.0\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.95\"} 0.0\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.98\"} 0.0\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.99\"} 0.0\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.999\"} 0.0\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_400_count{service=\"greatService\",status=\"s_400\"} 0\n" +
    +                "# EOF\n";
    +        assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
    +    }
    +
    +
    +    private String convertToOpenMetricsFormat(MetricSnapshots snapshots)  {
    +        ByteArrayOutputStream out = new ByteArrayOutputStream();
    +        OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true);
    +        try {
    +            writer.write(out, snapshots);
    +            return out.toString(StandardCharsets.UTF_8.name());
    +        } catch (IOException e) {
    +            throw new RuntimeException(e);
    +        }
    +    }
    +
    +}
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/GraphiteNamePatternTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java
    similarity index 98%
    rename from simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/GraphiteNamePatternTest.java
    rename to prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java
    index 8b95e8e3e..5b704e6bd 100644
    --- a/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/GraphiteNamePatternTest.java
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java
    @@ -1,4 +1,4 @@
    -package io.prometheus.client.dropwizard.samplebuilder;
    +package io.prometheus.metrics.instrumentation.dropwizard5.labels;
     
     import org.assertj.core.api.Assertions;
     import org.junit.Test;
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/MapperConfigTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java
    similarity index 94%
    rename from simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/MapperConfigTest.java
    rename to prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java
    index e0ded6978..03d244b89 100644
    --- a/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/MapperConfigTest.java
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java
    @@ -1,6 +1,5 @@
    -package io.prometheus.client.dropwizard.samplebuilder;
    +package io.prometheus.metrics.instrumentation.dropwizard5.labels;
     
    -import io.prometheus.client.dropwizard.samplebuilder.MapperConfig;
     import org.junit.Test;
     
     import java.util.Collections;
    diff --git a/simpleclient-archive/simpleclient_dropwizard/version-rules.xml b/prometheus-metrics-instrumentation-dropwizard5/version-rules.xml
    similarity index 100%
    rename from simpleclient-archive/simpleclient_dropwizard/version-rules.xml
    rename to prometheus-metrics-instrumentation-dropwizard5/version-rules.xml
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/DropwizardExports.java b/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/DropwizardExports.java
    deleted file mode 100644
    index 4bf89899f..000000000
    --- a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/DropwizardExports.java
    +++ /dev/null
    @@ -1,201 +0,0 @@
    -package io.prometheus.client.dropwizard;
    -
    -import com.codahale.metrics.Counter;
    -import com.codahale.metrics.Gauge;
    -import com.codahale.metrics.Histogram;
    -import com.codahale.metrics.Meter;
    -import com.codahale.metrics.Metric;
    -import com.codahale.metrics.MetricFilter;
    -import com.codahale.metrics.MetricRegistry;
    -import com.codahale.metrics.Snapshot;
    -import com.codahale.metrics.Timer;
    -import io.prometheus.client.dropwizard.samplebuilder.SampleBuilder;
    -import io.prometheus.client.dropwizard.samplebuilder.DefaultSampleBuilder;
    -
    -import java.util.ArrayList;
    -import java.util.Arrays;
    -import java.util.HashMap;
    -import java.util.List;
    -import java.util.Map;
    -import java.util.SortedMap;
    -import java.util.concurrent.TimeUnit;
    -import java.util.logging.Level;
    -import java.util.logging.Logger;
    -
    -/**
    - * Collect Dropwizard metrics from a MetricRegistry.
    - */
    -public class DropwizardExports extends io.prometheus.client.Collector implements io.prometheus.client.Collector.Describable {
    -    private static final Logger LOGGER = Logger.getLogger(DropwizardExports.class.getName());
    -    private MetricRegistry registry;
    -    private MetricFilter metricFilter;
    -    private SampleBuilder sampleBuilder;
    -
    -    /**
    -     * Creates a new DropwizardExports with a {@link DefaultSampleBuilder} and {@link MetricFilter#ALL}.
    -     *
    -     * @param registry a metric registry to export in prometheus.
    -     */
    -    public DropwizardExports(MetricRegistry registry) {
    -        this.registry = registry;
    -        this.metricFilter = MetricFilter.ALL;
    -        this.sampleBuilder = new DefaultSampleBuilder();
    -    }
    -
    -    /**
    -     * Creates a new DropwizardExports with a {@link DefaultSampleBuilder} and custom {@link MetricFilter}.
    -     *
    -     * @param registry     a metric registry to export in prometheus.
    -     * @param metricFilter a custom metric filter.
    -     */
    -    public DropwizardExports(MetricRegistry registry, MetricFilter metricFilter) {
    -        this.registry = registry;
    -        this.metricFilter = metricFilter;
    -        this.sampleBuilder = new DefaultSampleBuilder();
    -    }
    -
    -    /**
    -     * @param registry      a metric registry to export in prometheus.
    -     * @param sampleBuilder sampleBuilder to use to create prometheus samples.
    -     */
    -    public DropwizardExports(MetricRegistry registry, SampleBuilder sampleBuilder) {
    -        this.registry = registry;
    -        this.metricFilter = MetricFilter.ALL;
    -        this.sampleBuilder = sampleBuilder;
    -    }
    -
    -    /**
    -     * @param registry      a metric registry to export in prometheus.
    -     * @param metricFilter  a custom metric filter.
    -     * @param sampleBuilder sampleBuilder to use to create prometheus samples.
    -     */
    -    public DropwizardExports(MetricRegistry registry, MetricFilter metricFilter, SampleBuilder sampleBuilder) {
    -        this.registry = registry;
    -        this.metricFilter = metricFilter;
    -        this.sampleBuilder = sampleBuilder;
    -    }
    -
    -    private static String getHelpMessage(String metricName, Metric metric) {
    -        return String.format("Generated from Dropwizard metric import (metric=%s, type=%s)",
    -                metricName, metric.getClass().getName());
    -    }
    -
    -    /**
    -     * Export counter as Prometheus Gauge.
    -     */
    -    MetricFamilySamples fromCounter(String dropwizardName, Counter counter) {
    -        MetricFamilySamples.Sample sample = sampleBuilder.createSample(dropwizardName, "", new ArrayList(), new ArrayList(),
    -                new Long(counter.getCount()).doubleValue());
    -        return new MetricFamilySamples(sample.name, Type.GAUGE, getHelpMessage(dropwizardName, counter), Arrays.asList(sample));
    -    }
    -
    -    /**
    -     * Export gauge as a prometheus gauge.
    -     */
    -    MetricFamilySamples fromGauge(String dropwizardName, Gauge gauge) {
    -        Object obj = gauge.getValue();
    -        double value;
    -        if (obj instanceof Number) {
    -            value = ((Number) obj).doubleValue();
    -        } else if (obj instanceof Boolean) {
    -            value = ((Boolean) obj) ? 1 : 0;
    -        } else {
    -            LOGGER.log(Level.FINE, String.format("Invalid type for Gauge %s: %s", sanitizeMetricName(dropwizardName),
    -                    obj == null ? "null" : obj.getClass().getName()));
    -            return null;
    -        }
    -        MetricFamilySamples.Sample sample = sampleBuilder.createSample(dropwizardName, "",
    -                new ArrayList(), new ArrayList(), value);
    -        return new MetricFamilySamples(sample.name, Type.GAUGE, getHelpMessage(dropwizardName, gauge), Arrays.asList(sample));
    -    }
    -
    -    /**
    -     * Export a histogram snapshot as a prometheus SUMMARY.
    -     *
    -     * @param dropwizardName metric name.
    -     * @param snapshot       the histogram snapshot.
    -     * @param count          the total sample count for this snapshot.
    -     * @param factor         a factor to apply to histogram values.
    -     */
    -    MetricFamilySamples fromSnapshotAndCount(String dropwizardName, Snapshot snapshot, long count, double factor, String helpMessage) {
    -        List samples = Arrays.asList(
    -                sampleBuilder.createSample(dropwizardName, "", Arrays.asList("quantile"), Arrays.asList("0.5"), snapshot.getMedian() * factor),
    -                sampleBuilder.createSample(dropwizardName, "", Arrays.asList("quantile"), Arrays.asList("0.75"), snapshot.get75thPercentile() * factor),
    -                sampleBuilder.createSample(dropwizardName, "", Arrays.asList("quantile"), Arrays.asList("0.95"), snapshot.get95thPercentile() * factor),
    -                sampleBuilder.createSample(dropwizardName, "", Arrays.asList("quantile"), Arrays.asList("0.98"), snapshot.get98thPercentile() * factor),
    -                sampleBuilder.createSample(dropwizardName, "", Arrays.asList("quantile"), Arrays.asList("0.99"), snapshot.get99thPercentile() * factor),
    -                sampleBuilder.createSample(dropwizardName, "", Arrays.asList("quantile"), Arrays.asList("0.999"), snapshot.get999thPercentile() * factor),
    -                sampleBuilder.createSample(dropwizardName, "_count", new ArrayList(), new ArrayList(), count)
    -        );
    -        return new MetricFamilySamples(samples.get(0).name, Type.SUMMARY, helpMessage, samples);
    -    }
    -
    -    /**
    -     * Convert histogram snapshot.
    -     */
    -    MetricFamilySamples fromHistogram(String dropwizardName, Histogram histogram) {
    -        return fromSnapshotAndCount(dropwizardName, histogram.getSnapshot(), histogram.getCount(), 1.0,
    -                getHelpMessage(dropwizardName, histogram));
    -    }
    -
    -    /**
    -     * Export Dropwizard Timer as a histogram. Use TIME_UNIT as time unit.
    -     */
    -    MetricFamilySamples fromTimer(String dropwizardName, Timer timer) {
    -        return fromSnapshotAndCount(dropwizardName, timer.getSnapshot(), timer.getCount(),
    -                1.0D / TimeUnit.SECONDS.toNanos(1L), getHelpMessage(dropwizardName, timer));
    -    }
    -
    -    /**
    -     * Export a Meter as as prometheus COUNTER.
    -     */
    -    MetricFamilySamples fromMeter(String dropwizardName, Meter meter) {
    -        final MetricFamilySamples.Sample sample = sampleBuilder.createSample(dropwizardName, "_total",
    -                new ArrayList(),
    -                new ArrayList(),
    -                meter.getCount());
    -        return new MetricFamilySamples(sample.name, Type.COUNTER, getHelpMessage(dropwizardName, meter),
    -                        Arrays.asList(sample));
    -    }
    -
    -    @Override
    -    public List collect() {
    -        Map mfSamplesMap = new HashMap();
    -
    -        for (SortedMap.Entry entry : registry.getGauges(metricFilter).entrySet()) {
    -            addToMap(mfSamplesMap, fromGauge(entry.getKey(), entry.getValue()));
    -        }
    -        for (SortedMap.Entry entry : registry.getCounters(metricFilter).entrySet()) {
    -            addToMap(mfSamplesMap, fromCounter(entry.getKey(), entry.getValue()));
    -        }
    -        for (SortedMap.Entry entry : registry.getHistograms(metricFilter).entrySet()) {
    -            addToMap(mfSamplesMap, fromHistogram(entry.getKey(), entry.getValue()));
    -        }
    -        for (SortedMap.Entry entry : registry.getTimers(metricFilter).entrySet()) {
    -            addToMap(mfSamplesMap, fromTimer(entry.getKey(), entry.getValue()));
    -        }
    -        for (SortedMap.Entry entry : registry.getMeters(metricFilter).entrySet()) {
    -            addToMap(mfSamplesMap, fromMeter(entry.getKey(), entry.getValue()));
    -        }
    -        return new ArrayList(mfSamplesMap.values());
    -    }
    -
    -    private void addToMap(Map mfSamplesMap, MetricFamilySamples newMfSamples)
    -    {
    -        if (newMfSamples != null) {
    -            MetricFamilySamples currentMfSamples = mfSamplesMap.get(newMfSamples.name);
    -            if (currentMfSamples == null) {
    -                mfSamplesMap.put(newMfSamples.name, newMfSamples);
    -            } else {
    -                List samples = new ArrayList(currentMfSamples.samples);
    -                samples.addAll(newMfSamples.samples);
    -                mfSamplesMap.put(newMfSamples.name, new MetricFamilySamples(newMfSamples.name, currentMfSamples.type, currentMfSamples.help, samples));
    -            }
    -        }
    -    }
    -
    -    @Override
    -    public List describe() {
    -        return new ArrayList();
    -    }
    -}
    \ No newline at end of file
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/DefaultSampleBuilder.java b/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/DefaultSampleBuilder.java
    deleted file mode 100644
    index 230edb4a7..000000000
    --- a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/DefaultSampleBuilder.java
    +++ /dev/null
    @@ -1,29 +0,0 @@
    -package io.prometheus.client.dropwizard.samplebuilder;
    -
    -import io.prometheus.client.Collector;
    -
    -import java.util.ArrayList;
    -import java.util.Collections;
    -import java.util.List;
    -
    -
    -/**
    - * Default implementation of {@link SampleBuilder}.
    - * Sanitises the metric name if necessary.
    - *
    - * @see io.prometheus.client.Collector#sanitizeMetricName(String)
    - */
    -public class DefaultSampleBuilder implements SampleBuilder {
    -    @Override
    -    public Collector.MetricFamilySamples.Sample createSample(final String dropwizardName, final String nameSuffix, final List additionalLabelNames, final List additionalLabelValues, final double value) {
    -        final String suffix = nameSuffix == null ? "" : nameSuffix;
    -        final List labelNames = additionalLabelNames == null ? Collections.emptyList() : additionalLabelNames;
    -        final List labelValues = additionalLabelValues == null ? Collections.emptyList() : additionalLabelValues;
    -        return new Collector.MetricFamilySamples.Sample(
    -                Collector.sanitizeMetricName(dropwizardName + suffix),
    -                new ArrayList(labelNames),
    -                new ArrayList(labelValues),
    -                value
    -        );
    -    }
    -}
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/SampleBuilder.java b/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/SampleBuilder.java
    deleted file mode 100644
    index eb570fd6a..000000000
    --- a/simpleclient-archive/simpleclient_dropwizard/src/main/java/io/prometheus/client/dropwizard/samplebuilder/SampleBuilder.java
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -package io.prometheus.client.dropwizard.samplebuilder;
    -
    -import io.prometheus.client.Collector;
    -
    -import java.util.List;
    -
    -/**
    - * SampleBuilder defines the action of creating a {@link io.prometheus.client.Collector.MetricFamilySamples.Sample} for the given parameters.
    - */
    -public interface SampleBuilder {
    -
    -    /**
    -     * Creates a new {@link io.prometheus.client.Collector.MetricFamilySamples.Sample} for the given parameters.
    -     *
    -     * @param dropwizardName        Metric name coming from Dropwizard.
    -     * @param nameSuffix            Optional suffix to add.
    -     * @param additionalLabelNames  Optional additional label names. Needs to have same size as additionalLabelValues.
    -     * @param additionalLabelValues Optional additional label values. Needs to have same size as additionalLabelNames.
    -     * @param value                 Metric value
    -     * @return A new {@link io.prometheus.client.Collector.MetricFamilySamples.Sample}.
    -     */
    -    Collector.MetricFamilySamples.Sample createSample(String dropwizardName, String nameSuffix, List additionalLabelNames, List additionalLabelValues, double value);
    -}
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/DropwizardExportsTest.java b/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/DropwizardExportsTest.java
    deleted file mode 100644
    index 33a031b54..000000000
    --- a/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/DropwizardExportsTest.java
    +++ /dev/null
    @@ -1,352 +0,0 @@
    -package io.prometheus.client.dropwizard;
    -
    -import com.codahale.metrics.*;
    -import com.codahale.metrics.Timer;
    -import io.prometheus.client.Collector;
    -import io.prometheus.client.CollectorRegistry;
    -import io.prometheus.client.dropwizard.samplebuilder.SampleBuilder;
    -import org.junit.Before;
    -import org.junit.Test;
    -import org.mockito.Mockito;
    -
    -import java.io.IOException;
    -import java.util.Arrays;
    -import java.util.Collections;
    -import java.util.Enumeration;
    -import java.util.HashMap;
    -import java.util.Map;
    -
    -import static org.hamcrest.CoreMatchers.is;
    -import static org.junit.Assert.assertEquals;
    -import static org.junit.Assert.assertNotEquals;
    -import static org.junit.Assert.assertNotNull;
    -import static org.junit.Assert.assertThat;
    -import static org.junit.Assert.assertTrue;
    -import static org.mockito.ArgumentMatchers.anyDouble;
    -import static org.mockito.ArgumentMatchers.anyList;
    -import static org.mockito.ArgumentMatchers.anyString;
    -import static org.mockito.ArgumentMatchers.eq;
    -
    -
    -public class DropwizardExportsTest {
    -
    -    private CollectorRegistry registry = new CollectorRegistry();
    -    private MetricRegistry metricRegistry;
    -
    -    private SampleBuilder sampleBuilder;
    -
    -    @Before
    -    public void setUp() {
    -        metricRegistry = new MetricRegistry();
    -        sampleBuilder = Mockito.mock(SampleBuilder.class);
    -        new DropwizardExports(metricRegistry, sampleBuilder).register(registry);
    -    }
    -
    -    @Test
    -    public void testCounter() {
    -        Mockito.when(sampleBuilder.createSample("foo.bar", "", Collections.emptyList(), Collections.emptyList(), 1d)).thenReturn(new Collector.MetricFamilySamples.Sample("foo_bar", Collections.emptyList(), Collections.emptyList(), 1d));
    -        metricRegistry.counter("foo.bar").inc();
    -        assertEquals(new Double(1),
    -                registry.getSampleValue("foo_bar")
    -        );
    -    }
    -
    -    @Test
    -    public void testGauge() {
    -        Gauge integerGauge = new Gauge() {
    -            @Override
    -            public Integer getValue() {
    -                return 1234;
    -            }
    -        };
    -        Gauge doubleGauge = new Gauge() {
    -            @Override
    -            public Double getValue() {
    -                return 1.234D;
    -            }
    -        };
    -        Gauge longGauge = new Gauge() {
    -            @Override
    -            public Long getValue() {
    -                return 1234L;
    -            }
    -        };
    -        Gauge floatGauge = new Gauge() {
    -            @Override
    -            public Float getValue() {
    -                return 0.1234F;
    -            }
    -        };
    -        Gauge booleanGauge = new Gauge() {
    -            @Override
    -            public Boolean getValue() {
    -                return true;
    -            }
    -        };
    -
    -        Mockito.when(sampleBuilder.createSample("integer.gauge", "", Collections.emptyList(), Collections.emptyList(), 1234)).thenReturn(new Collector.MetricFamilySamples.Sample("integer_gauge", Collections.emptyList(), Collections.emptyList(), 1234));
    -        Mockito.when(sampleBuilder.createSample("long.gauge", "", Collections.emptyList(), Collections.emptyList(), 1234)).thenReturn(new Collector.MetricFamilySamples.Sample("long_gauge", Collections.emptyList(), Collections.emptyList(), 1234));
    -        Mockito.when(sampleBuilder.createSample("double.gauge", "", Collections.emptyList(), Collections.emptyList(), 1.234)).thenReturn(new Collector.MetricFamilySamples.Sample("double_gauge", Collections.emptyList(), Collections.emptyList(), 1.234));
    -        Mockito.when(sampleBuilder.createSample("float.gauge", "", Collections.emptyList(), Collections.emptyList(), 0.1234F)).thenReturn(new Collector.MetricFamilySamples.Sample("float_gauge", Collections.emptyList(), Collections.emptyList(), 0.1234F));
    -        Mockito.when(sampleBuilder.createSample("boolean.gauge", "", Collections.emptyList(), Collections.emptyList(), 1)).thenReturn(new Collector.MetricFamilySamples.Sample("boolean_gauge", Collections.emptyList(), Collections.emptyList(), 1));
    -
    -        metricRegistry.register("double.gauge", doubleGauge);
    -        metricRegistry.register("long.gauge", longGauge);
    -        metricRegistry.register("integer.gauge", integerGauge);
    -        metricRegistry.register("float.gauge", floatGauge);
    -        metricRegistry.register("boolean.gauge", booleanGauge);
    -
    -        assertEquals(new Double(1234),
    -                registry.getSampleValue("integer_gauge", new String[]{}, new String[]{}));
    -        assertEquals(new Double(1234),
    -                registry.getSampleValue("long_gauge", new String[]{}, new String[]{}));
    -        assertEquals(new Double(1.234),
    -                registry.getSampleValue("double_gauge", new String[]{}, new String[]{}));
    -        assertEquals(new Double(0.1234F),
    -                registry.getSampleValue("float_gauge", new String[]{}, new String[]{}));
    -        assertEquals(new Double(1),
    -                registry.getSampleValue("boolean_gauge", new String[]{}, new String[]{}));
    -    }
    -
    -    @Test
    -    public void testInvalidGaugeType() {
    -        Gauge invalidGauge = new Gauge() {
    -            @Override
    -            public String getValue() {
    -                return "foobar";
    -            }
    -        };
    -
    -        metricRegistry.register("invalid_gauge", invalidGauge);
    -        assertEquals(null, registry.getSampleValue("invalid_gauge"));
    -        Mockito.verifyNoInteractions(sampleBuilder);
    -    }
    -
    -    @Test
    -    public void testGaugeReturningNullValue() {
    -        Gauge invalidGauge = new Gauge() {
    -            @Override
    -            public String getValue() {
    -                return null;
    -            }
    -        };
    -        metricRegistry.register("invalid_gauge", invalidGauge);
    -        assertEquals(null, registry.getSampleValue("invalid_gauge"));
    -        Mockito.verifyNoInteractions(sampleBuilder);
    -    }
    -
    -    void assertRegistryContainsMetrics(String... metrics) {
    -        for (String metric : metrics) {
    -            assertNotEquals(String.format("Metric %s should exist", metric), null,
    -                    registry.getSampleValue(metric, new String[]{}, new String[]{}));
    -        }
    -    }
    -
    -    @Test
    -    public void testHistogram() throws IOException {
    -        // just test the standard mapper
    -        final MetricRegistry metricRegistry = new MetricRegistry();
    -        final CollectorRegistry registry = new CollectorRegistry();
    -        new DropwizardExports(metricRegistry).register(registry);
    -        Histogram hist = metricRegistry.histogram("hist");
    -        int i = 0;
    -        while (i < 100) {
    -            hist.update(i);
    -            i += 1;
    -        }
    -        assertEquals(new Double(100), registry.getSampleValue("hist_count"));
    -        for (Double d : Arrays.asList(0.75, 0.95, 0.98, 0.99)) {
    -            assertEquals(new Double((d - 0.01) * 100), registry.getSampleValue("hist",
    -                    new String[]{"quantile"}, new String[]{d.toString()}));
    -        }
    -        assertEquals(new Double(99), registry.getSampleValue("hist", new String[]{"quantile"},
    -                new String[]{"0.999"}));
    -    }
    -
    -    @Test
    -    public void testMeter() throws IOException, InterruptedException {
    -        Mockito.when(sampleBuilder.createSample("meter", "_total", Collections.emptyList(), Collections.emptyList(), 2)).thenReturn(new Collector.MetricFamilySamples.Sample("meter_total", Collections.emptyList(), Collections.emptyList(), 2));
    -        Meter meter = metricRegistry.meter("meter");
    -        meter.mark();
    -        meter.mark();
    -        assertEquals(new Double(2), registry.getSampleValue("meter_total"));
    -    }
    -
    -    @Test
    -    public void testTimer() throws IOException, InterruptedException {
    -        // just test the standard mapper
    -        final MetricRegistry metricRegistry = new MetricRegistry();
    -        final CollectorRegistry registry = new CollectorRegistry();
    -        new DropwizardExports(metricRegistry).register(registry);
    -
    -        Timer t = metricRegistry.timer("timer");
    -        Timer.Context time = t.time();
    -        Thread.sleep(1L);
    -        time.stop();
    -        // We slept for 1Ms so we ensure that all timers are above 1ms:
    -        assertTrue(registry.getSampleValue("timer", new String[]{"quantile"}, new String[]{"0.99"}) > 0.001);
    -        assertEquals(new Double(1.0D), registry.getSampleValue("timer_count"));
    -    }
    -
    -    @Test
    -    public void testThatMetricHelpUsesOriginalDropwizardName() {
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedTimer1"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(new Collector.MetricFamilySamples.Sample("my_application_namedTimer1", Collections.emptyList(), Collections.emptyList(), 1234));
    -
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedCounter1"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(new Collector.MetricFamilySamples.Sample("my_application_namedCounter1", Collections.emptyList(), Collections.emptyList(), 1234));
    -
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedMeter1"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(new Collector.MetricFamilySamples.Sample("my_application_namedMeter1_total", Collections.emptyList(), Collections.emptyList(), 1234));
    -
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedHistogram1"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(new Collector.MetricFamilySamples.Sample("my_application_namedHistogram1", Collections.emptyList(), Collections.emptyList(), 1234));
    -
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedGauge1"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(new Collector.MetricFamilySamples.Sample("my_application_namedGauge1", Collections.emptyList(), Collections.emptyList(), 1234));
    -
    -        metricRegistry.timer("my.application.namedTimer1");
    -        metricRegistry.counter("my.application.namedCounter1");
    -        metricRegistry.meter("my.application.namedMeter1");
    -        metricRegistry.histogram("my.application.namedHistogram1");
    -        metricRegistry.register("my.application.namedGauge1", new ExampleDoubleGauge());
    -
    -        Enumeration metricFamilySamples = registry.metricFamilySamples();
    -
    -
    -        Map elements = new HashMap();
    -
    -        while (metricFamilySamples.hasMoreElements()) {
    -            Collector.MetricFamilySamples element = metricFamilySamples.nextElement();
    -            elements.put(element.name, element);
    -        }
    -        assertEquals(5, elements.size());
    -
    -        assertTrue(elements.keySet().contains("my_application_namedTimer1"));
    -        assertTrue(elements.keySet().contains("my_application_namedCounter1"));
    -        assertTrue(elements.keySet().contains("my_application_namedMeter1"));
    -        assertTrue(elements.keySet().contains("my_application_namedHistogram1"));
    -        assertTrue(elements.keySet().contains("my_application_namedGauge1"));
    -
    -        assertThat(elements.get("my_application_namedTimer1").help,
    -                is("Generated from Dropwizard metric import (metric=my.application.namedTimer1, type=com.codahale.metrics.Timer)"));
    -
    -        assertThat(elements.get("my_application_namedCounter1").help,
    -                is("Generated from Dropwizard metric import (metric=my.application.namedCounter1, type=com.codahale.metrics.Counter)"));
    -
    -        assertThat(elements.get("my_application_namedMeter1").help,
    -                is("Generated from Dropwizard metric import (metric=my.application.namedMeter1, type=com.codahale.metrics.Meter)"));
    -
    -        assertThat(elements.get("my_application_namedHistogram1").help,
    -                is("Generated from Dropwizard metric import (metric=my.application.namedHistogram1, type=com.codahale.metrics.Histogram)"));
    -
    -        assertThat(elements.get("my_application_namedGauge1").help,
    -                is("Generated from Dropwizard metric import (metric=my.application.namedGauge1, type=io.prometheus.client.dropwizard.DropwizardExportsTest$ExampleDoubleGauge)"));
    -
    -    }
    -
    -    @Test
    -    public void testThatMetricsMappedToSameNameAreGroupedInSameFamily() {
    -        final Collector.MetricFamilySamples.Sample namedTimerSample1 = new Collector.MetricFamilySamples.Sample("my_application_namedTimer", Collections.emptyList(), Collections.emptyList(), 1234);
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedTimer1"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(namedTimerSample1);
    -
    -        final Collector.MetricFamilySamples.Sample namedTimerSample2 = new Collector.MetricFamilySamples.Sample("my_application_namedTimer", Collections.emptyList(), Collections.emptyList(), 1235);
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedTimer2"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(namedTimerSample2);
    -
    -        final Collector.MetricFamilySamples.Sample namedCounter1 = new Collector.MetricFamilySamples.Sample("my_application_namedCounter", Collections.emptyList(), Collections.emptyList(), 1234);
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedCounter1"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(namedCounter1);
    -
    -        final Collector.MetricFamilySamples.Sample namedCounter2 = new Collector.MetricFamilySamples.Sample("my_application_namedCounter", Collections.emptyList(), Collections.emptyList(), 1235);
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedCounter2"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(namedCounter2);
    -
    -        final Collector.MetricFamilySamples.Sample namedMeter1 = new Collector.MetricFamilySamples.Sample("my_application_namedMeter_total", Collections.emptyList(), Collections.emptyList(), 1234);
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedMeter1"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(namedMeter1);
    -
    -        final Collector.MetricFamilySamples.Sample namedMeter2 = new Collector.MetricFamilySamples.Sample("my_application_namedMeter_total", Collections.emptyList(), Collections.emptyList(), 1235);
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedMeter2"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(namedMeter2);
    -
    -        final Collector.MetricFamilySamples.Sample namedHistogram1 = new Collector.MetricFamilySamples.Sample("my_application_namedHistogram", Collections.emptyList(), Collections.emptyList(), 1234);
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedHistogram1"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(namedHistogram1);
    -
    -        final Collector.MetricFamilySamples.Sample namedHistogram2 = new Collector.MetricFamilySamples.Sample("my_application_namedHistogram", Collections.emptyList(), Collections.emptyList(), 1235);
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedHistogram2"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(namedHistogram2);
    -
    -        final Collector.MetricFamilySamples.Sample namedGauge1 = new Collector.MetricFamilySamples.Sample("my_application_namedGauge", Collections.emptyList(), Collections.emptyList(), 1234);
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedGauge1"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(namedGauge1);
    -
    -        final Collector.MetricFamilySamples.Sample namedGauge2 = new Collector.MetricFamilySamples.Sample("my_application_namedGauge", Collections.emptyList(), Collections.emptyList(), 1235);
    -        Mockito.when(sampleBuilder.createSample(eq("my.application.namedGauge2"), anyString(), anyList(), anyList(), anyDouble()))
    -                .thenReturn(namedGauge2);
    -
    -        metricRegistry.timer("my.application.namedTimer1");
    -        metricRegistry.timer("my.application.namedTimer2");
    -        metricRegistry.counter("my.application.namedCounter1");
    -        metricRegistry.counter("my.application.namedCounter2");
    -        metricRegistry.meter("my.application.namedMeter1");
    -        metricRegistry.meter("my.application.namedMeter2");
    -        metricRegistry.histogram("my.application.namedHistogram1");
    -        metricRegistry.histogram("my.application.namedHistogram2");
    -        metricRegistry.register("my.application.namedGauge1", new ExampleDoubleGauge());
    -        metricRegistry.register("my.application.namedGauge2", new ExampleDoubleGauge());
    -
    -        Enumeration metricFamilySamples = registry.metricFamilySamples();
    -
    -
    -        Map elements = new HashMap();
    -
    -        while (metricFamilySamples.hasMoreElements()) {
    -            Collector.MetricFamilySamples element = metricFamilySamples.nextElement();
    -            elements.put(element.name, element);
    -        }
    -        assertEquals(5, elements.size());
    -
    -        final Collector.MetricFamilySamples namedTimer = elements.get("my_application_namedTimer");
    -        assertNotNull(namedTimer);
    -        assertEquals(Collector.Type.SUMMARY, namedTimer.type);
    -        assertEquals(14, namedTimer.samples.size());
    -
    -        final Collector.MetricFamilySamples namedCounter = elements.get("my_application_namedCounter");
    -        assertNotNull(namedCounter);
    -        assertEquals(Collector.Type.GAUGE, namedCounter.type);
    -        assertEquals(2, namedCounter.samples.size());
    -        assertTrue(namedCounter.samples.contains(namedCounter1));
    -        assertTrue(namedCounter.samples.contains(namedCounter2));
    -
    -        final Collector.MetricFamilySamples namedMeter = elements.get("my_application_namedMeter");
    -        assertNotNull(namedMeter);
    -        assertEquals(Collector.Type.COUNTER, namedMeter.type);
    -        assertEquals(2, namedMeter.samples.size());
    -        assertTrue(namedMeter.samples.contains(namedMeter1));
    -        assertTrue(namedMeter.samples.contains(namedMeter2));
    -
    -        final Collector.MetricFamilySamples namedHistogram = elements.get("my_application_namedHistogram");
    -        assertNotNull(namedHistogram);
    -        assertEquals(Collector.Type.SUMMARY, namedHistogram.type);
    -        assertEquals(Collector.Type.SUMMARY, namedHistogram.type);
    -        assertEquals(14, namedHistogram.samples.size());
    -
    -        final Collector.MetricFamilySamples namedGauge = elements.get("my_application_namedGauge");
    -        assertNotNull(namedGauge);
    -        assertEquals(Collector.Type.GAUGE, namedGauge.type);
    -        assertEquals(2, namedGauge.samples.size());
    -        assertTrue(namedGauge.samples.contains(namedGauge1));
    -        assertTrue(namedGauge.samples.contains(namedGauge2));
    -
    -    }
    -
    -    private static class ExampleDoubleGauge implements Gauge {
    -        @Override
    -        public Double getValue() {
    -            return 0.0;
    -        }
    -    }
    -}
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/CustomMappingSampleBuilderTest.java b/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/CustomMappingSampleBuilderTest.java
    deleted file mode 100644
    index c4af8f93e..000000000
    --- a/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/CustomMappingSampleBuilderTest.java
    +++ /dev/null
    @@ -1,182 +0,0 @@
    -package io.prometheus.client.dropwizard.samplebuilder;
    -
    -import io.prometheus.client.Collector;
    -import org.junit.Test;
    -
    -import java.util.Arrays;
    -import java.util.Collections;
    -import java.util.HashMap;
    -import java.util.LinkedHashMap;
    -import java.util.List;
    -import java.util.Map;
    -
    -import static org.junit.Assert.assertEquals;
    -
    -public class CustomMappingSampleBuilderTest {
    -    @Test(expected = IllegalArgumentException.class)
    -    public void test_WHEN_EmptyConfig_THEN_Fail() {
    -        final CustomMappingSampleBuilder converter = new CustomMappingSampleBuilder(Collections.emptyList());
    -    }
    -
    -    @Test
    -    public void test_WHEN_NoMatches_THEN_ShouldReturnDefaultSample() {
    -        final List mapperConfigs = Arrays.asList(
    -                new MapperConfig("client-nope.*.*.*"),
    -                new MapperConfig("*.client-nope.*.*.*"),
    -                new MapperConfig("not.even.this.*.*.*")
    -        );
    -        final CustomMappingSampleBuilder converter = new CustomMappingSampleBuilder(mapperConfigs);
    -        final Collector.MetricFamilySamples.Sample result = converter.createSample(
    -                "app.okhttpclient.client.HttpClient.service.total", "", Collections.singletonList("quantile"), Collections.singletonList("0.99"), 0d);
    -
    -        assertEquals(new Collector.MetricFamilySamples.Sample("app_okhttpclient_client_HttpClient_service_total", Collections.singletonList("quantile"), Collections.singletonList("0.99"), 0d), result);
    -    }
    -
    -    @Test
    -    public void test_WHEN_OneMatch_THEN_ShouldReturnConverted() {
    -        final Map labels = new HashMap();
    -        labels.put("service", "${0}");
    -        final MapperConfig mapperConfig = new MapperConfig(
    -                "app.okhttpclient.client.HttpClient.*.total",
    -                "app.okhttpclient.client.HttpClient.total",
    -                labels
    -        );
    -        final List mapperConfigs = Arrays.asList(
    -                new MapperConfig("client-nope.*.*.*"),
    -                mapperConfig,
    -                new MapperConfig("not.even.this.*.*.*")
    -        );
    -        final CustomMappingSampleBuilder converter = new CustomMappingSampleBuilder(mapperConfigs);
    -        final Collector.MetricFamilySamples.Sample expectedResult = new Collector.MetricFamilySamples.Sample(
    -                "app_okhttpclient_client_HttpClient_total", Collections.singletonList("service"), Collections.singletonList("greatService"), 1d);
    -
    -        final Collector.MetricFamilySamples.Sample result = converter.createSample(
    -                "app.okhttpclient.client.HttpClient.greatService.total", "", Collections.emptyList(), Collections.emptyList(), 1d);
    -
    -        assertEquals(expectedResult, result);
    -    }
    -
    -    @Test
    -    public void test_WHEN_MoreMatches_THEN_ShouldReturnFirstOne() {
    -        final Map labels = new HashMap();
    -        labels.put("service", "${0}");
    -        final MapperConfig mapperConfig = new MapperConfig(
    -                "app.okhttpclient.client.HttpClient.*.total",
    -                "app.okhttpclient.client.HttpClient.total",
    -                labels
    -        );
    -        final List mapperConfigs = Arrays.asList(
    -                new MapperConfig("client-nope.*.*.*"),
    -                mapperConfig,
    -                new MapperConfig("app.okhttpclient.client.HttpClient.*.*") // this matches as well
    -        );
    -        final CustomMappingSampleBuilder converter = new CustomMappingSampleBuilder(mapperConfigs);
    -        final Collector.MetricFamilySamples.Sample expectedResult = new Collector.MetricFamilySamples.Sample(
    -                "app_okhttpclient_client_HttpClient_total", Collections.singletonList("service"), Collections.singletonList("greatService"), 1d);
    -
    -        final Collector.MetricFamilySamples.Sample result = converter.createSample(
    -                "app.okhttpclient.client.HttpClient.greatService.total", "", Collections.emptyList(), Collections.emptyList(), 1d);
    -
    -        assertEquals(expectedResult, result);
    -    }
    -
    -    @Test
    -    public void test_WHEN_MoreMatchesReverseOrder_THEN_ShouldReturnFirstOne() {
    -        final Map labels = new LinkedHashMap();
    -        labels.put("service", "${0}");
    -        labels.put("status", "${1}");
    -        final MapperConfig mapperConfig = new MapperConfig(
    -                "app.okhttpclient.client.HttpClient.*.*",
    -                "app.okhttpclient.client.HttpClient",
    -                labels
    -        );
    -        final List mapperConfigs = Arrays.asList(
    -                new MapperConfig("client-nope.*.*.*"),
    -                mapperConfig,
    -                new MapperConfig("app.okhttpclient.client.HttpClient.*.total") // this matches as well
    -        );
    -        final CustomMappingSampleBuilder converter = new CustomMappingSampleBuilder(mapperConfigs);
    -        final Collector.MetricFamilySamples.Sample expectedResult = new Collector.MetricFamilySamples.Sample(
    -                "app_okhttpclient_client_HttpClient", Arrays.asList("service", "status"), Arrays.asList("greatService", "400"), 1d);
    -
    -        final Collector.MetricFamilySamples.Sample result = converter.createSample(
    -                "app.okhttpclient.client.HttpClient.greatService.400", "", Collections.emptyList(), Collections.emptyList(), 1d);
    -
    -        assertEquals(expectedResult, result);
    -    }
    -
    -    @Test
    -    public void test_WHEN_MoreToFormatInLabelsAndName_THEN_ShouldReturnCorrectSample() {
    -        final Map labels = new LinkedHashMap();
    -        labels.put("service", "${0}_${1}");
    -        labels.put("status", "s_${1}");
    -        final MapperConfig mapperConfig = new MapperConfig(
    -                "app.okhttpclient.client.HttpClient.*.*",
    -                "app.okhttpclient.client.HttpClient.${0}",
    -                labels
    -        );
    -        final List mapperConfigs = Arrays.asList(
    -                new MapperConfig("client-nope.*.*.*"),
    -                mapperConfig,
    -                new MapperConfig("app.okhttpclient.client.HttpClient.*.total") // this matches as well
    -        );
    -        final CustomMappingSampleBuilder converter = new CustomMappingSampleBuilder(mapperConfigs);
    -        final Collector.MetricFamilySamples.Sample expectedResult = new Collector.MetricFamilySamples.Sample(
    -                "app_okhttpclient_client_HttpClient_greatService", Arrays.asList("service", "status"), Arrays.asList("greatService_400", "s_400"), 1d);
    -
    -        final Collector.MetricFamilySamples.Sample result = converter.createSample(
    -                "app.okhttpclient.client.HttpClient.greatService.400", "", Collections.emptyList(), Collections.emptyList(), 1d);
    -
    -        assertEquals(expectedResult, result);
    -    }
    -
    -    @Test
    -    public void test_WHEN_MetricNameSuffixRequested_THEN_ShouldReturnCorrectSample() {
    -        final Map labels = new LinkedHashMap();
    -        labels.put("service", "${0}");
    -        labels.put("status", "s_${1}");
    -        final MapperConfig mapperConfig = new MapperConfig(
    -                "app.okhttpclient.client.HttpClient.*.*",
    -                "app.okhttpclient.client.HttpClient.${0}",
    -                labels
    -        );
    -        final List mapperConfigs = Arrays.asList(
    -                new MapperConfig("client-nope.*.*.*"),
    -                mapperConfig,
    -                new MapperConfig("app.okhttpclient.client.HttpClient.*.total") // this matches as well
    -        );
    -        final CustomMappingSampleBuilder converter = new CustomMappingSampleBuilder(mapperConfigs);
    -        final Collector.MetricFamilySamples.Sample expectedResult = new Collector.MetricFamilySamples.Sample(
    -                "app_okhttpclient_client_HttpClient_greatService_suffix", Arrays.asList("service", "status"), Arrays.asList("greatService", "s_400"), 1d);
    -
    -        final Collector.MetricFamilySamples.Sample result = converter.createSample(
    -                "app.okhttpclient.client.HttpClient.greatService.400", "_suffix", Collections.emptyList(), Collections.emptyList(), 1d);
    -
    -        assertEquals(expectedResult, result);
    -    }
    -
    -    @Test
    -    public void test_WHEN_AdditionalLabels_THEN_ShouldReturnCorrectSample() {
    -        final Map labels = new LinkedHashMap();
    -        labels.put("service", "${0}");
    -        labels.put("status", "s_${1}");
    -        final MapperConfig mapperConfig = new MapperConfig(
    -                "app.okhttpclient.client.HttpClient.*.*",
    -                "app.okhttpclient.client.HttpClient.${0}",
    -                labels
    -        );
    -        final List mapperConfigs = Arrays.asList(
    -                new MapperConfig("client-nope.*.*.*"),
    -                mapperConfig,
    -                new MapperConfig("app.okhttpclient.client.HttpClient.*.total") // this matches as well
    -        );
    -        final CustomMappingSampleBuilder converter = new CustomMappingSampleBuilder(mapperConfigs);
    -        final Collector.MetricFamilySamples.Sample expectedResult = new Collector.MetricFamilySamples.Sample(
    -                "app_okhttpclient_client_HttpClient_greatService_suffix", Arrays.asList("service", "status", "another"), Arrays.asList("greatService", "s_400", "label"), 1d);
    -
    -        final Collector.MetricFamilySamples.Sample result = converter.createSample(
    -                "app.okhttpclient.client.HttpClient.greatService.400", "_suffix", Collections.singletonList("another"), Collections.singletonList("label"), 1d);
    -
    -        assertEquals(expectedResult, result);
    -    }
    -}
    diff --git a/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/DefaultSampleBuilderTest.java b/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/DefaultSampleBuilderTest.java
    deleted file mode 100644
    index fa6c30288..000000000
    --- a/simpleclient-archive/simpleclient_dropwizard/src/test/java/io/prometheus/client/dropwizard/samplebuilder/DefaultSampleBuilderTest.java
    +++ /dev/null
    @@ -1,31 +0,0 @@
    -package io.prometheus.client.dropwizard.samplebuilder;
    -
    -import io.prometheus.client.Collector;
    -import io.prometheus.client.dropwizard.samplebuilder.DefaultSampleBuilder;
    -import org.junit.Assert;
    -import org.junit.Test;
    -
    -import java.util.Arrays;
    -import java.util.Collections;
    -
    -public class DefaultSampleBuilderTest {
    -    @Test
    -    public void test_WHEN_NoSuffixAndExtraLabels_THEN_ShouldReturnCorrectSample() {
    -        final DefaultSampleBuilder builder = new DefaultSampleBuilder();
    -        final Collector.MetricFamilySamples.Sample result = builder.createSample("org.github.name", null, null, null, 1d);
    -        Assert.assertEquals(
    -                new Collector.MetricFamilySamples.Sample("org_github_name", Collections.emptyList(), Collections.emptyList(), 1d)
    -                , result);
    -    }
    -
    -    @Test
    -    public void test_WHEN_SuffixAndExtraLabels_THEN_ShouldReturnCorrectSample() {
    -        final DefaultSampleBuilder builder = new DefaultSampleBuilder();
    -        final Collector.MetricFamilySamples.Sample result = builder.createSample("org.github.name", "suffix.test", Collections.singletonList("another"), Arrays.asList("label"), 1d);
    -        Assert.assertEquals(
    -                new Collector.MetricFamilySamples.Sample("org_github_namesuffix_test", Collections.singletonList("another"),
    -                        Arrays.asList("label"), 1d), result);
    -
    -    }
    -
    -}
    \ No newline at end of file
    
    From 051ff61cdee9baa2b6250b6beb657c9abb5c6e7f Mon Sep 17 00:00:00 2001
    From: "Capt. Cutlass" <5120290+ParanoidUser@users.noreply.github.com>
    Date: Fri, 9 Feb 2024 10:45:58 -0500
    Subject: [PATCH 044/870] chore: remove duplicate maven dependencies (#914)
    
    Signed-off-by: Capt. Cutlass <5120290+ParanoidUser@users.noreply.github.com>
    ---
     prometheus-metrics-exporter-common/pom.xml     | 5 -----
     prometheus-metrics-simpleclient-bridge/pom.xml | 6 ------
     2 files changed, 11 deletions(-)
    
    diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml
    index 53828db1d..94a1e74cb 100644
    --- a/prometheus-metrics-exporter-common/pom.xml
    +++ b/prometheus-metrics-exporter-common/pom.xml
    @@ -47,11 +47,6 @@
                 prometheus-metrics-exposition-formats
                 ${project.version}
             
    -        
    -            io.prometheus
    -            prometheus-metrics-exposition-formats
    -            ${project.version}
    -        
         
     
     
    diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml
    index 10d9ac8d6..aa355d50c 100644
    --- a/prometheus-metrics-simpleclient-bridge/pom.xml
    +++ b/prometheus-metrics-simpleclient-bridge/pom.xml
    @@ -73,11 +73,5 @@
                 0.16.0
                 test
             
    -        
    -            io.prometheus
    -            prometheus-metrics-config
    -            1.2.0-SNAPSHOT
    -            compile
    -        
         
     
    
    From c1442e8faaa8523e41f917a321dd9f76dbb944ed Mon Sep 17 00:00:00 2001
    From: Kinshuk Bairagi 
    Date: Fri, 9 Feb 2024 21:24:10 +0530
    Subject: [PATCH 045/870] Add a javax.servlet-api exporter  (#918)
    
    * Add prometheus-metrics-exporter-servlet-javax
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Add comments for ci to pass
    
    Signed-off-by: Kinshuk Bairagi 
    
    ---------
    
    Signed-off-by: Kinshuk Bairagi 
    ---
     pom.xml                                       |   1 +
     .../pom.xml                                   |  53 ++++++
     .../servlet/javax/HttpExchangeAdapter.java    | 153 ++++++++++++++++++
     .../javax/PrometheusMetricsServlet.java       |  67 ++++++++
     .../version-rules.xml                         |   6 +
     5 files changed, 280 insertions(+)
     create mode 100644 prometheus-metrics-exporter-servlet-javax/pom.xml
     create mode 100644 prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/HttpExchangeAdapter.java
     create mode 100644 prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java
     create mode 100644 prometheus-metrics-exporter-servlet-javax/version-rules.xml
    
    diff --git a/pom.xml b/pom.xml
    index 145abe041..4ee0e39ae 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -59,6 +59,7 @@
             prometheus-metrics-exposition-formats
             prometheus-metrics-exporter-common
             prometheus-metrics-exporter-servlet-jakarta
    +        prometheus-metrics-exporter-servlet-javax
             prometheus-metrics-exporter-httpserver
             prometheus-metrics-exporter-opentelemetry
             prometheus-metrics-instrumentation-jvm
    diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml
    new file mode 100644
    index 000000000..8cd2f452e
    --- /dev/null
    +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml
    @@ -0,0 +1,53 @@
    +
    +
    +    4.0.0
    +
    +    
    +        io.prometheus
    +        client_java
    +        1.2.0-SNAPSHOT
    +    
    +
    +    prometheus-metrics-exporter-servlet-javax
    +    bundle
    +
    +    Prometheus Metrics Exporter - Servlet JavaX
    +    
    +        JavaX Servlet for exposing a Prometheus scrape endpoint.
    +    
    +
    +    
    +        io.prometheus.metrics.exporter.servlet.javax
    +    
    +
    +    
    +        
    +            The Apache Software License, Version 2.0
    +            http://www.apache.org/licenses/LICENSE-2.0.txt
    +            repo
    +        
    +    
    +
    +    
    +        
    +            kingster
    +            Kinshuk Bairagi
    +            hi@kinsh.uk
    +        
    +    
    +
    +    
    +        
    +            io.prometheus
    +            prometheus-metrics-exporter-common
    +            ${project.version}
    +        
    +        
    +            javax.servlet
    +            javax.servlet-api
    +            3.1.0
    +            provided
    +        
    +    
    +
    +
    diff --git a/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/HttpExchangeAdapter.java b/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/HttpExchangeAdapter.java
    new file mode 100644
    index 000000000..0073db368
    --- /dev/null
    +++ b/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/HttpExchangeAdapter.java
    @@ -0,0 +1,153 @@
    +package io.prometheus.metrics.exporter.servlet.javax;
    +
    +import io.prometheus.metrics.exporter.common.PrometheusHttpExchange;
    +import io.prometheus.metrics.exporter.common.PrometheusHttpRequest;
    +import io.prometheus.metrics.exporter.common.PrometheusHttpResponse;
    +
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +import java.io.IOException;
    +import java.io.OutputStream;
    +import java.util.Enumeration;
    +
    +/**
    + * This class is an adapter for HTTP exchanges, implementing the PrometheusHttpExchange interface.
    + * It wraps HttpServletRequest and HttpServletResponse objects into Request and Response inner classes.
    + */
    +public class HttpExchangeAdapter implements PrometheusHttpExchange {
    +
    +    private final Request request;
    +    private final Response response;
    +
    +    /**
    +     * Constructs a new HttpExchangeAdapter with the given HttpServletRequest and HttpServletResponse.
    +     *
    +     * @param request  the HttpServletRequest to be adapted
    +     * @param response the HttpServletResponse to be adapted
    +     */
    +    public HttpExchangeAdapter(HttpServletRequest request, HttpServletResponse response) {
    +        this.request = new Request(request);
    +        this.response = new Response(response);
    +    }
    +
    +    /**
    +     * Returns the adapted HttpServletRequest.
    +     *
    +     * @return the adapted HttpServletRequest
    +     */
    +    @Override
    +    public PrometheusHttpRequest getRequest() {
    +        return request;
    +    }
    +
    +    /**
    +     * Returns the adapted HttpServletResponse.
    +     *
    +     * @return the adapted HttpServletResponse
    +     */
    +    @Override
    +    public PrometheusHttpResponse getResponse() {
    +        return response;
    +    }
    +
    +    @Override
    +    public void handleException(IOException e) throws IOException {
    +        throw e; // leave exception handling to the servlet container
    +    }
    +
    +    @Override
    +    public void handleException(RuntimeException e) {
    +        throw e; // leave exception handling to the servlet container
    +    }
    +
    +    @Override
    +    public void close() {
    +        // nothing to do for Servlets.
    +    }
    +
    +    /**
    +     * This inner class adapts a HttpServletRequest to a PrometheusHttpRequest.
    +     */
    +    public static class Request implements PrometheusHttpRequest {
    +
    +        private final HttpServletRequest request;
    +
    +        /**
    +         * Constructs a new Request with the given HttpServletRequest.
    +         *
    +         * @param request the HttpServletRequest to be adapted
    +         */
    +        public Request(HttpServletRequest request) {
    +            this.request = request;
    +        }
    +
    +        @Override
    +        public String getQueryString() {
    +            return request.getQueryString();
    +        }
    +
    +
    +        @Override
    +        public Enumeration getHeaders(String name) {
    +            return request.getHeaders(name);
    +        }
    +
    +
    +        @Override
    +        public String getMethod() {
    +            return request.getMethod();
    +        }
    +
    +
    +        @Override
    +        public String getRequestPath() {
    +            StringBuilder uri = new StringBuilder();
    +            String contextPath = request.getContextPath();
    +            if (contextPath.startsWith("/")) {
    +                uri.append(contextPath);
    +            }
    +            String servletPath = request.getServletPath();
    +            if (servletPath.startsWith("/")) {
    +                uri.append(servletPath);
    +            }
    +            String pathInfo = request.getPathInfo();
    +            if (pathInfo != null) {
    +                uri.append(pathInfo);
    +            }
    +            return uri.toString();
    +        }
    +    }
    +
    +    /**
    +     * This inner class adapts a HttpServletResponse to a PrometheusHttpResponse.
    +     */
    +    public static class Response implements PrometheusHttpResponse {
    +
    +        private final HttpServletResponse response;
    +
    +        /**
    +         * Constructs a new Response with the given HttpServletResponse.
    +         *
    +         * @param response the HttpServletResponse to be adapted
    +         */
    +        public Response(HttpServletResponse response) {
    +            this.response = response;
    +        }
    +
    +
    +        @Override
    +        public void setHeader(String name, String value) {
    +            response.setHeader(name, value);
    +        }
    +
    +
    +        @Override
    +        public OutputStream sendHeadersAndGetBody(int statusCode, int contentLength) throws IOException {
    +            if (response.getHeader("Content-Length") == null && contentLength > 0) {
    +                response.setContentLength(contentLength);
    +            }
    +            response.setStatus(statusCode);
    +            return response.getOutputStream();
    +        }
    +    }
    +}
    \ No newline at end of file
    diff --git a/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java b/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java
    new file mode 100644
    index 000000000..88564d118
    --- /dev/null
    +++ b/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java
    @@ -0,0 +1,67 @@
    +package io.prometheus.metrics.exporter.servlet.javax;
    +
    +import io.prometheus.metrics.config.PrometheusProperties;
    +import io.prometheus.metrics.exporter.common.PrometheusScrapeHandler;
    +import io.prometheus.metrics.model.registry.PrometheusRegistry;
    +
    +import javax.servlet.http.HttpServlet;
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +import java.io.IOException;
    +
    +/**
    + * This class extends HttpServlet to create a servlet for exporting Prometheus metrics.
    + * It uses a PrometheusScrapeHandler to handle HTTP GET requests and export metrics.
    + * The servlet can be configured with custom PrometheusProperties and a PrometheusRegistry.
    + */
    +public class PrometheusMetricsServlet extends HttpServlet {
    +
    +    private final PrometheusScrapeHandler handler;
    +
    +    /**
    +     * Default constructor. Uses the default PrometheusProperties and PrometheusRegistry.
    +     */
    +    public PrometheusMetricsServlet() {
    +        this(PrometheusProperties.get(), PrometheusRegistry.defaultRegistry);
    +    }
    +
    +    /**
    +     * Constructor with a custom PrometheusRegistry. Uses the default PrometheusProperties.
    +     *
    +     * @param registry the PrometheusRegistry to use
    +     */
    +    public PrometheusMetricsServlet(PrometheusRegistry registry) {
    +        this(PrometheusProperties.get(), registry);
    +    }
    +
    +    /**
    +     * Constructor with custom PrometheusProperties. Uses the default PrometheusRegistry.
    +     *
    +     * @param config the PrometheusProperties to use
    +     */
    +    public PrometheusMetricsServlet(PrometheusProperties config) {
    +        this(config, PrometheusRegistry.defaultRegistry);
    +    }
    +
    +    /**
    +     * Constructor with custom PrometheusProperties and PrometheusRegistry.
    +     *
    +     * @param config   the PrometheusProperties to use
    +     * @param registry the PrometheusRegistry to use
    +     */
    +    public PrometheusMetricsServlet(PrometheusProperties config, PrometheusRegistry registry) {
    +        this.handler = new PrometheusScrapeHandler(config, registry);
    +    }
    +
    +    /**
    +     * Handles HTTP GET requests. Exports Prometheus metrics by delegating to the PrometheusScrapeHandler.
    +     *
    +     * @param request  the HttpServletRequest
    +     * @param response the HttpServletResponse
    +     * @throws IOException if an I/O error occurs
    +     */
    +    @Override
    +    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    +        handler.handleRequest(new HttpExchangeAdapter(request, response));
    +    }
    +}
    \ No newline at end of file
    diff --git a/prometheus-metrics-exporter-servlet-javax/version-rules.xml b/prometheus-metrics-exporter-servlet-javax/version-rules.xml
    new file mode 100644
    index 000000000..5c6d39593
    --- /dev/null
    +++ b/prometheus-metrics-exporter-servlet-javax/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    
    From 3fdba974aa96c8f2ebb89eee78787e2bd52c3042 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Thu, 15 Feb 2024 12:00:32 +0100
    Subject: [PATCH 046/870] Remove Spring Boot 1 instrumentation (#923)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../simpleclient_spring_boot/pom.xml          | 108 ------------------
     .../spring/boot/EnablePrometheusEndpoint.java |  44 -------
     .../EnableSpringBootMetricsCollector.java     |  15 ---
     .../spring/boot/PrometheusEndpoint.java       |  39 -------
     .../boot/PrometheusEndpointConfiguration.java |  23 ----
     .../boot/PrometheusMetricsConfiguration.java  |  17 ---
     .../spring/boot/PrometheusMvcEndpoint.java    |  47 --------
     .../boot/SpringBootMetricsCollector.java      |  54 ---------
     .../client/matchers/CustomMatchers.java       |  45 --------
     .../spring/boot/DummyBootApplication.java     |  12 --
     .../spring/boot/PrometheusEndpointTest.java   |  72 ------------
     .../boot/PrometheusMvcEndpointTest.java       |  85 --------------
     .../boot/SpringBootMetricsCollectorTest.java  |  57 ---------
     .../version-rules.xml                         |  11 --
     14 files changed, 629 deletions(-)
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/pom.xml
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/EnablePrometheusEndpoint.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/EnableSpringBootMetricsCollector.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusEndpoint.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusEndpointConfiguration.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusMetricsConfiguration.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusMvcEndpoint.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/SpringBootMetricsCollector.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/matchers/CustomMatchers.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/DummyBootApplication.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/PrometheusEndpointTest.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/PrometheusMvcEndpointTest.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/SpringBootMetricsCollectorTest.java
     delete mode 100644 simpleclient-archive/simpleclient_spring_boot/version-rules.xml
    
    diff --git a/simpleclient-archive/simpleclient_spring_boot/pom.xml b/simpleclient-archive/simpleclient_spring_boot/pom.xml
    deleted file mode 100644
    index 0f8e40208..000000000
    --- a/simpleclient-archive/simpleclient_spring_boot/pom.xml
    +++ /dev/null
    @@ -1,108 +0,0 @@
    -
    -
    -    4.0.0
    -
    -    
    -        io.prometheus
    -        client_java
    -        1.0.0-alpha-1-SNAPSHOT
    -    
    -
    -    simpleclient_spring_boot
    -    bundle
    -
    -    Prometheus Java Simpleclient Spring Boot Metric
    -    
    -        Collect information from Spring Boot actuator.
    -    
    -
    -    
    -        
    -            The Apache Software License, Version 2.0
    -            http://www.apache.org/licenses/LICENSE-2.0.txt
    -            repo
    -        
    -    
    -
    -    
    -        
    -            tokuhirom
    -            Tokuhiro Matsuno
    -            tokuhirom@gmail.com
    -        
    -        
    -            Marco Aust
    -            github@marcoaust.de
    -            private
    -            https://github.com/maust
    -        
    -        
    -            eliezio
    -            Eliezio Oliveira
    -            eliezio.oliveira@gmail.com
    -        
    -    
    -
    -    
    -        UTF-8
    -    
    -
    -    
    -        
    -            io.prometheus
    -            simpleclient
    -            ${project.version}
    -        
    -        
    -            io.prometheus
    -            simpleclient_common
    -            ${project.version}
    -        
    -        
    -          io.prometheus
    -          simpleclient_spring_web
    -          ${project.version}
    -        
    -        
    -            org.springframework.boot
    -            spring-boot-actuator
    -            1.5.22.RELEASE
    -        
    -        
    -            org.springframework.boot
    -            spring-boot-starter-aop
    -            1.5.22.RELEASE
    -        
    -        
    -            org.apache.commons
    -            commons-lang3
    -            3.12.0
    -        
    -
    -        
    -        
    -            junit
    -            junit
    -            4.13.2
    -            test
    -        
    -        
    -            org.cthul
    -            cthul-matchers
    -            1.1.0
    -            test
    -        
    -        
    -            org.springframework.boot
    -            spring-boot-starter-test
    -            1.5.22.RELEASE
    -            test
    -        
    -        
    -            org.springframework.boot
    -            spring-boot-starter-web
    -            1.5.22.RELEASE
    -            test
    -        
    -    
    -
    diff --git a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/EnablePrometheusEndpoint.java b/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/EnablePrometheusEndpoint.java
    deleted file mode 100644
    index e799756e9..000000000
    --- a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/EnablePrometheusEndpoint.java
    +++ /dev/null
    @@ -1,44 +0,0 @@
    -package io.prometheus.client.spring.boot;
    -
    -import org.springframework.context.annotation.Import;
    -
    -import java.lang.annotation.Documented;
    -import java.lang.annotation.ElementType;
    -import java.lang.annotation.Retention;
    -import java.lang.annotation.RetentionPolicy;
    -import java.lang.annotation.Target;
    -
    -/**
    - * Enable an endpoint that exposes Prometheus metrics from its default collector.
    - * 

    - * Usage: - *
    Just add this annotation to the main class of your Spring Boot application, e.g.: - *

    
    - * {@literal @}SpringBootApplication
    - * {@literal @}EnablePrometheusEndpoint
    - *  public class Application {
    - *
    - *    public static void main(String[] args) {
    - *      SpringApplication.run(Application.class, args);
    - *    }
    - *  }
    - * 
    - *

    - * Configuration: - *
    You can customize this endpoint at runtime using the following spring properties: - *

      - *
    • {@code endpoints.prometheus.id} (default: "prometheus")
    • - *
    • {@code endpoints.prometheus.enabled} (default: {@code true})
    • - *
    • {@code endpoints.prometheus.sensitive} (default: {@code true})
    • - *
    - * - * @author Marco Aust - * @author Eliezio Oliveira - */ -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Import(PrometheusEndpointConfiguration.class) -public @interface EnablePrometheusEndpoint { - -} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/EnableSpringBootMetricsCollector.java b/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/EnableSpringBootMetricsCollector.java deleted file mode 100644 index ddd204a5b..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/EnableSpringBootMetricsCollector.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.prometheus.client.spring.boot; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import org.springframework.context.annotation.Import; - - -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Import(PrometheusMetricsConfiguration.class) -public @interface EnableSpringBootMetricsCollector {} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusEndpoint.java b/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusEndpoint.java deleted file mode 100644 index 995077c39..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusEndpoint.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.prometheus.client.spring.boot; - -import io.prometheus.client.CollectorRegistry; -import io.prometheus.client.exporter.common.TextFormat; -import org.springframework.boot.actuate.endpoint.AbstractEndpoint; -import org.springframework.boot.context.properties.ConfigurationProperties; - -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; -import java.util.Collections; -import java.util.Set; - -@ConfigurationProperties("endpoints.prometheus") -class PrometheusEndpoint extends AbstractEndpoint { - - private final CollectorRegistry collectorRegistry; - - PrometheusEndpoint(CollectorRegistry collectorRegistry) { - super("prometheus"); - this.collectorRegistry = collectorRegistry; - } - - @Override - public String invoke() { - return writeRegistry(Collections.emptySet(), ""); - } - - public String writeRegistry(Set metricsToInclude, String contentType) { - try { - Writer writer = new StringWriter(); - TextFormat.writeFormat(contentType, writer, collectorRegistry.filteredMetricFamilySamples(metricsToInclude)); - return writer.toString(); - } catch (IOException e) { - // This actually never happens since StringWriter::write() doesn't throw any IOException - throw new RuntimeException("Writing metrics failed", e); - } - } -} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusEndpointConfiguration.java b/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusEndpointConfiguration.java deleted file mode 100644 index 5f561c050..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusEndpointConfiguration.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.prometheus.client.spring.boot; - -import io.prometheus.client.CollectorRegistry; -import org.springframework.boot.actuate.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -class PrometheusEndpointConfiguration { - - @Bean - public PrometheusEndpoint prometheusEndpoint() { - return new PrometheusEndpoint(CollectorRegistry.defaultRegistry); - } - - @Bean - @ConditionalOnBean(PrometheusEndpoint.class) - @ConditionalOnEnabledEndpoint("prometheus") - public PrometheusMvcEndpoint prometheusEndpointFix(PrometheusEndpoint prometheusEndpoint) { - return new PrometheusMvcEndpoint(prometheusEndpoint); - } -} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusMetricsConfiguration.java b/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusMetricsConfiguration.java deleted file mode 100644 index 9d72a1a3f..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusMetricsConfiguration.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.prometheus.client.spring.boot; - -import java.util.Collection; -import org.springframework.boot.actuate.endpoint.PublicMetrics; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -class PrometheusMetricsConfiguration { - - @Bean - public SpringBootMetricsCollector springBootMetricsCollector(Collection publicMetrics) { - SpringBootMetricsCollector springBootMetricsCollector = new SpringBootMetricsCollector(publicMetrics); - springBootMetricsCollector.register(); - return springBootMetricsCollector; - } -} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusMvcEndpoint.java b/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusMvcEndpoint.java deleted file mode 100644 index fafd4dc69..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/PrometheusMvcEndpoint.java +++ /dev/null @@ -1,47 +0,0 @@ -package io.prometheus.client.spring.boot; - -import io.prometheus.client.exporter.common.TextFormat; -import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.Set; - -import static org.springframework.http.HttpHeaders.CONTENT_TYPE; - -@ConfigurationProperties("endpoints.prometheus") -public class PrometheusMvcEndpoint extends EndpointMvcAdapter { - - private final PrometheusEndpoint delgate; - - public PrometheusMvcEndpoint(PrometheusEndpoint delegate) { - super(delegate); - this.delgate = delegate; - } - - @RequestMapping( - method = {RequestMethod.GET}, - produces = { "*/*" } - ) - @ResponseBody - public ResponseEntity value( - @RequestParam(value = "name[]", required = false, defaultValue = "") Set name, - @RequestHeader(value = "Accept", required = false, defaultValue = "") String accept) { - if (!getDelegate().isEnabled()) { - // Shouldn't happen - MVC endpoint shouldn't be registered when delegate's - // disabled - return getDisabledResponse(); - } - - String contentType = TextFormat.chooseContentType(accept); - String result = delgate.writeRegistry(name, contentType); - return ResponseEntity.ok() - .header(CONTENT_TYPE, contentType) - .body(result); - } -} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/SpringBootMetricsCollector.java b/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/SpringBootMetricsCollector.java deleted file mode 100644 index 2cf1f7d8b..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/main/java/io/prometheus/client/spring/boot/SpringBootMetricsCollector.java +++ /dev/null @@ -1,54 +0,0 @@ -package io.prometheus.client.spring.boot; - -import io.prometheus.client.Collector; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.endpoint.PublicMetrics; -import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -/** - *

    Spring boot metrics integration for Prometheus exporter.

    - * - *
    {@literal @}Bean
    - * public SpringBootMetricsCollector springBootMetricsCollector(Collection{@literal <}PublicMetrics{@literal >} publicMetrics) {
    - *   SpringBootMetricsCollector springBootMetricsCollector = new SpringBootMetricsCollector(publicMetrics);
    - *   springBootMetricsCollector.register();
    - *   return springBootMetricsCollector;
    - * }
    - * 
    - */ -@Component -public class SpringBootMetricsCollector extends Collector implements Collector.Describable { - private final Collection publicMetrics; - - @Autowired - public SpringBootMetricsCollector(Collection publicMetrics) { - this.publicMetrics = publicMetrics; - } - - @Override - public List collect() { - ArrayList samples = new ArrayList(); - for (PublicMetrics publicMetrics : this.publicMetrics) { - for (Metric metric : publicMetrics.metrics()) { - String name = Collector.sanitizeMetricName(metric.getName()); - double value = metric.getValue().doubleValue(); - MetricFamilySamples metricFamilySamples = new MetricFamilySamples( - name, Type.GAUGE, name, Collections.singletonList( - new MetricFamilySamples.Sample(name, Collections.emptyList(), Collections.emptyList(), value))); - samples.add(metricFamilySamples); - } - } - return samples; - } - - @Override - public List describe() { - return new ArrayList(); - } -} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/matchers/CustomMatchers.java b/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/matchers/CustomMatchers.java deleted file mode 100644 index dddec7b61..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/matchers/CustomMatchers.java +++ /dev/null @@ -1,45 +0,0 @@ -package io.prometheus.client.matchers; - -import org.hamcrest.Description; -import org.hamcrest.Matcher; -import org.hamcrest.core.IsCollectionContaining; - -/** - * @author BretC - * - * @see this StackOverflow answer - * - * Licensed under Creative Commons BY-SA 3.0 - */ -public final class CustomMatchers { - - private CustomMatchers() { - } - - public static Matcher> exactlyNItems(final int n, final Matcher elementMatcher) { - return new IsCollectionContaining(elementMatcher) { - @Override - protected boolean matchesSafely(Iterable collection, Description mismatchDescription) { - int count = 0; - boolean isPastFirst = false; - - for (Object item : collection) { - - if (elementMatcher.matches(item)) { - count++; - } - if (isPastFirst) { - mismatchDescription.appendText(", "); - } - elementMatcher.describeMismatch(item, mismatchDescription); - isPastFirst = true; - } - - if (count != n) { - mismatchDescription.appendText(". Expected exactly " + n + " but got " + count); - } - return count == n; - } - }; - } -} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/DummyBootApplication.java b/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/DummyBootApplication.java deleted file mode 100644 index a011d137d..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/DummyBootApplication.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.prometheus.client.spring.boot; - -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * Dummy class to satisfy Spring Boot Test requirement of a class annotated either with {code @SpringBootApplication} or - * {code @SpringBootConfiguration}. - */ -@SpringBootApplication -class DummyBootApplication { - -} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/PrometheusEndpointTest.java b/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/PrometheusEndpointTest.java deleted file mode 100644 index 737788f76..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/PrometheusEndpointTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package io.prometheus.client.spring.boot; - -import io.prometheus.client.Counter; -import io.prometheus.client.exporter.common.TextFormat; -import io.prometheus.client.matchers.CustomMatchers; -import org.apache.commons.lang3.StringUtils; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.Arrays; -import java.util.List; - -import static org.cthul.matchers.CthulMatchers.matchesPattern; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertEquals; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; - -@RunWith(SpringRunner.class) -@EnablePrometheusEndpoint -@SpringBootTest(webEnvironment = RANDOM_PORT, classes = DummyBootApplication.class) -@TestPropertySource(properties = "management.security.enabled=false") -public class PrometheusEndpointTest { - - @Value("${local.server.port}") - int localServerPort; - - @Autowired - TestRestTemplate template; - - @Test - public void testMetricsExportedThroughPrometheusEndpoint() { - // given: - final Counter promCounter = Counter.build("foo_bar", "test counter") - .labelNames("label1", "label2") - .register(); - final Counter filteredCounter = Counter.build("filtered_foo_bar", "test counter") - .labelNames("label1", "label2") - .register(); - - // when: - promCounter.labels("val1", "val2").inc(3); - filteredCounter.labels("val1", "val2").inc(6); - - HttpHeaders headers = new HttpHeaders(); - headers.set("Accept", "text/plain"); - - ResponseEntity metricsResponse = template.exchange(getBaseUrl() + "/prometheus?name[]=foo_bar_total", HttpMethod.GET, new HttpEntity(headers), String.class); - - // then: - assertEquals(HttpStatus.OK, metricsResponse.getStatusCode()); - assertEquals(StringUtils.deleteWhitespace(TextFormat.CONTENT_TYPE_004), metricsResponse.getHeaders().getContentType().toString().toLowerCase()); - - List responseLines = Arrays.asList(metricsResponse.getBody().split("\n")); - assertThat(responseLines, CustomMatchers.exactlyNItems(1, - matchesPattern("foo_bar_total\\{label1=\"val1\",label2=\"val2\",?\\} 3.0"))); - } - - private String getBaseUrl() { - return "http://localhost:" + localServerPort; - } -} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/PrometheusMvcEndpointTest.java b/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/PrometheusMvcEndpointTest.java deleted file mode 100644 index 5f7eea102..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/PrometheusMvcEndpointTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package io.prometheus.client.spring.boot; - -import io.prometheus.client.exporter.common.TextFormat; -import org.apache.commons.lang3.StringUtils; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; - -@RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = RANDOM_PORT, classes = DummyBootApplication.class) -@TestPropertySource(properties = "management.security.enabled=false") -public class PrometheusMvcEndpointTest { - - @Value("${local.server.port}") - int localServerPort; - - @Autowired - TestRestTemplate template; - - @Test - public void testNameParamIsNull() throws Exception { - ResponseEntity metricsResponse = template.exchange(getBaseUrl() + "/prometheus", HttpMethod.GET, getEntity(), String.class); - - assertEquals(HttpStatus.OK, metricsResponse.getStatusCode()); - assertEquals(StringUtils.deleteWhitespace(TextFormat.CONTENT_TYPE_004), metricsResponse.getHeaders().getContentType().toString().toLowerCase()); - - } - - @Test - public void testAcceptPlainText() throws Exception { - - HttpHeaders headers = new HttpHeaders(); - headers.set("Accept", "text/plain"); - - ResponseEntity metricsResponse = template.exchange(getBaseUrl() + "/prometheus", HttpMethod.GET, new HttpEntity(headers), String.class); - - assertEquals(HttpStatus.OK, metricsResponse.getStatusCode()); - } - - @Test - public void testAcceptOpenMetrics() throws Exception { - - HttpHeaders headers = new HttpHeaders(); - headers.set("Accept", "application/openmetrics-text; version=0.0.1,text/plain;version=0.0.4;q=0.5,*/*;q=0.1"); - - ResponseEntity metricsResponse = template.exchange(getBaseUrl() + "/prometheus", HttpMethod.GET, new HttpEntity(headers), String.class); - - assertEquals(HttpStatus.OK, metricsResponse.getStatusCode()); - assertEquals(StringUtils.deleteWhitespace(TextFormat.CONTENT_TYPE_OPENMETRICS_100), metricsResponse.getHeaders().getContentType().toString().toLowerCase()); - assertTrue(metricsResponse.getBody().contains("# EOF")); - } - - @Test - public void testNameParamIsNotNull() { - ResponseEntity metricsResponse = template.exchange(getBaseUrl() + "/prometheus?name[]=foo_bar", HttpMethod.GET, getEntity(), String.class); - - assertEquals(HttpStatus.OK, metricsResponse.getStatusCode()); - assertEquals(StringUtils.deleteWhitespace(TextFormat.CONTENT_TYPE_004), metricsResponse.getHeaders().getContentType().toString().toLowerCase()); - - } - - public HttpEntity getEntity() { - HttpHeaders headers = new HttpHeaders(); - headers.set("Accept", "text/plain; version=0.0.4; charset=utf-8"); - return new HttpEntity(headers); - } - - private String getBaseUrl() { - return "http://localhost:" + localServerPort; - } -} diff --git a/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/SpringBootMetricsCollectorTest.java b/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/SpringBootMetricsCollectorTest.java deleted file mode 100644 index a3f161bd9..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/src/test/java/io/prometheus/client/spring/boot/SpringBootMetricsCollectorTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package io.prometheus.client.spring.boot; - -import io.prometheus.client.CollectorRegistry; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.endpoint.PublicMetrics; -import org.springframework.boot.actuate.metrics.CounterService; -import org.springframework.boot.actuate.metrics.GaugeService; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Bean; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.Collection; - -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; - -@RunWith(SpringRunner.class) -@EnableAutoConfiguration -@SpringBootTest(classes = MetricsBootApplication.class) -public class SpringBootMetricsCollectorTest { - - @Autowired - private SpringBootMetricsCollector springBootMetricsCollector; - - @Autowired - private CounterService counterService; - - @Autowired - private GaugeService gaugeService; - - @Test - public void collect() throws Exception { - counterService.increment("foo"); - gaugeService.submit("bar", 3.14); - - CollectorRegistry defaultRegistry = CollectorRegistry.defaultRegistry; - assertThat(defaultRegistry.getSampleValue("counter_foo"), is(1.0)); - assertThat(defaultRegistry.getSampleValue("gauge_bar"), is(3.14)); - } -} - - -@SpringBootApplication -class MetricsBootApplication { - - @Bean - public SpringBootMetricsCollector springBootMetricsCollector(Collection publicMetrics) { - SpringBootMetricsCollector springBootMetricsCollector = new SpringBootMetricsCollector(publicMetrics); - springBootMetricsCollector.register(); - return springBootMetricsCollector; - } - -} \ No newline at end of file diff --git a/simpleclient-archive/simpleclient_spring_boot/version-rules.xml b/simpleclient-archive/simpleclient_spring_boot/version-rules.xml deleted file mode 100644 index f1b170b69..000000000 --- a/simpleclient-archive/simpleclient_spring_boot/version-rules.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - 2\..* - - - - From 8bb75446c6dca2a4e2c074e39fe34c1b061b028a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Fri, 8 Mar 2024 15:53:53 +0100 Subject: [PATCH 047/870] Document which JVM metric names have changed with 1.x MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/migration/simpleclient.md | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/docs/content/migration/simpleclient.md b/docs/content/migration/simpleclient.md index a954c9c04..82937a64b 100644 --- a/docs/content/migration/simpleclient.md +++ b/docs/content/migration/simpleclient.md @@ -98,3 +98,35 @@ counter.labelValues("/hello-world").inc(); Reasons why we changed the API: Changing the package names was a necessity because the previous package names were incompatible with the Java module system. However, renaming packages requires changing code anyway, so we decided to clean up some things. For example, the name `builder()` for a builder method is very common in the Java ecosystem, it's used in Spring, Lombok, and so on. So naming the method `builder()` makes the Prometheus library more aligned with the broader Java ecosystem. If you are using the low level `Collector` API directly, you should have a look at the new callback metric types, see [/getting-started/callbacks/](../../getting-started/callbacks/). Chances are good that the new callback metrics have an easier way to achieve what you need than the old 0.16.0 code. + +JVM Metrics +----------- + +Version 0.16.0 provided the `simpleclient_hotspot` module for exposing built-in JVM metrics: + +```java +DefaultExports.initialize(); +``` + +With version 1.0.0 these metrics moved to the `prometheus-metrics-instrumentation-jvm` module and are initialized as follows: + +```java +JvmMetrics.builder().register(); +``` + +A full list of the available JVM metrics can be found on [/instrumentation/jvm](../../instrumentation/jvm/). + +Most JVM metric names remained the same, except for a few cases where the old 0.16.0 metric names were not compliant with the [OpenMetrics](https://openmetrics.io) specification. OpenMetrics requires the unit to be a suffix, so we renamed metrics where the unit was in the middle of the metric name and moved the unit to the end of the metric name. The following metric names changed: + +* `jvm_memory_bytes_committed` -> `jvm_memory_committed_bytes` +* `jvm_memory_bytes_init` -> `jvm_memory_init_bytes` +* `jvm_memory_bytes_max` -> `jvm_memory_max_bytes` +* `jvm_memory_pool_bytes_committed` -> `jvm_memory_pool_committed_bytes` +* `jvm_memory_pool_bytes_init` -> `jvm_memory_pool_init_bytes` +* `jvm_memory_pool_bytes_max` -> `jvm_memory_pool_max_bytes` +* `jvm_memory_pool_bytes_used` -> `jvm_memory_pool_used_bytes` +* `jvm_memory_pool_collection_bytes_committed` -> `jvm_memory_pool_collection_committed_bytes` +* `jvm_memory_pool_collection_bytes_init` -> `jvm_memory_pool_collection_init_bytes` +* `jvm_memory_pool_collection_bytes_max` -> `jvm_memory_pool_collection_max_bytes` +* `jvm_memory_pool_collection_bytes_used` -> `jvm_memory_pool_collection_used_bytes` +* `jvm_info` -> `jvm_runtime_info` From d84b0fababc439d5f8ccad33edea68a62b8082f6 Mon Sep 17 00:00:00 2001 From: dhoard Date: Thu, 21 Mar 2024 00:15:28 -0400 Subject: [PATCH 048/870] Added try/finally to close the HttpExchange Signed-off-by: dhoard --- .../metrics/exporter/httpserver/DefaultHandler.java | 13 ++++++++----- .../metrics/exporter/httpserver/HealthyHandler.java | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java index e8a54e0cf..0e6342a34 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java @@ -58,10 +58,13 @@ public DefaultHandler() { @Override public void handle(HttpExchange exchange) throws IOException { - exchange.getResponseHeaders().set("Content-Type", contentType); - exchange.getResponseHeaders().set("Content-Length", Integer.toString(responseBytes.length)); - exchange.sendResponseHeaders(200, responseBytes.length); - exchange.getResponseBody().write(responseBytes); - exchange.close(); + try { + exchange.getResponseHeaders().set("Content-Type", contentType); + exchange.getResponseHeaders().set("Content-Length", Integer.toString(responseBytes.length)); + exchange.sendResponseHeaders(200, responseBytes.length); + exchange.getResponseBody().write(responseBytes); + } finally { + exchange.close(); + } } } diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HealthyHandler.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HealthyHandler.java index 03b647d99..4fbdb9426 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HealthyHandler.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HealthyHandler.java @@ -22,10 +22,13 @@ public HealthyHandler() { @Override public void handle(HttpExchange exchange) throws IOException { - exchange.getResponseHeaders().set("Content-Type", contentType); - exchange.getResponseHeaders().set("Content-Length", Integer.toString(responseBytes.length)); - exchange.sendResponseHeaders(200, responseBytes.length); - exchange.getResponseBody().write(responseBytes); - exchange.close(); + try { + exchange.getResponseHeaders().set("Content-Type", contentType); + exchange.getResponseHeaders().set("Content-Length", Integer.toString(responseBytes.length)); + exchange.sendResponseHeaders(200, responseBytes.length); + exchange.getResponseBody().write(responseBytes); + } finally { + exchange.close(); + } } } From 7f0265184adb86182fb7be029acbf5c2efd1c742 Mon Sep 17 00:00:00 2001 From: Breno A Date: Thu, 21 Mar 2024 14:58:34 -0300 Subject: [PATCH 049/870] fix: gdoc-md overflow (#926) Signed-off-by: Breno A --- docs/static/custom.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/static/custom.css b/docs/static/custom.css index 41ab7c562..ed919a35d 100644 --- a/docs/static/custom.css +++ b/docs/static/custom.css @@ -37,3 +37,7 @@ --footer-link-color-visited: #ffffff; } } + +.gdoc-markdown pre,.gdoc-markdown code { + overflow: auto; +} \ No newline at end of file From fc447f8861a48040ad4b956cf3e5af86f99985e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 21 Mar 2024 20:11:43 +0100 Subject: [PATCH 050/870] Add optional SpanContext parameter to ExemplarSampler (#929) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../metrics/config/ExemplarsProperties.java | 2 +- .../core/exemplars/ExemplarSampler.java | 14 ++- .../core/exemplars/ExemplarSamplerTest.java | 19 +--- .../exemplars/SpanContextSupplierTest.java | 103 ++++++++++++++++++ .../metrics/tracer/common/SpanContext.java | 4 +- 5 files changed, 124 insertions(+), 18 deletions(-) create mode 100644 prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java index 258e7f45d..ff955bc50 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java @@ -107,7 +107,7 @@ public Builder sampleIntervalMilliseconds(int sampleIntervalMilliseconds) { return this; } - public ExemplarsProperties builder() { + public ExemplarsProperties build() { return new ExemplarsProperties(minRetentionPeriodSeconds, maxRetentionPeriodSeconds, sampleIntervalMilliseconds); } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java index 9472b237f..af898724d 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java @@ -37,11 +37,23 @@ public class ExemplarSampler { // to be overwritten by automatic exemplar sampling. exemplars.lengt == customExemplars.length private final AtomicBoolean acceptingNewExemplars = new AtomicBoolean(true); private final AtomicBoolean acceptingNewCustomExemplars = new AtomicBoolean(true); + private final SpanContext spanContext; // may be null, in that case SpanContextSupplier.getSpanContext() is used. public ExemplarSampler(ExemplarSamplerConfig config) { + this(config, null); + } + + /** + * Constructor with an additional {code spanContext} argument. + * This is useful for testing, but may also be useful in some production scenarios. + * If {@code spanContext != null} that spanContext is used and {@link SpanContextSupplier} is not used. + * If {@code spanContext == null} the {@link SpanContextSupplier#getSpanContext()} is called to find a span context. + */ + public ExemplarSampler(ExemplarSamplerConfig config, SpanContext spanContext) { this.config = config; this.exemplars = new Exemplar[config.getNumberOfExemplars()]; this.customExemplars = new Exemplar[exemplars.length]; + this.spanContext = spanContext; } public Exemplars collect() { @@ -307,8 +319,8 @@ private long updateExemplar(int index, double value, long now) { } private Labels doSampleExemplar() { + SpanContext spanContext = this.spanContext != null ? this.spanContext : SpanContextSupplier.getSpanContext(); try { - SpanContext spanContext = SpanContextSupplier.getSpanContext(); if (spanContext != null) { if (spanContext.isCurrentSpanSampled()) { String spanId = spanContext.getCurrentSpanId(); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java index 24882065e..1af5da42b 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java @@ -76,8 +76,7 @@ public void tearDown() { public void testIsSampled() throws Exception { SpanContext context = new SpanContext(); context.isSampled = false; - SpanContextSupplier.setSpanContext(context); - ExemplarSampler sampler = new ExemplarSampler(makeConfig()); + ExemplarSampler sampler = new ExemplarSampler(makeConfig(), context); Thread.sleep(tick); // t = 1 tick sampler.observe(0.3); // no sampled, because isSampled() returns false assertExemplars(sampler); // empty @@ -85,9 +84,7 @@ public void testIsSampled() throws Exception { @Test public void testDefaultConfigHasFourExemplars() throws Exception { - SpanContext context = new SpanContext(); - SpanContextSupplier.setSpanContext(context); - ExemplarSampler sampler = new ExemplarSampler(makeConfig()); + ExemplarSampler sampler = new ExemplarSampler(makeConfig(), new SpanContext()); Thread.sleep(tick); // t = 1 tick sampler.observe(0.3); Thread.sleep(sampleInterval + tick); // t = 12 tick @@ -104,9 +101,7 @@ public void testDefaultConfigHasFourExemplars() throws Exception { @Test public void testEmptyBuckets() throws Exception { - SpanContext context = new SpanContext(); - SpanContextSupplier.setSpanContext(context); - ExemplarSampler sampler = new ExemplarSampler(makeConfig(Double.POSITIVE_INFINITY)); + ExemplarSampler sampler = new ExemplarSampler(makeConfig(Double.POSITIVE_INFINITY), new SpanContext()); Thread.sleep(tick); // t = 1 tick sampler.observe(0.8); // observed in the +Inf bucket Thread.sleep(sampleInterval + tick); // t = 12 tick @@ -117,9 +112,7 @@ public void testEmptyBuckets() throws Exception { @Test public void testDefaultExemplarsBuckets() throws Exception { - SpanContext context = new SpanContext(); - SpanContextSupplier.setSpanContext(context); - ExemplarSampler sampler = new ExemplarSampler(makeConfig(0.2, 0.4, 0.6, 0.8, 1.0, Double.POSITIVE_INFINITY)); + ExemplarSampler sampler = new ExemplarSampler(makeConfig(0.2, 0.4, 0.6, 0.8, 1.0, Double.POSITIVE_INFINITY), new SpanContext()); Scheduler.awaitInitialization(); Thread.sleep(tick); // t = 1 tick sampler.observe(0.3); @@ -150,9 +143,7 @@ public void testCustomExemplarsNoBuckets() throws Exception { @Test public void testDefaultExemplarsNoBuckets() throws Exception { - SpanContext context = new SpanContext(); - SpanContextSupplier.setSpanContext(context); - ExemplarSampler sampler = new ExemplarSampler(makeConfig()); + ExemplarSampler sampler = new ExemplarSampler(makeConfig(), new SpanContext()); Scheduler.awaitInitialization(); Thread.sleep(tick); // t = 1 tick sampler.observe(1); // observed diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java new file mode 100644 index 000000000..033420950 --- /dev/null +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java @@ -0,0 +1,103 @@ +package io.prometheus.metrics.core.exemplars; + +import io.prometheus.metrics.config.ExemplarsProperties; +import io.prometheus.metrics.model.snapshots.Exemplar; +import io.prometheus.metrics.model.snapshots.Exemplars; +import io.prometheus.metrics.tracer.common.SpanContext; +import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; +import org.junit.*; + +import static io.prometheus.metrics.model.snapshots.Exemplar.TRACE_ID; + +public class SpanContextSupplierTest { + + public SpanContext makeSpanContext(String traceId, String spanId) { + + return new SpanContext() { + @Override + public String getCurrentTraceId() { + return traceId; + } + + @Override + public String getCurrentSpanId() { + return spanId; + } + + @Override + public boolean isCurrentSpanSampled() { + return true; + } + + @Override + public void markCurrentSpanAsExemplar() { + } + }; + } + + SpanContext spanContextA = makeSpanContext("A", "a"); + SpanContext spanContextB = makeSpanContext("B", "b"); + SpanContext origSpanContext; + + ExemplarSamplerConfig config = new ExemplarSamplerConfig( + 10, // min retention period in milliseconds + 20, // max retention period in milliseconds + 5, // sample interval in millisecnods + 1, // number of exemplars + null // histogram upper bounds + ); + + @Before + public void setUp() { + origSpanContext = SpanContextSupplier.getSpanContext(); + } + + @After + public void tearDown() { + SpanContextSupplier.setSpanContext(origSpanContext); + } + + /** + * Test: When a {@link SpanContext} is provided as a constructor argument to the {@link ExemplarSampler}, + * then that {@link SpanContext} is used, not the one from the {@link SpanContextSupplier}. + */ + @Test + public void testConstructorInjection() { + ExemplarsProperties properties = ExemplarsProperties.builder().build(); + ExemplarSamplerConfig config = new ExemplarSamplerConfig(properties, 1); + ExemplarSampler exemplarSampler = new ExemplarSampler(config, spanContextA); + + SpanContextSupplier.setSpanContext(spanContextB); + exemplarSampler.observe(1.0); + Exemplars exemplars = exemplarSampler.collect(); + Assert.assertEquals(1, exemplars.size()); + Exemplar exemplar = exemplars.get(0); + Assert.assertEquals("A", exemplar.getLabels().get(TRACE_ID)); + } + + /** + * When the global {@link SpanContext} is updated via {@link SpanContextSupplier#setSpanContext(SpanContext)}, + * the {@link ExemplarSampler} recognizes the update (unless a {@link ExemplarSampler} was provided as + * constructor argument to {@link ExemplarSampler}). + */ + @Test + public void testUpdateSpanContext() throws InterruptedException { + ExemplarSampler exemplarSampler = new ExemplarSampler(config); + + SpanContextSupplier.setSpanContext(spanContextB); + exemplarSampler.observe(1.0); + Exemplars exemplars = exemplarSampler.collect(); + Assert.assertEquals(1, exemplars.size()); + Exemplar exemplar = exemplars.get(0); + Assert.assertEquals("B", exemplar.getLabels().get(TRACE_ID)); + + Thread.sleep(15); // more than the minimum retention period defined in config above. + + SpanContextSupplier.setSpanContext(spanContextA); + exemplarSampler.observe(1.0); + exemplars = exemplarSampler.collect(); + Assert.assertEquals(1, exemplars.size()); + exemplar = exemplars.get(0); + Assert.assertEquals("A", exemplar.getLabels().get(TRACE_ID)); + } +} diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/src/main/java/io/prometheus/metrics/tracer/common/SpanContext.java b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/src/main/java/io/prometheus/metrics/tracer/common/SpanContext.java index b53fe4d20..e71cef98e 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/src/main/java/io/prometheus/metrics/tracer/common/SpanContext.java +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/src/main/java/io/prometheus/metrics/tracer/common/SpanContext.java @@ -2,8 +2,8 @@ public interface SpanContext { - public static final String EXEMPLAR_ATTRIBUTE_NAME = "exemplar"; - public static final String EXEMPLAR_ATTRIBUTE_VALUE = "true"; + String EXEMPLAR_ATTRIBUTE_NAME = "exemplar"; + String EXEMPLAR_ATTRIBUTE_VALUE = "true"; /** * @return the current trace id, or {@code null} if this call is not happening within a span context. From 40c3599d8b49b63bf84900921af43b6b0a9f5f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 21 Mar 2024 20:38:02 +0100 Subject: [PATCH 051/870] Allow Exemplars on histogram _count (#930) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../metrics/config/ExporterProperties.java | 2 +- .../OpenMetricsTextFormatWriter.java | 20 +-- .../ExpositionFormatsTest.java | 164 ++++++++++++++++-- .../metrics/model/snapshots/Exemplars.java | 21 ++- .../model/snapshots/ExemplarsTest.java | 12 ++ .../bridge/SimpleclientCollectorTest.java | 2 +- 6 files changed, 184 insertions(+), 37 deletions(-) diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java index e715a7a2c..9493b571c 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java @@ -27,7 +27,7 @@ public boolean getIncludeCreatedTimestamps() { /** * Allow Exemplars on all metric types in OpenMetrics format? - * Default is {@code false}, which means Exemplars will only be added for Counters and Histograms. + * Default is {@code false}, which means Exemplars will only be added for Counters and Histogram buckets. */ public boolean getExemplarsOnAllMetricTypes() { return exemplarsOnAllMetricTypes != null && exemplarsOnAllMetricTypes; diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java index eae5c1b8c..dd92391ff 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java @@ -138,11 +138,9 @@ private void writeClassicHistogramBuckets(OutputStreamWriter writer, MetricMetad } writeScrapeTimestampAndExemplar(writer, data, exemplar); } + // In OpenMetrics format, histogram _count and _sum are either both present or both absent. if (data.hasCount() && data.hasSum()) { - // In OpenMetrics format, histogram _count and _sum are either both present or both absent. - // While Prometheus allows Exemplars for histogram's _count and _sum now, we don't - // use Exemplars here to be backwards compatible with previous behavior. - writeCountAndSum(writer, metadata, data, countSuffix, sumSuffix, Exemplars.EMPTY); + writeCountAndSum(writer, metadata, data, countSuffix, sumSuffix, exemplars); } writeCreated(writer, metadata, data); } @@ -241,7 +239,7 @@ private void writeUnknown(OutputStreamWriter writer, UnknownSnapshot snapshot) t writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels()); writeDouble(writer, data.getValue()); if (exemplarsOnAllMetricTypesEnabled) { - writeScrapeTimestampAndExemplar(writer, data, data.getExemplar()); + writeScrapeTimestampAndExemplar(writer, data, data.getExemplar()); } else { writeScrapeTimestampAndExemplar(writer, data, null); } @@ -249,13 +247,11 @@ private void writeUnknown(OutputStreamWriter writer, UnknownSnapshot snapshot) t } private void writeCountAndSum(OutputStreamWriter writer, MetricMetadata metadata, DistributionDataPointSnapshot data, String countSuffix, String sumSuffix, Exemplars exemplars) throws IOException { - int exemplarIndex = 0; if (data.hasCount()) { writeNameAndLabels(writer, metadata.getPrometheusName(), countSuffix, data.getLabels()); writeLong(writer, data.getCount()); - if (exemplars.size() > 0) { - writeScrapeTimestampAndExemplar(writer, data, exemplars.get(exemplarIndex)); - exemplarIndex = exemplarIndex + 1 % exemplars.size(); + if (exemplarsOnAllMetricTypesEnabled) { + writeScrapeTimestampAndExemplar(writer, data, exemplars.getLatest()); } else { writeScrapeTimestampAndExemplar(writer, data, null); } @@ -263,11 +259,7 @@ private void writeCountAndSum(OutputStreamWriter writer, MetricMetadata metadata if (data.hasSum()) { writeNameAndLabels(writer, metadata.getPrometheusName(), sumSuffix, data.getLabels()); writeDouble(writer, data.getSum()); - if (exemplars.size() > 0) { - writeScrapeTimestampAndExemplar(writer, data, exemplars.get(exemplarIndex)); - } else { - writeScrapeTimestampAndExemplar(writer, data, null); - } + writeScrapeTimestampAndExemplar(writer, data, null); } } diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index 7451e7c10..10c7d3a0d 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -234,6 +234,13 @@ public void testCounterWithDots() throws IOException { @Test public void testGaugeComplete() throws IOException { String openMetricsText = "" + + "# TYPE disk_usage_ratio gauge\n" + + "# UNIT disk_usage_ratio ratio\n" + + "# HELP disk_usage_ratio percentage used\n" + + "disk_usage_ratio{device=\"/dev/sda1\"} 0.2 " + scrapeTimestamp1s + "\n" + + "disk_usage_ratio{device=\"/dev/sda2\"} 0.7 " + scrapeTimestamp2s + "\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = "" + "# TYPE disk_usage_ratio gauge\n" + "# UNIT disk_usage_ratio ratio\n" + "# HELP disk_usage_ratio percentage used\n" + @@ -282,6 +289,7 @@ public void testGaugeComplete() throws IOException { .build()) .build(); assertOpenMetricsText(openMetricsText, gauge); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, gauge); assertPrometheusText(prometheusText, gauge); assertOpenMetricsTextWithoutCreated(openMetricsText, gauge); assertPrometheusTextWithoutCreated(prometheusText, gauge); @@ -315,6 +323,12 @@ public void testGaugeMinimal() throws IOException { @Test public void testGaugeWithDots() throws IOException { String openMetricsText = "" + + "# TYPE my_temperature_celsius gauge\n" + + "# UNIT my_temperature_celsius celsius\n" + + "# HELP my_temperature_celsius Temperature\n" + + "my_temperature_celsius{location_id=\"data-center-1\"} 23.0\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = "" + "# TYPE my_temperature_celsius gauge\n" + "# UNIT my_temperature_celsius celsius\n" + "# HELP my_temperature_celsius Temperature\n" + @@ -350,6 +364,7 @@ public void testGaugeWithDots() throws IOException { .build()) .build(); assertOpenMetricsText(openMetricsText, gauge); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, gauge); assertPrometheusText(prometheusText, gauge); assertPrometheusProtobuf(prometheusProtobuf, gauge); } @@ -357,6 +372,23 @@ public void testGaugeWithDots() throws IOException { @Test public void testSummaryComplete() throws IOException { String openMetricsText = "" + + "# TYPE http_request_duration_seconds summary\n" + + "# UNIT http_request_duration_seconds seconds\n" + + "# HELP http_request_duration_seconds request duration\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds_count{status=\"200\"} 3 " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp2s + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp2s + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp2s + "\n" + + "http_request_duration_seconds_count{status=\"500\"} 7 " + scrapeTimestamp2s + "\n" + + "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + scrapeTimestamp2s + "\n" + + "http_request_duration_seconds_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = "" + "# TYPE http_request_duration_seconds summary\n" + "# UNIT http_request_duration_seconds seconds\n" + "# HELP http_request_duration_seconds request duration\n" + @@ -364,13 +396,13 @@ public void testSummaryComplete() throws IOException { "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + "http_request_duration_seconds_count{status=\"200\"} 3 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + + "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + scrapeTimestamp1s + "\n" + "http_request_duration_seconds_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + "http_request_duration_seconds_count{status=\"500\"} 7 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + + "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + scrapeTimestamp2s + "\n" + "http_request_duration_seconds_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + "# EOF\n"; String prometheusText = "" + @@ -394,16 +426,16 @@ public void testSummaryComplete() throws IOException { "# TYPE http_request_duration_seconds summary\n" + "# UNIT http_request_duration_seconds seconds\n" + "# HELP http_request_duration_seconds request duration\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "http_request_duration_seconds_count{status=\"200\"} 3 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "http_request_duration_seconds_count{status=\"500\"} 7 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds_count{status=\"200\"} 3 " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + scrapeTimestamp1s + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp2s + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp2s + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp2s + "\n" + + "http_request_duration_seconds_count{status=\"500\"} 7 " + scrapeTimestamp2s + "\n" + + "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + scrapeTimestamp2s + "\n" + "# EOF\n"; String prometheusTextWithoutCreated = "" + "# HELP http_request_duration_seconds request duration\n" + @@ -481,6 +513,7 @@ public void testSummaryComplete() throws IOException { .build()) .build(); assertOpenMetricsText(openMetricsText, summary); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, summary); assertPrometheusText(prometheusText, summary); assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, summary); assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, summary); @@ -689,11 +722,18 @@ public void testSummaryEmptyAndNonEmpty() throws IOException { @Test public void testSummaryWithDots() throws IOException { String openMetricsText = "" + + "# TYPE my_request_duration_seconds summary\n" + + "# UNIT my_request_duration_seconds seconds\n" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 1\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = "" + "# TYPE my_request_duration_seconds summary\n" + "# UNIT my_request_duration_seconds seconds\n" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "my_request_duration_seconds_count{http_path=\"/hello\"} 1 # " + exemplarWithDotsString + "\n" + - "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03 # " + exemplarWithDotsString + "\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n" + "# EOF\n"; String prometheusText = "" + "# HELP my_request_duration_seconds Request duration in seconds\n" + @@ -725,6 +765,7 @@ public void testSummaryWithDots() throws IOException { .build()) .build(); assertOpenMetricsText(openMetricsText, summary); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, summary); assertPrometheusText(prometheusText, summary); assertPrometheusProtobuf(prometheusProtobuf, summary); } @@ -747,6 +788,22 @@ public void testClassicHistogramComplete() throws Exception { "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + "response_size_bytes_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = "" + + "# TYPE response_size_bytes histogram\n" + + "# UNIT response_size_bytes bytes\n" + + "# HELP response_size_bytes help\n" + + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + + "response_size_bytes_count{status=\"200\"} 3 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.1 " + scrapeTimestamp1s + "\n" + + "response_size_bytes_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + scrapeTimestamp2s + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + scrapeTimestamp2s + " # " + exemplar1String + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + + "response_size_bytes_count{status=\"500\"} 5 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + + "response_size_bytes_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + + "# EOF\n"; String prometheusText = "" + "# HELP response_size_bytes help\n" + "# TYPE response_size_bytes histogram\n" + @@ -860,6 +917,7 @@ public void testClassicHistogramComplete() throws Exception { .build()) .build(); assertOpenMetricsText(openMetricsText, histogram); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, histogram); assertPrometheusText(prometheusText, histogram); assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, histogram); assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, histogram); @@ -968,6 +1026,21 @@ public void testClassicGaugeHistogramComplete() throws IOException { "cache_size_bytes_gsum{db=\"options\"} 18.0 " + scrapeTimestamp2s + "\n" + "cache_size_bytes_created{db=\"options\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = "" + + "# TYPE cache_size_bytes gaugehistogram\n" + + "# UNIT cache_size_bytes bytes\n" + + "# HELP cache_size_bytes number of bytes in the cache\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + + "cache_size_bytes_gcount{db=\"items\"} 4 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + + "cache_size_bytes_gsum{db=\"items\"} 17.0 " + scrapeTimestamp1s + "\n" + + "cache_size_bytes_created{db=\"items\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + scrapeTimestamp2s + " # " + exemplar1String + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + + "cache_size_bytes_gcount{db=\"options\"} 4 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + + "cache_size_bytes_gsum{db=\"options\"} 18.0 " + scrapeTimestamp2s + "\n" + + "cache_size_bytes_created{db=\"options\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + + "# EOF\n"; String prometheusText = "" + "# HELP cache_size_bytes number of bytes in the cache\n" + "# TYPE cache_size_bytes histogram\n" + @@ -1084,6 +1157,7 @@ public void testClassicGaugeHistogramComplete() throws IOException { .build()) .build(); assertOpenMetricsText(openMetricsText, gaugeHistogram); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, gaugeHistogram); assertPrometheusText(prometheusText, gaugeHistogram); assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, gaugeHistogram); assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, gaugeHistogram); @@ -1190,6 +1264,14 @@ public void testClassicHistogramWithDots() throws IOException { "my_request_duration_seconds_count{http_path=\"/hello\"} 130\n" + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n" + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = "" + + "# TYPE my_request_duration_seconds histogram\n" + + "# UNIT my_request_duration_seconds seconds\n" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 130 # " + exemplarWithDotsString + "\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 130 # " + exemplarWithDotsString + "\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n" + + "# EOF\n"; String prometheusText = "" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "# TYPE my_request_duration_seconds histogram\n" + @@ -1227,6 +1309,7 @@ public void testClassicHistogramWithDots() throws IOException { .build()) .build(); assertOpenMetricsText(openMetricsText, histogram); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, histogram); assertPrometheusText(prometheusText, histogram); assertPrometheusProtobuf(prometheusProtobuf, histogram); } @@ -1237,15 +1320,28 @@ public void testNativeHistogramComplete() throws IOException { "# TYPE response_size_bytes histogram\n" + "# UNIT response_size_bytes bytes\n" + "# HELP response_size_bytes help\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + "response_size_bytes_count{status=\"200\"} 2 " + scrapeTimestamp1s + "\n" + "response_size_bytes_sum{status=\"200\"} 4.2 " + scrapeTimestamp1s + "\n" + "response_size_bytes_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + scrapeTimestamp2s + " # " + exemplar1String + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + "response_size_bytes_count{status=\"500\"} 55 " + scrapeTimestamp2s + "\n" + "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + "response_size_bytes_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = "" + + "# TYPE response_size_bytes histogram\n" + + "# UNIT response_size_bytes bytes\n" + + "# HELP response_size_bytes help\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + + "response_size_bytes_count{status=\"200\"} 2 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.2 " + scrapeTimestamp1s + "\n" + + "response_size_bytes_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + + "response_size_bytes_count{status=\"500\"} 55 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + + "response_size_bytes_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + + "# EOF\n"; String prometheusText = "" + "# HELP response_size_bytes help\n" + "# TYPE response_size_bytes histogram\n" + @@ -1263,10 +1359,10 @@ public void testNativeHistogramComplete() throws IOException { "# TYPE response_size_bytes histogram\n" + "# UNIT response_size_bytes bytes\n" + "# HELP response_size_bytes help\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + "response_size_bytes_count{status=\"200\"} 2 " + scrapeTimestamp1s + "\n" + "response_size_bytes_sum{status=\"200\"} 4.2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + scrapeTimestamp2s + " # " + exemplar1String + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + "response_size_bytes_count{status=\"500\"} 55 " + scrapeTimestamp2s + "\n" + "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + "# EOF\n"; @@ -1388,6 +1484,7 @@ public void testNativeHistogramComplete() throws IOException { .build()) .build(); assertOpenMetricsText(openMetricsText, nativeHistogram); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, nativeHistogram); assertPrometheusText(prometheusText, nativeHistogram); assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, nativeHistogram); assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, nativeHistogram); @@ -1438,6 +1535,14 @@ public void testNativeHistogramWithDots() throws IOException { "my_request_duration_seconds_count{http_path=\"/hello\"} 4\n" + "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n" + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = "" + + "# TYPE my_request_duration_seconds histogram\n" + + "# UNIT my_request_duration_seconds seconds\n" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 4 # " + exemplarWithDotsString + "\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 4 # " + exemplarWithDotsString + "\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n" + + "# EOF\n"; String prometheusText = "" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "# TYPE my_request_duration_seconds histogram\n" + @@ -1483,6 +1588,7 @@ public void testNativeHistogramWithDots() throws IOException { .build()) .build(); assertOpenMetricsText(openMetricsText, histogram); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, histogram); assertPrometheusText(prometheusText, histogram); assertPrometheusProtobuf(prometheusProtobuf, histogram); } @@ -1653,6 +1759,13 @@ public void testStateSetWithDots() throws IOException { @Test public void testUnknownComplete() throws IOException { String openMetrics = "" + + "# TYPE my_special_thing_bytes unknown\n" + + "# UNIT my_special_thing_bytes bytes\n" + + "# HELP my_special_thing_bytes help message\n" + + "my_special_thing_bytes{env=\"dev\"} 0.2 " + scrapeTimestamp1s + "\n" + + "my_special_thing_bytes{env=\"prod\"} 0.7 " + scrapeTimestamp2s + "\n" + + "# EOF\n"; + String openMetricsWithExemplarsOnAllTimeSeries = "" + "# TYPE my_special_thing_bytes unknown\n" + "# UNIT my_special_thing_bytes bytes\n" + "# HELP my_special_thing_bytes help message\n" + @@ -1682,6 +1795,7 @@ public void testUnknownComplete() throws IOException { .build()) .build(); assertOpenMetricsText(openMetrics, unknown); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsWithExemplarsOnAllTimeSeries, unknown); assertPrometheusText(prometheus, unknown); assertOpenMetricsTextWithoutCreated(openMetrics, unknown); assertPrometheusTextWithoutCreated(prometheus, unknown); @@ -1711,6 +1825,12 @@ public void testUnknownMinimal() throws IOException { @Test public void testUnknownWithDots() throws IOException { String openMetrics = "" + + "# TYPE some_unknown_metric unknown\n" + + "# UNIT some_unknown_metric bytes\n" + + "# HELP some_unknown_metric help message\n" + + "some_unknown_metric{test_env=\"7\"} 0.7\n" + + "# EOF\n"; + String openMetricsWithExemplarsOnAllTimeSeries = "" + "# TYPE some_unknown_metric unknown\n" + "# UNIT some_unknown_metric bytes\n" + "# HELP some_unknown_metric help message\n" + @@ -1741,6 +1861,7 @@ public void testUnknownWithDots() throws IOException { .build()) .build(); assertOpenMetricsText(openMetrics, unknown); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsWithExemplarsOnAllTimeSeries, unknown); assertPrometheusText(prometheus, unknown); assertPrometheusProtobuf(prometheusProtobuf, unknown); } @@ -1789,6 +1910,13 @@ public void testLabelValueEscape() throws IOException { } private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, false); + writer.write(out, MetricSnapshots.of(snapshot)); + Assert.assertEquals(expected, out.toString()); + } + + private void assertOpenMetricsTextWithExemplarsOnAllTimeSeries(String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); writer.write(out, MetricSnapshots.of(snapshot)); @@ -1797,7 +1925,7 @@ private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) thr private void assertOpenMetricsTextWithoutCreated(String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, true); + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, false); writer.write(out, MetricSnapshots.of(snapshot)); Assert.assertEquals(expected, out.toString()); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplars.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplars.java index dc77be55a..b5286b0c2 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplars.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplars.java @@ -21,7 +21,14 @@ public class Exemplars implements Iterable { private final List exemplars; private Exemplars(Collection exemplars) { - this.exemplars = Collections.unmodifiableList(new ArrayList<>(exemplars)); + ArrayList copy = new ArrayList<>(exemplars.size()); + for (Exemplar exemplar : exemplars) { + if (exemplar == null) { + throw new NullPointerException("Illegal null value in Exemplars"); + } + copy.add(exemplar); + } + this.exemplars = Collections.unmodifiableList(copy); } /** @@ -61,16 +68,24 @@ public Exemplar get(int index) { /** * This is used by classic histograms to find an exemplar with a value between lowerBound and upperBound. + * If there is more than one exemplar within the bounds the one with the newest time stamp is returned. */ public Exemplar get(double lowerBound, double upperBound) { + Exemplar result = null; for (int i = 0; i < exemplars.size(); i++) { Exemplar exemplar = exemplars.get(i); double value = exemplar.getValue(); if (value > lowerBound && value <= upperBound) { - return exemplar; + if (result == null) { + result = exemplar; + } else if (result.hasTimestamp() && exemplar.hasTimestamp()) { + if (exemplar.getTimestampMillis() > result.getTimestampMillis()) { + result = exemplar; + } + } } } - return null; + return result; } /** diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java index 5549c0efd..4ca64d6fb 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java @@ -37,4 +37,16 @@ public void testImmutable() { iterator.next(); iterator.remove(); } + + @Test + public void testGet() { + Exemplar oldest = Exemplar.builder().timestampMillis(System.currentTimeMillis() - 100).value(1.8).build(); + Exemplar middle = Exemplar.builder().timestampMillis(System.currentTimeMillis() - 50).value(1.2).build(); + Exemplar newest = Exemplar.builder().timestampMillis(System.currentTimeMillis()).value(1.0).build(); + Exemplars exemplars = Exemplars.of(oldest, newest, middle); + Exemplar result = exemplars.get(1.1, 1.9); // newest is not within these bounds + Assert.assertSame(result, middle); + result = exemplars.get(0.9, Double.POSITIVE_INFINITY); + Assert.assertSame(result, newest); + } } diff --git a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java index 9d1e8f1b9..8a5e2c018 100644 --- a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java +++ b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java @@ -242,7 +242,7 @@ private String origOpenMetrics() throws IOException { private String newOpenMetrics() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, false); writer.write(out, newRegistry.scrape()); return out.toString(StandardCharsets.UTF_8.name()); } From b16dda738cea375e65fae64d977bd82119a1c880 Mon Sep 17 00:00:00 2001 From: Christoph MEIER Date: Wed, 31 Jan 2024 13:26:23 +0100 Subject: [PATCH 052/870] feat: add jvm native memory metrics Signed-off-by: Christoph MEIER --- .../instrumentation/jvm/JvmMetrics.java | 1 + .../jvm/JvmNativeMemoryMetrics.java | 212 ++++++++++++++++ .../jvm/JvmNativeMemoryMetricsTest.java | 226 ++++++++++++++++++ 3 files changed, 439 insertions(+) create mode 100644 prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java create mode 100644 prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java index 32602bd69..fa909f629 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java @@ -60,6 +60,7 @@ public void register(PrometheusRegistry registry) { JvmGarbageCollectorMetrics.builder(config).register(registry); JvmMemoryPoolAllocationMetrics.builder(config).register(registry); JvmMemoryMetrics.builder(config).register(registry); + JvmNativeMemoryMetrics.builder(config).register(registry); JvmRuntimeInfoMetric.builder(config).register(registry); ProcessMetrics.builder(config).register(registry); } diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java new file mode 100644 index 000000000..8e60a31d9 --- /dev/null +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java @@ -0,0 +1,212 @@ +package io.prometheus.metrics.instrumentation.jvm; + +import io.prometheus.metrics.config.PrometheusProperties; +import io.prometheus.metrics.core.metrics.GaugeWithCallback; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.prometheus.metrics.model.snapshots.Unit; + +import javax.management.InstanceNotFoundException; +import javax.management.MBeanException; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.management.ReflectionException; +import java.lang.management.ManagementFactory; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Consumer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * JVM native memory. JVM native memory tracking is disabled by default. You need to enable it by starting your JVM with this flag: + *
    -XX:NativeMemoryTracking=summary
    + *

    + * When native memory tracking is disabled the metrics are not registered either. + *

    + *

    + * The {@link JvmNativeMemoryMetrics} are registered as part of the {@link JvmMetrics} like this: + *

    {@code
    + *   JvmMetrics.builder().register();
    + * }
    + * However, if you want only the {@link JvmNativeMemoryMetrics} you can also register them directly: + *
    {@code
    + *   JvmNativeMemoryMetrics.builder().register();
    + * }
    + * Example metrics being exported: + *
    + * # HELP jvm_native_memory_committed_bytes Committed bytes of a given JVM. Committed memory represents the amount of memory the JVM is using right now.
    + * # TYPE jvm_native_memory_committed_bytes gauge
    + * jvm_native_memory_committed_bytes{pool="Arena Chunk"} 58480.0
    + * jvm_native_memory_committed_bytes{pool="Arguments"} 25119.0
    + * jvm_native_memory_committed_bytes{pool="Class"} 1.00609438E8
    + * jvm_native_memory_committed_bytes{pool="Code"} 2.7980888E7
    + * jvm_native_memory_committed_bytes{pool="Compiler"} 529922.0
    + * jvm_native_memory_committed_bytes{pool="GC"} 515466.0
    + * jvm_native_memory_committed_bytes{pool="Internal"} 673194.0
    + * jvm_native_memory_committed_bytes{pool="Java Heap"} 4.0923136E7
    + * jvm_native_memory_committed_bytes{pool="Logging"} 4596.0
    + * jvm_native_memory_committed_bytes{pool="Module"} 96408.0
    + * jvm_native_memory_committed_bytes{pool="Native Memory Tracking"} 3929432.0
    + * jvm_native_memory_committed_bytes{pool="Other"} 667656.0
    + * jvm_native_memory_committed_bytes{pool="Safepoint"} 8192.0
    + * jvm_native_memory_committed_bytes{pool="Symbol"} 2.4609808E7
    + * jvm_native_memory_committed_bytes{pool="Synchronizer"} 272520.0
    + * jvm_native_memory_committed_bytes{pool="Thread"} 3546896.0
    + * jvm_native_memory_committed_bytes{pool="Total"} 2.0448392E8
    + * jvm_native_memory_committed_bytes{pool="Tracing"} 1.0
    + * jvm_native_memory_committed_bytes{pool="Unknown"} 32768.0
    + * # HELP jvm_native_memory_reserved_bytes Reserved bytes of a given JVM. Reserved memory represents the total amount of memory the JVM can potentially use.
    + * # TYPE jvm_native_memory_reserved_bytes gauge
    + * jvm_native_memory_reserved_bytes{pool="Arena Chunk"} 25736.0
    + * jvm_native_memory_reserved_bytes{pool="Arguments"} 25119.0
    + * jvm_native_memory_reserved_bytes{pool="Class"} 1.162665374E9
    + * jvm_native_memory_reserved_bytes{pool="Code"} 2.55386712E8
    + * jvm_native_memory_reserved_bytes{pool="Compiler"} 529922.0
    + * jvm_native_memory_reserved_bytes{pool="GC"} 1695114.0
    + * jvm_native_memory_reserved_bytes{pool="Internal"} 673191.0
    + * jvm_native_memory_reserved_bytes{pool="Java Heap"} 4.02653184E8
    + * jvm_native_memory_reserved_bytes{pool="Logging"} 4596.0
    + * jvm_native_memory_reserved_bytes{pool="Module"} 96408.0
    + * jvm_native_memory_reserved_bytes{pool="Native Memory Tracking"} 3929400.0
    + * jvm_native_memory_reserved_bytes{pool="Other"} 667656.0
    + * jvm_native_memory_reserved_bytes{pool="Safepoint"} 8192.0
    + * jvm_native_memory_reserved_bytes{pool="Symbol"} 2.4609808E7
    + * jvm_native_memory_reserved_bytes{pool="Synchronizer"} 272520.0
    + * jvm_native_memory_reserved_bytes{pool="Thread"} 3.383272E7
    + * jvm_native_memory_reserved_bytes{pool="Total"} 1.887108421E9
    + * jvm_native_memory_reserved_bytes{pool="Tracing"} 1.0
    + * jvm_native_memory_reserved_bytes{pool="Unknown"} 32768.0
    + * 
    + */ +public class JvmNativeMemoryMetrics { + private static final String JVM_NATIVE_MEMORY_RESERVED_BYTES = "jvm_native_memory_reserved_bytes"; + private static final String JVM_NATIVE_MEMORY_COMMITTED_BYTES = "jvm_native_memory_committed_bytes"; + + private static final Pattern pattern = Pattern.compile("\\s*([A-Z][A-Za-z\\s]*[A-Za-z]+).*reserved=(\\d+), committed=(\\d+)"); + + /** + * Package private. For testing only. + */ + static final AtomicBoolean isEnabled = new AtomicBoolean(true); + + private final PrometheusProperties config; + private final PlatformMBeanServerAdapter adapter; + + private JvmNativeMemoryMetrics(PrometheusProperties config, PlatformMBeanServerAdapter adapter) { + this.config = config; + this.adapter = adapter; + } + + private void register(PrometheusRegistry registry) { + // first call will check if enabled and set the flag + vmNativeMemorySummaryInBytesOrEmpty(); + if (isEnabled.get()) { + GaugeWithCallback.builder(config) + .name(JVM_NATIVE_MEMORY_RESERVED_BYTES) + .help("Reserved bytes of a given JVM. Reserved memory represents the total amount of memory the JVM can potentially use.") + .unit(Unit.BYTES) + .labelNames("pool") + .callback(makeCallback(true)) + .register(registry); + + GaugeWithCallback.builder(config) + .name(JVM_NATIVE_MEMORY_COMMITTED_BYTES) + .help("Committed bytes of a given JVM. Committed memory represents the amount of memory the JVM is using right now.") + .unit(Unit.BYTES) + .labelNames("pool") + .callback(makeCallback(false)) + .register(registry); + } + } + + private Consumer makeCallback(Boolean reserved) { + return callback -> { + String summary = vmNativeMemorySummaryInBytesOrEmpty(); + if (!summary.isEmpty()) { + Matcher matcher = pattern.matcher(summary); + while (matcher.find()) { + String category = matcher.group(1); + long value; + if (reserved) { + value = Long.parseLong(matcher.group(2)); + } else { + value = Long.parseLong(matcher.group(3)); + } + callback.call(value, category); + } + } + }; + } + + private String vmNativeMemorySummaryInBytesOrEmpty() { + if (!isEnabled.get()) { + return ""; + } + try { + // requires -XX:NativeMemoryTracking=summary + String summary = adapter.vmNativeMemorySummaryInBytes(); + if (summary.isEmpty() || summary.trim().contains("Native memory tracking is not enabled")) { + isEnabled.set(false); + return ""; + } else { + return summary; + } + } catch (Exception ex) { + // ignore errors + isEnabled.set(false); + return ""; + } + } + + interface PlatformMBeanServerAdapter { + String vmNativeMemorySummaryInBytes(); + } + + static class DefaultPlatformMBeanServerAdapter implements PlatformMBeanServerAdapter { + @Override + public String vmNativeMemorySummaryInBytes() { + try { + return (String) ManagementFactory.getPlatformMBeanServer().invoke( + new ObjectName("com.sun.management:type=DiagnosticCommand"), + "vmNativeMemory", + new Object[]{new String[]{"summary", "scale=B"}}, + new String[]{"[Ljava.lang.String;"}); + } catch (ReflectionException | MalformedObjectNameException | InstanceNotFoundException | MBeanException e) { + throw new IllegalStateException("Native memory tracking is not enabled", e); + } + } + } + + public static Builder builder() { + return new Builder(PrometheusProperties.get()); + } + + public static Builder builder(PrometheusProperties config) { + return new Builder(config); + } + + public static class Builder { + + private final PrometheusProperties config; + private final PlatformMBeanServerAdapter adapter; + + private Builder(PrometheusProperties config) { + this(config, new DefaultPlatformMBeanServerAdapter()); + } + + /** + * Package private. For testing only. + */ + Builder(PrometheusProperties config, PlatformMBeanServerAdapter adapter) { + this.config = config; + this.adapter = adapter; + } + + public void register() { + register(PrometheusRegistry.defaultRegistry); + } + + public void register(PrometheusRegistry registry) { + new JvmNativeMemoryMetrics(config, adapter).register(registry); + } + } +} diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java new file mode 100644 index 000000000..4b9321660 --- /dev/null +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java @@ -0,0 +1,226 @@ +package io.prometheus.metrics.instrumentation.jvm; + +import io.prometheus.metrics.config.PrometheusProperties; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import junit.framework.TestCase; +import org.junit.Assert; +import org.junit.Test; +import org.mockito.Mockito; + +import java.io.IOException; + +import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; +import static org.mockito.Mockito.when; + +public class JvmNativeMemoryMetricsTest extends TestCase { + + @Test + public void testNativeMemoryTrackingFail() throws IOException { + JvmNativeMemoryMetrics.isEnabled.set(true); + + JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); + when(adapter.vmNativeMemorySummaryInBytes()).thenThrow(new RuntimeException("mock")); + + PrometheusRegistry registry = new PrometheusRegistry(); + new JvmNativeMemoryMetrics.Builder(PrometheusProperties.get(), adapter).register(registry); + MetricSnapshots snapshots = registry.scrape(); + + String expected = "# EOF\n"; + + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } + + @Test + public void testNativeMemoryTrackingEmpty() throws IOException { + JvmNativeMemoryMetrics.isEnabled.set(true); + + JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); + when(adapter.vmNativeMemorySummaryInBytes()).thenReturn(""); + + PrometheusRegistry registry = new PrometheusRegistry(); + new JvmNativeMemoryMetrics.Builder(PrometheusProperties.get(), adapter).register(registry); + MetricSnapshots snapshots = registry.scrape(); + + String expected = "# EOF\n"; + + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } + + @Test + public void testNativeMemoryTrackingDisabled() throws IOException { + JvmNativeMemoryMetrics.isEnabled.set(true); + + JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); + when(adapter.vmNativeMemorySummaryInBytes()).thenReturn("Native memory tracking is not enabled"); + + PrometheusRegistry registry = new PrometheusRegistry(); + new JvmNativeMemoryMetrics.Builder(PrometheusProperties.get(), adapter).register(registry); + MetricSnapshots snapshots = registry.scrape(); + + String expected = "# EOF\n"; + + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } + + @Test + public void testNativeMemoryTrackingEnabled() throws IOException { + JvmNativeMemoryMetrics.isEnabled.set(true); + + JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); + when(adapter.vmNativeMemorySummaryInBytes()).thenReturn( + "Native Memory Tracking:\n" + + "\n" + + "Total: reserved=10341970661, committed=642716389\n" + + " malloc: 27513573 #22947\n" + + " mmap: reserved=10314457088, committed=615202816\n" + + "\n" + + "- Java Heap (reserved=8531214336, committed=536870912)\n" + + " (mmap: reserved=8531214336, committed=536870912) \n" + + " \n" + + "- Class (reserved=1073899939, committed=616867)\n" + + " (classes #1630)\n" + + " ( instance classes #1462, array classes #168)\n" + + " (malloc=158115 #2350) \n" + + " (mmap: reserved=1073741824, committed=458752) \n" + + " ( Metadata: )\n" + + " ( reserved=67108864, committed=2818048)\n" + + " ( used=2748008)\n" + + " ( waste=70040 =2.49%)\n" + + " ( Class space:)\n" + + " ( reserved=1073741824, committed=458752)\n" + + " ( used=343568)\n" + + " ( waste=115184 =25.11%)\n" + + " \n" + + "- Thread (reserved=21020080, committed=847280)\n" + + " (thread #20)\n" + + " (stack: reserved=20971520, committed=798720)\n" + + " (malloc=27512 #125) \n" + + " (arena=21048 #37)\n" + + " \n" + + "- Code (reserved=253796784, committed=7836080)\n" + + " (malloc=105944 #1403) \n" + + " (mmap: reserved=253689856, committed=7729152) \n" + + " (arena=984 #1)\n" + + " \n" + + "- GC (reserved=373343252, committed=76530708)\n" + + " (malloc=22463508 #720) \n" + + " (mmap: reserved=350879744, committed=54067200) \n" + + " \n" + + "- Compiler (reserved=1926356, committed=1926356)\n" + + " (malloc=20428 #73) \n" + + " (arena=1905928 #20)\n" + + " \n" + + "- Internal (reserved=242257, committed=242257)\n" + + " (malloc=176721 #1808) \n" + + " (mmap: reserved=65536, committed=65536) \n" + + " \n" + + "- Other (reserved=4096, committed=4096)\n" + + " (malloc=4096 #2) \n" + + " \n" + + "- Symbol (reserved=1505072, committed=1505072)\n" + + " (malloc=1136432 #14482) \n" + + " (arena=368640 #1)\n" + + " \n" + + "- Native Memory Tracking (reserved=373448, committed=373448)\n" + + " (malloc=6280 #91) \n" + + " (tracking overhead=367168)\n" + + " \n" + + "- Shared class space (reserved=16777216, committed=12386304)\n" + + " (mmap: reserved=16777216, committed=12386304) \n" + + " \n" + + "- Arena Chunk (reserved=503216, committed=503216)\n" + + " (malloc=503216) \n" + + " \n" + + "- Tracing (reserved=33097, committed=33097)\n" + + " (malloc=369 #10) \n" + + " (arena=32728 #1)\n" + + " \n" + + "- Arguments (reserved=160, committed=160)\n" + + " (malloc=160 #5) \n" + + " \n" + + "- Module (reserved=169168, committed=169168)\n" + + " (malloc=169168 #1266) \n" + + " \n" + + "- Safepoint (reserved=8192, committed=8192)\n" + + " (mmap: reserved=8192, committed=8192) \n" + + " \n" + + "- Synchronization (reserved=31160, committed=31160)\n" + + " (malloc=31160 #452) \n" + + " \n" + + "- Serviceability (reserved=600, committed=600)\n" + + " (malloc=600 #6) \n" + + " \n" + + "- Metaspace (reserved=67120768, committed=2829952)\n" + + " (malloc=11904 #12) \n" + + " (mmap: reserved=67108864, committed=2818048) \n" + + " \n" + + "- String Deduplication (reserved=632, committed=632)\n" + + " (malloc=632 #8) \n" + + " \n" + + "- Object Monitors (reserved=832, committed=832)\n" + + " (malloc=832 #4) \n" + + " \n" + + "\n" + ); + + PrometheusRegistry registry = new PrometheusRegistry(); + new JvmNativeMemoryMetrics.Builder(PrometheusProperties.get(), adapter).register(registry); + MetricSnapshots snapshots = registry.scrape(); + + String expected = "" + + "# TYPE jvm_native_memory_committed_bytes gauge\n" + + "# UNIT jvm_native_memory_committed_bytes bytes\n" + + "# HELP jvm_native_memory_committed_bytes Committed bytes of a given JVM. Committed memory represents the amount of memory the JVM is using right now.\n" + + "jvm_native_memory_committed_bytes{pool=\"Arena Chunk\"} 503216.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Arguments\"} 160.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Class\"} 616867.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Code\"} 7836080.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Compiler\"} 1926356.0\n" + + "jvm_native_memory_committed_bytes{pool=\"GC\"} 7.6530708E7\n" + + "jvm_native_memory_committed_bytes{pool=\"Internal\"} 242257.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Java Heap\"} 5.36870912E8\n" + + "jvm_native_memory_committed_bytes{pool=\"Metaspace\"} 2829952.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Module\"} 169168.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Native Memory Tracking\"} 373448.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Object Monitors\"} 832.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Other\"} 4096.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Safepoint\"} 8192.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Serviceability\"} 600.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Shared class space\"} 1.2386304E7\n" + + "jvm_native_memory_committed_bytes{pool=\"String Deduplication\"} 632.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Symbol\"} 1505072.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Synchronization\"} 31160.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Thread\"} 847280.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Total\"} 6.42716389E8\n" + + "jvm_native_memory_committed_bytes{pool=\"Tracing\"} 33097.0\n" + + "# TYPE jvm_native_memory_reserved_bytes gauge\n" + + "# UNIT jvm_native_memory_reserved_bytes bytes\n" + + "# HELP jvm_native_memory_reserved_bytes Reserved bytes of a given JVM. Reserved memory represents the total amount of memory the JVM can potentially use.\n" + + "jvm_native_memory_reserved_bytes{pool=\"Arena Chunk\"} 503216.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Arguments\"} 160.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Class\"} 1.073899939E9\n" + + "jvm_native_memory_reserved_bytes{pool=\"Code\"} 2.53796784E8\n" + + "jvm_native_memory_reserved_bytes{pool=\"Compiler\"} 1926356.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"GC\"} 3.73343252E8\n" + + "jvm_native_memory_reserved_bytes{pool=\"Internal\"} 242257.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Java Heap\"} 8.531214336E9\n" + + "jvm_native_memory_reserved_bytes{pool=\"Metaspace\"} 6.7120768E7\n" + + "jvm_native_memory_reserved_bytes{pool=\"Module\"} 169168.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Native Memory Tracking\"} 373448.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Object Monitors\"} 832.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Other\"} 4096.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Safepoint\"} 8192.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Serviceability\"} 600.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Shared class space\"} 1.6777216E7\n" + + "jvm_native_memory_reserved_bytes{pool=\"String Deduplication\"} 632.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Symbol\"} 1505072.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Synchronization\"} 31160.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Thread\"} 2.102008E7\n" + + "jvm_native_memory_reserved_bytes{pool=\"Total\"} 1.0341970661E10\n" + + "jvm_native_memory_reserved_bytes{pool=\"Tracing\"} 33097.0\n" + + "# EOF\n"; + + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } +} From 48d139469b2710e5b2aa9db7f0e67d4adad4ee0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 21 Mar 2024 20:56:57 +0100 Subject: [PATCH 053/870] Add BOM module (#931) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- pom.xml | 1 + .../pom.xml | 73 ++++++++----------- 2 files changed, 32 insertions(+), 42 deletions(-) rename {simpleclient-archive/simpleclient_bom => prometheus-metrics-bom}/pom.xml (62%) diff --git a/pom.xml b/pom.xml index 4ee0e39ae..dd1edea32 100644 --- a/pom.xml +++ b/pom.xml @@ -52,6 +52,7 @@ + prometheus-metrics-bom prometheus-metrics-core prometheus-metrics-config prometheus-metrics-model diff --git a/simpleclient-archive/simpleclient_bom/pom.xml b/prometheus-metrics-bom/pom.xml similarity index 62% rename from simpleclient-archive/simpleclient_bom/pom.xml rename to prometheus-metrics-bom/pom.xml index 417c679bd..f11653adc 100644 --- a/simpleclient-archive/simpleclient_bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -5,17 +5,21 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.2.0-SNAPSHOT - simpleclient_bom + prometheus-metrics-bom pom - Prometheus Java Simpleclient BOM + Prometheus Metrics BOM - Bill of Materials for the Simpleclient. + Bill of Materials for the Prometheus Metrics library + + 1.1.0 + + The Apache Software License, Version 2.0 @@ -28,118 +32,103 @@ io.prometheus - simpleclient - ${project.version} - - - io.prometheus - simpleclient_caffeine - ${project.version} - - - io.prometheus - simpleclient_common - ${project.version} - - - io.prometheus - simpleclient_dropwizard + prometheus-metrics-config ${project.version} io.prometheus - simpleclient_graphite_bridge + prometheus-metrics-core ${project.version} io.prometheus - simpleclient_guava + prometheus-metrics-exporter-common ${project.version} io.prometheus - simpleclient_hibernate + prometheus-metrics-exporter-httpserver ${project.version} io.prometheus - simpleclient_hotspot + prometheus-metrics-exporter-opentelemetry ${project.version} io.prometheus - simpleclient_httpserver + prometheus-metrics-exporter-servlet-jakarta ${project.version} io.prometheus - simpleclient_tracer_common + prometheus-metrics-exporter-servlet-javax ${project.version} io.prometheus - simpleclient_jetty + prometheus-metrics-exposition-formats ${project.version} io.prometheus - simpleclient_jetty_jdk8 + prometheus-metrics-instrumentation-dropwizard5 ${project.version} io.prometheus - simpleclient_log4j + prometheus-metrics-instrumentation-jvm ${project.version} io.prometheus - simpleclient_log4j2 + prometheus-metrics-model ${project.version} io.prometheus - simpleclient_logback + prometheus-metrics-simpleclient-bridge ${project.version} io.prometheus - simpleclient_pushgateway + prometheus-metrics-tracer ${project.version} io.prometheus - simpleclient_servlet + prometheus-metrics-tracer-common ${project.version} io.prometheus - simpleclient_servlet_jakarta + prometheus-metrics-tracer-initializer ${project.version} io.prometheus - simpleclient_spring_boot + prometheus-metrics-tracer-otel ${project.version} io.prometheus - simpleclient_spring_web + prometheus-metrics-tracer-otel-agent ${project.version} io.prometheus - simpleclient_tracer_otel - ${project.version} + prometheus-metrics-shaded-dependencies + ${prometheus.metrics.shaded.dependencies.version} io.prometheus - simpleclient_tracer_otel_agent - ${project.version} + prometheus-metrics-shaded-protobuf + ${prometheus.metrics.shaded.dependencies.version} io.prometheus - simpleclient_vertx - ${project.version} + prometheus-metrics-shaded-opentelemetry + ${prometheus.metrics.shaded.dependencies.version} From 66c97259c0dbfd266267c230ab83ca9afd811bd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 21 Mar 2024 21:34:59 +0100 Subject: [PATCH 054/870] Add clear() method to StatefulMetric (#917) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../metrics/core/metrics/StatefulMetric.java | 8 ++++-- .../core/metrics/StatefulMetricTest.java | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java index 426f4efa8..43555167a 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java @@ -109,8 +109,12 @@ public void remove(String... labelValues) { data.remove(Arrays.asList(labelValues)); } - // TODO: Write a clear() method that resets the metric (removes all data points), - // see https://prometheus.io/docs/instrumenting/writing_clientlibs/#labels + /** + * Reset the metric (remove all data points). + */ + public void clear() { + data.clear(); + } protected abstract T newDataPoint(); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java index 0baddd5fd..b1c45fa80 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java @@ -33,4 +33,32 @@ public void testLabelRemoveWhileCollecting() throws Exception { Assert.assertNotNull(entry.getValue()); } } + + @Test + public void testClear() { + Counter counter = Counter.builder().name("test").labelNames("label1", "label2").build(); + counter.labelValues("a", "b").inc(3.0); + counter.labelValues("c", "d").inc(3.0); + counter.labelValues("a", "b").inc(); + Assert.assertEquals(2, counter.collect().getDataPoints().size()); + + counter.clear(); + Assert.assertEquals(0, counter.collect().getDataPoints().size()); + + counter.labelValues("a", "b").inc(); + Assert.assertEquals(1, counter.collect().getDataPoints().size()); + } + + @Test + public void testClearNoLabels() { + Counter counter = Counter.builder().name("test").build(); + counter.inc(); + Assert.assertEquals(1, counter.collect().getDataPoints().size()); + Assert.assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + + counter.clear(); + // No labels is always present, but as no value has been observed after clear() the value should be 0.0 + Assert.assertEquals(1, counter.collect().getDataPoints().size()); + Assert.assertEquals(0.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + } } From 5b286bcbf073e18fa33d3c41138b1563a44de3e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 21 Mar 2024 21:27:24 +0100 Subject: [PATCH 055/870] Add get() method for Counter and Gauge (#920) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../core/datapoints/CounterDataPoint.java | 10 +++++++ .../core/datapoints/GaugeDataPoint.java | 5 ++++ .../metrics/core/metrics/Counter.java | 30 ++++++++++++++++++- .../metrics/core/metrics/Gauge.java | 18 ++++++++++- 4 files changed, 61 insertions(+), 2 deletions(-) diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/CounterDataPoint.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/CounterDataPoint.java index 49cb95008..51b45c62a 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/CounterDataPoint.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/CounterDataPoint.java @@ -85,4 +85,14 @@ default void incWithExemplar(long amount, Labels labels) { * Throws an {@link IllegalArgumentException} if {@code amount} is negative. */ void incWithExemplar(double amount, Labels labels); + + /** + * Get the current value. + */ + double get(); + + /** + * Get the current value as a {@code long}. Decimal places will be discarded. + */ + long getLongValue(); } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java index 9daf01428..c208d5414 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java @@ -66,6 +66,11 @@ default void decWithExemplar(double amount, Labels labels) { */ void set(double value); + /** + * Get the current value. + */ + double get(); + /** * Set the gauge to {@code value}, and create a custom exemplar with the given labels. */ diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java index 4c764cf2a..c5a55ca78 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java @@ -77,6 +77,20 @@ public void incWithExemplar(double amount, Labels labels) { getNoLabels().incWithExemplar(amount, labels); } + /** + * {@inheritDoc} + */ + public double get() { + return getNoLabels().get(); + } + + /** + * {@inheritDoc} + */ + public long getLongValue() { + return getNoLabels().getLongValue(); + } + /** * {@inheritDoc} */ @@ -129,6 +143,20 @@ private DataPoint(ExemplarSampler exemplarSampler) { this.exemplarSampler = exemplarSampler; } + /** + * {@inheritDoc} + */ + public double get() { + return longValue.sum() + doubleValue.sum(); + } + + /** + * {@inheritDoc} + */ + public long getLongValue() { + return longValue.sum() + (long) doubleValue.sum(); + } + /** * {@inheritDoc} */ @@ -199,7 +227,7 @@ private CounterSnapshot.CounterDataPointSnapshot collect(Labels labels) { } } } - return new CounterSnapshot.CounterDataPointSnapshot(longValue.sum() + doubleValue.sum(), labels, latestExemplar, createdTimeMillis); + return new CounterSnapshot.CounterDataPointSnapshot(get(), labels, latestExemplar, createdTimeMillis); } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java index 466c31276..1c46435f6 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java @@ -60,6 +60,14 @@ public void inc(double amount) { getNoLabels().inc(amount); } + /** + * {@inheritDoc} + */ + @Override + public double get() { + return getNoLabels().get(); + } + /** * {@inheritDoc} */ @@ -158,6 +166,14 @@ public void set(double value) { } } + /** + * {@inheritDoc} + */ + @Override + public double get() { + return Double.longBitsToDouble(value.get()); + } + /** * {@inheritDoc} */ @@ -182,7 +198,7 @@ private GaugeSnapshot.GaugeDataPointSnapshot collect(Labels labels) { } } } - return new GaugeSnapshot.GaugeDataPointSnapshot(Double.longBitsToDouble(value.get()), labels, oldest); + return new GaugeSnapshot.GaugeDataPointSnapshot(get(), labels, oldest); } } From 5102909a837f0f9e8e7e525a38a3a9f04386d0ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Fri, 22 Mar 2024 15:51:46 +0100 Subject: [PATCH 056/870] Fix NullPointerException in OpenTelemetry exporter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../exporter/opentelemetry/otelmodel/PrometheusData.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java index 747fa7b25..d42132959 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java @@ -12,8 +12,8 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.PointData; import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.internal.data.ImmutableDoubleExemplarData; +import java.util.Collections; import java.util.List; -import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @@ -43,13 +43,15 @@ protected Attributes labelsToAttributes(Labels labels) { } protected List convertExemplar(Exemplar exemplar) { + if (exemplar == null) { + return Collections.emptyList(); + } return convertExemplars(Exemplars.of(exemplar)); } protected List convertExemplars(Exemplars exemplars) { return StreamSupport.stream(exemplars.spliterator(), false) .map(this::toDoubleExemplarData) - .filter(Objects::nonNull) .collect(Collectors.toList()); } From 200be28f1b814ab1aeee46ac86abb5c515ff572f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Fri, 22 Mar 2024 10:29:12 +0100 Subject: [PATCH 057/870] Bump dependency versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 4 ++-- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/pom.xml | 2 +- prometheus-metrics-bom/version-rules.xml | 6 ++++++ prometheus-metrics-exporter-opentelemetry/pom.xml | 6 +++--- prometheus-metrics-exporter-servlet-javax/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard5/pom.xml | 4 ++-- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-tracer/pom.xml | 2 +- 13 files changed, 22 insertions(+), 16 deletions(-) create mode 100644 prometheus-metrics-bom/version-rules.xml diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 5e58d1e78..30a0821fa 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -50,7 +50,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.15 + 10.1.19 diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 98b910a47..089ce016a 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -50,7 +50,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.15 + 10.1.19 diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 50cb17c84..3e73b5db9 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -50,7 +50,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.15 + 10.1.19 diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index eca28e70f..6904718a6 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -45,12 +45,12 @@ org.eclipse.jetty jetty-server - 11.0.18 + 11.0.20 org.eclipse.jetty jetty-servlet - 11.0.18 + 11.0.20 diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 558590380..194374da2 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -45,7 +45,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.15 + 10.1.19 diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 7300b9318..d3b80d268 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -51,7 +51,7 @@ commons-io commons-io - 2.15.0 + 2.15.1 test diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index d76fae256..13a450d09 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -55,7 +55,7 @@ org.testcontainers testcontainers - 1.19.1 + 1.19.7 test diff --git a/prometheus-metrics-bom/version-rules.xml b/prometheus-metrics-bom/version-rules.xml new file mode 100644 index 000000000..76f8da4fd --- /dev/null +++ b/prometheus-metrics-bom/version-rules.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index b99ee75cf..10101fe59 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -17,7 +17,7 @@ - 1.31.0 + 1.36.0 io.prometheus.metrics.exporter.opentelemetry @@ -59,13 +59,13 @@ org.wiremock wiremock - 3.3.1 + 3.4.2 test org.awaitility awaitility - 4.2.0 + 4.2.1 test diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml index 8cd2f452e..023506a68 100644 --- a/prometheus-metrics-exporter-servlet-javax/pom.xml +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml @@ -45,7 +45,7 @@ javax.servlet javax.servlet-api - 3.1.0 + 4.0.1 provided diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index eb07172f0..7c1763cad 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -64,13 +64,13 @@ org.assertj assertj-core - 3.23.1 + 3.25.3 test org.mockito mockito-core - 4.6.1 + 5.11.0 test diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index f55dd9c6f..b9490532b 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -58,7 +58,7 @@ org.mockito mockito-core - 5.7.0 + 5.11.0 test diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 98286194e..3d7b44fae 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -37,7 +37,7 @@ io.opentelemetry opentelemetry-api - 1.28.0 + 1.36.0 From 292409441d0f9ebe2da4ffee82b0b81869f45d4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Fri, 22 Mar 2024 16:08:59 +0100 Subject: [PATCH 058/870] Bump shaded dependency versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../metrics/it/exporter/test/ExporterIT.java | 2 +- .../metrics/core/metrics/CounterTest.java | 4 +- .../metrics/core/metrics/HistogramTest.java | 4 +- .../metrics/core/metrics/InfoTest.java | 4 +- .../pom.xml | 3 +- .../opentelemetry/OpenTelemetryExporter.java | 18 +- .../PrometheusInstrumentationScope.java | 2 +- .../PrometheusMetricProducer.java | 14 +- .../otelmodel/DoublePointDataImpl.java | 6 +- .../ExponentialHistogramBucketsImpl.java | 2 +- .../ExponentialHistogramPointDataImpl.java | 8 +- .../otelmodel/HistogramPointDataImpl.java | 6 +- .../otelmodel/MetricDataFactory.java | 6 +- .../otelmodel/PointDataImpl.java | 8 +- .../otelmodel/PrometheusClassicHistogram.java | 8 +- .../otelmodel/PrometheusCounter.java | 8 +- .../otelmodel/PrometheusData.java | 20 +- .../otelmodel/PrometheusGauge.java | 6 +- .../otelmodel/PrometheusInfo.java | 8 +- .../otelmodel/PrometheusMetricData.java | 12 +- .../otelmodel/PrometheusNativeHistogram.java | 10 +- .../otelmodel/PrometheusStateSet.java | 8 +- .../otelmodel/PrometheusSummary.java | 6 +- .../otelmodel/PrometheusUnknown.java | 6 +- .../otelmodel/SummaryPointDataImpl.java | 8 +- .../otelmodel/ValueAtQuantileImpl.java | 2 +- .../generate-protobuf.sh | 3 +- prometheus-metrics-exposition-formats/pom.xml | 3 +- .../Metrics.java | 4630 ++++++++++------- .../PrometheusProtobufWriter.java | 4 +- .../expositionformats/ProtobufUtil.java | 2 +- .../src/main/protobuf/metrics.proto | 6 +- .../ExpositionFormatsTest.java | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- 35 files changed, 2787 insertions(+), 2062 deletions(-) rename prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/{com_google_protobuf_3_21_7 => com_google_protobuf_3_25_3}/Metrics.java (76%) diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index 2f7baf908..657b890db 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -2,7 +2,7 @@ import io.prometheus.client.it.common.LogConsumer; import io.prometheus.client.it.common.Volume; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Assert; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index 7311c84f6..7be2a3869 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.core.metrics; -import io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TextFormat; +import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.tracer.common.SpanContext; import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index 2e0df7b01..8df44b43e 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -1,11 +1,11 @@ package io.prometheus.metrics.core.metrics; -import io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TextFormat; +import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; import io.prometheus.metrics.core.datapoints.DistributionDataPoint; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.Exemplars; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index f88c98d7c..f2ddbc456 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -3,9 +3,9 @@ import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TextFormat; +import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; import org.junit.Assert; import org.junit.Test; diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 10101fe59..1586387d0 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -46,7 +46,8 @@ io.prometheus prometheus-metrics-shaded-opentelemetry - 1.1.0 + ${project.version} + diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java index a59948002..6cb3b4731 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java @@ -3,15 +3,15 @@ import io.prometheus.metrics.config.ExporterOpenTelemetryProperties; import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.exporter.otlp.http.metrics.OtlpHttpMetricExporter; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.exporter.otlp.metrics.OtlpGrpcMetricExporter; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.export.MetricExporter; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.export.PeriodicMetricReader; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.Resource; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.ResourceBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.exporter.otlp.http.metrics.OtlpHttpMetricExporter; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.exporter.otlp.metrics.OtlpGrpcMetricExporter; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.common.InstrumentationScopeInfo; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.export.MetricExporter; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.export.PeriodicMetricReader; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.Resource; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.ResourceBuilder; import java.time.Duration; import java.util.HashMap; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java index da78e2e41..acaf0d2a9 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.exporter.opentelemetry; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.common.InstrumentationScopeInfo; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.common.InstrumentationScopeInfo; import java.util.Properties; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java index 72dd968db..63b042ecd 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java @@ -12,13 +12,13 @@ import io.prometheus.metrics.model.snapshots.StateSetSnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.AttributesBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.export.CollectionRegistration; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.Resource; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.ResourceBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.AttributesBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.common.InstrumentationScopeInfo; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.export.CollectionRegistration; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.Resource; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.ResourceBuilder; import java.util.ArrayList; import java.util.Collection; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java index 5f6e22ff1..b8b850367 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java index 2f7c2ca9f..664d03cc1 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramBuckets; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramBuckets; import java.util.ArrayList; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java index e28deaf65..1756bf63f 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramBuckets; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramBuckets; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramPointData; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java index 68e2eefaf..9e2eb70dd 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.HistogramPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.HistogramPointData; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java index 26fb13738..24dd549e4 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java @@ -7,9 +7,9 @@ import io.prometheus.metrics.model.snapshots.StateSetSnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.Resource; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.common.InstrumentationScopeInfo; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.Resource; public class MetricDataFactory { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java index c57b0e064..c9b3713e7 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.PointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.PointData; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java index 03144ed0e..55eddc9be 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java @@ -2,10 +2,10 @@ import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.HistogramSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.HistogramData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.HistogramPointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.AggregationTemporality; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.HistogramData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.HistogramPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; import java.util.ArrayList; import java.util.Collection; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java index 6bf81e945..be0a54a19 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SumData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.AggregationTemporality; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SumData; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import java.util.Collection; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java index d42132959..ef5028871 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java @@ -1,16 +1,16 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; import io.prometheus.metrics.model.snapshots.*; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.AttributesBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.trace.SpanContext; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.trace.TraceFlags; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.trace.TraceState; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.Data; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.PointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.internal.data.ImmutableDoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.AttributesBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.trace.SpanContext; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.trace.TraceFlags; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.trace.TraceState; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.Data; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.PointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.internal.data.ImmutableDoubleExemplarData; import java.util.Collections; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java index 73635e69a..21136b338 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.GaugeData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.GaugeData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; import java.util.Collection; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java index 1c7ab6fff..88be12ba7 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java @@ -1,10 +1,10 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; import io.prometheus.metrics.model.snapshots.InfoSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SumData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.AggregationTemporality; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SumData; import java.util.Collection; import java.util.Collections; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java index 0ecbfd76e..a12e63f76 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java @@ -3,12 +3,12 @@ import io.prometheus.metrics.model.snapshots.MetricMetadata; import io.prometheus.metrics.model.snapshots.PrometheusNaming; import io.prometheus.metrics.model.snapshots.Unit; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SumData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.resources.Resource; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.common.InstrumentationScopeInfo; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SumData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.Resource; class PrometheusMetricData> implements MetricData { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java index e150e44a1..c0fcfdf13 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java @@ -2,11 +2,11 @@ import io.prometheus.metrics.model.snapshots.HistogramSnapshot; import io.prometheus.metrics.model.snapshots.NativeHistogramBuckets; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramBuckets; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ExponentialHistogramPointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.AggregationTemporality; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramBuckets; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; import java.util.Collection; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java index 0ebaf572c..6631813fb 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java @@ -2,10 +2,10 @@ import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.StateSetSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SumData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.AggregationTemporality; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SumData; import java.util.ArrayList; import java.util.Collection; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java index 7b7ba858b..29f861e2e 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java @@ -2,9 +2,9 @@ import io.prometheus.metrics.model.snapshots.Quantile; import io.prometheus.metrics.model.snapshots.SummarySnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SummaryData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SummaryPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SummaryData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SummaryPointData; import java.util.Collection; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java index 064774420..bcda2e74a 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.GaugeData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.GaugeData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; import java.util.Collection; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java index f5af6589c..03a9179c5 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.SummaryPointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ValueAtQuantile; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SummaryPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ValueAtQuantile; import java.util.ArrayList; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java index 4d1c2002f..09c244534 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_31_0.sdk.metrics.data.ValueAtQuantile; +import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ValueAtQuantile; public class ValueAtQuantileImpl implements ValueAtQuantile { diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index 24a9f8dff..c68ce46c9 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -6,7 +6,8 @@ set -e # I could not figure out how to use a protoc Maven plugin to use the shaded module, so I ran this command to generate the sources manually. # The version string must be the same as in protobuf-shaded/pom.xml. -export PROTOBUF_VERSION_STRING="3_21_7" +#export PROTOBUF_VERSION_STRING="3_21_7" +export PROTOBUF_VERSION_STRING="3_25_3" rm -rf src/main/protobuf/* curl -sL https://raw.githubusercontent.com/prometheus/client_model/master/io/prometheus/client/metrics.proto -o src/main/protobuf/metrics.proto diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index c1f0fdf77..f8e904561 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -50,7 +50,8 @@ io.prometheus prometheus-metrics-shaded-protobuf - 1.1.0 + ${project.version} + diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_3_21_7/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_3_25_3/Metrics.java similarity index 76% rename from prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_3_21_7/Metrics.java rename to prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_3_25_3/Metrics.java index d66bf16a8..3b821ba09 100644 --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_3_21_7/Metrics.java +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_3_25_3/Metrics.java @@ -1,24 +1,25 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: src/main/protobuf/metrics.proto -package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7; +// Protobuf Java Version: 3.25.3 +package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3; public final class Metrics { private Metrics() {} public static void registerAllExtensions( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite registry) { + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite registry) { } public static void registerAllExtensions( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistry registry) { + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistry registry) { registerAllExtensions( - (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite) registry); + (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite) registry); } /** * Protobuf enum {@code io.prometheus.client.MetricType} */ public enum MetricType - implements io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ProtocolMessageEnum { + implements io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ProtocolMessageEnum { /** *
          * COUNTER must use the Metric field "counter".
    @@ -149,35 +150,35 @@ public static MetricType forNumber(int value) {
           }
         }
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.EnumLiteMap
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.EnumLiteMap
             internalGetValueMap() {
           return internalValueMap;
         }
    -    private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.EnumLiteMap<
    +    private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.EnumLiteMap<
             MetricType> internalValueMap =
    -          new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.EnumLiteMap() {
    +          new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.EnumLiteMap() {
                 public MetricType findValueByNumber(int number) {
                   return MetricType.forNumber(number);
                 }
               };
     
    -    public final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.EnumValueDescriptor
    +    public final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.EnumValueDescriptor
             getValueDescriptor() {
           return getDescriptor().getValues().get(ordinal());
         }
    -    public final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.EnumDescriptor
    +    public final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.EnumDescriptor
             getDescriptorForType() {
           return getDescriptor();
         }
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.EnumDescriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.EnumDescriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.getDescriptor().getEnumTypes().get(0);
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.getDescriptor().getEnumTypes().get(0);
         }
     
         private static final MetricType[] VALUES = values();
     
         public static MetricType valueOf(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.EnumValueDescriptor desc) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.EnumValueDescriptor desc) {
           if (desc.getType() != getDescriptor()) {
             throw new java.lang.IllegalArgumentException(
               "EnumValueDescriptor is not for this type.");
    @@ -196,7 +197,7 @@ private MetricType(int value) {
     
       public interface LabelPairOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.LabelPair)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * optional string name = 1;
    @@ -212,7 +213,7 @@ public interface LabelPairOrBuilder extends
          * optional string name = 1;
          * @return The bytes for name.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
             getNameBytes();
     
         /**
    @@ -229,19 +230,19 @@ public interface LabelPairOrBuilder extends
          * optional string value = 2;
          * @return The bytes for value.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
             getValueBytes();
       }
       /**
        * Protobuf type {@code io.prometheus.client.LabelPair}
        */
       public static final class LabelPair extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.LabelPair)
           LabelPairOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use LabelPair.newBuilder() to construct.
    -    private LabelPair(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private LabelPair(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private LabelPair() {
    @@ -256,17 +257,17 @@ protected java.lang.Object newInstance(
           return new LabelPair();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder.class);
         }
     
         private int bitField0_;
    @@ -291,8 +292,8 @@ public java.lang.String getName() {
           if (ref instanceof java.lang.String) {
             return (java.lang.String) ref;
           } else {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString bs = 
    -            (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs = 
    +            (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
             java.lang.String s = bs.toStringUtf8();
             if (bs.isValidUtf8()) {
               name_ = s;
    @@ -305,17 +306,17 @@ public java.lang.String getName() {
          * @return The bytes for name.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
             getNameBytes() {
           java.lang.Object ref = name_;
           if (ref instanceof java.lang.String) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString b = 
    -            io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString.copyFromUtf8(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    +            io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
                     (java.lang.String) ref);
             name_ = b;
             return b;
           } else {
    -        return (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +        return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
           }
         }
     
    @@ -340,8 +341,8 @@ public java.lang.String getValue() {
           if (ref instanceof java.lang.String) {
             return (java.lang.String) ref;
           } else {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString bs = 
    -            (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs = 
    +            (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
             java.lang.String s = bs.toStringUtf8();
             if (bs.isValidUtf8()) {
               value_ = s;
    @@ -354,17 +355,17 @@ public java.lang.String getValue() {
          * @return The bytes for value.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
             getValueBytes() {
           java.lang.Object ref = value_;
           if (ref instanceof java.lang.String) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString b = 
    -            io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString.copyFromUtf8(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    +            io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
                     (java.lang.String) ref);
             value_ = b;
             return b;
           } else {
    -        return (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +        return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
           }
         }
     
    @@ -380,13 +381,13 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.writeString(output, 1, name_);
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.writeString(output, 1, name_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.writeString(output, 2, value_);
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.writeString(output, 2, value_);
           }
           getUnknownFields().writeTo(output);
         }
    @@ -398,10 +399,10 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.computeStringSize(1, name_);
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.computeStringSize(1, name_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.computeStringSize(2, value_);
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.computeStringSize(2, value_);
           }
           size += getUnknownFields().getSerializedSize();
           memoizedSize = size;
    @@ -413,10 +414,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -452,75 +453,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -529,7 +530,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -540,7 +541,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -548,29 +549,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.LabelPair}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
     
           }
    @@ -584,19 +585,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -604,14 +605,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -631,44 +632,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -691,8 +692,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -723,7 +724,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -747,8 +748,8 @@ public boolean hasName() {
           public java.lang.String getName() {
             java.lang.Object ref = name_;
             if (!(ref instanceof java.lang.String)) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString bs =
    -              (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs =
    +              (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
               java.lang.String s = bs.toStringUtf8();
               if (bs.isValidUtf8()) {
                 name_ = s;
    @@ -762,17 +763,17 @@ public java.lang.String getName() {
            * optional string name = 1;
            * @return The bytes for name.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
               getNameBytes() {
             java.lang.Object ref = name_;
             if (ref instanceof String) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString b = 
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString.copyFromUtf8(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
                       (java.lang.String) ref);
               name_ = b;
               return b;
             } else {
    -          return (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +          return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
             }
           }
           /**
    @@ -804,7 +805,7 @@ public Builder clearName() {
            * @return This builder for chaining.
            */
           public Builder setNameBytes(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString value) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString value) {
             if (value == null) { throw new NullPointerException(); }
             name_ = value;
             bitField0_ |= 0x00000001;
    @@ -827,8 +828,8 @@ public boolean hasValue() {
           public java.lang.String getValue() {
             java.lang.Object ref = value_;
             if (!(ref instanceof java.lang.String)) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString bs =
    -              (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs =
    +              (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
               java.lang.String s = bs.toStringUtf8();
               if (bs.isValidUtf8()) {
                 value_ = s;
    @@ -842,17 +843,17 @@ public java.lang.String getValue() {
            * optional string value = 2;
            * @return The bytes for value.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
               getValueBytes() {
             java.lang.Object ref = value_;
             if (ref instanceof String) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString b = 
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString.copyFromUtf8(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
                       (java.lang.String) ref);
               value_ = b;
               return b;
             } else {
    -          return (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +          return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
             }
           }
           /**
    @@ -884,7 +885,7 @@ public Builder clearValue() {
            * @return This builder for chaining.
            */
           public Builder setValueBytes(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString value) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString value) {
             if (value == null) { throw new NullPointerException(); }
             value_ = value;
             bitField0_ |= 0x00000002;
    @@ -893,13 +894,13 @@ public Builder setValueBytes(
           }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -908,48 +909,48 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public LabelPair parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -957,7 +958,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface GaugeOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Gauge)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * optional double value = 1;
    @@ -974,12 +975,12 @@ public interface GaugeOrBuilder extends
        * Protobuf type {@code io.prometheus.client.Gauge}
        */
       public static final class Gauge extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Gauge)
           GaugeOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use Gauge.newBuilder() to construct.
    -    private Gauge(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private Gauge(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private Gauge() {
    @@ -992,17 +993,17 @@ protected java.lang.Object newInstance(
           return new Gauge();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder.class);
         }
     
         private int bitField0_;
    @@ -1037,7 +1038,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeDouble(1, value_);
    @@ -1052,7 +1053,7 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeDoubleSize(1, value_);
           }
           size += getUnknownFields().getSerializedSize();
    @@ -1065,10 +1066,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -1089,7 +1090,7 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasValue()) {
             hash = (37 * hash) + VALUE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getValue()));
           }
           hash = (29 * hash) + getUnknownFields().hashCode();
    @@ -1097,75 +1098,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -1174,7 +1175,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -1185,7 +1186,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -1193,29 +1194,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Gauge}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.GaugeOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
     
           }
    @@ -1228,19 +1229,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -1248,14 +1249,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -1271,44 +1272,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -1324,8 +1325,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -1351,7 +1352,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -1401,13 +1402,13 @@ public Builder clearValue() {
           }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -1416,48 +1417,48 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public Gauge parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -1465,7 +1466,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface CounterOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Counter)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * optional double value = 1;
    @@ -1487,11 +1488,11 @@ public interface CounterOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
     
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 3;
    @@ -1502,22 +1503,22 @@ public interface CounterOrBuilder extends
          * optional .google.protobuf.Timestamp created_timestamp = 3;
          * @return The createdTimestamp.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCreatedTimestamp();
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp();
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 3;
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getCreatedTimestampOrBuilder();
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder();
       }
       /**
        * Protobuf type {@code io.prometheus.client.Counter}
        */
       public static final class Counter extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Counter)
           CounterOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use Counter.newBuilder() to construct.
    -    private Counter(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private Counter(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private Counter() {
    @@ -1530,17 +1531,17 @@ protected java.lang.Object newInstance(
           return new Counter();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder.class);
         }
     
         private int bitField0_;
    @@ -1564,7 +1565,7 @@ public double getValue() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          * @return Whether the exemplar field is set.
    @@ -1578,19 +1579,19 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp createdTimestamp_;
    +    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 3;
          * @return Whether the createdTimestamp field is set.
    @@ -1604,15 +1605,15 @@ public boolean hasCreatedTimestamp() {
          * @return The createdTimestamp.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCreatedTimestamp() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
    +      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -1627,7 +1628,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeDouble(1, value_);
    @@ -1648,15 +1649,15 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeDoubleSize(1, value_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(2, getExemplar());
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(3, getCreatedTimestamp());
           }
           size += getUnknownFields().getSerializedSize();
    @@ -1669,10 +1670,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -1703,7 +1704,7 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasValue()) {
             hash = (37 * hash) + VALUE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getValue()));
           }
           if (hasExemplar()) {
    @@ -1719,75 +1720,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -1796,7 +1797,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -1807,7 +1808,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -1815,34 +1816,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Counter}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.CounterOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
                     .alwaysUseFieldBuilders) {
               getExemplarFieldBuilder();
               getCreatedTimestampFieldBuilder();
    @@ -1867,19 +1868,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -1887,14 +1888,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -1922,44 +1923,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -1981,8 +1982,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -2022,7 +2023,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -2071,9 +2072,9 @@ public Builder clearValue() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar exemplar_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            * @return Whether the exemplar field is set.
    @@ -2085,9 +2086,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -2095,7 +2096,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -2112,7 +2113,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -2125,11 +2126,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -2137,8 +2138,10 @@ public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.c
             } else {
               exemplarBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000002;
    -        onChanged();
    +        if (exemplar_ != null) {
    +          bitField0_ |= 0x00000002;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -2157,7 +2160,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return getExemplarFieldBuilder().getBuilder();
    @@ -2165,23 +2168,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> 
               getExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
    -          exemplarBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder>(
    +          exemplarBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -2190,9 +2193,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return exemplarBuilder_;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp createdTimestamp_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder> createdTimestampBuilder_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> createdTimestampBuilder_;
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            * @return Whether the createdTimestamp field is set.
    @@ -2204,9 +2207,9 @@ public boolean hasCreatedTimestamp() {
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            * @return The createdTimestamp.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCreatedTimestamp() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
             if (createdTimestampBuilder_ == null) {
    -          return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +          return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
             } else {
               return createdTimestampBuilder_.getMessage();
             }
    @@ -2214,7 +2217,7 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCrea
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
    -      public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp value) {
    +      public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -2231,7 +2234,7 @@ public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_proto
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
           public Builder setCreatedTimestamp(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder builderForValue) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder builderForValue) {
             if (createdTimestampBuilder_ == null) {
               createdTimestamp_ = builderForValue.build();
             } else {
    @@ -2244,11 +2247,11 @@ public Builder setCreatedTimestamp(
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
    -      public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp value) {
    +      public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 createdTimestamp_ != null &&
    -            createdTimestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance()) {
    +            createdTimestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance()) {
                 getCreatedTimestampBuilder().mergeFrom(value);
               } else {
                 createdTimestamp_ = value;
    @@ -2256,8 +2259,10 @@ public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_pro
             } else {
               createdTimestampBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000004;
    -        onChanged();
    +        if (createdTimestamp_ != null) {
    +          bitField0_ |= 0x00000004;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -2276,7 +2281,7 @@ public Builder clearCreatedTimestamp() {
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder getCreatedTimestampBuilder() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder getCreatedTimestampBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return getCreatedTimestampFieldBuilder().getBuilder();
    @@ -2284,23 +2289,23 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
             if (createdTimestampBuilder_ != null) {
               return createdTimestampBuilder_.getMessageOrBuilder();
             } else {
               return createdTimestamp_ == null ?
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
             }
           }
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> 
               getCreatedTimestampFieldBuilder() {
             if (createdTimestampBuilder_ == null) {
    -          createdTimestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder>(
    +          createdTimestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder>(
                       getCreatedTimestamp(),
                       getParentForChildren(),
                       isClean());
    @@ -2310,13 +2315,13 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilde
           }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -2325,48 +2330,48 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public Counter parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2374,7 +2379,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface QuantileOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Quantile)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * optional double quantile = 1;
    @@ -2402,12 +2407,12 @@ public interface QuantileOrBuilder extends
        * Protobuf type {@code io.prometheus.client.Quantile}
        */
       public static final class Quantile extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Quantile)
           QuantileOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use Quantile.newBuilder() to construct.
    -    private Quantile(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private Quantile(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private Quantile() {
    @@ -2420,17 +2425,17 @@ protected java.lang.Object newInstance(
           return new Quantile();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder.class);
         }
     
         private int bitField0_;
    @@ -2484,7 +2489,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeDouble(1, quantile_);
    @@ -2502,11 +2507,11 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeDoubleSize(1, quantile_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeDoubleSize(2, value_);
           }
           size += getUnknownFields().getSerializedSize();
    @@ -2519,10 +2524,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile) obj;
     
           if (hasQuantile() != other.hasQuantile()) return false;
           if (hasQuantile()) {
    @@ -2549,12 +2554,12 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasQuantile()) {
             hash = (37 * hash) + QUANTILE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getQuantile()));
           }
           if (hasValue()) {
             hash = (37 * hash) + VALUE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getValue()));
           }
           hash = (29 * hash) + getUnknownFields().hashCode();
    @@ -2562,75 +2567,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -2639,7 +2644,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -2650,7 +2655,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -2658,29 +2663,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Quantile}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.QuantileOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
     
           }
    @@ -2694,19 +2699,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -2714,14 +2719,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -2741,44 +2746,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.getDefaultInstance()) return this;
             if (other.hasQuantile()) {
               setQuantile(other.getQuantile());
             }
    @@ -2797,8 +2802,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -2829,7 +2834,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -2919,13 +2924,13 @@ public Builder clearValue() {
           }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -2934,48 +2939,48 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public Quantile parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2983,7 +2988,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface SummaryOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Summary)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * optional uint64 sample_count = 1;
    @@ -3010,12 +3015,12 @@ public interface SummaryOrBuilder extends
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getQuantileList();
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile getQuantile(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getQuantile(int index);
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    @@ -3023,12 +3028,12 @@ public interface SummaryOrBuilder extends
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getQuantileOrBuilderList();
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder getQuantileOrBuilder(
             int index);
     
         /**
    @@ -3040,22 +3045,22 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          * optional .google.protobuf.Timestamp created_timestamp = 4;
          * @return The createdTimestamp.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCreatedTimestamp();
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp();
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 4;
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getCreatedTimestampOrBuilder();
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder();
       }
       /**
        * Protobuf type {@code io.prometheus.client.Summary}
        */
       public static final class Summary extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Summary)
           SummaryOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use Summary.newBuilder() to construct.
    -    private Summary(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private Summary(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private Summary() {
    @@ -3069,17 +3074,17 @@ protected java.lang.Object newInstance(
           return new Summary();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder.class);
         }
     
         private int bitField0_;
    @@ -3123,19 +3128,19 @@ public double getSampleSum() {
     
         public static final int QUANTILE_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List quantile_;
    +    private java.util.List quantile_;
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public java.util.List getQuantileList() {
    +    public java.util.List getQuantileList() {
           return quantile_;
         }
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getQuantileOrBuilderList() {
           return quantile_;
         }
    @@ -3150,20 +3155,20 @@ public int getQuantileCount() {
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile getQuantile(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getQuantile(int index) {
           return quantile_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder getQuantileOrBuilder(
             int index) {
           return quantile_.get(index);
         }
     
         public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp createdTimestamp_;
    +    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 4;
          * @return Whether the createdTimestamp field is set.
    @@ -3177,15 +3182,15 @@ public boolean hasCreatedTimestamp() {
          * @return The createdTimestamp.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCreatedTimestamp() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
    +      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -3200,7 +3205,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeUInt64(1, sampleCount_);
    @@ -3224,19 +3229,19 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeUInt64Size(1, sampleCount_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeDoubleSize(2, sampleSum_);
           }
           for (int i = 0; i < quantile_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(3, quantile_.get(i));
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(4, getCreatedTimestamp());
           }
           size += getUnknownFields().getSerializedSize();
    @@ -3249,10 +3254,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -3285,12 +3290,12 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasSampleCount()) {
             hash = (37 * hash) + SAMPLE_COUNT_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 getSampleCount());
           }
           if (hasSampleSum()) {
             hash = (37 * hash) + SAMPLE_SUM_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getSampleSum()));
           }
           if (getQuantileCount() > 0) {
    @@ -3306,75 +3311,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -3383,7 +3388,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -3394,7 +3399,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -3402,34 +3407,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Summary}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.SummaryOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
                     .alwaysUseFieldBuilders) {
               getQuantileFieldBuilder();
               getCreatedTimestampFieldBuilder();
    @@ -3457,19 +3462,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -3477,15 +3482,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary result) {
             if (quantileBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0)) {
                 quantile_ = java.util.Collections.unmodifiableList(quantile_);
    @@ -3497,7 +3502,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -3523,44 +3528,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -3586,7 +3591,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   quantile_ = other.quantile_;
                   bitField0_ = (bitField0_ & ~0x00000004);
                   quantileBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
                        getQuantileFieldBuilder() : null;
                 } else {
                   quantileBuilder_.addAllMessages(other.quantile_);
    @@ -3608,8 +3613,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -3633,9 +3638,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.PARSER,
                             extensionRegistry);
                     if (quantileBuilder_ == null) {
                       ensureQuantileIsMutable();
    @@ -3660,7 +3665,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -3749,22 +3754,22 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List quantile_ =
    +      private java.util.List quantile_ =
             java.util.Collections.emptyList();
           private void ensureQuantileIsMutable() {
             if (!((bitField0_ & 0x00000004) != 0)) {
    -          quantile_ = new java.util.ArrayList(quantile_);
    +          quantile_ = new java.util.ArrayList(quantile_);
               bitField0_ |= 0x00000004;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.QuantileOrBuilder> quantileBuilder_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder> quantileBuilder_;
     
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List getQuantileList() {
    +      public java.util.List getQuantileList() {
             if (quantileBuilder_ == null) {
               return java.util.Collections.unmodifiableList(quantile_);
             } else {
    @@ -3784,7 +3789,7 @@ public int getQuantileCount() {
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile getQuantile(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getQuantile(int index) {
             if (quantileBuilder_ == null) {
               return quantile_.get(index);
             } else {
    @@ -3795,7 +3800,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder setQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3812,7 +3817,7 @@ public Builder setQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder setQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.set(index, builderForValue.build());
    @@ -3825,7 +3830,7 @@ public Builder setQuantile(
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile value) {
    +      public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3842,7 +3847,7 @@ public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3859,7 +3864,7 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.add(builderForValue.build());
    @@ -3873,7 +3878,7 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.add(index, builderForValue.build());
    @@ -3887,10 +3892,10 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addAllQuantile(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                   values, quantile_);
               onChanged();
             } else {
    @@ -3927,14 +3932,14 @@ public Builder removeQuantile(int index) {
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder getQuantileBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder getQuantileBuilder(
               int index) {
             return getQuantileFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder getQuantileOrBuilder(
               int index) {
             if (quantileBuilder_ == null) {
               return quantile_.get(index);  } else {
    @@ -3944,7 +3949,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getQuantileOrBuilderList() {
             if (quantileBuilder_ != null) {
               return quantileBuilder_.getMessageOrBuilderList();
    @@ -3955,31 +3960,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder addQuantileBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder addQuantileBuilder() {
             return getQuantileFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder addQuantileBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder addQuantileBuilder(
               int index) {
             return getQuantileFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getQuantileBuilderList() {
             return getQuantileFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.QuantileOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder> 
               getQuantileFieldBuilder() {
             if (quantileBuilder_ == null) {
    -          quantileBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.QuantileOrBuilder>(
    +          quantileBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder>(
                       quantile_,
                       ((bitField0_ & 0x00000004) != 0),
                       getParentForChildren(),
    @@ -3989,9 +3994,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return quantileBuilder_;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp createdTimestamp_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder> createdTimestampBuilder_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> createdTimestampBuilder_;
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            * @return Whether the createdTimestamp field is set.
    @@ -4003,9 +4008,9 @@ public boolean hasCreatedTimestamp() {
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            * @return The createdTimestamp.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCreatedTimestamp() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
             if (createdTimestampBuilder_ == null) {
    -          return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +          return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
             } else {
               return createdTimestampBuilder_.getMessage();
             }
    @@ -4013,7 +4018,7 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCrea
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
    -      public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp value) {
    +      public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -4030,7 +4035,7 @@ public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_proto
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
           public Builder setCreatedTimestamp(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder builderForValue) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder builderForValue) {
             if (createdTimestampBuilder_ == null) {
               createdTimestamp_ = builderForValue.build();
             } else {
    @@ -4043,11 +4048,11 @@ public Builder setCreatedTimestamp(
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
    -      public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp value) {
    +      public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 createdTimestamp_ != null &&
    -            createdTimestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance()) {
    +            createdTimestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance()) {
                 getCreatedTimestampBuilder().mergeFrom(value);
               } else {
                 createdTimestamp_ = value;
    @@ -4055,8 +4060,10 @@ public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_pro
             } else {
               createdTimestampBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000008;
    -        onChanged();
    +        if (createdTimestamp_ != null) {
    +          bitField0_ |= 0x00000008;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -4075,7 +4082,7 @@ public Builder clearCreatedTimestamp() {
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder getCreatedTimestampBuilder() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder getCreatedTimestampBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getCreatedTimestampFieldBuilder().getBuilder();
    @@ -4083,23 +4090,23 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
             if (createdTimestampBuilder_ != null) {
               return createdTimestampBuilder_.getMessageOrBuilder();
             } else {
               return createdTimestamp_ == null ?
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
             }
           }
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> 
               getCreatedTimestampFieldBuilder() {
             if (createdTimestampBuilder_ == null) {
    -          createdTimestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder>(
    +          createdTimestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder>(
                       getCreatedTimestamp(),
                       getParentForChildren(),
                       isClean());
    @@ -4109,13 +4116,13 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilde
           }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -4124,48 +4131,48 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public Summary parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -4173,7 +4180,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface UntypedOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Untyped)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * optional double value = 1;
    @@ -4190,12 +4197,12 @@ public interface UntypedOrBuilder extends
        * Protobuf type {@code io.prometheus.client.Untyped}
        */
       public static final class Untyped extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Untyped)
           UntypedOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use Untyped.newBuilder() to construct.
    -    private Untyped(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private Untyped(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private Untyped() {
    @@ -4208,17 +4215,17 @@ protected java.lang.Object newInstance(
           return new Untyped();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder.class);
         }
     
         private int bitField0_;
    @@ -4253,7 +4260,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeDouble(1, value_);
    @@ -4268,7 +4275,7 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeDoubleSize(1, value_);
           }
           size += getUnknownFields().getSerializedSize();
    @@ -4281,10 +4288,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -4305,7 +4312,7 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasValue()) {
             hash = (37 * hash) + VALUE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getValue()));
           }
           hash = (29 * hash) + getUnknownFields().hashCode();
    @@ -4313,75 +4320,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -4390,7 +4397,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -4401,7 +4408,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -4409,29 +4416,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Untyped}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.UntypedOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
     
           }
    @@ -4444,19 +4451,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -4464,14 +4471,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -4487,44 +4494,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -4540,8 +4547,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -4567,7 +4574,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -4617,13 +4624,13 @@ public Builder clearValue() {
           }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -4632,48 +4639,48 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public Untyped parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -4681,7 +4688,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface HistogramOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Histogram)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * optional uint64 sample_count = 1;
    @@ -4731,7 +4738,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketList();
         /**
          * 
    @@ -4740,7 +4747,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket getBucket(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getBucket(int index);
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -4756,7 +4763,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketOrBuilderList();
         /**
          * 
    @@ -4765,7 +4772,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index);
     
         /**
    @@ -4777,11 +4784,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          * optional .google.protobuf.Timestamp created_timestamp = 15;
          * @return The createdTimestamp.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCreatedTimestamp();
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp();
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 15;
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getCreatedTimestampOrBuilder();
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder();
     
         /**
          * 
    @@ -4874,7 +4881,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanList();
         /**
          * 
    @@ -4883,7 +4890,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan getNegativeSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getNegativeSpan(int index);
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -4899,7 +4906,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanOrBuilderList();
         /**
          * 
    @@ -4908,7 +4915,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index);
     
         /**
    @@ -4985,7 +4992,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanList();
         /**
          * 
    @@ -4997,7 +5004,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan getPositiveSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getPositiveSpan(int index);
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5019,7 +5026,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanOrBuilderList();
         /**
          * 
    @@ -5031,7 +5038,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index);
     
         /**
    @@ -5097,17 +5104,61 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          * @return The positiveCount at the given index.
          */
         double getPositiveCount(int index);
    +
    +    /**
    +     * 
    +     * Only used for native histograms. These exemplars MUST have a timestamp.
    +     * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + java.util.List + getExemplarsList(); + /** + *
    +     * Only used for native histograms. These exemplars MUST have a timestamp.
    +     * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplars(int index); + /** + *
    +     * Only used for native histograms. These exemplars MUST have a timestamp.
    +     * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + int getExemplarsCount(); + /** + *
    +     * Only used for native histograms. These exemplars MUST have a timestamp.
    +     * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + java.util.List + getExemplarsOrBuilderList(); + /** + *
    +     * Only used for native histograms. These exemplars MUST have a timestamp.
    +     * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder( + int index); } /** * Protobuf type {@code io.prometheus.client.Histogram} */ public static final class Histogram extends - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:io.prometheus.client.Histogram) HistogramOrBuilder { private static final long serialVersionUID = 0L; // Use Histogram.newBuilder() to construct. - private Histogram(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) { + private Histogram(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) { super(builder); } private Histogram() { @@ -5118,6 +5169,7 @@ private Histogram() { positiveSpan_ = java.util.Collections.emptyList(); positiveDelta_ = emptyLongList(); positiveCount_ = emptyDoubleList(); + exemplars_ = java.util.Collections.emptyList(); } @java.lang.Override @@ -5127,17 +5179,17 @@ protected java.lang.Object newInstance( return new Histogram(); } - public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor + public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Histogram_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor; } @java.lang.Override - protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable + protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder.class); } private int bitField0_; @@ -5208,7 +5260,7 @@ public double getSampleSum() { public static final int BUCKET_FIELD_NUMBER = 3; @SuppressWarnings("serial") - private java.util.List bucket_; + private java.util.List bucket_; /** *
          * Buckets for the conventional histogram.
    @@ -5217,7 +5269,7 @@ public double getSampleSum() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List getBucketList() {
    +    public java.util.List getBucketList() {
           return bucket_;
         }
         /**
    @@ -5228,7 +5280,7 @@ public java.util.Listrepeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getBucketOrBuilderList() {
           return bucket_;
         }
    @@ -5251,7 +5303,7 @@ public int getBucketCount() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket getBucket(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getBucket(int index) {
           return bucket_.get(index);
         }
         /**
    @@ -5262,13 +5314,13 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index) {
           return bucket_.get(index);
         }
     
         public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 15;
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp createdTimestamp_;
    +    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 15;
          * @return Whether the createdTimestamp field is set.
    @@ -5282,15 +5334,15 @@ public boolean hasCreatedTimestamp() {
          * @return The createdTimestamp.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCreatedTimestamp() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
    +      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 15;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
     
         public static final int SCHEMA_FIELD_NUMBER = 5;
    @@ -5411,7 +5463,7 @@ public double getZeroCountFloat() {
     
         public static final int NEGATIVE_SPAN_FIELD_NUMBER = 9;
         @SuppressWarnings("serial")
    -    private java.util.List negativeSpan_;
    +    private java.util.List negativeSpan_;
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -5420,7 +5472,7 @@ public double getZeroCountFloat() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List getNegativeSpanList() {
    +    public java.util.List getNegativeSpanList() {
           return negativeSpan_;
         }
         /**
    @@ -5431,7 +5483,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getNegativeSpanOrBuilderList() {
           return negativeSpan_;
         }
    @@ -5454,7 +5506,7 @@ public int getNegativeSpanCount() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan getNegativeSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getNegativeSpan(int index) {
           return negativeSpan_.get(index);
         }
         /**
    @@ -5465,14 +5517,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index) {
           return negativeSpan_.get(index);
         }
     
         public static final int NEGATIVE_DELTA_FIELD_NUMBER = 10;
         @SuppressWarnings("serial")
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.LongList negativeDelta_;
    +    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.LongList negativeDelta_ =
    +        emptyLongList();
         /**
          * 
          * Use either "negative_delta" or "negative_count", the former for
    @@ -5518,7 +5571,8 @@ public long getNegativeDelta(int index) {
     
         public static final int NEGATIVE_COUNT_FIELD_NUMBER = 11;
         @SuppressWarnings("serial")
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.DoubleList negativeCount_;
    +    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.DoubleList negativeCount_ =
    +        emptyDoubleList();
         /**
          * 
          * Absolute count of each bucket.
    @@ -5558,7 +5612,7 @@ public double getNegativeCount(int index) {
     
         public static final int POSITIVE_SPAN_FIELD_NUMBER = 12;
         @SuppressWarnings("serial")
    -    private java.util.List positiveSpan_;
    +    private java.util.List positiveSpan_;
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5570,7 +5624,7 @@ public double getNegativeCount(int index) {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List getPositiveSpanList() {
    +    public java.util.List getPositiveSpanList() {
           return positiveSpan_;
         }
         /**
    @@ -5584,7 +5638,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getPositiveSpanOrBuilderList() {
           return positiveSpan_;
         }
    @@ -5613,7 +5667,7 @@ public int getPositiveSpanCount() {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan getPositiveSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getPositiveSpan(int index) {
           return positiveSpan_.get(index);
         }
         /**
    @@ -5627,14 +5681,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index) {
           return positiveSpan_.get(index);
         }
     
         public static final int POSITIVE_DELTA_FIELD_NUMBER = 13;
         @SuppressWarnings("serial")
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.LongList positiveDelta_;
    +    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.LongList positiveDelta_ =
    +        emptyLongList();
         /**
          * 
          * Use either "positive_delta" or "positive_count", the former for
    @@ -5680,7 +5735,8 @@ public long getPositiveDelta(int index) {
     
         public static final int POSITIVE_COUNT_FIELD_NUMBER = 14;
         @SuppressWarnings("serial")
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.DoubleList positiveCount_;
    +    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.DoubleList positiveCount_ =
    +        emptyDoubleList();
         /**
          * 
          * Absolute count of each bucket.
    @@ -5718,6 +5774,67 @@ public double getPositiveCount(int index) {
           return positiveCount_.getDouble(index);
         }
     
    +    public static final int EXEMPLARS_FIELD_NUMBER = 16;
    +    @SuppressWarnings("serial")
    +    private java.util.List exemplars_;
    +    /**
    +     * 
    +     * Only used for native histograms. These exemplars MUST have a timestamp.
    +     * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + @java.lang.Override + public java.util.List getExemplarsList() { + return exemplars_; + } + /** + *
    +     * Only used for native histograms. These exemplars MUST have a timestamp.
    +     * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + @java.lang.Override + public java.util.List + getExemplarsOrBuilderList() { + return exemplars_; + } + /** + *
    +     * Only used for native histograms. These exemplars MUST have a timestamp.
    +     * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + @java.lang.Override + public int getExemplarsCount() { + return exemplars_.size(); + } + /** + *
    +     * Only used for native histograms. These exemplars MUST have a timestamp.
    +     * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + @java.lang.Override + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplars(int index) { + return exemplars_.get(index); + } + /** + *
    +     * Only used for native histograms. These exemplars MUST have a timestamp.
    +     * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + @java.lang.Override + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder( + int index) { + return exemplars_.get(index); + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -5730,7 +5847,7 @@ public final boolean isInitialized() { } @java.lang.Override - public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output) + public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output) throws java.io.IOException { if (((bitField0_ & 0x00000001) != 0)) { output.writeUInt64(1, sampleCount_); @@ -5777,6 +5894,9 @@ public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Code if (((bitField0_ & 0x00000008) != 0)) { output.writeMessage(15, getCreatedTimestamp()); } + for (int i = 0; i < exemplars_.size(); i++) { + output.writeMessage(16, exemplars_.get(i)); + } getUnknownFields().writeTo(output); } @@ -5787,45 +5907,45 @@ public int getSerializedSize() { size = 0; if (((bitField0_ & 0x00000001) != 0)) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeUInt64Size(1, sampleCount_); } if (((bitField0_ & 0x00000004) != 0)) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeDoubleSize(2, sampleSum_); } for (int i = 0; i < bucket_.size(); i++) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeMessageSize(3, bucket_.get(i)); } if (((bitField0_ & 0x00000002) != 0)) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeDoubleSize(4, sampleCountFloat_); } if (((bitField0_ & 0x00000010) != 0)) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeSInt32Size(5, schema_); } if (((bitField0_ & 0x00000020) != 0)) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeDoubleSize(6, zeroThreshold_); } if (((bitField0_ & 0x00000040) != 0)) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeUInt64Size(7, zeroCount_); } if (((bitField0_ & 0x00000080) != 0)) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeDoubleSize(8, zeroCountFloat_); } for (int i = 0; i < negativeSpan_.size(); i++) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeMessageSize(9, negativeSpan_.get(i)); } { int dataSize = 0; for (int i = 0; i < negativeDelta_.size(); i++) { - dataSize += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + dataSize += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeSInt64SizeNoTag(negativeDelta_.getLong(i)); } size += dataSize; @@ -5838,13 +5958,13 @@ public int getSerializedSize() { size += 1 * getNegativeCountList().size(); } for (int i = 0; i < positiveSpan_.size(); i++) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeMessageSize(12, positiveSpan_.get(i)); } { int dataSize = 0; for (int i = 0; i < positiveDelta_.size(); i++) { - dataSize += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + dataSize += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeSInt64SizeNoTag(positiveDelta_.getLong(i)); } size += dataSize; @@ -5857,9 +5977,13 @@ public int getSerializedSize() { size += 1 * getPositiveCountList().size(); } if (((bitField0_ & 0x00000008) != 0)) { - size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream .computeMessageSize(15, getCreatedTimestamp()); } + for (int i = 0; i < exemplars_.size(); i++) { + size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream + .computeMessageSize(16, exemplars_.get(i)); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -5870,10 +5994,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram) obj; if (hasSampleCount() != other.hasSampleCount()) return false; if (hasSampleCount()) { @@ -5933,6 +6057,8 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getPositiveDeltaList())) return false; if (!getPositiveCountList() .equals(other.getPositiveCountList())) return false; + if (!getExemplarsList() + .equals(other.getExemplarsList())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -5946,17 +6072,17 @@ public int hashCode() { hash = (19 * hash) + getDescriptor().hashCode(); if (hasSampleCount()) { hash = (37 * hash) + SAMPLE_COUNT_FIELD_NUMBER; - hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong( + hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong( getSampleCount()); } if (hasSampleCountFloat()) { hash = (37 * hash) + SAMPLE_COUNT_FLOAT_FIELD_NUMBER; - hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong( + hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong( java.lang.Double.doubleToLongBits(getSampleCountFloat())); } if (hasSampleSum()) { hash = (37 * hash) + SAMPLE_SUM_FIELD_NUMBER; - hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong( + hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong( java.lang.Double.doubleToLongBits(getSampleSum())); } if (getBucketCount() > 0) { @@ -5973,17 +6099,17 @@ public int hashCode() { } if (hasZeroThreshold()) { hash = (37 * hash) + ZERO_THRESHOLD_FIELD_NUMBER; - hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong( + hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong( java.lang.Double.doubleToLongBits(getZeroThreshold())); } if (hasZeroCount()) { hash = (37 * hash) + ZERO_COUNT_FIELD_NUMBER; - hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong( + hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong( getZeroCount()); } if (hasZeroCountFloat()) { hash = (37 * hash) + ZERO_COUNT_FLOAT_FIELD_NUMBER; - hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong( + hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong( java.lang.Double.doubleToLongBits(getZeroCountFloat())); } if (getNegativeSpanCount() > 0) { @@ -6010,80 +6136,84 @@ public int hashCode() { hash = (37 * hash) + POSITIVE_COUNT_FIELD_NUMBER; hash = (53 * hash) + getPositiveCountList().hashCode(); } + if (getExemplarsCount() > 0) { + hash = (37 * hash) + EXEMPLARS_FIELD_NUMBER; + hash = (53 * hash) + getExemplarsList().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom( java.nio.ByteBuffer data) - throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException { + throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom( java.nio.ByteBuffer data, - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry) - throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException { + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry) + throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseFrom( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data) - throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom( + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data) + throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseFrom( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data, - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry) - throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom( + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data, + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry) + throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseFrom(byte[] data) - throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(byte[] data) + throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom( byte[] data, - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry) - throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException { + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry) + throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(java.io.InputStream input) throws java.io.IOException { - return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 + return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom( java.io.InputStream input, - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 + return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 + return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseDelimitedFrom( java.io.InputStream input, - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 + return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseFrom( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom( + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input) throws java.io.IOException { - return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 + return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram parseFrom( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input, - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom( + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input, + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 + return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 .parseWithIOException(PARSER, input, extensionRegistry); } @@ -6092,7 +6222,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -6103,7 +6233,7 @@ public Builder toBuilder() { @java.lang.Override protected Builder newBuilderForType( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) { + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } @@ -6111,39 +6241,40 @@ protected Builder newBuilderForType( * Protobuf type {@code io.prometheus.client.Histogram} */ public static final class Builder extends - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.HistogramOrBuilder { - public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder { + public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Histogram_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor; } @java.lang.Override - protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable + protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.newBuilder() private Builder() { maybeForceBuilderInitialization(); } private Builder( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) { + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) { super(parent); maybeForceBuilderInitialization(); } private void maybeForceBuilderInitialization() { - if (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 + if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 .alwaysUseFieldBuilders) { getBucketFieldBuilder(); getCreatedTimestampFieldBuilder(); getNegativeSpanFieldBuilder(); getPositiveSpanFieldBuilder(); + getExemplarsFieldBuilder(); } } @java.lang.Override @@ -6187,23 +6318,30 @@ public Builder clear() { bitField0_ = (bitField0_ & ~0x00001000); positiveDelta_ = emptyLongList(); positiveCount_ = emptyDoubleList(); + if (exemplarsBuilder_ == null) { + exemplars_ = java.util.Collections.emptyList(); + } else { + exemplars_ = null; + exemplarsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00008000); return this; } @java.lang.Override - public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor + public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Histogram_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -6211,15 +6349,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram(this); buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram result) { + private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram result) { if (bucketBuilder_ == null) { if (((bitField0_ & 0x00000008) != 0)) { bucket_ = java.util.Collections.unmodifiableList(bucket_); @@ -6238,16 +6376,6 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats. } else { result.negativeSpan_ = negativeSpanBuilder_.build(); } - if (((bitField0_ & 0x00000400) != 0)) { - negativeDelta_.makeImmutable(); - bitField0_ = (bitField0_ & ~0x00000400); - } - result.negativeDelta_ = negativeDelta_; - if (((bitField0_ & 0x00000800) != 0)) { - negativeCount_.makeImmutable(); - bitField0_ = (bitField0_ & ~0x00000800); - } - result.negativeCount_ = negativeCount_; if (positiveSpanBuilder_ == null) { if (((bitField0_ & 0x00001000) != 0)) { positiveSpan_ = java.util.Collections.unmodifiableList(positiveSpan_); @@ -6257,19 +6385,18 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats. } else { result.positiveSpan_ = positiveSpanBuilder_.build(); } - if (((bitField0_ & 0x00002000) != 0)) { - positiveDelta_.makeImmutable(); - bitField0_ = (bitField0_ & ~0x00002000); - } - result.positiveDelta_ = positiveDelta_; - if (((bitField0_ & 0x00004000) != 0)) { - positiveCount_.makeImmutable(); - bitField0_ = (bitField0_ & ~0x00004000); + if (exemplarsBuilder_ == null) { + if (((bitField0_ & 0x00008000) != 0)) { + exemplars_ = java.util.Collections.unmodifiableList(exemplars_); + bitField0_ = (bitField0_ & ~0x00008000); + } + result.exemplars_ = exemplars_; + } else { + result.exemplars_ = exemplarsBuilder_.build(); } - result.positiveCount_ = positiveCount_; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -6306,6 +6433,22 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com result.zeroCountFloat_ = zeroCountFloat_; to_bitField0_ |= 0x00000080; } + if (((from_bitField0_ & 0x00000400) != 0)) { + negativeDelta_.makeImmutable(); + result.negativeDelta_ = negativeDelta_; + } + if (((from_bitField0_ & 0x00000800) != 0)) { + negativeCount_.makeImmutable(); + result.negativeCount_ = negativeCount_; + } + if (((from_bitField0_ & 0x00002000) != 0)) { + positiveDelta_.makeImmutable(); + result.positiveDelta_ = positiveDelta_; + } + if (((from_bitField0_ & 0x00004000) != 0)) { + positiveCount_.makeImmutable(); + result.positiveCount_ = positiveCount_; + } result.bitField0_ |= to_bitField0_; } @@ -6315,44 +6458,44 @@ public Builder clone() { } @java.lang.Override public Builder setField( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field, + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field, java.lang.Object value) { return super.setField(field, value); } @java.lang.Override public Builder clearField( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) { + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) { return super.clearField(field); } @java.lang.Override public Builder clearOneof( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) { + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) { return super.clearOneof(oneof); } @java.lang.Override public Builder setRepeatedField( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field, + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { return super.setRepeatedField(field, index, value); } @java.lang.Override public Builder addRepeatedField( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field, + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field, java.lang.Object value) { return super.addRepeatedField(field, value); } @java.lang.Override - public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram)other); + public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) { + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance()) return this; if (other.hasSampleCount()) { setSampleCount(other.getSampleCount()); } @@ -6381,7 +6524,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g bucket_ = other.bucket_; bitField0_ = (bitField0_ & ~0x00000008); bucketBuilder_ = - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.alwaysUseFieldBuilders ? + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ? getBucketFieldBuilder() : null; } else { bucketBuilder_.addAllMessages(other.bucket_); @@ -6422,7 +6565,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g negativeSpan_ = other.negativeSpan_; bitField0_ = (bitField0_ & ~0x00000200); negativeSpanBuilder_ = - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.alwaysUseFieldBuilders ? + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ? getNegativeSpanFieldBuilder() : null; } else { negativeSpanBuilder_.addAllMessages(other.negativeSpan_); @@ -6432,7 +6575,8 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g if (!other.negativeDelta_.isEmpty()) { if (negativeDelta_.isEmpty()) { negativeDelta_ = other.negativeDelta_; - bitField0_ = (bitField0_ & ~0x00000400); + negativeDelta_.makeImmutable(); + bitField0_ |= 0x00000400; } else { ensureNegativeDeltaIsMutable(); negativeDelta_.addAll(other.negativeDelta_); @@ -6442,7 +6586,8 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g if (!other.negativeCount_.isEmpty()) { if (negativeCount_.isEmpty()) { negativeCount_ = other.negativeCount_; - bitField0_ = (bitField0_ & ~0x00000800); + negativeCount_.makeImmutable(); + bitField0_ |= 0x00000800; } else { ensureNegativeCountIsMutable(); negativeCount_.addAll(other.negativeCount_); @@ -6468,7 +6613,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g positiveSpan_ = other.positiveSpan_; bitField0_ = (bitField0_ & ~0x00001000); positiveSpanBuilder_ = - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.alwaysUseFieldBuilders ? + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ? getPositiveSpanFieldBuilder() : null; } else { positiveSpanBuilder_.addAllMessages(other.positiveSpan_); @@ -6478,7 +6623,8 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g if (!other.positiveDelta_.isEmpty()) { if (positiveDelta_.isEmpty()) { positiveDelta_ = other.positiveDelta_; - bitField0_ = (bitField0_ & ~0x00002000); + positiveDelta_.makeImmutable(); + bitField0_ |= 0x00002000; } else { ensurePositiveDeltaIsMutable(); positiveDelta_.addAll(other.positiveDelta_); @@ -6488,13 +6634,40 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g if (!other.positiveCount_.isEmpty()) { if (positiveCount_.isEmpty()) { positiveCount_ = other.positiveCount_; - bitField0_ = (bitField0_ & ~0x00004000); + positiveCount_.makeImmutable(); + bitField0_ |= 0x00004000; } else { ensurePositiveCountIsMutable(); positiveCount_.addAll(other.positiveCount_); } onChanged(); } + if (exemplarsBuilder_ == null) { + if (!other.exemplars_.isEmpty()) { + if (exemplars_.isEmpty()) { + exemplars_ = other.exemplars_; + bitField0_ = (bitField0_ & ~0x00008000); + } else { + ensureExemplarsIsMutable(); + exemplars_.addAll(other.exemplars_); + } + onChanged(); + } + } else { + if (!other.exemplars_.isEmpty()) { + if (exemplarsBuilder_.isEmpty()) { + exemplarsBuilder_.dispose(); + exemplarsBuilder_ = null; + exemplars_ = other.exemplars_; + bitField0_ = (bitField0_ & ~0x00008000); + exemplarsBuilder_ = + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ? + getExemplarsFieldBuilder() : null; + } else { + exemplarsBuilder_.addAllMessages(other.exemplars_); + } + } + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -6507,8 +6680,8 @@ public final boolean isInitialized() { @java.lang.Override public Builder mergeFrom( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input, - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input, + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { if (extensionRegistry == null) { throw new java.lang.NullPointerException(); @@ -6532,9 +6705,9 @@ public Builder mergeFrom( break; } // case 17 case 26: { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket m = + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket m = input.readMessage( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.PARSER, + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.PARSER, extensionRegistry); if (bucketBuilder_ == null) { ensureBucketIsMutable(); @@ -6570,9 +6743,9 @@ public Builder mergeFrom( break; } // case 65 case 74: { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan m = + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan m = input.readMessage( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.PARSER, + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.PARSER, extensionRegistry); if (negativeSpanBuilder_ == null) { ensureNegativeSpanIsMutable(); @@ -6607,7 +6780,8 @@ public Builder mergeFrom( case 90: { int length = input.readRawVarint32(); int limit = input.pushLimit(length); - ensureNegativeCountIsMutable(); + int alloc = length > 4096 ? 4096 : length; + ensureNegativeCountIsMutable(alloc / 8); while (input.getBytesUntilLimit() > 0) { negativeCount_.addDouble(input.readDouble()); } @@ -6615,9 +6789,9 @@ public Builder mergeFrom( break; } // case 90 case 98: { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan m = + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan m = input.readMessage( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.PARSER, + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.PARSER, extensionRegistry); if (positiveSpanBuilder_ == null) { ensurePositiveSpanIsMutable(); @@ -6652,7 +6826,8 @@ public Builder mergeFrom( case 114: { int length = input.readRawVarint32(); int limit = input.pushLimit(length); - ensurePositiveCountIsMutable(); + int alloc = length > 4096 ? 4096 : length; + ensurePositiveCountIsMutable(alloc / 8); while (input.getBytesUntilLimit() > 0) { positiveCount_.addDouble(input.readDouble()); } @@ -6666,6 +6841,19 @@ public Builder mergeFrom( bitField0_ |= 0x00000010; break; } // case 122 + case 130: { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar m = + input.readMessage( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.PARSER, + extensionRegistry); + if (exemplarsBuilder_ == null) { + ensureExemplarsIsMutable(); + exemplars_.add(m); + } else { + exemplarsBuilder_.addMessage(m); + } + break; + } // case 130 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -6674,7 +6862,7 @@ public Builder mergeFrom( } // default: } // switch (tag) } // while (!done) - } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) { + } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) { throw e.unwrapIOException(); } finally { onChanged(); @@ -6819,17 +7007,17 @@ public Builder clearSampleSum() { return this; } - private java.util.List bucket_ = + private java.util.List bucket_ = java.util.Collections.emptyList(); private void ensureBucketIsMutable() { if (!((bitField0_ & 0x00000008) != 0)) { - bucket_ = new java.util.ArrayList(bucket_); + bucket_ = new java.util.ArrayList(bucket_); bitField0_ |= 0x00000008; } } - private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketOrBuilder> bucketBuilder_; + private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3< + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder> bucketBuilder_; /** *
    @@ -6838,7 +7026,7 @@ private void ensureBucketIsMutable() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List getBucketList() {
    +      public java.util.List getBucketList() {
             if (bucketBuilder_ == null) {
               return java.util.Collections.unmodifiableList(bucket_);
             } else {
    @@ -6866,7 +7054,7 @@ public int getBucketCount() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket getBucket(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getBucket(int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);
             } else {
    @@ -6881,7 +7069,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6902,7 +7090,7 @@ public Builder setBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.set(index, builderForValue.build());
    @@ -6919,7 +7107,7 @@ public Builder setBucket(
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket value) {
    +      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6940,7 +7128,7 @@ public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6961,7 +7149,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(builderForValue.build());
    @@ -6979,7 +7167,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(index, builderForValue.build());
    @@ -6997,10 +7185,10 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addAllBucket(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                   values, bucket_);
               onChanged();
             } else {
    @@ -7049,7 +7237,7 @@ public Builder removeBucket(int index) {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder getBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder getBucketBuilder(
               int index) {
             return getBucketFieldBuilder().getBuilder(index);
           }
    @@ -7060,7 +7248,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketOrBuilder getBucketOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder getBucketOrBuilder(
               int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);  } else {
    @@ -7074,7 +7262,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketOrBuilderList() {
             if (bucketBuilder_ != null) {
               return bucketBuilder_.getMessageOrBuilderList();
    @@ -7089,9 +7277,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder addBucketBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder addBucketBuilder() {
             return getBucketFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7100,10 +7288,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder addBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder addBucketBuilder(
               int index) {
             return getBucketFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7112,16 +7300,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketBuilderList() {
             return getBucketFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder> 
               getBucketFieldBuilder() {
             if (bucketBuilder_ == null) {
    -          bucketBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketOrBuilder>(
    +          bucketBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder>(
                       bucket_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -7131,9 +7319,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return bucketBuilder_;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp createdTimestamp_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder> createdTimestampBuilder_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> createdTimestampBuilder_;
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            * @return Whether the createdTimestamp field is set.
    @@ -7145,9 +7333,9 @@ public boolean hasCreatedTimestamp() {
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            * @return The createdTimestamp.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCreatedTimestamp() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
             if (createdTimestampBuilder_ == null) {
    -          return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +          return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
             } else {
               return createdTimestampBuilder_.getMessage();
             }
    @@ -7155,7 +7343,7 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getCrea
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
    -      public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp value) {
    +      public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7172,7 +7360,7 @@ public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_proto
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
           public Builder setCreatedTimestamp(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder builderForValue) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder builderForValue) {
             if (createdTimestampBuilder_ == null) {
               createdTimestamp_ = builderForValue.build();
             } else {
    @@ -7185,11 +7373,11 @@ public Builder setCreatedTimestamp(
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
    -      public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp value) {
    +      public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 createdTimestamp_ != null &&
    -            createdTimestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance()) {
    +            createdTimestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance()) {
                 getCreatedTimestampBuilder().mergeFrom(value);
               } else {
                 createdTimestamp_ = value;
    @@ -7197,8 +7385,10 @@ public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_pro
             } else {
               createdTimestampBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000010;
    -        onChanged();
    +        if (createdTimestamp_ != null) {
    +          bitField0_ |= 0x00000010;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -7217,7 +7407,7 @@ public Builder clearCreatedTimestamp() {
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder getCreatedTimestampBuilder() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder getCreatedTimestampBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
             return getCreatedTimestampFieldBuilder().getBuilder();
    @@ -7225,23 +7415,23 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
             if (createdTimestampBuilder_ != null) {
               return createdTimestampBuilder_.getMessageOrBuilder();
             } else {
               return createdTimestamp_ == null ?
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : createdTimestamp_;
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
             }
           }
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> 
               getCreatedTimestampFieldBuilder() {
             if (createdTimestampBuilder_ == null) {
    -          createdTimestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder>(
    +          createdTimestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder>(
                       getCreatedTimestamp(),
                       getParentForChildren(),
                       isClean());
    @@ -7490,17 +7680,17 @@ public Builder clearZeroCountFloat() {
             return this;
           }
     
    -      private java.util.List negativeSpan_ =
    +      private java.util.List negativeSpan_ =
             java.util.Collections.emptyList();
           private void ensureNegativeSpanIsMutable() {
             if (!((bitField0_ & 0x00000200) != 0)) {
    -          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
    +          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
               bitField0_ |= 0x00000200;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
     
           /**
            * 
    @@ -7509,7 +7699,7 @@ private void ensureNegativeSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List getNegativeSpanList() {
    +      public java.util.List getNegativeSpanList() {
             if (negativeSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(negativeSpan_);
             } else {
    @@ -7537,7 +7727,7 @@ public int getNegativeSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan getNegativeSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getNegativeSpan(int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);
             } else {
    @@ -7552,7 +7742,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7573,7 +7763,7 @@ public Builder setNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.set(index, builderForValue.build());
    @@ -7590,7 +7780,7 @@ public Builder setNegativeSpan(
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan value) {
    +      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7611,7 +7801,7 @@ public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7632,7 +7822,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(builderForValue.build());
    @@ -7650,7 +7840,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(index, builderForValue.build());
    @@ -7668,10 +7858,10 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addAllNegativeSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                   values, negativeSpan_);
               onChanged();
             } else {
    @@ -7720,7 +7910,7 @@ public Builder removeNegativeSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
               int index) {
             return getNegativeSpanFieldBuilder().getBuilder(index);
           }
    @@ -7731,7 +7921,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
               int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);  } else {
    @@ -7745,7 +7935,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanOrBuilderList() {
             if (negativeSpanBuilder_ != null) {
               return negativeSpanBuilder_.getMessageOrBuilderList();
    @@ -7760,9 +7950,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
             return getNegativeSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7771,10 +7961,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
               int index) {
             return getNegativeSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7783,16 +7973,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanBuilderList() {
             return getNegativeSpanFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder> 
               getNegativeSpanFieldBuilder() {
             if (negativeSpanBuilder_ == null) {
    -          negativeSpanBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder>(
    +          negativeSpanBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder>(
                       negativeSpan_,
                       ((bitField0_ & 0x00000200) != 0),
                       getParentForChildren(),
    @@ -7802,12 +7992,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return negativeSpanBuilder_;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.LongList negativeDelta_ = emptyLongList();
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.LongList negativeDelta_ = emptyLongList();
           private void ensureNegativeDeltaIsMutable() {
    -        if (!((bitField0_ & 0x00000400) != 0)) {
    -          negativeDelta_ = mutableCopy(negativeDelta_);
    -          bitField0_ |= 0x00000400;
    +        if (!negativeDelta_.isModifiable()) {
    +          negativeDelta_ = makeMutableCopy(negativeDelta_);
             }
    +        bitField0_ |= 0x00000400;
           }
           /**
            * 
    @@ -7821,8 +8011,8 @@ private void ensureNegativeDeltaIsMutable() {
            */
           public java.util.List
               getNegativeDeltaList() {
    -        return ((bitField0_ & 0x00000400) != 0) ?
    -                 java.util.Collections.unmodifiableList(negativeDelta_) : negativeDelta_;
    +        negativeDelta_.makeImmutable();
    +        return negativeDelta_;
           }
           /**
            * 
    @@ -7868,6 +8058,7 @@ public Builder setNegativeDelta(
     
             ensureNegativeDeltaIsMutable();
             negativeDelta_.setLong(index, value);
    +        bitField0_ |= 0x00000400;
             onChanged();
             return this;
           }
    @@ -7886,6 +8077,7 @@ public Builder addNegativeDelta(long value) {
     
             ensureNegativeDeltaIsMutable();
             negativeDelta_.addLong(value);
    +        bitField0_ |= 0x00000400;
             onChanged();
             return this;
           }
    @@ -7903,8 +8095,9 @@ public Builder addNegativeDelta(long value) {
           public Builder addAllNegativeDelta(
               java.lang.Iterable values) {
             ensureNegativeDeltaIsMutable();
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                 values, negativeDelta_);
    +        bitField0_ |= 0x00000400;
             onChanged();
             return this;
           }
    @@ -7925,12 +8118,18 @@ public Builder clearNegativeDelta() {
             return this;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.DoubleList negativeCount_ = emptyDoubleList();
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.DoubleList negativeCount_ = emptyDoubleList();
           private void ensureNegativeCountIsMutable() {
    -        if (!((bitField0_ & 0x00000800) != 0)) {
    -          negativeCount_ = mutableCopy(negativeCount_);
    -          bitField0_ |= 0x00000800;
    +        if (!negativeCount_.isModifiable()) {
    +          negativeCount_ = makeMutableCopy(negativeCount_);
             }
    +        bitField0_ |= 0x00000800;
    +      }
    +      private void ensureNegativeCountIsMutable(int capacity) {
    +        if (!negativeCount_.isModifiable()) {
    +          negativeCount_ = makeMutableCopy(negativeCount_, capacity);
    +        }
    +        bitField0_ |= 0x00000800;
           }
           /**
            * 
    @@ -7942,8 +8141,8 @@ private void ensureNegativeCountIsMutable() {
            */
           public java.util.List
               getNegativeCountList() {
    -        return ((bitField0_ & 0x00000800) != 0) ?
    -                 java.util.Collections.unmodifiableList(negativeCount_) : negativeCount_;
    +        negativeCount_.makeImmutable();
    +        return negativeCount_;
           }
           /**
            * 
    @@ -7983,6 +8182,7 @@ public Builder setNegativeCount(
     
             ensureNegativeCountIsMutable();
             negativeCount_.setDouble(index, value);
    +        bitField0_ |= 0x00000800;
             onChanged();
             return this;
           }
    @@ -7999,6 +8199,7 @@ public Builder addNegativeCount(double value) {
     
             ensureNegativeCountIsMutable();
             negativeCount_.addDouble(value);
    +        bitField0_ |= 0x00000800;
             onChanged();
             return this;
           }
    @@ -8014,8 +8215,9 @@ public Builder addNegativeCount(double value) {
           public Builder addAllNegativeCount(
               java.lang.Iterable values) {
             ensureNegativeCountIsMutable();
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                 values, negativeCount_);
    +        bitField0_ |= 0x00000800;
             onChanged();
             return this;
           }
    @@ -8034,17 +8236,17 @@ public Builder clearNegativeCount() {
             return this;
           }
     
    -      private java.util.List positiveSpan_ =
    +      private java.util.List positiveSpan_ =
             java.util.Collections.emptyList();
           private void ensurePositiveSpanIsMutable() {
             if (!((bitField0_ & 0x00001000) != 0)) {
    -          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
    +          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
               bitField0_ |= 0x00001000;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
     
           /**
            * 
    @@ -8056,7 +8258,7 @@ private void ensurePositiveSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List getPositiveSpanList() {
    +      public java.util.List getPositiveSpanList() {
             if (positiveSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(positiveSpan_);
             } else {
    @@ -8090,7 +8292,7 @@ public int getPositiveSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan getPositiveSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getPositiveSpan(int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);
             } else {
    @@ -8108,7 +8310,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8132,7 +8334,7 @@ public Builder setPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.set(index, builderForValue.build());
    @@ -8152,7 +8354,7 @@ public Builder setPositiveSpan(
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan value) {
    +      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8176,7 +8378,7 @@ public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8200,7 +8402,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(builderForValue.build());
    @@ -8221,7 +8423,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(index, builderForValue.build());
    @@ -8242,10 +8444,10 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addAllPositiveSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                   values, positiveSpan_);
               onChanged();
             } else {
    @@ -8303,7 +8505,7 @@ public Builder removePositiveSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
               int index) {
             return getPositiveSpanFieldBuilder().getBuilder(index);
           }
    @@ -8317,7 +8519,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
               int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);  } else {
    @@ -8334,7 +8536,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanOrBuilderList() {
             if (positiveSpanBuilder_ != null) {
               return positiveSpanBuilder_.getMessageOrBuilderList();
    @@ -8352,9 +8554,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
             return getPositiveSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8366,10 +8568,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
               int index) {
             return getPositiveSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8381,16 +8583,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanBuilderList() {
             return getPositiveSpanFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder> 
               getPositiveSpanFieldBuilder() {
             if (positiveSpanBuilder_ == null) {
    -          positiveSpanBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder>(
    +          positiveSpanBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder>(
                       positiveSpan_,
                       ((bitField0_ & 0x00001000) != 0),
                       getParentForChildren(),
    @@ -8400,12 +8602,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return positiveSpanBuilder_;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.LongList positiveDelta_ = emptyLongList();
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.LongList positiveDelta_ = emptyLongList();
           private void ensurePositiveDeltaIsMutable() {
    -        if (!((bitField0_ & 0x00002000) != 0)) {
    -          positiveDelta_ = mutableCopy(positiveDelta_);
    -          bitField0_ |= 0x00002000;
    +        if (!positiveDelta_.isModifiable()) {
    +          positiveDelta_ = makeMutableCopy(positiveDelta_);
             }
    +        bitField0_ |= 0x00002000;
           }
           /**
            * 
    @@ -8419,8 +8621,8 @@ private void ensurePositiveDeltaIsMutable() {
            */
           public java.util.List
               getPositiveDeltaList() {
    -        return ((bitField0_ & 0x00002000) != 0) ?
    -                 java.util.Collections.unmodifiableList(positiveDelta_) : positiveDelta_;
    +        positiveDelta_.makeImmutable();
    +        return positiveDelta_;
           }
           /**
            * 
    @@ -8466,6 +8668,7 @@ public Builder setPositiveDelta(
     
             ensurePositiveDeltaIsMutable();
             positiveDelta_.setLong(index, value);
    +        bitField0_ |= 0x00002000;
             onChanged();
             return this;
           }
    @@ -8484,6 +8687,7 @@ public Builder addPositiveDelta(long value) {
     
             ensurePositiveDeltaIsMutable();
             positiveDelta_.addLong(value);
    +        bitField0_ |= 0x00002000;
             onChanged();
             return this;
           }
    @@ -8501,8 +8705,9 @@ public Builder addPositiveDelta(long value) {
           public Builder addAllPositiveDelta(
               java.lang.Iterable values) {
             ensurePositiveDeltaIsMutable();
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                 values, positiveDelta_);
    +        bitField0_ |= 0x00002000;
             onChanged();
             return this;
           }
    @@ -8523,12 +8728,18 @@ public Builder clearPositiveDelta() {
             return this;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.DoubleList positiveCount_ = emptyDoubleList();
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.DoubleList positiveCount_ = emptyDoubleList();
           private void ensurePositiveCountIsMutable() {
    -        if (!((bitField0_ & 0x00004000) != 0)) {
    -          positiveCount_ = mutableCopy(positiveCount_);
    -          bitField0_ |= 0x00004000;
    +        if (!positiveCount_.isModifiable()) {
    +          positiveCount_ = makeMutableCopy(positiveCount_);
    +        }
    +        bitField0_ |= 0x00004000;
    +      }
    +      private void ensurePositiveCountIsMutable(int capacity) {
    +        if (!positiveCount_.isModifiable()) {
    +          positiveCount_ = makeMutableCopy(positiveCount_, capacity);
             }
    +        bitField0_ |= 0x00004000;
           }
           /**
            * 
    @@ -8540,8 +8751,8 @@ private void ensurePositiveCountIsMutable() {
            */
           public java.util.List
               getPositiveCountList() {
    -        return ((bitField0_ & 0x00004000) != 0) ?
    -                 java.util.Collections.unmodifiableList(positiveCount_) : positiveCount_;
    +        positiveCount_.makeImmutable();
    +        return positiveCount_;
           }
           /**
            * 
    @@ -8581,6 +8792,7 @@ public Builder setPositiveCount(
     
             ensurePositiveCountIsMutable();
             positiveCount_.setDouble(index, value);
    +        bitField0_ |= 0x00004000;
             onChanged();
             return this;
           }
    @@ -8597,6 +8809,7 @@ public Builder addPositiveCount(double value) {
     
             ensurePositiveCountIsMutable();
             positiveCount_.addDouble(value);
    +        bitField0_ |= 0x00004000;
             onChanged();
             return this;
           }
    @@ -8612,8 +8825,9 @@ public Builder addPositiveCount(double value) {
           public Builder addAllPositiveCount(
               java.lang.Iterable values) {
             ensurePositiveCountIsMutable();
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                 values, positiveCount_);
    +        bitField0_ |= 0x00004000;
             onChanged();
             return this;
           }
    @@ -8631,15 +8845,327 @@ public Builder clearPositiveCount() {
             onChanged();
             return this;
           }
    +
    +      private java.util.List exemplars_ =
    +        java.util.Collections.emptyList();
    +      private void ensureExemplarsIsMutable() {
    +        if (!((bitField0_ & 0x00008000) != 0)) {
    +          exemplars_ = new java.util.ArrayList(exemplars_);
    +          bitField0_ |= 0x00008000;
    +         }
    +      }
    +
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
    +
    +      /**
    +       * 
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public java.util.List getExemplarsList() { + if (exemplarsBuilder_ == null) { + return java.util.Collections.unmodifiableList(exemplars_); + } else { + return exemplarsBuilder_.getMessageList(); + } + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public int getExemplarsCount() { + if (exemplarsBuilder_ == null) { + return exemplars_.size(); + } else { + return exemplarsBuilder_.getCount(); + } + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplars(int index) { + if (exemplarsBuilder_ == null) { + return exemplars_.get(index); + } else { + return exemplarsBuilder_.getMessage(index); + } + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public Builder setExemplars( + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) { + if (exemplarsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExemplarsIsMutable(); + exemplars_.set(index, value); + onChanged(); + } else { + exemplarsBuilder_.setMessage(index, value); + } + return this; + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public Builder setExemplars( + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder builderForValue) { + if (exemplarsBuilder_ == null) { + ensureExemplarsIsMutable(); + exemplars_.set(index, builderForValue.build()); + onChanged(); + } else { + exemplarsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) { + if (exemplarsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExemplarsIsMutable(); + exemplars_.add(value); + onChanged(); + } else { + exemplarsBuilder_.addMessage(value); + } + return this; + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public Builder addExemplars( + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) { + if (exemplarsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExemplarsIsMutable(); + exemplars_.add(index, value); + onChanged(); + } else { + exemplarsBuilder_.addMessage(index, value); + } + return this; + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public Builder addExemplars( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder builderForValue) { + if (exemplarsBuilder_ == null) { + ensureExemplarsIsMutable(); + exemplars_.add(builderForValue.build()); + onChanged(); + } else { + exemplarsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public Builder addExemplars( + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder builderForValue) { + if (exemplarsBuilder_ == null) { + ensureExemplarsIsMutable(); + exemplars_.add(index, builderForValue.build()); + onChanged(); + } else { + exemplarsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public Builder addAllExemplars( + java.lang.Iterable values) { + if (exemplarsBuilder_ == null) { + ensureExemplarsIsMutable(); + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll( + values, exemplars_); + onChanged(); + } else { + exemplarsBuilder_.addAllMessages(values); + } + return this; + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public Builder clearExemplars() { + if (exemplarsBuilder_ == null) { + exemplars_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00008000); + onChanged(); + } else { + exemplarsBuilder_.clear(); + } + return this; + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public Builder removeExemplars(int index) { + if (exemplarsBuilder_ == null) { + ensureExemplarsIsMutable(); + exemplars_.remove(index); + onChanged(); + } else { + exemplarsBuilder_.remove(index); + } + return this; + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder getExemplarsBuilder( + int index) { + return getExemplarsFieldBuilder().getBuilder(index); + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder( + int index) { + if (exemplarsBuilder_ == null) { + return exemplars_.get(index); } else { + return exemplarsBuilder_.getMessageOrBuilder(index); + } + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public java.util.List + getExemplarsOrBuilderList() { + if (exemplarsBuilder_ != null) { + return exemplarsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(exemplars_); + } + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder addExemplarsBuilder() { + return getExemplarsFieldBuilder().addBuilder( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance()); + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder addExemplarsBuilder( + int index) { + return getExemplarsFieldBuilder().addBuilder( + index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance()); + } + /** + *
    +       * Only used for native histograms. These exemplars MUST have a timestamp.
    +       * 
    + * + * repeated .io.prometheus.client.Exemplar exemplars = 16; + */ + public java.util.List + getExemplarsBuilderList() { + return getExemplarsFieldBuilder().getBuilderList(); + } + private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3< + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> + getExemplarsFieldBuilder() { + if (exemplarsBuilder_ == null) { + exemplarsBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3< + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder>( + exemplars_, + ((bitField0_ & 0x00008000) != 0), + getParentForChildren(), + isClean()); + exemplars_ = null; + } + return exemplarsBuilder_; + } @java.lang.Override public final Builder setUnknownFields( - final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) { + final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); } @java.lang.Override public final Builder mergeUnknownFields( - final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) { + final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) { return super.mergeUnknownFields(unknownFields); } @@ -8648,48 +9174,48 @@ public final Builder mergeUnknownFields( } // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getDefaultInstance() { return DEFAULT_INSTANCE; } - @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser - PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() { + @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser + PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() { @java.lang.Override public Histogram parsePartialFrom( - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input, - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry) - throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException { + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input, + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry) + throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException { Builder builder = newBuilder(); try { builder.mergeFrom(input, extensionRegistry); - } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) { + } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) { throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) { + } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) { throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); } catch (java.io.IOException e) { - throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e) + throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e) .setUnfinishedMessage(builder.buildPartial()); } return builder.buildPartial(); } }; - public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() { + public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() { return PARSER; } @java.lang.Override - public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() { + public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() { return PARSER; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -8697,7 +9223,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2 public interface BucketOrBuilder extends // @@protoc_insertion_point(interface_extends:io.prometheus.client.Bucket) - io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder { + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder { /** *
    @@ -8765,11 +9291,11 @@ public interface BucketOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
       }
       /**
        * 
    @@ -8780,12 +9306,12 @@ public interface BucketOrBuilder extends
        * Protobuf type {@code io.prometheus.client.Bucket}
        */
       public static final class Bucket extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Bucket)
           BucketOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use Bucket.newBuilder() to construct.
    -    private Bucket(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private Bucket(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private Bucket() {
    @@ -8798,17 +9324,17 @@ protected java.lang.Object newInstance(
           return new Bucket();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder.class);
         }
     
         private int bitField0_;
    @@ -8894,7 +9420,7 @@ public double getUpperBound() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return Whether the exemplar field is set.
    @@ -8908,15 +9434,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -8931,7 +9457,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeUInt64(1, cumulativeCount_);
    @@ -8955,19 +9481,19 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeUInt64Size(1, cumulativeCount_);
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeDoubleSize(2, upperBound_);
           }
           if (((bitField0_ & 0x00000008) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(3, getExemplar());
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeDoubleSize(4, cumulativeCountFloat_);
           }
           size += getUnknownFields().getSerializedSize();
    @@ -8980,10 +9506,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket) obj;
     
           if (hasCumulativeCount() != other.hasCumulativeCount()) return false;
           if (hasCumulativeCount()) {
    @@ -9020,17 +9546,17 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasCumulativeCount()) {
             hash = (37 * hash) + CUMULATIVE_COUNT_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 getCumulativeCount());
           }
           if (hasCumulativeCountFloat()) {
             hash = (37 * hash) + CUMULATIVE_COUNT_FLOAT_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getCumulativeCountFloat()));
           }
           if (hasUpperBound()) {
             hash = (37 * hash) + UPPER_BOUND_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getUpperBound()));
           }
           if (hasExemplar()) {
    @@ -9042,75 +9568,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -9119,7 +9645,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -9130,7 +9656,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -9143,34 +9669,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Bucket}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
                     .alwaysUseFieldBuilders) {
               getExemplarFieldBuilder();
             }
    @@ -9191,19 +9717,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -9211,14 +9737,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -9248,44 +9774,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.getDefaultInstance()) return this;
             if (other.hasCumulativeCount()) {
               setCumulativeCount(other.getCumulativeCount());
             }
    @@ -9310,8 +9836,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -9354,7 +9880,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -9531,9 +10057,9 @@ public Builder clearUpperBound() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar exemplar_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return Whether the exemplar field is set.
    @@ -9545,9 +10071,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -9555,7 +10081,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -9572,7 +10098,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -9585,11 +10111,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -9597,8 +10123,10 @@ public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.c
             } else {
               exemplarBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000008;
    -        onChanged();
    +        if (exemplar_ != null) {
    +          bitField0_ |= 0x00000008;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -9617,7 +10145,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getExemplarFieldBuilder().getBuilder();
    @@ -9625,23 +10153,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> 
               getExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
    -          exemplarBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder>(
    +          exemplarBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -9651,13 +10179,13 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -9666,48 +10194,48 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public Bucket parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Bucket getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9715,7 +10243,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface BucketSpanOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.BucketSpan)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * 
    @@ -9768,12 +10296,12 @@ public interface BucketSpanOrBuilder extends
        * Protobuf type {@code io.prometheus.client.BucketSpan}
        */
       public static final class BucketSpan extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.BucketSpan)
           BucketSpanOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use BucketSpan.newBuilder() to construct.
    -    private BucketSpan(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private BucketSpan(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private BucketSpan() {
    @@ -9786,17 +10314,17 @@ protected java.lang.Object newInstance(
           return new BucketSpan();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder.class);
         }
     
         private int bitField0_;
    @@ -9866,7 +10394,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeSInt32(1, offset_);
    @@ -9884,11 +10412,11 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeSInt32Size(1, offset_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeUInt32Size(2, length_);
           }
           size += getUnknownFields().getSerializedSize();
    @@ -9901,10 +10429,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan) obj;
     
           if (hasOffset() != other.hasOffset()) return false;
           if (hasOffset()) {
    @@ -9940,75 +10468,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -10017,7 +10545,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10028,7 +10556,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -10045,29 +10573,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.BucketSpan}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.BucketSpan)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpanOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
     
           }
    @@ -10081,19 +10609,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -10101,14 +10629,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -10128,44 +10656,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance()) return this;
             if (other.hasOffset()) {
               setOffset(other.getOffset());
             }
    @@ -10184,8 +10712,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -10216,7 +10744,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -10338,13 +10866,13 @@ public Builder clearLength() {
           }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -10353,48 +10881,48 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.BucketSpan)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public BucketSpan parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.BucketSpan getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10402,17 +10930,17 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface ExemplarOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Exemplar)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -10420,12 +10948,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -10456,7 +10984,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          * optional .google.protobuf.Timestamp timestamp = 3;
          * @return The timestamp.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getTimestamp();
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getTimestamp();
         /**
          * 
          * OpenMetrics-style.
    @@ -10464,18 +10992,18 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          *
          * optional .google.protobuf.Timestamp timestamp = 3;
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getTimestampOrBuilder();
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getTimestampOrBuilder();
       }
       /**
        * Protobuf type {@code io.prometheus.client.Exemplar}
        */
       public static final class Exemplar extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Exemplar)
           ExemplarOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use Exemplar.newBuilder() to construct.
    -    private Exemplar(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private Exemplar(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private Exemplar() {
    @@ -10489,35 +11017,35 @@ protected java.lang.Object newInstance(
           return new Exemplar();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -10532,14 +11060,14 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
    @@ -10564,7 +11092,7 @@ public double getValue() {
         }
     
         public static final int TIMESTAMP_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp timestamp_;
    +    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp timestamp_;
         /**
          * 
          * OpenMetrics-style.
    @@ -10586,8 +11114,8 @@ public boolean hasTimestamp() {
          * @return The timestamp.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getTimestamp() {
    -      return timestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : timestamp_;
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getTimestamp() {
    +      return timestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : timestamp_;
         }
         /**
          * 
    @@ -10597,8 +11125,8 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getTime
          * optional .google.protobuf.Timestamp timestamp = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getTimestampOrBuilder() {
    -      return timestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : timestamp_;
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getTimestampOrBuilder() {
    +      return timestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : timestamp_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -10613,7 +11141,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           for (int i = 0; i < label_.size(); i++) {
             output.writeMessage(1, label_.get(i));
    @@ -10634,15 +11162,15 @@ public int getSerializedSize() {
     
           size = 0;
           for (int i = 0; i < label_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(1, label_.get(i));
           }
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeDoubleSize(2, value_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(3, getTimestamp());
           }
           size += getUnknownFields().getSerializedSize();
    @@ -10655,10 +11183,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -10690,7 +11218,7 @@ public int hashCode() {
           }
           if (hasValue()) {
             hash = (37 * hash) + VALUE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getValue()));
           }
           if (hasTimestamp()) {
    @@ -10702,75 +11230,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -10779,7 +11307,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10790,7 +11318,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -10798,34 +11326,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Exemplar}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Exemplar)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.ExemplarOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
                     .alwaysUseFieldBuilders) {
               getLabelFieldBuilder();
               getTimestampFieldBuilder();
    @@ -10852,19 +11380,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -10872,15 +11400,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -10892,7 +11420,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -10914,44 +11442,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -10971,7 +11499,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   label_ = other.label_;
                   bitField0_ = (bitField0_ & ~0x00000001);
                   labelBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
                        getLabelFieldBuilder() : null;
                 } else {
                   labelBuilder_.addAllMessages(other.label_);
    @@ -10996,8 +11524,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -11011,9 +11539,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.PARSER,
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -11043,7 +11571,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -11052,22 +11580,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder> labelBuilder_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -11087,7 +11615,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -11098,7 +11626,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11115,7 +11643,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -11128,7 +11656,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11145,7 +11673,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11162,7 +11690,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -11176,7 +11704,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -11190,10 +11718,10 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                   values, label_);
               onChanged();
             } else {
    @@ -11230,14 +11758,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return getLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -11247,7 +11775,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -11258,31 +11786,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder addLabelBuilder() {
             return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return getLabelFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder> 
               getLabelFieldBuilder() {
             if (labelBuilder_ == null) {
    -          labelBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder>(
    +          labelBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -11332,9 +11860,9 @@ public Builder clearValue() {
             return this;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp timestamp_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder> timestampBuilder_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp timestamp_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> timestampBuilder_;
           /**
            * 
            * OpenMetrics-style.
    @@ -11354,9 +11882,9 @@ public boolean hasTimestamp() {
            * optional .google.protobuf.Timestamp timestamp = 3;
            * @return The timestamp.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getTimestamp() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getTimestamp() {
             if (timestampBuilder_ == null) {
    -          return timestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : timestamp_;
    +          return timestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : timestamp_;
             } else {
               return timestampBuilder_.getMessage();
             }
    @@ -11368,7 +11896,7 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp getTime
            *
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
    -      public Builder setTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp value) {
    +      public Builder setTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
             if (timestampBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11389,7 +11917,7 @@ public Builder setTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_2
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
           public Builder setTimestamp(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder builderForValue) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder builderForValue) {
             if (timestampBuilder_ == null) {
               timestamp_ = builderForValue.build();
             } else {
    @@ -11406,11 +11934,11 @@ public Builder setTimestamp(
            *
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
    -      public Builder mergeTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp value) {
    +      public Builder mergeTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
             if (timestampBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 timestamp_ != null &&
    -            timestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance()) {
    +            timestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance()) {
                 getTimestampBuilder().mergeFrom(value);
               } else {
                 timestamp_ = value;
    @@ -11418,8 +11946,10 @@ public Builder mergeTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3
             } else {
               timestampBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000004;
    -        onChanged();
    +        if (timestamp_ != null) {
    +          bitField0_ |= 0x00000004;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -11446,7 +11976,7 @@ public Builder clearTimestamp() {
            *
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder getTimestampBuilder() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder getTimestampBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return getTimestampFieldBuilder().getBuilder();
    @@ -11458,12 +11988,12 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder
            *
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder getTimestampOrBuilder() {
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getTimestampOrBuilder() {
             if (timestampBuilder_ != null) {
               return timestampBuilder_.getMessageOrBuilder();
             } else {
               return timestamp_ == null ?
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.getDefaultInstance() : timestamp_;
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : timestamp_;
             }
           }
           /**
    @@ -11473,12 +12003,12 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilde
            *
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> 
               getTimestampFieldBuilder() {
             if (timestampBuilder_ == null) {
    -          timestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilder>(
    +          timestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder>(
                       getTimestamp(),
                       getParentForChildren(),
                       isClean());
    @@ -11488,13 +12018,13 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampOrBuilde
           }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -11503,48 +12033,48 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Exemplar)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public Exemplar parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Exemplar getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11552,17 +12082,17 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface MetricOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Metric)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -11570,12 +12100,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -11587,11 +12117,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return The gauge.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge getGauge();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getGauge();
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.GaugeOrBuilder getGaugeOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder getGaugeOrBuilder();
     
         /**
          * optional .io.prometheus.client.Counter counter = 3;
    @@ -11602,11 +12132,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          * optional .io.prometheus.client.Counter counter = 3;
          * @return The counter.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter getCounter();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getCounter();
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.CounterOrBuilder getCounterOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder getCounterOrBuilder();
     
         /**
          * optional .io.prometheus.client.Summary summary = 4;
    @@ -11617,11 +12147,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          * optional .io.prometheus.client.Summary summary = 4;
          * @return The summary.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary getSummary();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getSummary();
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.SummaryOrBuilder getSummaryOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder getSummaryOrBuilder();
     
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
    @@ -11632,11 +12162,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return The untyped.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped getUntyped();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getUntyped();
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.UntypedOrBuilder getUntypedOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder getUntypedOrBuilder();
     
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
    @@ -11647,11 +12177,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return The histogram.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram getHistogram();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getHistogram();
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.HistogramOrBuilder getHistogramOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder getHistogramOrBuilder();
     
         /**
          * optional int64 timestamp_ms = 6;
    @@ -11668,12 +12198,12 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Met
        * Protobuf type {@code io.prometheus.client.Metric}
        */
       public static final class Metric extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Metric)
           MetricOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use Metric.newBuilder() to construct.
    -    private Metric(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private Metric(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private Metric() {
    @@ -11687,35 +12217,35 @@ protected java.lang.Object newInstance(
           return new Metric();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -11730,20 +12260,20 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
     
         public static final int GAUGE_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge gauge_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge gauge_;
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return Whether the gauge field is set.
    @@ -11757,19 +12287,19 @@ public boolean hasGauge() {
          * @return The gauge.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge getGauge() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getGauge() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
     
         public static final int COUNTER_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter counter_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter counter_;
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          * @return Whether the counter field is set.
    @@ -11783,19 +12313,19 @@ public boolean hasCounter() {
          * @return The counter.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter getCounter() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getCounter() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance() : counter_;
         }
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.CounterOrBuilder getCounterOrBuilder() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance() : counter_;
         }
     
         public static final int SUMMARY_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary summary_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary summary_;
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          * @return Whether the summary field is set.
    @@ -11809,19 +12339,19 @@ public boolean hasSummary() {
          * @return The summary.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary getSummary() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getSummary() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance() : summary_;
         }
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance() : summary_;
         }
     
         public static final int UNTYPED_FIELD_NUMBER = 5;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped untyped_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped untyped_;
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return Whether the untyped field is set.
    @@ -11835,19 +12365,19 @@ public boolean hasUntyped() {
          * @return The untyped.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped getUntyped() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getUntyped() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
     
         public static final int HISTOGRAM_FIELD_NUMBER = 7;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram histogram_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram histogram_;
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return Whether the histogram field is set.
    @@ -11861,15 +12391,15 @@ public boolean hasHistogram() {
          * @return The histogram.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram getHistogram() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getHistogram() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
     
         public static final int TIMESTAMP_MS_FIELD_NUMBER = 6;
    @@ -11903,7 +12433,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           for (int i = 0; i < label_.size(); i++) {
             output.writeMessage(1, label_.get(i));
    @@ -11936,31 +12466,31 @@ public int getSerializedSize() {
     
           size = 0;
           for (int i = 0; i < label_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(1, label_.get(i));
           }
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(2, getGauge());
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(3, getCounter());
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(4, getSummary());
           }
           if (((bitField0_ & 0x00000008) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(5, getUntyped());
           }
           if (((bitField0_ & 0x00000020) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeInt64Size(6, timestampMs_);
           }
           if (((bitField0_ & 0x00000010) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(7, getHistogram());
           }
           size += getUnknownFields().getSerializedSize();
    @@ -11973,10 +12503,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -12047,7 +12577,7 @@ public int hashCode() {
           }
           if (hasTimestampMs()) {
             hash = (37 * hash) + TIMESTAMP_MS_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Internal.hashLong(
    +        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
                 getTimestampMs());
           }
           hash = (29 * hash) + getUnknownFields().hashCode();
    @@ -12055,75 +12585,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -12132,7 +12662,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -12143,7 +12673,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -12151,34 +12681,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Metric}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
                     .alwaysUseFieldBuilders) {
               getLabelFieldBuilder();
               getGaugeFieldBuilder();
    @@ -12229,19 +12759,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -12249,15 +12779,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -12269,7 +12799,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -12315,44 +12845,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -12372,7 +12902,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   label_ = other.label_;
                   bitField0_ = (bitField0_ & ~0x00000001);
                   labelBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
                        getLabelFieldBuilder() : null;
                 } else {
                   labelBuilder_.addAllMessages(other.label_);
    @@ -12409,8 +12939,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -12424,9 +12954,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.PARSER,
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -12484,7 +13014,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -12493,22 +13023,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder> labelBuilder_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -12528,7 +13058,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -12539,7 +13069,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12556,7 +13086,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -12569,7 +13099,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12586,7 +13116,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12603,7 +13133,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -12617,7 +13147,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -12631,10 +13161,10 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                   values, label_);
               onChanged();
             } else {
    @@ -12671,14 +13201,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return getLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -12688,7 +13218,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -12699,31 +13229,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder addLabelBuilder() {
             return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return getLabelFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder> 
               getLabelFieldBuilder() {
             if (labelBuilder_ == null) {
    -          labelBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.LabelPairOrBuilder>(
    +          labelBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -12733,9 +13263,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return labelBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge gauge_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.GaugeOrBuilder> gaugeBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge gauge_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder> gaugeBuilder_;
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return Whether the gauge field is set.
    @@ -12747,9 +13277,9 @@ public boolean hasGauge() {
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return The gauge.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge getGauge() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getGauge() {
             if (gaugeBuilder_ == null) {
    -          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.getDefaultInstance() : gauge_;
    +          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance() : gauge_;
             } else {
               return gaugeBuilder_.getMessage();
             }
    @@ -12757,7 +13287,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge value) {
    +      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12774,7 +13304,7 @@ public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_go
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           public Builder setGauge(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder builderForValue) {
             if (gaugeBuilder_ == null) {
               gauge_ = builderForValue.build();
             } else {
    @@ -12787,11 +13317,11 @@ public Builder setGauge(
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge value) {
    +      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 gauge_ != null &&
    -            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.getDefaultInstance()) {
    +            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance()) {
                 getGaugeBuilder().mergeFrom(value);
               } else {
                 gauge_ = value;
    @@ -12799,8 +13329,10 @@ public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_
             } else {
               gaugeBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000002;
    -        onChanged();
    +        if (gauge_ != null) {
    +          bitField0_ |= 0x00000002;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -12819,7 +13351,7 @@ public Builder clearGauge() {
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.Builder getGaugeBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder getGaugeBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return getGaugeFieldBuilder().getBuilder();
    @@ -12827,23 +13359,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
             if (gaugeBuilder_ != null) {
               return gaugeBuilder_.getMessageOrBuilder();
             } else {
               return gauge_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.getDefaultInstance() : gauge_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance() : gauge_;
             }
           }
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.GaugeOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder> 
               getGaugeFieldBuilder() {
             if (gaugeBuilder_ == null) {
    -          gaugeBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.GaugeOrBuilder>(
    +          gaugeBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder>(
                       getGauge(),
                       getParentForChildren(),
                       isClean());
    @@ -12852,9 +13384,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return gaugeBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter counter_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.CounterOrBuilder> counterBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter counter_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder> counterBuilder_;
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            * @return Whether the counter field is set.
    @@ -12866,9 +13398,9 @@ public boolean hasCounter() {
            * optional .io.prometheus.client.Counter counter = 3;
            * @return The counter.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter getCounter() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getCounter() {
             if (counterBuilder_ == null) {
    -          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.getDefaultInstance() : counter_;
    +          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance() : counter_;
             } else {
               return counterBuilder_.getMessage();
             }
    @@ -12876,7 +13408,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter value) {
    +      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12893,7 +13425,7 @@ public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Counter counter = 3;
            */
           public Builder setCounter(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder builderForValue) {
             if (counterBuilder_ == null) {
               counter_ = builderForValue.build();
             } else {
    @@ -12906,11 +13438,11 @@ public Builder setCounter(
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter value) {
    +      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 counter_ != null &&
    -            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.getDefaultInstance()) {
    +            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance()) {
                 getCounterBuilder().mergeFrom(value);
               } else {
                 counter_ = value;
    @@ -12918,8 +13450,10 @@ public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.co
             } else {
               counterBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000004;
    -        onChanged();
    +        if (counter_ != null) {
    +          bitField0_ |= 0x00000004;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -12938,7 +13472,7 @@ public Builder clearCounter() {
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.Builder getCounterBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder getCounterBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return getCounterFieldBuilder().getBuilder();
    @@ -12946,23 +13480,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder getCounterOrBuilder() {
             if (counterBuilder_ != null) {
               return counterBuilder_.getMessageOrBuilder();
             } else {
               return counter_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.getDefaultInstance() : counter_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance() : counter_;
             }
           }
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.CounterOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder> 
               getCounterFieldBuilder() {
             if (counterBuilder_ == null) {
    -          counterBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.CounterOrBuilder>(
    +          counterBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder>(
                       getCounter(),
                       getParentForChildren(),
                       isClean());
    @@ -12971,9 +13505,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return counterBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary summary_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.SummaryOrBuilder> summaryBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary summary_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder> summaryBuilder_;
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            * @return Whether the summary field is set.
    @@ -12985,9 +13519,9 @@ public boolean hasSummary() {
            * optional .io.prometheus.client.Summary summary = 4;
            * @return The summary.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary getSummary() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getSummary() {
             if (summaryBuilder_ == null) {
    -          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.getDefaultInstance() : summary_;
    +          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance() : summary_;
             } else {
               return summaryBuilder_.getMessage();
             }
    @@ -12995,7 +13529,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary value) {
    +      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13012,7 +13546,7 @@ public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Summary summary = 4;
            */
           public Builder setSummary(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder builderForValue) {
             if (summaryBuilder_ == null) {
               summary_ = builderForValue.build();
             } else {
    @@ -13025,11 +13559,11 @@ public Builder setSummary(
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary value) {
    +      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 summary_ != null &&
    -            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.getDefaultInstance()) {
    +            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance()) {
                 getSummaryBuilder().mergeFrom(value);
               } else {
                 summary_ = value;
    @@ -13037,8 +13571,10 @@ public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.co
             } else {
               summaryBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000008;
    -        onChanged();
    +        if (summary_ != null) {
    +          bitField0_ |= 0x00000008;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -13057,7 +13593,7 @@ public Builder clearSummary() {
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.Builder getSummaryBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder getSummaryBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getSummaryFieldBuilder().getBuilder();
    @@ -13065,23 +13601,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
             if (summaryBuilder_ != null) {
               return summaryBuilder_.getMessageOrBuilder();
             } else {
               return summary_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.getDefaultInstance() : summary_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance() : summary_;
             }
           }
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.SummaryOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder> 
               getSummaryFieldBuilder() {
             if (summaryBuilder_ == null) {
    -          summaryBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.SummaryOrBuilder>(
    +          summaryBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder>(
                       getSummary(),
                       getParentForChildren(),
                       isClean());
    @@ -13090,9 +13626,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return summaryBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped untyped_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.UntypedOrBuilder> untypedBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped untyped_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder> untypedBuilder_;
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return Whether the untyped field is set.
    @@ -13104,9 +13640,9 @@ public boolean hasUntyped() {
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return The untyped.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped getUntyped() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getUntyped() {
             if (untypedBuilder_ == null) {
    -          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.getDefaultInstance() : untyped_;
    +          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance() : untyped_;
             } else {
               return untypedBuilder_.getMessage();
             }
    @@ -13114,7 +13650,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped value) {
    +      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13131,7 +13667,7 @@ public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           public Builder setUntyped(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder builderForValue) {
             if (untypedBuilder_ == null) {
               untyped_ = builderForValue.build();
             } else {
    @@ -13144,11 +13680,11 @@ public Builder setUntyped(
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped value) {
    +      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 untyped_ != null &&
    -            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.getDefaultInstance()) {
    +            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance()) {
                 getUntypedBuilder().mergeFrom(value);
               } else {
                 untyped_ = value;
    @@ -13156,8 +13692,10 @@ public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.co
             } else {
               untypedBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000010;
    -        onChanged();
    +        if (untyped_ != null) {
    +          bitField0_ |= 0x00000010;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -13176,7 +13714,7 @@ public Builder clearUntyped() {
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.Builder getUntypedBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder getUntypedBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
             return getUntypedFieldBuilder().getBuilder();
    @@ -13184,23 +13722,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
             if (untypedBuilder_ != null) {
               return untypedBuilder_.getMessageOrBuilder();
             } else {
               return untyped_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.getDefaultInstance() : untyped_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance() : untyped_;
             }
           }
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.UntypedOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder> 
               getUntypedFieldBuilder() {
             if (untypedBuilder_ == null) {
    -          untypedBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.UntypedOrBuilder>(
    +          untypedBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder>(
                       getUntyped(),
                       getParentForChildren(),
                       isClean());
    @@ -13209,9 +13747,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return untypedBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram histogram_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.HistogramOrBuilder> histogramBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram histogram_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder> histogramBuilder_;
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return Whether the histogram field is set.
    @@ -13223,9 +13761,9 @@ public boolean hasHistogram() {
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return The histogram.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram getHistogram() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getHistogram() {
             if (histogramBuilder_ == null) {
    -          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.getDefaultInstance() : histogram_;
    +          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance() : histogram_;
             } else {
               return histogramBuilder_.getMessage();
             }
    @@ -13233,7 +13771,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram value) {
    +      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13250,7 +13788,7 @@ public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.co
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           public Builder setHistogram(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder builderForValue) {
             if (histogramBuilder_ == null) {
               histogram_ = builderForValue.build();
             } else {
    @@ -13263,11 +13801,11 @@ public Builder setHistogram(
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram value) {
    +      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (((bitField0_ & 0x00000020) != 0) &&
                 histogram_ != null &&
    -            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.getDefaultInstance()) {
    +            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance()) {
                 getHistogramBuilder().mergeFrom(value);
               } else {
                 histogram_ = value;
    @@ -13275,8 +13813,10 @@ public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.
             } else {
               histogramBuilder_.mergeFrom(value);
             }
    -        bitField0_ |= 0x00000020;
    -        onChanged();
    +        if (histogram_ != null) {
    +          bitField0_ |= 0x00000020;
    +          onChanged();
    +        }
             return this;
           }
           /**
    @@ -13295,7 +13835,7 @@ public Builder clearHistogram() {
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.Builder getHistogramBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder getHistogramBuilder() {
             bitField0_ |= 0x00000020;
             onChanged();
             return getHistogramFieldBuilder().getBuilder();
    @@ -13303,23 +13843,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
             if (histogramBuilder_ != null) {
               return histogramBuilder_.getMessageOrBuilder();
             } else {
               return histogram_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.getDefaultInstance() : histogram_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance() : histogram_;
             }
           }
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.HistogramOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder> 
               getHistogramFieldBuilder() {
             if (histogramBuilder_ == null) {
    -          histogramBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.HistogramOrBuilder>(
    +          histogramBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder>(
                       getHistogram(),
                       getParentForChildren(),
                       isClean());
    @@ -13369,13 +13909,13 @@ public Builder clearTimestampMs() {
           }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -13384,48 +13924,48 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public Metric parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13433,7 +13973,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface MetricFamilyOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.MetricFamily)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.MessageOrBuilder {
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
     
         /**
          * optional string name = 1;
    @@ -13449,7 +13989,7 @@ public interface MetricFamilyOrBuilder extends
          * optional string name = 1;
          * @return The bytes for name.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
             getNameBytes();
     
         /**
    @@ -13466,7 +14006,7 @@ public interface MetricFamilyOrBuilder extends
          * optional string help = 2;
          * @return The bytes for help.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
             getHelpBytes();
     
         /**
    @@ -13478,17 +14018,17 @@ public interface MetricFamilyOrBuilder extends
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType getType();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType getType();
     
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric getMetric(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getMetric(int index);
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    @@ -13496,24 +14036,41 @@ public interface MetricFamilyOrBuilder extends
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricOrBuilderList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index);
    +
    +    /**
    +     * optional string unit = 5;
    +     * @return Whether the unit field is set.
    +     */
    +    boolean hasUnit();
    +    /**
    +     * optional string unit = 5;
    +     * @return The unit.
    +     */
    +    java.lang.String getUnit();
    +    /**
    +     * optional string unit = 5;
    +     * @return The bytes for unit.
    +     */
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +        getUnitBytes();
       }
       /**
        * Protobuf type {@code io.prometheus.client.MetricFamily}
        */
       public static final class MetricFamily extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3 implements
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.MetricFamily)
           MetricFamilyOrBuilder {
       private static final long serialVersionUID = 0L;
         // Use MetricFamily.newBuilder() to construct.
    -    private MetricFamily(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder builder) {
    +    private MetricFamily(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
           super(builder);
         }
         private MetricFamily() {
    @@ -13521,6 +14078,7 @@ private MetricFamily() {
           help_ = "";
           type_ = 0;
           metric_ = java.util.Collections.emptyList();
    +      unit_ = "";
         }
     
         @java.lang.Override
    @@ -13530,17 +14088,17 @@ protected java.lang.Object newInstance(
           return new MetricFamily();
         }
     
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.Builder.class);
         }
     
         private int bitField0_;
    @@ -13565,8 +14123,8 @@ public java.lang.String getName() {
           if (ref instanceof java.lang.String) {
             return (java.lang.String) ref;
           } else {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString bs = 
    -            (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs = 
    +            (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
             java.lang.String s = bs.toStringUtf8();
             if (bs.isValidUtf8()) {
               name_ = s;
    @@ -13579,17 +14137,17 @@ public java.lang.String getName() {
          * @return The bytes for name.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
             getNameBytes() {
           java.lang.Object ref = name_;
           if (ref instanceof java.lang.String) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString b = 
    -            io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString.copyFromUtf8(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    +            io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
                     (java.lang.String) ref);
             name_ = b;
             return b;
           } else {
    -        return (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +        return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
           }
         }
     
    @@ -13614,8 +14172,8 @@ public java.lang.String getHelp() {
           if (ref instanceof java.lang.String) {
             return (java.lang.String) ref;
           } else {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString bs = 
    -            (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs = 
    +            (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
             java.lang.String s = bs.toStringUtf8();
             if (bs.isValidUtf8()) {
               help_ = s;
    @@ -13628,17 +14186,17 @@ public java.lang.String getHelp() {
          * @return The bytes for help.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
             getHelpBytes() {
           java.lang.Object ref = help_;
           if (ref instanceof java.lang.String) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString b = 
    -            io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString.copyFromUtf8(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    +            io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
                     (java.lang.String) ref);
             help_ = b;
             return b;
           } else {
    -        return (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +        return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
           }
         }
     
    @@ -13655,26 +14213,26 @@ public java.lang.String getHelp() {
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType getType() {
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType.forNumber(type_);
    -      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType.COUNTER : result;
    +    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType getType() {
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType.forNumber(type_);
    +      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType.COUNTER : result;
         }
     
         public static final int METRIC_FIELD_NUMBER = 4;
         @SuppressWarnings("serial")
    -    private java.util.List metric_;
    +    private java.util.List metric_;
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List getMetricList() {
    +    public java.util.List getMetricList() {
           return metric_;
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getMetricOrBuilderList() {
           return metric_;
         }
    @@ -13689,18 +14247,67 @@ public int getMetricCount() {
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric getMetric(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getMetric(int index) {
           return metric_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index) {
           return metric_.get(index);
         }
     
    +    public static final int UNIT_FIELD_NUMBER = 5;
    +    @SuppressWarnings("serial")
    +    private volatile java.lang.Object unit_ = "";
    +    /**
    +     * optional string unit = 5;
    +     * @return Whether the unit field is set.
    +     */
    +    @java.lang.Override
    +    public boolean hasUnit() {
    +      return ((bitField0_ & 0x00000008) != 0);
    +    }
    +    /**
    +     * optional string unit = 5;
    +     * @return The unit.
    +     */
    +    @java.lang.Override
    +    public java.lang.String getUnit() {
    +      java.lang.Object ref = unit_;
    +      if (ref instanceof java.lang.String) {
    +        return (java.lang.String) ref;
    +      } else {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs = 
    +            (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        java.lang.String s = bs.toStringUtf8();
    +        if (bs.isValidUtf8()) {
    +          unit_ = s;
    +        }
    +        return s;
    +      }
    +    }
    +    /**
    +     * optional string unit = 5;
    +     * @return The bytes for unit.
    +     */
    +    @java.lang.Override
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +        getUnitBytes() {
    +      java.lang.Object ref = unit_;
    +      if (ref instanceof java.lang.String) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    +            io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +                (java.lang.String) ref);
    +        unit_ = b;
    +        return b;
    +      } else {
    +        return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +      }
    +    }
    +
         private byte memoizedIsInitialized = -1;
         @java.lang.Override
         public final boolean isInitialized() {
    @@ -13713,13 +14320,13 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream output)
    +    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.writeString(output, 1, name_);
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.writeString(output, 1, name_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.writeString(output, 2, help_);
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.writeString(output, 2, help_);
           }
           if (((bitField0_ & 0x00000004) != 0)) {
             output.writeEnum(3, type_);
    @@ -13727,6 +14334,9 @@ public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Code
           for (int i = 0; i < metric_.size(); i++) {
             output.writeMessage(4, metric_.get(i));
           }
    +      if (((bitField0_ & 0x00000008) != 0)) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.writeString(output, 5, unit_);
    +      }
           getUnknownFields().writeTo(output);
         }
     
    @@ -13737,19 +14347,22 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.computeStringSize(1, name_);
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.computeStringSize(1, name_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.computeStringSize(2, help_);
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.computeStringSize(2, help_);
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeEnumSize(3, type_);
           }
           for (int i = 0; i < metric_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedOutputStream
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
               .computeMessageSize(4, metric_.get(i));
           }
    +      if (((bitField0_ & 0x00000008) != 0)) {
    +        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.computeStringSize(5, unit_);
    +      }
           size += getUnknownFields().getSerializedSize();
           memoizedSize = size;
           return size;
    @@ -13760,10 +14373,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -13781,6 +14394,11 @@ public boolean equals(final java.lang.Object obj) {
           }
           if (!getMetricList()
               .equals(other.getMetricList())) return false;
    +      if (hasUnit() != other.hasUnit()) return false;
    +      if (hasUnit()) {
    +        if (!getUnit()
    +            .equals(other.getUnit())) return false;
    +      }
           if (!getUnknownFields().equals(other.getUnknownFields())) return false;
           return true;
         }
    @@ -13808,80 +14426,84 @@ public int hashCode() {
             hash = (37 * hash) + METRIC_FIELD_NUMBER;
             hash = (53 * hash) + getMetricList().hashCode();
           }
    +      if (hasUnit()) {
    +        hash = (37 * hash) + UNIT_FIELD_NUMBER;
    +        hash = (53 * hash) + getUnit().hashCode();
    +      }
           hash = (29 * hash) + getUnknownFields().hashCode();
           memoizedHashCode = hash;
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(byte[] data)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3
    +      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -13890,7 +14512,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -13901,7 +14523,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -13909,29 +14531,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.MetricFamily}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.Builder implements
    +        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamilyOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamilyOrBuilder {
    +      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.BuilderParent parent) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
             super(parent);
     
           }
    @@ -13949,23 +14571,24 @@ public Builder clear() {
               metricBuilder_.clear();
             }
             bitField0_ = (bitField0_ & ~0x00000008);
    +        unit_ = "";
             return this;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -13973,15 +14596,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily result) {
             if (metricBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 metric_ = java.util.Collections.unmodifiableList(metric_);
    @@ -13993,7 +14616,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -14008,6 +14631,10 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
               result.type_ = type_;
               to_bitField0_ |= 0x00000004;
             }
    +        if (((from_bitField0_ & 0x00000010) != 0)) {
    +          result.unit_ = unit_;
    +          to_bitField0_ |= 0x00000008;
    +        }
             result.bitField0_ |= to_bitField0_;
           }
     
    @@ -14017,44 +14644,44 @@ public Builder clone() {
           }
           @java.lang.Override
           public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.setField(field, value);
           }
           @java.lang.Override
           public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
             return super.clearField(field);
           }
           @java.lang.Override
           public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.OneofDescriptor oneof) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
             return super.clearOneof(oneof);
           }
           @java.lang.Override
           public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               int index, java.lang.Object value) {
             return super.setRepeatedField(field, index, value);
           }
           @java.lang.Override
           public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FieldDescriptor field,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
               java.lang.Object value) {
             return super.addRepeatedField(field, value);
           }
           @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily)other);
    +      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -14087,13 +14714,18 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   metric_ = other.metric_;
                   bitField0_ = (bitField0_ & ~0x00000008);
                   metricBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
                        getMetricFieldBuilder() : null;
                 } else {
                   metricBuilder_.addAllMessages(other.metric_);
                 }
               }
             }
    +        if (other.hasUnit()) {
    +          unit_ = other.unit_;
    +          bitField0_ |= 0x00000010;
    +          onChanged();
    +        }
             this.mergeUnknownFields(other.getUnknownFields());
             onChanged();
             return this;
    @@ -14106,8 +14738,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -14132,8 +14764,8 @@ public Builder mergeFrom(
                   } // case 18
                   case 24: {
                     int tmpRaw = input.readEnum();
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType tmpValue =
    -                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType.forNumber(tmpRaw);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType tmpValue =
    +                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType.forNumber(tmpRaw);
                     if (tmpValue == null) {
                       mergeUnknownVarintField(3, tmpRaw);
                     } else {
    @@ -14143,9 +14775,9 @@ public Builder mergeFrom(
                     break;
                   } // case 24
                   case 34: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.PARSER,
                             extensionRegistry);
                     if (metricBuilder_ == null) {
                       ensureMetricIsMutable();
    @@ -14155,6 +14787,11 @@ public Builder mergeFrom(
                     }
                     break;
                   } // case 34
    +              case 42: {
    +                unit_ = input.readBytes();
    +                bitField0_ |= 0x00000010;
    +                break;
    +              } // case 42
                   default: {
                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                       done = true; // was an endgroup tag
    @@ -14163,7 +14800,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -14187,8 +14824,8 @@ public boolean hasName() {
           public java.lang.String getName() {
             java.lang.Object ref = name_;
             if (!(ref instanceof java.lang.String)) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString bs =
    -              (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs =
    +              (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
               java.lang.String s = bs.toStringUtf8();
               if (bs.isValidUtf8()) {
                 name_ = s;
    @@ -14202,17 +14839,17 @@ public java.lang.String getName() {
            * optional string name = 1;
            * @return The bytes for name.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
               getNameBytes() {
             java.lang.Object ref = name_;
             if (ref instanceof String) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString b = 
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString.copyFromUtf8(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
                       (java.lang.String) ref);
               name_ = b;
               return b;
             } else {
    -          return (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +          return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
             }
           }
           /**
    @@ -14244,7 +14881,7 @@ public Builder clearName() {
            * @return This builder for chaining.
            */
           public Builder setNameBytes(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString value) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString value) {
             if (value == null) { throw new NullPointerException(); }
             name_ = value;
             bitField0_ |= 0x00000001;
    @@ -14267,8 +14904,8 @@ public boolean hasHelp() {
           public java.lang.String getHelp() {
             java.lang.Object ref = help_;
             if (!(ref instanceof java.lang.String)) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString bs =
    -              (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs =
    +              (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
               java.lang.String s = bs.toStringUtf8();
               if (bs.isValidUtf8()) {
                 help_ = s;
    @@ -14282,17 +14919,17 @@ public java.lang.String getHelp() {
            * optional string help = 2;
            * @return The bytes for help.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
               getHelpBytes() {
             java.lang.Object ref = help_;
             if (ref instanceof String) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString b = 
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString.copyFromUtf8(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
                       (java.lang.String) ref);
               help_ = b;
               return b;
             } else {
    -          return (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString) ref;
    +          return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
             }
           }
           /**
    @@ -14324,7 +14961,7 @@ public Builder clearHelp() {
            * @return This builder for chaining.
            */
           public Builder setHelpBytes(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ByteString value) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString value) {
             if (value == null) { throw new NullPointerException(); }
             help_ = value;
             bitField0_ |= 0x00000002;
    @@ -14345,16 +14982,16 @@ public Builder setHelpBytes(
            * @return The type.
            */
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType getType() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType.forNumber(type_);
    -        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType.COUNTER : result;
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType getType() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType.forNumber(type_);
    +        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType.COUNTER : result;
           }
           /**
            * optional .io.prometheus.client.MetricType type = 3;
            * @param value The type to set.
            * @return This builder for chaining.
            */
    -      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricType value) {
    +      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType value) {
             if (value == null) {
               throw new NullPointerException();
             }
    @@ -14374,22 +15011,22 @@ public Builder clearType() {
             return this;
           }
     
    -      private java.util.List metric_ =
    +      private java.util.List metric_ =
             java.util.Collections.emptyList();
           private void ensureMetricIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          metric_ = new java.util.ArrayList(metric_);
    +          metric_ = new java.util.ArrayList(metric_);
               bitField0_ |= 0x00000008;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricOrBuilder> metricBuilder_;
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder> metricBuilder_;
     
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List getMetricList() {
    +      public java.util.List getMetricList() {
             if (metricBuilder_ == null) {
               return java.util.Collections.unmodifiableList(metric_);
             } else {
    @@ -14409,7 +15046,7 @@ public int getMetricCount() {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric getMetric(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getMetric(int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);
             } else {
    @@ -14420,7 +15057,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14437,7 +15074,7 @@ public Builder setMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.set(index, builderForValue.build());
    @@ -14450,7 +15087,7 @@ public Builder setMetric(
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric value) {
    +      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14467,7 +15104,7 @@ public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14484,7 +15121,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(builderForValue.build());
    @@ -14498,7 +15135,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(index, builderForValue.build());
    @@ -14512,10 +15149,10 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addAllMetric(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractMessageLite.Builder.addAll(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
                   values, metric_);
               onChanged();
             } else {
    @@ -14552,14 +15189,14 @@ public Builder removeMetric(int index) {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder getMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder getMetricBuilder(
               int index) {
             return getMetricFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricOrBuilder getMetricOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder getMetricOrBuilder(
               int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);  } else {
    @@ -14569,7 +15206,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricOrBuilderList() {
             if (metricBuilder_ != null) {
               return metricBuilder_.getMessageOrBuilderList();
    @@ -14580,31 +15217,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder addMetricBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder addMetricBuilder() {
             return getMetricFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder addMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder addMetricBuilder(
               int index) {
             return getMetricFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricBuilderList() {
             return getMetricFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricOrBuilder> 
    +      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder> 
               getMetricFieldBuilder() {
             if (metricBuilder_ == null) {
    -          metricBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricOrBuilder>(
    +          metricBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder>(
                       metric_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -14613,15 +15250,95 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             }
             return metricBuilder_;
           }
    +
    +      private java.lang.Object unit_ = "";
    +      /**
    +       * optional string unit = 5;
    +       * @return Whether the unit field is set.
    +       */
    +      public boolean hasUnit() {
    +        return ((bitField0_ & 0x00000010) != 0);
    +      }
    +      /**
    +       * optional string unit = 5;
    +       * @return The unit.
    +       */
    +      public java.lang.String getUnit() {
    +        java.lang.Object ref = unit_;
    +        if (!(ref instanceof java.lang.String)) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs =
    +              (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          java.lang.String s = bs.toStringUtf8();
    +          if (bs.isValidUtf8()) {
    +            unit_ = s;
    +          }
    +          return s;
    +        } else {
    +          return (java.lang.String) ref;
    +        }
    +      }
    +      /**
    +       * optional string unit = 5;
    +       * @return The bytes for unit.
    +       */
    +      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +          getUnitBytes() {
    +        java.lang.Object ref = unit_;
    +        if (ref instanceof String) {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    +              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +                  (java.lang.String) ref);
    +          unit_ = b;
    +          return b;
    +        } else {
    +          return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        }
    +      }
    +      /**
    +       * optional string unit = 5;
    +       * @param value The unit to set.
    +       * @return This builder for chaining.
    +       */
    +      public Builder setUnit(
    +          java.lang.String value) {
    +        if (value == null) { throw new NullPointerException(); }
    +        unit_ = value;
    +        bitField0_ |= 0x00000010;
    +        onChanged();
    +        return this;
    +      }
    +      /**
    +       * optional string unit = 5;
    +       * @return This builder for chaining.
    +       */
    +      public Builder clearUnit() {
    +        unit_ = getDefaultInstance().getUnit();
    +        bitField0_ = (bitField0_ & ~0x00000010);
    +        onChanged();
    +        return this;
    +      }
    +      /**
    +       * optional string unit = 5;
    +       * @param value The bytes for unit to set.
    +       * @return This builder for chaining.
    +       */
    +      public Builder setUnitBytes(
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString value) {
    +        if (value == null) { throw new NullPointerException(); }
    +        unit_ = value;
    +        bitField0_ |= 0x00000010;
    +        onChanged();
    +        return this;
    +      }
           @java.lang.Override
           public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.setUnknownFields(unknownFields);
           }
     
           @java.lang.Override
           public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UnknownFieldSet unknownFields) {
    +          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
             return super.mergeUnknownFields(unknownFields);
           }
     
    @@ -14630,119 +15347,119 @@ public final Builder mergeUnknownFields(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.AbstractParser() {
    +    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    +        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
           @java.lang.Override
           public MetricFamily parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.UninitializedMessageException e) {
    +        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.InvalidProtocolBufferException(e)
    +          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser parser() {
    +    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Parser getParserForType() {
    +    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics.MetricFamily getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
       }
     
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_LabelPair_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_LabelPair_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_Gauge_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_Gauge_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_Counter_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_Counter_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_Quantile_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_Quantile_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_Summary_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_Summary_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_Untyped_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_Untyped_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_Histogram_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_Histogram_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_Bucket_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_Bucket_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_BucketSpan_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_Exemplar_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_Exemplar_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_Metric_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_Metric_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.Descriptor
    +  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
         internal_static_io_prometheus_client_MetricFamily_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
           internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable;
     
    -  public static io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FileDescriptor
    +  public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FileDescriptor
           getDescriptor() {
         return descriptor;
       }
    -  private static  io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FileDescriptor
    +  private static  io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FileDescriptor
           descriptor;
       static {
         java.lang.String[] descriptorData = {
    @@ -14758,7 +15475,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           "\001 \001(\004\022\022\n\nsample_sum\030\002 \001(\001\0220\n\010quantile\030\003 " +
           "\003(\0132\036.io.prometheus.client.Quantile\0225\n\021c" +
           "reated_timestamp\030\004 \001(\0132\032.google.protobuf" +
    -      ".Timestamp\"\030\n\007Untyped\022\r\n\005value\030\001 \001(\001\"\336\003\n" +
    +      ".Timestamp\"\030\n\007Untyped\022\r\n\005value\030\001 \001(\001\"\221\004\n" +
           "\tHistogram\022\024\n\014sample_count\030\001 \001(\004\022\032\n\022samp" +
           "le_count_float\030\004 \001(\001\022\022\n\nsample_sum\030\002 \001(\001" +
           "\022,\n\006bucket\030\003 \003(\0132\034.io.prometheus.client." +
    @@ -14770,112 +15487,113 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           "Span\022\026\n\016negative_delta\030\n \003(\022\022\026\n\016negative" +
           "_count\030\013 \003(\001\0227\n\rpositive_span\030\014 \003(\0132 .io" +
           ".prometheus.client.BucketSpan\022\026\n\016positiv" +
    -      "e_delta\030\r \003(\022\022\026\n\016positive_count\030\016 \003(\001\"\211\001" +
    -      "\n\006Bucket\022\030\n\020cumulative_count\030\001 \001(\004\022\036\n\026cu" +
    -      "mulative_count_float\030\004 \001(\001\022\023\n\013upper_boun" +
    -      "d\030\002 \001(\001\0220\n\010exemplar\030\003 \001(\0132\036.io.prometheu" +
    -      "s.client.Exemplar\",\n\nBucketSpan\022\016\n\006offse" +
    -      "t\030\001 \001(\021\022\016\n\006length\030\002 \001(\r\"x\n\010Exemplar\022.\n\005l" +
    -      "abel\030\001 \003(\0132\037.io.prometheus.client.LabelP" +
    -      "air\022\r\n\005value\030\002 \001(\001\022-\n\ttimestamp\030\003 \001(\0132\032." +
    -      "google.protobuf.Timestamp\"\276\002\n\006Metric\022.\n\005" +
    -      "label\030\001 \003(\0132\037.io.prometheus.client.Label" +
    -      "Pair\022*\n\005gauge\030\002 \001(\0132\033.io.prometheus.clie" +
    -      "nt.Gauge\022.\n\007counter\030\003 \001(\0132\035.io.prometheu" +
    -      "s.client.Counter\022.\n\007summary\030\004 \001(\0132\035.io.p" +
    -      "rometheus.client.Summary\022.\n\007untyped\030\005 \001(" +
    -      "\0132\035.io.prometheus.client.Untyped\0222\n\thist" +
    -      "ogram\030\007 \001(\0132\037.io.prometheus.client.Histo" +
    -      "gram\022\024\n\014timestamp_ms\030\006 \001(\003\"\210\001\n\014MetricFam" +
    -      "ily\022\014\n\004name\030\001 \001(\t\022\014\n\004help\030\002 \001(\t\022.\n\004type\030" +
    -      "\003 \001(\0162 .io.prometheus.client.MetricType\022" +
    -      ",\n\006metric\030\004 \003(\0132\034.io.prometheus.client.M" +
    -      "etric*b\n\nMetricType\022\013\n\007COUNTER\020\000\022\t\n\005GAUG" +
    -      "E\020\001\022\013\n\007SUMMARY\020\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGR" +
    -      "AM\020\004\022\023\n\017GAUGE_HISTOGRAM\020\005B\212\001\nLio.prometh" +
    -      "eus.metrics.expositionformats.generated." +
    -      "com_google_protobuf_3_21_7Z:github.com/p" +
    -      "rometheus/client_model/go;io_prometheus_" +
    -      "client"
    +      "e_delta\030\r \003(\022\022\026\n\016positive_count\030\016 \003(\001\0221\n" +
    +      "\texemplars\030\020 \003(\0132\036.io.prometheus.client." +
    +      "Exemplar\"\211\001\n\006Bucket\022\030\n\020cumulative_count\030" +
    +      "\001 \001(\004\022\036\n\026cumulative_count_float\030\004 \001(\001\022\023\n" +
    +      "\013upper_bound\030\002 \001(\001\0220\n\010exemplar\030\003 \001(\0132\036.i" +
    +      "o.prometheus.client.Exemplar\",\n\nBucketSp" +
    +      "an\022\016\n\006offset\030\001 \001(\021\022\016\n\006length\030\002 \001(\r\"x\n\010Ex" +
    +      "emplar\022.\n\005label\030\001 \003(\0132\037.io.prometheus.cl" +
    +      "ient.LabelPair\022\r\n\005value\030\002 \001(\001\022-\n\ttimesta" +
    +      "mp\030\003 \001(\0132\032.google.protobuf.Timestamp\"\276\002\n" +
    +      "\006Metric\022.\n\005label\030\001 \003(\0132\037.io.prometheus.c" +
    +      "lient.LabelPair\022*\n\005gauge\030\002 \001(\0132\033.io.prom" +
    +      "etheus.client.Gauge\022.\n\007counter\030\003 \001(\0132\035.i" +
    +      "o.prometheus.client.Counter\022.\n\007summary\030\004" +
    +      " \001(\0132\035.io.prometheus.client.Summary\022.\n\007u" +
    +      "ntyped\030\005 \001(\0132\035.io.prometheus.client.Unty" +
    +      "ped\0222\n\thistogram\030\007 \001(\0132\037.io.prometheus.c" +
    +      "lient.Histogram\022\024\n\014timestamp_ms\030\006 \001(\003\"\226\001" +
    +      "\n\014MetricFamily\022\014\n\004name\030\001 \001(\t\022\014\n\004help\030\002 \001" +
    +      "(\t\022.\n\004type\030\003 \001(\0162 .io.prometheus.client." +
    +      "MetricType\022,\n\006metric\030\004 \003(\0132\034.io.promethe" +
    +      "us.client.Metric\022\014\n\004unit\030\005 \001(\t*b\n\nMetric" +
    +      "Type\022\013\n\007COUNTER\020\000\022\t\n\005GAUGE\020\001\022\013\n\007SUMMARY\020" +
    +      "\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004\022\023\n\017GAUGE_H" +
    +      "ISTOGRAM\020\005B\212\001\nLio.prometheus.metrics.exp" +
    +      "ositionformats.generated.com_google_prot" +
    +      "obuf_3_25_3Z:github.com/prometheus/clien" +
    +      "t_model/go;io_prometheus_client"
         };
    -    descriptor = io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FileDescriptor
    +    descriptor = io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FileDescriptor
           .internalBuildGeneratedFileFrom(descriptorData,
    -        new io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Descriptors.FileDescriptor[] {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampProto.getDescriptor(),
    +        new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FileDescriptor[] {
    +          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampProto.getDescriptor(),
             });
         internal_static_io_prometheus_client_LabelPair_descriptor =
           getDescriptor().getMessageTypes().get(0);
         internal_static_io_prometheus_client_LabelPair_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_LabelPair_descriptor,
             new java.lang.String[] { "Name", "Value", });
         internal_static_io_prometheus_client_Gauge_descriptor =
           getDescriptor().getMessageTypes().get(1);
         internal_static_io_prometheus_client_Gauge_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_Gauge_descriptor,
             new java.lang.String[] { "Value", });
         internal_static_io_prometheus_client_Counter_descriptor =
           getDescriptor().getMessageTypes().get(2);
         internal_static_io_prometheus_client_Counter_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_Counter_descriptor,
             new java.lang.String[] { "Value", "Exemplar", "CreatedTimestamp", });
         internal_static_io_prometheus_client_Quantile_descriptor =
           getDescriptor().getMessageTypes().get(3);
         internal_static_io_prometheus_client_Quantile_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_Quantile_descriptor,
             new java.lang.String[] { "Quantile", "Value", });
         internal_static_io_prometheus_client_Summary_descriptor =
           getDescriptor().getMessageTypes().get(4);
         internal_static_io_prometheus_client_Summary_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_Summary_descriptor,
             new java.lang.String[] { "SampleCount", "SampleSum", "Quantile", "CreatedTimestamp", });
         internal_static_io_prometheus_client_Untyped_descriptor =
           getDescriptor().getMessageTypes().get(5);
         internal_static_io_prometheus_client_Untyped_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_Untyped_descriptor,
             new java.lang.String[] { "Value", });
         internal_static_io_prometheus_client_Histogram_descriptor =
           getDescriptor().getMessageTypes().get(6);
         internal_static_io_prometheus_client_Histogram_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_Histogram_descriptor,
    -        new java.lang.String[] { "SampleCount", "SampleCountFloat", "SampleSum", "Bucket", "CreatedTimestamp", "Schema", "ZeroThreshold", "ZeroCount", "ZeroCountFloat", "NegativeSpan", "NegativeDelta", "NegativeCount", "PositiveSpan", "PositiveDelta", "PositiveCount", });
    +        new java.lang.String[] { "SampleCount", "SampleCountFloat", "SampleSum", "Bucket", "CreatedTimestamp", "Schema", "ZeroThreshold", "ZeroCount", "ZeroCountFloat", "NegativeSpan", "NegativeDelta", "NegativeCount", "PositiveSpan", "PositiveDelta", "PositiveCount", "Exemplars", });
         internal_static_io_prometheus_client_Bucket_descriptor =
           getDescriptor().getMessageTypes().get(7);
         internal_static_io_prometheus_client_Bucket_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_Bucket_descriptor,
             new java.lang.String[] { "CumulativeCount", "CumulativeCountFloat", "UpperBound", "Exemplar", });
         internal_static_io_prometheus_client_BucketSpan_descriptor =
           getDescriptor().getMessageTypes().get(8);
         internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_BucketSpan_descriptor,
             new java.lang.String[] { "Offset", "Length", });
         internal_static_io_prometheus_client_Exemplar_descriptor =
           getDescriptor().getMessageTypes().get(9);
         internal_static_io_prometheus_client_Exemplar_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_Exemplar_descriptor,
             new java.lang.String[] { "Label", "Value", "Timestamp", });
         internal_static_io_prometheus_client_Metric_descriptor =
           getDescriptor().getMessageTypes().get(10);
         internal_static_io_prometheus_client_Metric_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_Metric_descriptor,
             new java.lang.String[] { "Label", "Gauge", "Counter", "Summary", "Untyped", "Histogram", "TimestampMs", });
         internal_static_io_prometheus_client_MetricFamily_descriptor =
           getDescriptor().getMessageTypes().get(11);
         internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.GeneratedMessageV3.FieldAccessorTable(
    +      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
             internal_static_io_prometheus_client_MetricFamily_descriptor,
    -        new java.lang.String[] { "Name", "Help", "Type", "Metric", });
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TimestampProto.getDescriptor();
    +        new java.lang.String[] { "Name", "Help", "Type", "Metric", "Unit", });
    +    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampProto.getDescriptor();
       }
     
       // @@protoc_insertion_point(outer_class_scope)
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java
    index 090ac2a89..e0103059a 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java
    @@ -1,7 +1,7 @@
     package io.prometheus.metrics.expositionformats;
     
    -import io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TextFormat;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics;
    +import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot;
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java
    index e8beeee6c..ad3a28828 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java
    @@ -1,6 +1,6 @@
     package io.prometheus.metrics.expositionformats;
     
    -import io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.Timestamp;
    +import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp;
     
     public class ProtobufUtil {
     
    diff --git a/prometheus-metrics-exposition-formats/src/main/protobuf/metrics.proto b/prometheus-metrics-exposition-formats/src/main/protobuf/metrics.proto
    index 1faefbca4..724f96643 100644
    --- a/prometheus-metrics-exposition-formats/src/main/protobuf/metrics.proto
    +++ b/prometheus-metrics-exposition-formats/src/main/protobuf/metrics.proto
    @@ -14,7 +14,7 @@
     syntax = "proto2";
     
     package io.prometheus.client;
    -option java_package = "io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7";
    +option java_package = "io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3";
     option go_package = "github.com/prometheus/client_model/go;io_prometheus_client";
     
     import "google/protobuf/timestamp.proto";
    @@ -107,6 +107,9 @@ message Histogram {
       // histograms.
       repeated sint64 positive_delta    = 13; // Count delta of each bucket compared to previous one (or to zero for 1st bucket).
       repeated double positive_count    = 14; // Absolute count of each bucket.
    +
    +  // Only used for native histograms. These exemplars MUST have a timestamp.
    +  repeated Exemplar exemplars = 16;
     }
     
     // A Bucket of a conventional histogram, each of which is treated as
    @@ -150,4 +153,5 @@ message MetricFamily {
       optional string     help   = 2;
       optional MetricType type   = 3;
       repeated Metric     metric = 4;
    +  optional string     unit   = 5;
     }
    diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    index 10c7d3a0d..c86bc6520 100644
    --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    @@ -1,7 +1,7 @@
     package io.prometheus.metrics.expositionformats;
     
    -import io.prometheus.metrics.shaded.com_google_protobuf_3_21_7.TextFormat;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_21_7.Metrics;
    +import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot;
     import io.prometheus.metrics.model.snapshots.Exemplar;
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    index 73f96d5f5..8c8d58696 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    @@ -16,8 +16,8 @@
         
     
         
    -        1.31.0
    -        1_31_0
    +        1.36.0
    +        1_36_0
         
     
         
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    index 224571946..8d99fd238 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    @@ -20,9 +20,9 @@
         
             
             
    -        3.21.7
    +        3.25.3
             
    -        3_21_7
    +        3_25_3
         
     
         
    
    From 53d622bcbc807762ff5b93d84e9150be92e21c38 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Fri, 22 Mar 2024 16:47:50 +0100
    Subject: [PATCH 059/870] Temporarily add shaded dependencies to prepare for
     release
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index dd1edea32..ee7c38843 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -66,7 +66,7 @@
             prometheus-metrics-instrumentation-jvm
             prometheus-metrics-instrumentation-dropwizard5
             prometheus-metrics-simpleclient-bridge
    -        
    +        prometheus-metrics-shaded-dependencies
             examples
             benchmarks
             integration-tests
    
    From 71cf428df6450b2365917e772dce4d32f1aeaa32 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Fri, 22 Mar 2024 16:53:11 +0100
    Subject: [PATCH 060/870] Update release docs
    
    ---
     MAINTAINER_NOTES.md | 46 +++++++++++++++++++++++++++++++++++++++++++--
     1 file changed, 44 insertions(+), 2 deletions(-)
    
    diff --git a/MAINTAINER_NOTES.md b/MAINTAINER_NOTES.md
    index 90f030c23..deeaee4dd 100644
    --- a/MAINTAINER_NOTES.md
    +++ b/MAINTAINER_NOTES.md
    @@ -8,15 +8,57 @@ Use the [Versions Maven Plugin](https://www.mojohaus.org/versions-maven-plugin/i
     ./mvnw versions:use-latest-releases
     ```
     
    +The versions plugin does not catch the `otel.version` in `prometheus-metrics-exporter-opentelemetry`. This needs to be updated manually.
    +
    +## Update Shaded Dependencies
    +
    +There are two modules for shaded dependencies:
    +* `prometheus-metrics-shaded-opentelemetry`: OpenTelemetry data model.
    +* `prometheus-metrics-shaded-protobuf`: Google's protobuf library.
    +
    +The shaded modules are commented out in the root `pom.xml`. Instead of using the shaded dependencies from the project, we use the latest shaded dependencies from Maven central (or from the local Maven repository in `~/.m2/repository/`). This way we can `include` the shaded package name directly. We find this easier than importing the original package name and have it renamed at build time.
    +
    +In order to update dependencies of the shaded modules (like Google's protobuf library or the OpenTelemetry library), do the following:
    +
    +Step 1: Install updated versions of the shaded dependencies in your local Maven repository.
    +
    +* Update the dependency versions in the shaded modules (both `*.version` and `*.version.string`).
    +* `cd ./prometheus-metrics-shaded-dependencies ; ../mvnw install ; cd ..`
    +
    +Step 2: Update `prometheus-metrics-expositon-formats`
    +
    +* Change the version of the `prometheus-metrics-shaded-protobuf` dependency in `pom.xml` to `${project.version}`.
    +* Update `PROTOBUF_VERSION_STRING` in `generate-protobuf.sh` and run the script to update the source code.
    +* Use find-and-replace to update the version numbers in the imported package names in the source code of `prometheus-metrics-exposition-formats` and `prometheus-metrics-core`.
    +
    +Step 3: Update `prometheus-metrics-exporter-opentelemetry`
    +
    +* Change the version of the `prometheus-metrics-shaded-opentelemetry` dependency in `pom.xml` to `${project.version}`.
    +* Use find-and-replace to update the version numbers in the imported package names in the source code of `prometheus-metrics-exporter-opentelemetry`.
    +
    +Step 4: Release
    +
    +_see below_
    +
     ## Release
     
    +Create a commit to temporarily add shaded dependencies to the project:
    +
    +* Add the `prometheus-metrics-shaded-dependencies` module to the root `pom.xml`.
    +* Change the versions of the shaded dependencies to `${project.version}` in `prometheus-metrics-exporter-opentelemetry` and `prometheus-metrics-exposition-formats`.
    +
    +Release:
    +
     ```
     ./mvnw release:prepare -DreleaseVersion=1.2.0 -DdevelopmentVersion=1.3.0-SNAPSHOT
     ./mvnw release:perform -DreleaseVersion=1.2.0 -DdevelopmentVersion=1.3.0-SNAPSHOT
     ```
     
    -`release:prepare` does Github tags and commits, while `release:perform` signs the artifacts and uploads them to the staging repositoring on [https://oss.sonatype.org](https://oss.sonatype.org).
    +`release:prepare` does GitHub tags and commits, while `release:perform` signs the artifacts and uploads them to the staging repositoring on [https://oss.sonatype.org](https://oss.sonatype.org).
     
     After that, manually verify the uploaded artifacts on [https://oss.sonatype.org/#stagingRepositories](https://oss.sonatype.org/#stagingRepositories), click `Close` to trigger Sonatype's verification, and then `Release`.
     
    -Note: We release only the parent module and the modules starting with simpleclient. Currently, we manually remove the benchmark and integration test modules. Todo: Instead of manually removing these modules, we should reconfigure the build to make sure that these modules aren't released.
    +Create a commit to remove dependencies from the build (undoing the first step):
    +
    +* Comment out the `prometheus-metrics-shaded-dependencies` module to the root `pom.xml`.
    +* Change the versions of the shaded dependencies to the latest released version on Maven Central in `prometheus-metrics-exporter-opentelemetry` and `prometheus-metrics-exposition-formats`.
    
    From fbb6ae746735204f8990e84bd8c24d0006896b09 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Fri, 22 Mar 2024 17:04:47 +0100
    Subject: [PATCH 061/870] Update shaded dependencies in BOM
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     MAINTAINER_NOTES.md            | 10 +++++++---
     prometheus-metrics-bom/pom.xml |  9 ++++++---
     2 files changed, 13 insertions(+), 6 deletions(-)
    
    diff --git a/MAINTAINER_NOTES.md b/MAINTAINER_NOTES.md
    index deeaee4dd..a58e73a45 100644
    --- a/MAINTAINER_NOTES.md
    +++ b/MAINTAINER_NOTES.md
    @@ -36,7 +36,11 @@ Step 3: Update `prometheus-metrics-exporter-opentelemetry`
     * Change the version of the `prometheus-metrics-shaded-opentelemetry` dependency in `pom.xml` to `${project.version}`.
     * Use find-and-replace to update the version numbers in the imported package names in the source code of `prometheus-metrics-exporter-opentelemetry`.
     
    -Step 4: Release
    +Step 4: Update `prometheus-metrics-bom`
    +
    +* Set the shaded dependency version property to `${project.version}` in `prometheus-metrics-bom/pom.xml`
    +
    +Step 5: Release
     
     _see below_
     
    @@ -45,7 +49,7 @@ _see below_
     Create a commit to temporarily add shaded dependencies to the project:
     
     * Add the `prometheus-metrics-shaded-dependencies` module to the root `pom.xml`.
    -* Change the versions of the shaded dependencies to `${project.version}` in `prometheus-metrics-exporter-opentelemetry` and `prometheus-metrics-exposition-formats`.
    +* Change the versions of the shaded dependencies to `${project.version}` in `prometheus-metrics-exporter-opentelemetry`, `prometheus-metrics-exposition-formats`, and `prometheus-metrics-bom`.
     
     Release:
     
    @@ -61,4 +65,4 @@ After that, manually verify the uploaded artifacts on [https://oss.sonatype.org/
     Create a commit to remove dependencies from the build (undoing the first step):
     
     * Comment out the `prometheus-metrics-shaded-dependencies` module to the root `pom.xml`.
    -* Change the versions of the shaded dependencies to the latest released version on Maven Central in `prometheus-metrics-exporter-opentelemetry` and `prometheus-metrics-exposition-formats`.
    +* Change the versions of the shaded dependencies to the latest released version on Maven Central in `prometheus-metrics-exporter-opentelemetry`, `prometheus-metrics-exposition-formats`, and `prometheus-metrics-bom`.
    diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml
    index f11653adc..7e10fca3a 100644
    --- a/prometheus-metrics-bom/pom.xml
    +++ b/prometheus-metrics-bom/pom.xml
    @@ -118,17 +118,20 @@
                 
                     io.prometheus
                     prometheus-metrics-shaded-dependencies
    -                ${prometheus.metrics.shaded.dependencies.version}
    +                
    +                ${project.version}
                 
                 
                     io.prometheus
                     prometheus-metrics-shaded-protobuf
    -                ${prometheus.metrics.shaded.dependencies.version}
    +                
    +                ${project.version}
                 
                 
                     io.prometheus
                     prometheus-metrics-shaded-opentelemetry
    -                ${prometheus.metrics.shaded.dependencies.version}
    +                
    +                ${project.version}
                 
             
         
    
    From 1eee0a4431daf30653642d3405c4cf73cf3344e5 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Fri, 22 Mar 2024 17:10:15 +0100
    Subject: [PATCH 062/870] [maven-release-plugin] prepare release v1.2.0
    
    ---
     benchmarks/pom.xml                                            | 2 +-
     .../example-greeting-service/pom.xml                          | 2 +-
     .../example-hello-world-app/pom.xml                           | 2 +-
     examples/example-exemplars-tail-sampling/pom.xml              | 2 +-
     examples/example-exporter-httpserver/pom.xml                  | 2 +-
     examples/example-exporter-multi-target/pom.xml                | 2 +-
     examples/example-exporter-opentelemetry/pom.xml               | 2 +-
     examples/example-exporter-servlet-tomcat/pom.xml              | 2 +-
     examples/example-native-histogram/pom.xml                     | 2 +-
     examples/example-prometheus-properties/pom.xml                | 2 +-
     examples/example-simpleclient-bridge/pom.xml                  | 2 +-
     examples/pom.xml                                              | 2 +-
     integration-tests/it-common/pom.xml                           | 2 +-
     .../it-exporter/it-exporter-httpserver-sample/pom.xml         | 2 +-
     .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml      | 2 +-
     .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml     | 2 +-
     integration-tests/it-exporter/it-exporter-test/pom.xml        | 2 +-
     integration-tests/it-exporter/pom.xml                         | 4 ++--
     integration-tests/pom.xml                                     | 2 +-
     pom.xml                                                       | 4 ++--
     prometheus-metrics-bom/pom.xml                                | 2 +-
     prometheus-metrics-config/pom.xml                             | 2 +-
     prometheus-metrics-core/pom.xml                               | 2 +-
     prometheus-metrics-exporter-common/pom.xml                    | 2 +-
     prometheus-metrics-exporter-httpserver/pom.xml                | 2 +-
     prometheus-metrics-exporter-opentelemetry/pom.xml             | 2 +-
     prometheus-metrics-exporter-servlet-jakarta/pom.xml           | 2 +-
     prometheus-metrics-exporter-servlet-javax/pom.xml             | 2 +-
     prometheus-metrics-exposition-formats/pom.xml                 | 2 +-
     prometheus-metrics-instrumentation-dropwizard5/pom.xml        | 2 +-
     prometheus-metrics-instrumentation-jvm/pom.xml                | 2 +-
     prometheus-metrics-model/pom.xml                              | 2 +-
     prometheus-metrics-shaded-dependencies/pom.xml                | 2 +-
     .../prometheus-metrics-shaded-opentelemetry/pom.xml           | 2 +-
     .../prometheus-metrics-shaded-protobuf/pom.xml                | 2 +-
     prometheus-metrics-simpleclient-bridge/pom.xml                | 2 +-
     prometheus-metrics-tracer/pom.xml                             | 2 +-
     .../prometheus-metrics-tracer-common/pom.xml                  | 2 +-
     .../prometheus-metrics-tracer-initializer/pom.xml             | 2 +-
     .../prometheus-metrics-tracer-otel-agent/pom.xml              | 2 +-
     .../prometheus-metrics-tracer-otel/pom.xml                    | 2 +-
     41 files changed, 43 insertions(+), 43 deletions(-)
    
    diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
    index b57d082df..6ec3d3e7c 100644
    --- a/benchmarks/pom.xml
    +++ b/benchmarks/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         benchmarks
    diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    index 30a0821fa..6b719886b 100644
    --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         example-greeting-service
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    index 089ce016a..44c5da96d 100644
    --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         example-hello-world-app
    diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml
    index d0d0d2d4c..cf06a084c 100644
    --- a/examples/example-exemplars-tail-sampling/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         example-exemplars-tail-sampling
    diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml
    index b556efaf3..cab23d9b1 100644
    --- a/examples/example-exporter-httpserver/pom.xml
    +++ b/examples/example-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         example-exporter-httpserver
    diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml
    index 1bc04d401..5db678446 100644
    --- a/examples/example-exporter-multi-target/pom.xml
    +++ b/examples/example-exporter-multi-target/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         example-exporter-multi-target
    diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml
    index 06cae160a..61bff84e9 100644
    --- a/examples/example-exporter-opentelemetry/pom.xml
    +++ b/examples/example-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         example-exporter-opentelemetry
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml
    index 3e73b5db9..99035bb4b 100644
    --- a/examples/example-exporter-servlet-tomcat/pom.xml
    +++ b/examples/example-exporter-servlet-tomcat/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         example-exporter-servlet-tomcat
    diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml
    index 4f7180bad..ed9514562 100644
    --- a/examples/example-native-histogram/pom.xml
    +++ b/examples/example-native-histogram/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         example-native-histogram
    diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml
    index 60249fbee..d2de5ee12 100644
    --- a/examples/example-prometheus-properties/pom.xml
    +++ b/examples/example-prometheus-properties/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         example-prometheus-properties
    diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml
    index 981255de6..40dc51a57 100644
    --- a/examples/example-simpleclient-bridge/pom.xml
    +++ b/examples/example-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         example-simpleclient-bridge
    diff --git a/examples/pom.xml b/examples/pom.xml
    index aaf81b19f..aa7f467ff 100644
    --- a/examples/pom.xml
    +++ b/examples/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         examples
    diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml
    index 04198dc37..b08f7193e 100644
    --- a/integration-tests/it-common/pom.xml
    +++ b/integration-tests/it-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         it-common
    diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    index 846018037..93b40e6ae 100644
    --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         it-exporter-httpserver-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    index 6904718a6..b2724708f 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         it-exporter-servlet-jetty-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    index 194374da2..b97d8fcb9 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         it-exporter-servlet-tomcat-sample
    diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml
    index d3b80d268..7619da2a7 100644
    --- a/integration-tests/it-exporter/it-exporter-test/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         it-exporter-test
    diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml
    index c54b423f8..43c62b1c1 100644
    --- a/integration-tests/it-exporter/pom.xml
    +++ b/integration-tests/it-exporter/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         it-exporter
    @@ -29,7 +29,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        HEAD
    +        v1.2.0
         
     
         
    diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
    index 13a450d09..46b4788c5 100644
    --- a/integration-tests/pom.xml
    +++ b/integration-tests/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         integration-tests
    diff --git a/pom.xml b/pom.xml
    index ee7c38843..2a347ee09 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -5,7 +5,7 @@
     
         io.prometheus
         client_java
    -    1.2.0-SNAPSHOT
    +    1.2.0
     
         Prometheus Metrics Library
         http://github.com/prometheus/client_java
    @@ -30,7 +30,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        HEAD
    +        v1.2.0
         
     
         
    diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml
    index 7e10fca3a..c5b39b16f 100644
    --- a/prometheus-metrics-bom/pom.xml
    +++ b/prometheus-metrics-bom/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-bom
    diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml
    index 2247a8e8f..b01e1f1f9 100644
    --- a/prometheus-metrics-config/pom.xml
    +++ b/prometheus-metrics-config/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-config
    diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml
    index 7773301d0..411e7d434 100644
    --- a/prometheus-metrics-core/pom.xml
    +++ b/prometheus-metrics-core/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-core
    diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml
    index 94a1e74cb..a882004f0 100644
    --- a/prometheus-metrics-exporter-common/pom.xml
    +++ b/prometheus-metrics-exporter-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-exporter-common
    diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml
    index b99959fc4..c8c54cabc 100644
    --- a/prometheus-metrics-exporter-httpserver/pom.xml
    +++ b/prometheus-metrics-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-exporter-httpserver
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index 1586387d0..6b21e6b0c 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-exporter-opentelemetry
    diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    index 204ff2fa7..b7ff5abe5 100644
    --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-exporter-servlet-jakarta
    diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml
    index 023506a68..7b327a5a2 100644
    --- a/prometheus-metrics-exporter-servlet-javax/pom.xml
    +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-exporter-servlet-javax
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index f8e904561..553c0ffe6 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-exposition-formats
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    index 7c1763cad..b7562eae3 100644
    --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-instrumentation-dropwizard5
    diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml
    index b9490532b..a7e67754f 100644
    --- a/prometheus-metrics-instrumentation-jvm/pom.xml
    +++ b/prometheus-metrics-instrumentation-jvm/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-instrumentation-jvm
    diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml
    index f45d5b6fb..d81352042 100644
    --- a/prometheus-metrics-model/pom.xml
    +++ b/prometheus-metrics-model/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-model
    diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml
    index 395fcdfd8..95b567bb6 100644
    --- a/prometheus-metrics-shaded-dependencies/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-shaded-dependencies
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    index 8c8d58696..75323e37e 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-shaded-opentelemetry
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    index 8d99fd238..ab0aad2e1 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-shaded-protobuf
    diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml
    index aa355d50c..0119b57fb 100644
    --- a/prometheus-metrics-simpleclient-bridge/pom.xml
    +++ b/prometheus-metrics-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0-SNAPSHOT
    +        1.2.0
         
     
         prometheus-metrics-simpleclient-bridge
    diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml
    index 3d7b44fae..2a08bd8f1 100644
    --- a/prometheus-metrics-tracer/pom.xml
    +++ b/prometheus-metrics-tracer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         client_java
    -    1.2.0-SNAPSHOT
    +    1.2.0
       
     
       prometheus-metrics-tracer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    index ed86d6249..ab332a884 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.0-SNAPSHOT
    +    1.2.0
       
     
       prometheus-metrics-tracer-common
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    index 8c5657755..dc2fd28f7 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.0-SNAPSHOT
    +    1.2.0
       
     
       prometheus-metrics-tracer-initializer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    index 19db2bdf6..bab8227f0 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.0-SNAPSHOT
    +    1.2.0
       
     
       prometheus-metrics-tracer-otel-agent
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    index a5a34c38b..92c5614c1 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.0-SNAPSHOT
    +    1.2.0
       
     
       prometheus-metrics-tracer-otel
    
    From f668a420306f1c62d0ee85fb36f60684361f5c93 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Fri, 22 Mar 2024 17:10:19 +0100
    Subject: [PATCH 063/870] [maven-release-plugin] prepare for next development
     iteration
    
    ---
     benchmarks/pom.xml                                            | 2 +-
     .../example-greeting-service/pom.xml                          | 2 +-
     .../example-hello-world-app/pom.xml                           | 2 +-
     examples/example-exemplars-tail-sampling/pom.xml              | 2 +-
     examples/example-exporter-httpserver/pom.xml                  | 2 +-
     examples/example-exporter-multi-target/pom.xml                | 2 +-
     examples/example-exporter-opentelemetry/pom.xml               | 2 +-
     examples/example-exporter-servlet-tomcat/pom.xml              | 2 +-
     examples/example-native-histogram/pom.xml                     | 2 +-
     examples/example-prometheus-properties/pom.xml                | 2 +-
     examples/example-simpleclient-bridge/pom.xml                  | 2 +-
     examples/pom.xml                                              | 2 +-
     integration-tests/it-common/pom.xml                           | 2 +-
     .../it-exporter/it-exporter-httpserver-sample/pom.xml         | 2 +-
     .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml      | 2 +-
     .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml     | 2 +-
     integration-tests/it-exporter/it-exporter-test/pom.xml        | 2 +-
     integration-tests/it-exporter/pom.xml                         | 4 ++--
     integration-tests/pom.xml                                     | 2 +-
     pom.xml                                                       | 4 ++--
     prometheus-metrics-bom/pom.xml                                | 2 +-
     prometheus-metrics-config/pom.xml                             | 2 +-
     prometheus-metrics-core/pom.xml                               | 2 +-
     prometheus-metrics-exporter-common/pom.xml                    | 2 +-
     prometheus-metrics-exporter-httpserver/pom.xml                | 2 +-
     prometheus-metrics-exporter-opentelemetry/pom.xml             | 2 +-
     prometheus-metrics-exporter-servlet-jakarta/pom.xml           | 2 +-
     prometheus-metrics-exporter-servlet-javax/pom.xml             | 2 +-
     prometheus-metrics-exposition-formats/pom.xml                 | 2 +-
     prometheus-metrics-instrumentation-dropwizard5/pom.xml        | 2 +-
     prometheus-metrics-instrumentation-jvm/pom.xml                | 2 +-
     prometheus-metrics-model/pom.xml                              | 2 +-
     prometheus-metrics-shaded-dependencies/pom.xml                | 2 +-
     .../prometheus-metrics-shaded-opentelemetry/pom.xml           | 2 +-
     .../prometheus-metrics-shaded-protobuf/pom.xml                | 2 +-
     prometheus-metrics-simpleclient-bridge/pom.xml                | 2 +-
     prometheus-metrics-tracer/pom.xml                             | 2 +-
     .../prometheus-metrics-tracer-common/pom.xml                  | 2 +-
     .../prometheus-metrics-tracer-initializer/pom.xml             | 2 +-
     .../prometheus-metrics-tracer-otel-agent/pom.xml              | 2 +-
     .../prometheus-metrics-tracer-otel/pom.xml                    | 2 +-
     41 files changed, 43 insertions(+), 43 deletions(-)
    
    diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
    index 6ec3d3e7c..89181cfb9 100644
    --- a/benchmarks/pom.xml
    +++ b/benchmarks/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         benchmarks
    diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    index 6b719886b..1b20a0470 100644
    --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         example-greeting-service
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    index 44c5da96d..5baa99dd8 100644
    --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         example-hello-world-app
    diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml
    index cf06a084c..9d10957fb 100644
    --- a/examples/example-exemplars-tail-sampling/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         example-exemplars-tail-sampling
    diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml
    index cab23d9b1..a48c660d2 100644
    --- a/examples/example-exporter-httpserver/pom.xml
    +++ b/examples/example-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         example-exporter-httpserver
    diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml
    index 5db678446..25ed35b83 100644
    --- a/examples/example-exporter-multi-target/pom.xml
    +++ b/examples/example-exporter-multi-target/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         example-exporter-multi-target
    diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml
    index 61bff84e9..9d5162f0d 100644
    --- a/examples/example-exporter-opentelemetry/pom.xml
    +++ b/examples/example-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         example-exporter-opentelemetry
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml
    index 99035bb4b..bf6598e6f 100644
    --- a/examples/example-exporter-servlet-tomcat/pom.xml
    +++ b/examples/example-exporter-servlet-tomcat/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         example-exporter-servlet-tomcat
    diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml
    index ed9514562..fb86430ef 100644
    --- a/examples/example-native-histogram/pom.xml
    +++ b/examples/example-native-histogram/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         example-native-histogram
    diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml
    index d2de5ee12..6566acff3 100644
    --- a/examples/example-prometheus-properties/pom.xml
    +++ b/examples/example-prometheus-properties/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         example-prometheus-properties
    diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml
    index 40dc51a57..73453d437 100644
    --- a/examples/example-simpleclient-bridge/pom.xml
    +++ b/examples/example-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         example-simpleclient-bridge
    diff --git a/examples/pom.xml b/examples/pom.xml
    index aa7f467ff..c5ba5bff4 100644
    --- a/examples/pom.xml
    +++ b/examples/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         examples
    diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml
    index b08f7193e..e9fc2d60a 100644
    --- a/integration-tests/it-common/pom.xml
    +++ b/integration-tests/it-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         it-common
    diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    index 93b40e6ae..0d49e17a5 100644
    --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         it-exporter-httpserver-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    index b2724708f..a17fcb2c7 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         it-exporter-servlet-jetty-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    index b97d8fcb9..016433ec2 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         it-exporter-servlet-tomcat-sample
    diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml
    index 7619da2a7..def7ff0ca 100644
    --- a/integration-tests/it-exporter/it-exporter-test/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         it-exporter-test
    diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml
    index 43c62b1c1..2d012f5dd 100644
    --- a/integration-tests/it-exporter/pom.xml
    +++ b/integration-tests/it-exporter/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         it-exporter
    @@ -29,7 +29,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        v1.2.0
    +        HEAD
         
     
         
    diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
    index 46b4788c5..7523ab9b6 100644
    --- a/integration-tests/pom.xml
    +++ b/integration-tests/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         integration-tests
    diff --git a/pom.xml b/pom.xml
    index 2a347ee09..38b18b61f 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -5,7 +5,7 @@
     
         io.prometheus
         client_java
    -    1.2.0
    +    1.3.0-SNAPSHOT
     
         Prometheus Metrics Library
         http://github.com/prometheus/client_java
    @@ -30,7 +30,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        v1.2.0
    +        HEAD
         
     
         
    diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml
    index c5b39b16f..1b4439da5 100644
    --- a/prometheus-metrics-bom/pom.xml
    +++ b/prometheus-metrics-bom/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-bom
    diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml
    index b01e1f1f9..ec8e44b56 100644
    --- a/prometheus-metrics-config/pom.xml
    +++ b/prometheus-metrics-config/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-config
    diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml
    index 411e7d434..283a00a0b 100644
    --- a/prometheus-metrics-core/pom.xml
    +++ b/prometheus-metrics-core/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-core
    diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml
    index a882004f0..d8f89cef0 100644
    --- a/prometheus-metrics-exporter-common/pom.xml
    +++ b/prometheus-metrics-exporter-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-common
    diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml
    index c8c54cabc..34908364e 100644
    --- a/prometheus-metrics-exporter-httpserver/pom.xml
    +++ b/prometheus-metrics-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-httpserver
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index 6b21e6b0c..3b857aa6a 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-opentelemetry
    diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    index b7ff5abe5..63d05d998 100644
    --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-servlet-jakarta
    diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml
    index 7b327a5a2..41984e48b 100644
    --- a/prometheus-metrics-exporter-servlet-javax/pom.xml
    +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-servlet-javax
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index 553c0ffe6..018d2ece3 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exposition-formats
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    index b7562eae3..92fc3de4c 100644
    --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-instrumentation-dropwizard5
    diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml
    index a7e67754f..2b0208e5a 100644
    --- a/prometheus-metrics-instrumentation-jvm/pom.xml
    +++ b/prometheus-metrics-instrumentation-jvm/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-instrumentation-jvm
    diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml
    index d81352042..e6ac36c97 100644
    --- a/prometheus-metrics-model/pom.xml
    +++ b/prometheus-metrics-model/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-model
    diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml
    index 95b567bb6..ded184f1a 100644
    --- a/prometheus-metrics-shaded-dependencies/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-shaded-dependencies
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    index 75323e37e..e613da510 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-shaded-opentelemetry
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    index ab0aad2e1..cb0ca8ee7 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-shaded-protobuf
    diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml
    index 0119b57fb..ed4dd8921 100644
    --- a/prometheus-metrics-simpleclient-bridge/pom.xml
    +++ b/prometheus-metrics-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.0
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-simpleclient-bridge
    diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml
    index 2a08bd8f1..5a547bfce 100644
    --- a/prometheus-metrics-tracer/pom.xml
    +++ b/prometheus-metrics-tracer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         client_java
    -    1.2.0
    +    1.3.0-SNAPSHOT
       
     
       prometheus-metrics-tracer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    index ab332a884..b44735d05 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.0
    +    1.3.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-common
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    index dc2fd28f7..3b9aa5e5e 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.0
    +    1.3.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-initializer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    index bab8227f0..a5ed05f54 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.0
    +    1.3.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-otel-agent
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    index 92c5614c1..f10225ae1 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.0
    +    1.3.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-otel
    
    From eb9a77f1dccdd025aeecc63c0b3a3e5f2398e18f Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Fri, 22 Mar 2024 18:26:23 +0100
    Subject: [PATCH 064/870] Exclude shaded dependencies from the build
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     pom.xml                                           |  2 +-
     prometheus-metrics-bom/pom.xml                    | 14 +++++++-------
     prometheus-metrics-exporter-opentelemetry/pom.xml |  3 +--
     prometheus-metrics-exposition-formats/pom.xml     |  3 +--
     4 files changed, 10 insertions(+), 12 deletions(-)
    
    diff --git a/pom.xml b/pom.xml
    index 38b18b61f..057a36d2b 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -66,7 +66,7 @@
             prometheus-metrics-instrumentation-jvm
             prometheus-metrics-instrumentation-dropwizard5
             prometheus-metrics-simpleclient-bridge
    -        prometheus-metrics-shaded-dependencies
    +        
             examples
             benchmarks
             integration-tests
    diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml
    index 1b4439da5..16aa8e3c7 100644
    --- a/prometheus-metrics-bom/pom.xml
    +++ b/prometheus-metrics-bom/pom.xml
    @@ -17,7 +17,7 @@
         
     
         
    -        1.1.0
    +        1.2.0
         
     
         
    @@ -118,20 +118,20 @@
                 
                     io.prometheus
                     prometheus-metrics-shaded-dependencies
    -                
    -                ${project.version}
    +                ${prometheus.metrics.shaded.dependencies.version}
    +                
                 
                 
                     io.prometheus
                     prometheus-metrics-shaded-protobuf
    -                
    -                ${project.version}
    +                ${prometheus.metrics.shaded.dependencies.version}
    +                
                 
                 
                     io.prometheus
                     prometheus-metrics-shaded-opentelemetry
    -                
    -                ${project.version}
    +                ${prometheus.metrics.shaded.dependencies.version}
    +                
                 
             
         
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index 3b857aa6a..2a78d8d4c 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -46,8 +46,7 @@
             
                 io.prometheus
                 prometheus-metrics-shaded-opentelemetry
    -            ${project.version}
    -            
    +            1.2.0
             
     
             
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index 018d2ece3..6ce225873 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -50,8 +50,7 @@
             
                 io.prometheus
                 prometheus-metrics-shaded-protobuf
    -            ${project.version}
    -            
    +            1.2.0
             
     
             
    
    From 4b6e78fbff8e794cb141e02c46a4d1d36113db4b Mon Sep 17 00:00:00 2001
    From: Jonatan Ivanov 
    Date: Wed, 27 Mar 2024 21:36:46 -0700
    Subject: [PATCH 065/870] Add load(Map) overload to PrometheusPropertiesLoader
    
    Signed-off-by: Jonatan Ivanov 
    ---
     .../config/PrometheusPropertiesLoader.java    |  9 +++--
     .../PrometheusPropertiesLoaderTests.java      | 33 +++++++++++++++++++
     2 files changed, 40 insertions(+), 2 deletions(-)
     create mode 100644 prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java
    
    diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java
    index c4a09be7b..1cde3a188 100644
    --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java
    +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java
    @@ -25,7 +25,11 @@ public class PrometheusPropertiesLoader {
          * See {@link PrometheusProperties#get()}.
          */
         public static PrometheusProperties load() throws PrometheusPropertiesException {
    -        Map properties = loadProperties();
    +        return load(new Properties());
    +    }
    +
    +    public static PrometheusProperties load(Map externalProperties) throws PrometheusPropertiesException {
    +        Map properties = loadProperties(externalProperties);
             Map metricsConfigs = loadMetricsConfigs(properties);
             MetricsProperties defaultMetricsProperties = MetricsProperties.load("io.prometheus.metrics", properties);
             ExemplarsProperties exemplarConfig = ExemplarsProperties.load("io.prometheus.exemplars", properties);
    @@ -72,11 +76,12 @@ private static void validateAllPropertiesProcessed(Map propertie
             }
         }
     
    -    private static Map loadProperties() {
    +    private static Map loadProperties(Map externalProperties) {
             Map properties = new HashMap<>();
             properties.putAll(loadPropertiesFromClasspath());
             properties.putAll(loadPropertiesFromFile()); // overriding the entries from the classpath file
             properties.putAll(System.getProperties()); // overriding the entries from the properties file
    +        properties.putAll(externalProperties); // overriding all the entries above
             // TODO: Add environment variables like EXEMPLARS_ENABLED.
             return properties;
         }
    diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java
    new file mode 100644
    index 000000000..79c20702c
    --- /dev/null
    +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java
    @@ -0,0 +1,33 @@
    +package io.prometheus.metrics.config;
    +
    +import java.util.Properties;
    +
    +import org.junit.Assert;
    +import org.junit.Test;
    +
    +/**
    + * Tests for {@link PrometheusPropertiesLoader}.
    + */
    +public class PrometheusPropertiesLoaderTests {
    +
    +	@Test
    +	public void propertiesShouldBeLoadedFromPropertiesFile() {
    +		PrometheusProperties prometheusProperties = PrometheusPropertiesLoader.load();
    +		Assert.assertEquals(11, prometheusProperties.getDefaultMetricProperties().getHistogramClassicUpperBounds().size());
    +		Assert.assertEquals(4, prometheusProperties.getMetricProperties("http_duration_seconds").getHistogramClassicUpperBounds().size());
    +		Assert.assertTrue(prometheusProperties.getExporterProperties().getExemplarsOnAllMetricTypes());
    +	}
    +
    +	@Test
    +	public void externalPropertiesShouldOverridePropertiesFile() {
    +		Properties properties = new Properties();
    +		properties.setProperty("io.prometheus.metrics.histogramClassicUpperBounds", ".005, .01");
    +		properties.setProperty("io.prometheus.metrics.http_duration_seconds.histogramClassicUpperBounds", ".005, .01, .015");
    +		properties.setProperty("io.prometheus.exporter.exemplarsOnAllMetricTypes", "false");
    +
    +		PrometheusProperties prometheusProperties = PrometheusPropertiesLoader.load(properties);
    +		Assert.assertEquals(2, prometheusProperties.getDefaultMetricProperties().getHistogramClassicUpperBounds().size());
    +		Assert.assertEquals(3, prometheusProperties.getMetricProperties("http_duration_seconds").getHistogramClassicUpperBounds().size());
    +		Assert.assertFalse(prometheusProperties.getExporterProperties().getExemplarsOnAllMetricTypes());
    +	}
    +}
    
    From 966360b2735fb975a7110699efd4cb62284dfc0b Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Wed, 3 Apr 2024 23:29:48 +0200
    Subject: [PATCH 066/870] Remove import for SpanContextSupplier
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../metrics/core/exemplars/ExemplarSampler.java     | 13 +++++++++----
     1 file changed, 9 insertions(+), 4 deletions(-)
    
    diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java
    index af898724d..7c46c244d 100644
    --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java
    +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java
    @@ -1,7 +1,6 @@
     package io.prometheus.metrics.core.exemplars;
     
     import io.prometheus.metrics.tracer.common.SpanContext;
    -import io.prometheus.metrics.tracer.initializer.SpanContextSupplier;
     import io.prometheus.metrics.model.snapshots.Exemplar;
     import io.prometheus.metrics.model.snapshots.Exemplars;
     import io.prometheus.metrics.model.snapshots.Labels;
    @@ -46,8 +45,11 @@ public ExemplarSampler(ExemplarSamplerConfig config) {
         /**
          * Constructor with an additional {code spanContext} argument.
          * This is useful for testing, but may also be useful in some production scenarios.
    -     * If {@code spanContext != null} that spanContext is used and {@link SpanContextSupplier} is not used.
    -     * If {@code spanContext == null} the {@link SpanContextSupplier#getSpanContext()} is called to find a span context.
    +     * If {@code spanContext != null} that spanContext is used and
    +     * {@link io.prometheus.metrics.tracer.initializer.SpanContextSupplier SpanContextSupplier} is not used.
    +     * If {@code spanContext == null}
    +     * {@link io.prometheus.metrics.tracer.initializer.SpanContextSupplier#getSpanContext() SpanContextSupplier.getSpanContext()}
    +     * is called to find a span context.
          */
         public ExemplarSampler(ExemplarSamplerConfig config, SpanContext spanContext) {
             this.config = config;
    @@ -319,7 +321,10 @@ private long updateExemplar(int index, double value, long now) {
         }
     
         private Labels doSampleExemplar() {
    -        SpanContext spanContext = this.spanContext != null ? this.spanContext : SpanContextSupplier.getSpanContext();
    +        // Using the qualified name so that Micrometer can exclude the dependency on prometheus-metrics-tracer-initializer
    +        // as they provide their own implementation of SpanContextSupplier.
    +        // If we had an import statement for SpanContextSupplier the dependency would be needed in any case.
    +        SpanContext spanContext = this.spanContext != null ? this.spanContext : io.prometheus.metrics.tracer.initializer.SpanContextSupplier.getSpanContext();
             try {
                 if (spanContext != null) {
                     if (spanContext.isCurrentSpanSampled()) {
    
    From c475384ef17032f5a83d83d1cad98daa7862c87d Mon Sep 17 00:00:00 2001
    From: Tommy Ludwig <8924140+shakuzen@users.noreply.github.com>
    Date: Mon, 1 Apr 2024 16:36:33 +0900
    Subject: [PATCH 067/870] Fix link to JavaDocs
    
    The links in the table were swapped. This swaps them so the right method is linked.
    
    Signed-off-by: Tommy Ludwig <8924140+shakuzen@users.noreply.github.com>
    ---
     docs/content/config/config.md | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/docs/content/config/config.md b/docs/content/config/config.md
    index 43a396174..543ce26e4 100644
    --- a/docs/content/config/config.md
    +++ b/docs/content/config/config.md
    @@ -89,8 +89,8 @@ Exporter Properties
     
     | Name            | Javadoc | Note |
     | --------------- | --------|------|
    -| io.prometheus.exporter.includeCreatedTimestamps  | [ExporterProperties.getExemplarsOnAllMetricTypes()](/client_java/api/io/prometheus/metrics/config/ExporterProperties.html#getExemplarsOnAllMetricTypes()) | (1) |
    -| io.prometheus.exporter.exemplarsOnAllMetricTypes  | [ExporterProperties.getIncludeCreatedTimestamps()](/client_java/api/io/prometheus/metrics/config/ExporterProperties.html#getIncludeCreatedTimestamps()) | (1) |
    +| io.prometheus.exporter.includeCreatedTimestamps  | [ExporterProperties.getIncludeCreatedTimestamps()](/client_java/api/io/prometheus/metrics/config/ExporterProperties.html#getIncludeCreatedTimestamps()) | (1) |
    +| io.prometheus.exporter.exemplarsOnAllMetricTypes  | [ExporterProperties.getExemplarsOnAllMetricTypes()](/client_java/api/io/prometheus/metrics/config/ExporterProperties.html#getExemplarsOnAllMetricTypes()) | (1) |
     
     (1) Boolean value, `true` or `false`. Default see Javadoc.
     
    
    From 9ac45d509c82cae087a4dc46e0c8e5ab6b94f3b7 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Thu, 4 Apr 2024 22:43:39 +0200
    Subject: [PATCH 068/870] Temporarily add shaded dependencies to prepare for
     release
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     pom.xml                                           |  2 +-
     prometheus-metrics-bom/pom.xml                    | 12 ++++++------
     prometheus-metrics-exporter-opentelemetry/pom.xml |  3 ++-
     prometheus-metrics-exposition-formats/pom.xml     |  3 ++-
     4 files changed, 11 insertions(+), 9 deletions(-)
    
    diff --git a/pom.xml b/pom.xml
    index 057a36d2b..38b18b61f 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -66,7 +66,7 @@
             prometheus-metrics-instrumentation-jvm
             prometheus-metrics-instrumentation-dropwizard5
             prometheus-metrics-simpleclient-bridge
    -        
    +        prometheus-metrics-shaded-dependencies
             examples
             benchmarks
             integration-tests
    diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml
    index 16aa8e3c7..fce579b40 100644
    --- a/prometheus-metrics-bom/pom.xml
    +++ b/prometheus-metrics-bom/pom.xml
    @@ -118,20 +118,20 @@
                 
                     io.prometheus
                     prometheus-metrics-shaded-dependencies
    -                ${prometheus.metrics.shaded.dependencies.version}
    -                
    +                
    +                ${project.version}
                 
                 
                     io.prometheus
                     prometheus-metrics-shaded-protobuf
    -                ${prometheus.metrics.shaded.dependencies.version}
    -                
    +                
    +                ${project.version}
                 
                 
                     io.prometheus
                     prometheus-metrics-shaded-opentelemetry
    -                ${prometheus.metrics.shaded.dependencies.version}
    -                
    +                
    +                ${project.version}
                 
             
         
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index 2a78d8d4c..a54f33dae 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -46,7 +46,8 @@
             
                 io.prometheus
                 prometheus-metrics-shaded-opentelemetry
    -            1.2.0
    +            
    +            ${project.version}
             
     
             
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index 6ce225873..7a0e5784b 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -50,7 +50,8 @@
             
                 io.prometheus
                 prometheus-metrics-shaded-protobuf
    -            1.2.0
    +            
    +            ${project.version}
             
     
             
    
    From 092f90b4c97d20c2d77cd6264d2c2a18f7f5663b Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Thu, 4 Apr 2024 22:47:01 +0200
    Subject: [PATCH 069/870] [maven-release-plugin] prepare release v1.2.1
    
    ---
     benchmarks/pom.xml                                            | 2 +-
     .../example-greeting-service/pom.xml                          | 2 +-
     .../example-hello-world-app/pom.xml                           | 2 +-
     examples/example-exemplars-tail-sampling/pom.xml              | 2 +-
     examples/example-exporter-httpserver/pom.xml                  | 2 +-
     examples/example-exporter-multi-target/pom.xml                | 2 +-
     examples/example-exporter-opentelemetry/pom.xml               | 2 +-
     examples/example-exporter-servlet-tomcat/pom.xml              | 2 +-
     examples/example-native-histogram/pom.xml                     | 2 +-
     examples/example-prometheus-properties/pom.xml                | 2 +-
     examples/example-simpleclient-bridge/pom.xml                  | 2 +-
     examples/pom.xml                                              | 2 +-
     integration-tests/it-common/pom.xml                           | 2 +-
     .../it-exporter/it-exporter-httpserver-sample/pom.xml         | 2 +-
     .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml      | 2 +-
     .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml     | 2 +-
     integration-tests/it-exporter/it-exporter-test/pom.xml        | 2 +-
     integration-tests/it-exporter/pom.xml                         | 4 ++--
     integration-tests/pom.xml                                     | 2 +-
     pom.xml                                                       | 4 ++--
     prometheus-metrics-bom/pom.xml                                | 2 +-
     prometheus-metrics-config/pom.xml                             | 2 +-
     prometheus-metrics-core/pom.xml                               | 2 +-
     prometheus-metrics-exporter-common/pom.xml                    | 2 +-
     prometheus-metrics-exporter-httpserver/pom.xml                | 2 +-
     prometheus-metrics-exporter-opentelemetry/pom.xml             | 2 +-
     prometheus-metrics-exporter-servlet-jakarta/pom.xml           | 2 +-
     prometheus-metrics-exporter-servlet-javax/pom.xml             | 2 +-
     prometheus-metrics-exposition-formats/pom.xml                 | 2 +-
     prometheus-metrics-instrumentation-dropwizard5/pom.xml        | 2 +-
     prometheus-metrics-instrumentation-jvm/pom.xml                | 2 +-
     prometheus-metrics-model/pom.xml                              | 2 +-
     prometheus-metrics-shaded-dependencies/pom.xml                | 2 +-
     .../prometheus-metrics-shaded-opentelemetry/pom.xml           | 2 +-
     .../prometheus-metrics-shaded-protobuf/pom.xml                | 2 +-
     prometheus-metrics-simpleclient-bridge/pom.xml                | 2 +-
     prometheus-metrics-tracer/pom.xml                             | 2 +-
     .../prometheus-metrics-tracer-common/pom.xml                  | 2 +-
     .../prometheus-metrics-tracer-initializer/pom.xml             | 2 +-
     .../prometheus-metrics-tracer-otel-agent/pom.xml              | 2 +-
     .../prometheus-metrics-tracer-otel/pom.xml                    | 2 +-
     41 files changed, 43 insertions(+), 43 deletions(-)
    
    diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
    index 89181cfb9..153fe35bb 100644
    --- a/benchmarks/pom.xml
    +++ b/benchmarks/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         benchmarks
    diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    index 1b20a0470..4136bcd9d 100644
    --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         example-greeting-service
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    index 5baa99dd8..c0cdb2009 100644
    --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         example-hello-world-app
    diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml
    index 9d10957fb..e4c76db5f 100644
    --- a/examples/example-exemplars-tail-sampling/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         example-exemplars-tail-sampling
    diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml
    index a48c660d2..4eff2570a 100644
    --- a/examples/example-exporter-httpserver/pom.xml
    +++ b/examples/example-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         example-exporter-httpserver
    diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml
    index 25ed35b83..a7d749a7d 100644
    --- a/examples/example-exporter-multi-target/pom.xml
    +++ b/examples/example-exporter-multi-target/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         example-exporter-multi-target
    diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml
    index 9d5162f0d..791f29a96 100644
    --- a/examples/example-exporter-opentelemetry/pom.xml
    +++ b/examples/example-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         example-exporter-opentelemetry
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml
    index bf6598e6f..65b9325f6 100644
    --- a/examples/example-exporter-servlet-tomcat/pom.xml
    +++ b/examples/example-exporter-servlet-tomcat/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         example-exporter-servlet-tomcat
    diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml
    index fb86430ef..459fe67f8 100644
    --- a/examples/example-native-histogram/pom.xml
    +++ b/examples/example-native-histogram/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         example-native-histogram
    diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml
    index 6566acff3..e55f0ab3f 100644
    --- a/examples/example-prometheus-properties/pom.xml
    +++ b/examples/example-prometheus-properties/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         example-prometheus-properties
    diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml
    index 73453d437..8644d8269 100644
    --- a/examples/example-simpleclient-bridge/pom.xml
    +++ b/examples/example-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         example-simpleclient-bridge
    diff --git a/examples/pom.xml b/examples/pom.xml
    index c5ba5bff4..9eac97c75 100644
    --- a/examples/pom.xml
    +++ b/examples/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         examples
    diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml
    index e9fc2d60a..8cd43c2a9 100644
    --- a/integration-tests/it-common/pom.xml
    +++ b/integration-tests/it-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         it-common
    diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    index 0d49e17a5..e624ede8f 100644
    --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         it-exporter-httpserver-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    index a17fcb2c7..07f1aea24 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         it-exporter-servlet-jetty-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    index 016433ec2..00247b3de 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         it-exporter-servlet-tomcat-sample
    diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml
    index def7ff0ca..3cdd94910 100644
    --- a/integration-tests/it-exporter/it-exporter-test/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         it-exporter-test
    diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml
    index 2d012f5dd..a0292b604 100644
    --- a/integration-tests/it-exporter/pom.xml
    +++ b/integration-tests/it-exporter/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         it-exporter
    @@ -29,7 +29,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        HEAD
    +        v1.2.1
         
     
         
    diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
    index 7523ab9b6..79c644108 100644
    --- a/integration-tests/pom.xml
    +++ b/integration-tests/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         integration-tests
    diff --git a/pom.xml b/pom.xml
    index 38b18b61f..1556b6672 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -5,7 +5,7 @@
     
         io.prometheus
         client_java
    -    1.3.0-SNAPSHOT
    +    1.2.1
     
         Prometheus Metrics Library
         http://github.com/prometheus/client_java
    @@ -30,7 +30,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        HEAD
    +        v1.2.1
         
     
         
    diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml
    index fce579b40..887cfd13b 100644
    --- a/prometheus-metrics-bom/pom.xml
    +++ b/prometheus-metrics-bom/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-bom
    diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml
    index ec8e44b56..a8aa1e40f 100644
    --- a/prometheus-metrics-config/pom.xml
    +++ b/prometheus-metrics-config/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-config
    diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml
    index 283a00a0b..2ecba82b8 100644
    --- a/prometheus-metrics-core/pom.xml
    +++ b/prometheus-metrics-core/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-core
    diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml
    index d8f89cef0..5ac0bb795 100644
    --- a/prometheus-metrics-exporter-common/pom.xml
    +++ b/prometheus-metrics-exporter-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-exporter-common
    diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml
    index 34908364e..32921708f 100644
    --- a/prometheus-metrics-exporter-httpserver/pom.xml
    +++ b/prometheus-metrics-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-exporter-httpserver
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index a54f33dae..db29f75bf 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-exporter-opentelemetry
    diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    index 63d05d998..9f1d8eaa8 100644
    --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-exporter-servlet-jakarta
    diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml
    index 41984e48b..be403ae96 100644
    --- a/prometheus-metrics-exporter-servlet-javax/pom.xml
    +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-exporter-servlet-javax
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index 7a0e5784b..ee7c7110e 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-exposition-formats
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    index 92fc3de4c..5c96adbd3 100644
    --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-instrumentation-dropwizard5
    diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml
    index 2b0208e5a..8a7d818dc 100644
    --- a/prometheus-metrics-instrumentation-jvm/pom.xml
    +++ b/prometheus-metrics-instrumentation-jvm/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-instrumentation-jvm
    diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml
    index e6ac36c97..b5feb8533 100644
    --- a/prometheus-metrics-model/pom.xml
    +++ b/prometheus-metrics-model/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-model
    diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml
    index ded184f1a..7964f3e86 100644
    --- a/prometheus-metrics-shaded-dependencies/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-shaded-dependencies
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    index e613da510..b68c3afc7 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-shaded-opentelemetry
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    index cb0ca8ee7..8c51e8a24 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-shaded-protobuf
    diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml
    index ed4dd8921..c5fbb134b 100644
    --- a/prometheus-metrics-simpleclient-bridge/pom.xml
    +++ b/prometheus-metrics-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.3.0-SNAPSHOT
    +        1.2.1
         
     
         prometheus-metrics-simpleclient-bridge
    diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml
    index 5a547bfce..0db442a5f 100644
    --- a/prometheus-metrics-tracer/pom.xml
    +++ b/prometheus-metrics-tracer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         client_java
    -    1.3.0-SNAPSHOT
    +    1.2.1
       
     
       prometheus-metrics-tracer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    index b44735d05..58416dd03 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.3.0-SNAPSHOT
    +    1.2.1
       
     
       prometheus-metrics-tracer-common
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    index 3b9aa5e5e..5e9b1a103 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.3.0-SNAPSHOT
    +    1.2.1
       
     
       prometheus-metrics-tracer-initializer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    index a5ed05f54..9a644e27d 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.3.0-SNAPSHOT
    +    1.2.1
       
     
       prometheus-metrics-tracer-otel-agent
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    index f10225ae1..b6b334be4 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.3.0-SNAPSHOT
    +    1.2.1
       
     
       prometheus-metrics-tracer-otel
    
    From 39d3600c68229a20e196851144a60eb123f3dc5b Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Thu, 4 Apr 2024 22:47:05 +0200
    Subject: [PATCH 070/870] [maven-release-plugin] prepare for next development
     iteration
    
    ---
     benchmarks/pom.xml                                            | 2 +-
     .../example-greeting-service/pom.xml                          | 2 +-
     .../example-hello-world-app/pom.xml                           | 2 +-
     examples/example-exemplars-tail-sampling/pom.xml              | 2 +-
     examples/example-exporter-httpserver/pom.xml                  | 2 +-
     examples/example-exporter-multi-target/pom.xml                | 2 +-
     examples/example-exporter-opentelemetry/pom.xml               | 2 +-
     examples/example-exporter-servlet-tomcat/pom.xml              | 2 +-
     examples/example-native-histogram/pom.xml                     | 2 +-
     examples/example-prometheus-properties/pom.xml                | 2 +-
     examples/example-simpleclient-bridge/pom.xml                  | 2 +-
     examples/pom.xml                                              | 2 +-
     integration-tests/it-common/pom.xml                           | 2 +-
     .../it-exporter/it-exporter-httpserver-sample/pom.xml         | 2 +-
     .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml      | 2 +-
     .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml     | 2 +-
     integration-tests/it-exporter/it-exporter-test/pom.xml        | 2 +-
     integration-tests/it-exporter/pom.xml                         | 4 ++--
     integration-tests/pom.xml                                     | 2 +-
     pom.xml                                                       | 4 ++--
     prometheus-metrics-bom/pom.xml                                | 2 +-
     prometheus-metrics-config/pom.xml                             | 2 +-
     prometheus-metrics-core/pom.xml                               | 2 +-
     prometheus-metrics-exporter-common/pom.xml                    | 2 +-
     prometheus-metrics-exporter-httpserver/pom.xml                | 2 +-
     prometheus-metrics-exporter-opentelemetry/pom.xml             | 2 +-
     prometheus-metrics-exporter-servlet-jakarta/pom.xml           | 2 +-
     prometheus-metrics-exporter-servlet-javax/pom.xml             | 2 +-
     prometheus-metrics-exposition-formats/pom.xml                 | 2 +-
     prometheus-metrics-instrumentation-dropwizard5/pom.xml        | 2 +-
     prometheus-metrics-instrumentation-jvm/pom.xml                | 2 +-
     prometheus-metrics-model/pom.xml                              | 2 +-
     prometheus-metrics-shaded-dependencies/pom.xml                | 2 +-
     .../prometheus-metrics-shaded-opentelemetry/pom.xml           | 2 +-
     .../prometheus-metrics-shaded-protobuf/pom.xml                | 2 +-
     prometheus-metrics-simpleclient-bridge/pom.xml                | 2 +-
     prometheus-metrics-tracer/pom.xml                             | 2 +-
     .../prometheus-metrics-tracer-common/pom.xml                  | 2 +-
     .../prometheus-metrics-tracer-initializer/pom.xml             | 2 +-
     .../prometheus-metrics-tracer-otel-agent/pom.xml              | 2 +-
     .../prometheus-metrics-tracer-otel/pom.xml                    | 2 +-
     41 files changed, 43 insertions(+), 43 deletions(-)
    
    diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
    index 153fe35bb..89181cfb9 100644
    --- a/benchmarks/pom.xml
    +++ b/benchmarks/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         benchmarks
    diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    index 4136bcd9d..1b20a0470 100644
    --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         example-greeting-service
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    index c0cdb2009..5baa99dd8 100644
    --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             example-exemplars-tail-sampling
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         example-hello-world-app
    diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml
    index e4c76db5f..9d10957fb 100644
    --- a/examples/example-exemplars-tail-sampling/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         example-exemplars-tail-sampling
    diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml
    index 4eff2570a..a48c660d2 100644
    --- a/examples/example-exporter-httpserver/pom.xml
    +++ b/examples/example-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         example-exporter-httpserver
    diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml
    index a7d749a7d..25ed35b83 100644
    --- a/examples/example-exporter-multi-target/pom.xml
    +++ b/examples/example-exporter-multi-target/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         example-exporter-multi-target
    diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml
    index 791f29a96..9d5162f0d 100644
    --- a/examples/example-exporter-opentelemetry/pom.xml
    +++ b/examples/example-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         example-exporter-opentelemetry
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml
    index 65b9325f6..bf6598e6f 100644
    --- a/examples/example-exporter-servlet-tomcat/pom.xml
    +++ b/examples/example-exporter-servlet-tomcat/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         example-exporter-servlet-tomcat
    diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml
    index 459fe67f8..fb86430ef 100644
    --- a/examples/example-native-histogram/pom.xml
    +++ b/examples/example-native-histogram/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         example-native-histogram
    diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml
    index e55f0ab3f..6566acff3 100644
    --- a/examples/example-prometheus-properties/pom.xml
    +++ b/examples/example-prometheus-properties/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         example-prometheus-properties
    diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml
    index 8644d8269..73453d437 100644
    --- a/examples/example-simpleclient-bridge/pom.xml
    +++ b/examples/example-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             examples
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         example-simpleclient-bridge
    diff --git a/examples/pom.xml b/examples/pom.xml
    index 9eac97c75..c5ba5bff4 100644
    --- a/examples/pom.xml
    +++ b/examples/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         examples
    diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml
    index 8cd43c2a9..e9fc2d60a 100644
    --- a/integration-tests/it-common/pom.xml
    +++ b/integration-tests/it-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         it-common
    diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    index e624ede8f..0d49e17a5 100644
    --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         it-exporter-httpserver-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    index 07f1aea24..a17fcb2c7 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         it-exporter-servlet-jetty-sample
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    index 00247b3de..016433ec2 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         it-exporter-servlet-tomcat-sample
    diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml
    index 3cdd94910..def7ff0ca 100644
    --- a/integration-tests/it-exporter/it-exporter-test/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             it-exporter
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         it-exporter-test
    diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml
    index a0292b604..2d012f5dd 100644
    --- a/integration-tests/it-exporter/pom.xml
    +++ b/integration-tests/it-exporter/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             integration-tests
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         it-exporter
    @@ -29,7 +29,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        v1.2.1
    +        HEAD
         
     
         
    diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
    index 79c644108..7523ab9b6 100644
    --- a/integration-tests/pom.xml
    +++ b/integration-tests/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         integration-tests
    diff --git a/pom.xml b/pom.xml
    index 1556b6672..38b18b61f 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -5,7 +5,7 @@
     
         io.prometheus
         client_java
    -    1.2.1
    +    1.3.0-SNAPSHOT
     
         Prometheus Metrics Library
         http://github.com/prometheus/client_java
    @@ -30,7 +30,7 @@
             scm:git:git@github.com:prometheus/client_java.git
             scm:git:git@github.com:prometheus/client_java.git
             git@github.com:prometheus/client_java.git
    -        v1.2.1
    +        HEAD
         
     
         
    diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml
    index 887cfd13b..fce579b40 100644
    --- a/prometheus-metrics-bom/pom.xml
    +++ b/prometheus-metrics-bom/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-bom
    diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml
    index a8aa1e40f..ec8e44b56 100644
    --- a/prometheus-metrics-config/pom.xml
    +++ b/prometheus-metrics-config/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-config
    diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml
    index 2ecba82b8..283a00a0b 100644
    --- a/prometheus-metrics-core/pom.xml
    +++ b/prometheus-metrics-core/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-core
    diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml
    index 5ac0bb795..d8f89cef0 100644
    --- a/prometheus-metrics-exporter-common/pom.xml
    +++ b/prometheus-metrics-exporter-common/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-common
    diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml
    index 32921708f..34908364e 100644
    --- a/prometheus-metrics-exporter-httpserver/pom.xml
    +++ b/prometheus-metrics-exporter-httpserver/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-httpserver
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index db29f75bf..a54f33dae 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-opentelemetry
    diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    index 9f1d8eaa8..63d05d998 100644
    --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-servlet-jakarta
    diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml
    index be403ae96..41984e48b 100644
    --- a/prometheus-metrics-exporter-servlet-javax/pom.xml
    +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exporter-servlet-javax
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index ee7c7110e..7a0e5784b 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-exposition-formats
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    index 5c96adbd3..92fc3de4c 100644
    --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-instrumentation-dropwizard5
    diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml
    index 8a7d818dc..2b0208e5a 100644
    --- a/prometheus-metrics-instrumentation-jvm/pom.xml
    +++ b/prometheus-metrics-instrumentation-jvm/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-instrumentation-jvm
    diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml
    index b5feb8533..e6ac36c97 100644
    --- a/prometheus-metrics-model/pom.xml
    +++ b/prometheus-metrics-model/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-model
    diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml
    index 7964f3e86..ded184f1a 100644
    --- a/prometheus-metrics-shaded-dependencies/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-shaded-dependencies
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    index b68c3afc7..e613da510 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-shaded-opentelemetry
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    index 8c51e8a24..cb0ca8ee7 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             prometheus-metrics-shaded-dependencies
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-shaded-protobuf
    diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml
    index c5fbb134b..ed4dd8921 100644
    --- a/prometheus-metrics-simpleclient-bridge/pom.xml
    +++ b/prometheus-metrics-simpleclient-bridge/pom.xml
    @@ -5,7 +5,7 @@
         
             io.prometheus
             client_java
    -        1.2.1
    +        1.3.0-SNAPSHOT
         
     
         prometheus-metrics-simpleclient-bridge
    diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml
    index 0db442a5f..5a547bfce 100644
    --- a/prometheus-metrics-tracer/pom.xml
    +++ b/prometheus-metrics-tracer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         client_java
    -    1.2.1
    +    1.3.0-SNAPSHOT
       
     
       prometheus-metrics-tracer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    index 58416dd03..b44735d05 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.1
    +    1.3.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-common
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    index 5e9b1a103..3b9aa5e5e 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.1
    +    1.3.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-initializer
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    index 9a644e27d..a5ed05f54 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.1
    +    1.3.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-otel-agent
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    index b6b334be4..f10225ae1 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml
    @@ -5,7 +5,7 @@
       
         io.prometheus
         prometheus-metrics-tracer
    -    1.2.1
    +    1.3.0-SNAPSHOT
       
     
       prometheus-metrics-tracer-otel
    
    From 45a1e1adc0fa2b4c4df02d643ad24bb036af29d6 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Thu, 4 Apr 2024 23:20:24 +0200
    Subject: [PATCH 071/870] Exclude shaded dependencies from build
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     pom.xml                                           |  2 +-
     prometheus-metrics-bom/pom.xml                    | 14 +++++++-------
     prometheus-metrics-exporter-opentelemetry/pom.xml |  4 ++--
     prometheus-metrics-exposition-formats/pom.xml     |  4 ++--
     4 files changed, 12 insertions(+), 12 deletions(-)
    
    diff --git a/pom.xml b/pom.xml
    index 38b18b61f..057a36d2b 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -66,7 +66,7 @@
             prometheus-metrics-instrumentation-jvm
             prometheus-metrics-instrumentation-dropwizard5
             prometheus-metrics-simpleclient-bridge
    -        prometheus-metrics-shaded-dependencies
    +        
             examples
             benchmarks
             integration-tests
    diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml
    index fce579b40..d000aac2d 100644
    --- a/prometheus-metrics-bom/pom.xml
    +++ b/prometheus-metrics-bom/pom.xml
    @@ -17,7 +17,7 @@
         
     
         
    -        1.2.0
    +        1.2.1
         
     
         
    @@ -118,20 +118,20 @@
                 
                     io.prometheus
                     prometheus-metrics-shaded-dependencies
    -                
    -                ${project.version}
    +                ${prometheus.metrics.shaded.dependencies.version}
    +                
                 
                 
                     io.prometheus
                     prometheus-metrics-shaded-protobuf
    -                
    -                ${project.version}
    +                ${prometheus.metrics.shaded.dependencies.version}
    +                
                 
                 
                     io.prometheus
                     prometheus-metrics-shaded-opentelemetry
    -                
    -                ${project.version}
    +                ${prometheus.metrics.shaded.dependencies.version}
    +                
                 
             
         
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index a54f33dae..8d80bda14 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -46,8 +46,8 @@
             
                 io.prometheus
                 prometheus-metrics-shaded-opentelemetry
    -            
    -            ${project.version}
    +            1.2.1
    +            
             
     
             
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index 7a0e5784b..88e2b1955 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -50,8 +50,8 @@
             
                 io.prometheus
                 prometheus-metrics-shaded-protobuf
    -            
    -            ${project.version}
    +            1.2.1
    +            
             
     
             
    
    From 1c27e58a26cdf7cbe3751f02fcb9acab600fde64 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Fri, 5 Apr 2024 17:59:25 +0200
    Subject: [PATCH 072/870] Fix flaky test
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../bridge/SimpleclientCollectorTest.java        | 16 ++++++++++++----
     1 file changed, 12 insertions(+), 4 deletions(-)
    
    diff --git a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java
    index 8a5e2c018..2681ceed7 100644
    --- a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java
    +++ b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java
    @@ -52,7 +52,7 @@ public void testCounterComplete() throws IOException, InterruptedException {
         }
     
         @Test
    -    public void testCounterMinimal() throws IOException, InterruptedException {
    +    public void testCounterMinimal() throws IOException {
             Counter.build()
                     .name("events")
                     .help("total number of events")
    @@ -222,9 +222,17 @@ private String fixTimestamps(String s) {
             // Example of a "_created" timestamp in new format: 1694464002.939
             // The following regex translates the orig timestamp to the new timestamp
             return s
    -                .replaceAll( "1\\.([0-9]{9})([0-9]{3})E9", "1$1.$2") // Example: 1.694464002939E9
    -                .replaceAll( "1\\.([0-9]{9})([0-9]{2})E9", "1$1.$20") // Example: 1.69460725747E9
    -                .replaceAll( "1\\.([0-9]{9})([0-9])E9", "1$1.$200"); // Example: 1.6946072574E9
    +                .replaceAll("1\\.([0-9]{9})([0-9]{3})E9", "1$1.$2")   // Example: 1.694464002939E9
    +                .replaceAll("1\\.([0-9]{9})([0-9]{2})E9", "1$1.$20")  // Example: 1.69460725747E9
    +                .replaceAll("1\\.([0-9]{9})([0-9])E9", "1$1.$200") // Example: 1.6946072574E9
    +                .replaceAll("1\\.([0-9]{9})E9", "1$1.000")  // Example: 1.712332231E9
    +                .replaceAll("1\\.([0-9]{8})E9", "1$10.000") // Example: 1.71233242E9
    +                .replaceAll("1\\.([0-9]{7})E9", "1$100.000") // Example: 1.7123324E9
    +                .replaceAll("1\\.([0-9]{6})E9", "1$1000.000")
    +                .replaceAll("1\\.([0-9]{5})E9", "1$10000.000")
    +                .replaceAll("1\\.([0-9]{4})E9", "1$100000.000")
    +                .replaceAll("1\\.([0-9]{3})E9", "1$1000000.000")
    +                .replaceAll("1\\.([0-9]{2})E9", "1$10000000.000");
         }
     
         private String fixCounts(String s) {
    
    From 5ae9e247f3f71605b591b80a90e9cb0d8196c5c6 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Fri, 5 Apr 2024 23:00:27 +0200
    Subject: [PATCH 073/870] Explicit DuplicateLabelsException when creating
     MetricSnapshot
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../snapshots/DuplicateLabelsException.java   | 25 +++++++++++++++++++
     .../model/snapshots/MetricSnapshot.java       |  2 +-
     2 files changed, 26 insertions(+), 1 deletion(-)
     create mode 100644 prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java
    
    diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java
    new file mode 100644
    index 000000000..4588b344d
    --- /dev/null
    +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java
    @@ -0,0 +1,25 @@
    +package io.prometheus.metrics.model.snapshots;
    +
    +/**
    + * Thrown when a collector tries to create a {@link MetricSnapshot}
    + * where multiple data points have the same labels (same label names and label values).
    + */
    +public class DuplicateLabelsException extends IllegalArgumentException {
    +
    +    private final MetricMetadata metadata;
    +    private final Labels labels;
    +
    +    public DuplicateLabelsException(MetricMetadata metadata, Labels labels) {
    +        super("Duplicate labels for metric \"" + metadata.getName() + "\": " + labels);
    +        this.metadata = metadata;
    +        this.labels = labels;
    +    }
    +
    +    public MetricMetadata getMetadata() {
    +        return metadata;
    +    }
    +
    +    public Labels getLabels() {
    +        return labels;
    +    }
    +}
    \ No newline at end of file
    diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java
    index 273b304eb..2405b9622 100644
    --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java
    +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java
    @@ -43,7 +43,7 @@ protected void validateLabels() {
             // Verify that labels are unique (the same set of names/values must not be used multiple times for the same metric).
             for (int i = 0; i < dataPoints.size() - 1; i++) {
                 if (dataPoints.get(i).getLabels().equals(dataPoints.get(i + 1).getLabels())) {
    -                throw new IllegalArgumentException("Duplicate labels in metric data: " + dataPoints.get(i).getLabels());
    +                throw new DuplicateLabelsException(metadata, dataPoints.get(i).getLabels());
                 }
             }
             // Should we verify that all entries in data have the same label names?
    
    From 96e4d5a6f15af3bed7dc906f6f470c25463a2712 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Sun, 7 Apr 2024 22:58:53 +0200
    Subject: [PATCH 074/870] Fix flaky SlidingWindowTest
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../prometheus/metrics/core/metrics/SlidingWindow.java |  2 +-
     .../metrics/core/metrics/SlidingWindowTest.java        | 10 ++++++----
     2 files changed, 7 insertions(+), 5 deletions(-)
    
    diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java
    index 62164a48b..e4e86acdd 100644
    --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java
    +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java
    @@ -43,7 +43,7 @@ public SlidingWindow(Class clazz, Supplier constructor, ObjDoubleConsumer<
                 this.ringBuffer[i] = constructor.get();
             }
             this.currentBucket = 0;
    -        this.lastRotateTimestampMillis = System.currentTimeMillis();
    +        this.lastRotateTimestampMillis = currentTimeMillis.getAsLong();
             this.durationBetweenRotatesMillis = TimeUnit.SECONDS.toMillis(maxAgeSeconds) / ageBuckets;
         }
     
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java
    index 3b57220f8..3461d959e 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java
    @@ -10,9 +10,9 @@
     
     public class SlidingWindowTest {
     
    -    static class Observer {
    +    class Observer {
     
    -        List values = new ArrayList<>();
    +        final List values = new ArrayList<>();
     
             public void observe(double value) {
                 values.add(value);
    @@ -23,10 +23,11 @@ void assertValues(double... expectedValues) {
                 for (double expectedValue : expectedValues) {
                     expectedList.add(expectedValue);
                 }
    -            Assert.assertEquals(expectedList, values);
    +            Assert.assertEquals("Start time: " + startTime + ", current time: " + currentTimeMillis.get() + ", elapsed time: " + (currentTimeMillis.get() - startTime), expectedList, values);
             }
         }
     
    +    private long startTime;
         private final AtomicLong currentTimeMillis = new AtomicLong();
         private SlidingWindow ringBuffer;
         private final long maxAgeSeconds = 30;
    @@ -35,7 +36,8 @@ void assertValues(double... expectedValues) {
     
         @Before
         public void setUp() {
    -        currentTimeMillis.set(System.currentTimeMillis());
    +        startTime = System.currentTimeMillis();
    +        currentTimeMillis.set(startTime);
             ringBuffer = new SlidingWindow<>(Observer.class, Observer::new, Observer::observe, maxAgeSeconds, ageBuckets);
             ringBuffer.currentTimeMillis = currentTimeMillis::get;
         }
    
    From fca49ffc315641c239246ffbb516a36f374fb8dc Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Mon, 8 Apr 2024 12:04:01 +0200
    Subject: [PATCH 075/870] Fix flaky DropWizardExportsTest
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../dropwizard5/DropwizardExportsTest.java    | 67 +++++++++++++++----
     1 file changed, 55 insertions(+), 12 deletions(-)
    
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java
    index ae27ce62c..6fbbb68b1 100644
    --- a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java
    @@ -2,9 +2,11 @@
     
     import io.dropwizard.metrics5.*;
     import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
    -import io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExports;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
    +import io.prometheus.metrics.model.snapshots.MetricSnapshots;
    +import io.prometheus.metrics.model.snapshots.Quantiles;
     import io.prometheus.metrics.model.snapshots.SummarySnapshot;
    +import org.junit.Assert;
     import org.junit.Before;
     import org.junit.Test;
     
    @@ -142,17 +144,58 @@ public void testHistogram() throws IOException {
                 i += 1;
             }
     
    -        String expected = "# TYPE hist summary\n" +
    -                "# HELP hist Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram)\n" +
    -                "hist{quantile=\"0.5\"} 49.0\n" +
    -                "hist{quantile=\"0.75\"} 74.0\n" +
    -                "hist{quantile=\"0.95\"} 94.0\n" +
    -                "hist{quantile=\"0.98\"} 97.0\n" +
    -                "hist{quantile=\"0.99\"} 98.0\n" +
    -                "hist{quantile=\"0.999\"} 99.0\n" +
    -                "hist_count 100\n" +
    -                "# EOF\n";
    -        assertEquals(expected, convertToOpenMetricsFormat(pmRegistry));
    +        // The result should look like this
    +        //
    +        // # TYPE hist summary
    +        // # HELP hist Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram)
    +        // hist{quantile="0.5"} 49.0
    +        // hist{quantile="0.75"} 74.0
    +        // hist{quantile="0.95"} 94.0
    +        // hist{quantile="0.98"} 97.0
    +        // hist{quantile="0.99"} 98.0
    +        // hist{quantile="0.999"} 99.0
    +        // hist_count 100
    +        // # EOF
    +        //
    +        // However, Dropwizard uses a random reservoir sampling algorithm, so the values could as well be off-by-one
    +        //
    +        // # TYPE hist summary
    +        // # HELP hist Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram)
    +        // hist{quantile="0.5"} 50.0
    +        // hist{quantile="0.75"} 75.0
    +        // hist{quantile="0.95"} 95.0
    +        // hist{quantile="0.98"} 98.0
    +        // hist{quantile="0.99"} 99.0
    +        // hist{quantile="0.999"} 99.0
    +        // hist_count 100
    +        // # EOF
    +        //
    +        // The following asserts the values, but allows an error of 1.0 for quantile values.
    +
    +        MetricSnapshots snapshots = pmRegistry.scrape(name -> name.equals("hist"));
    +        Assert.assertEquals(1, snapshots.size());
    +        SummarySnapshot snapshot = (SummarySnapshot) snapshots.get(0);
    +        Assert.assertEquals("hist", snapshot.getMetadata().getName());
    +        Assert.assertEquals("Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram)", snapshot.getMetadata().getHelp());
    +        Assert.assertEquals(1, snapshot.getDataPoints().size());
    +        SummarySnapshot.SummaryDataPointSnapshot dataPoint = snapshot.getDataPoints().get(0);
    +        Assert.assertTrue(dataPoint.hasCount());
    +        Assert.assertEquals(100, dataPoint.getCount());
    +        Assert.assertFalse(dataPoint.hasSum());
    +        Quantiles quantiles = dataPoint.getQuantiles();
    +        Assert.assertEquals(6, quantiles.size());
    +        Assert.assertEquals(0.5, quantiles.get(0).getQuantile(), 0.0);
    +        Assert.assertEquals(49.0, quantiles.get(0).getValue(), 1.0);
    +        Assert.assertEquals(0.75, quantiles.get(1).getQuantile(), 0.0);
    +        Assert.assertEquals(74.0, quantiles.get(1).getValue(), 1.0);
    +        Assert.assertEquals(0.95, quantiles.get(2).getQuantile(), 0.0);
    +        Assert.assertEquals(94.0, quantiles.get(2).getValue(), 1.0);
    +        Assert.assertEquals(0.98, quantiles.get(3).getQuantile(), 0.0);
    +        Assert.assertEquals(97.0, quantiles.get(3).getValue(), 1.0);
    +        Assert.assertEquals(0.99, quantiles.get(4).getQuantile(), 0.0);
    +        Assert.assertEquals(98.0, quantiles.get(4).getValue(), 1.0);
    +        Assert.assertEquals(0.999, quantiles.get(5).getQuantile(), 0.0);
    +        Assert.assertEquals(99.0, quantiles.get(5).getValue(), 1.0);
         }
     
         @Test
    
    From fe02245d54f0f94d5054ca553215cb70b1687233 Mon Sep 17 00:00:00 2001
    From: Kinshuk Bairagi 
    Date: Wed, 10 Apr 2024 19:15:06 +0530
    Subject: [PATCH 076/870] instrumentation-dw5: Fix metric name issue with
     CustomLabelMapper (#949)
    
    * instrumentation-dw5: Fix issue with CustomLabelMapper
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Update CustomLabelMapperTest
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Refactor & Fix tests
    
    Signed-off-by: Kinshuk Bairagi 
    
    ---------
    
    Signed-off-by: Kinshuk Bairagi 
    ---
     .../dropwizard5/DropwizardExports.java        |  8 +--
     .../dropwizard5/labels/CustomLabelMapper.java | 22 +++++++
     .../labels/CustomLabelMapperTest.java         | 57 ++++++++++---------
     3 files changed, 56 insertions(+), 31 deletions(-)
    
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java
    index 9748504a4..ec2bfa2e4 100644
    --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java
    @@ -26,7 +26,7 @@ public class DropwizardExports implements MultiCollector {
          *
          * @param registry a metric registry to export in prometheus.
          */
    -    DropwizardExports(MetricRegistry registry) {
    +    public DropwizardExports(MetricRegistry registry) {
             super();
             this.registry = registry;
             this.metricFilter = MetricFilter.ALL;
    @@ -61,9 +61,9 @@ private static String getHelpMessage(String metricName, Metric metric) {
                     metricName, metric.getClass().getName());
         }
     
    -
    -    private static MetricMetadata getMetricMetaData(String metricName, Metric metric) {
    -        return new MetricMetadata(PrometheusNaming.sanitizeMetricName(metricName), getHelpMessage(metricName, metric));
    +    private MetricMetadata getMetricMetaData(String metricName, Metric metric) {
    +        String name = labelMapper.isPresent() ? labelMapper.get().getName(metricName) : metricName;
    +        return new MetricMetadata(PrometheusNaming.sanitizeMetricName(name), getHelpMessage(metricName, metric));
         }
     
         /**
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java
    index 1739f6fa6..db5f6a64f 100644
    --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java
    @@ -25,6 +25,28 @@ public CustomLabelMapper(final List mapperConfigs) {
             }
         }
     
    +    public String getName(final String dropwizardName){
    +        if (dropwizardName == null) {
    +            throw new IllegalArgumentException("Dropwizard metric name cannot be null");
    +        }
    +
    +        CompiledMapperConfig matchingConfig = null;
    +        for (CompiledMapperConfig config : this.compiledMapperConfigs) {
    +            if (config.pattern.matches(dropwizardName)) {
    +                matchingConfig = config;
    +                break;
    +            }
    +        }
    +
    +        if (matchingConfig != null) {
    +            final Map params = matchingConfig.pattern.extractParameters(dropwizardName);
    +            final NameAndLabels nameAndLabels = getNameAndLabels(matchingConfig.mapperConfig, params);
    +            return nameAndLabels.name;
    +        }
    +
    +        return dropwizardName;
    +    }
    +
     
         public Labels getLabels(final String dropwizardName, final List additionalLabelNames, final List additionalLabelValues){
             if (dropwizardName == null) {
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java
    index e6bbdbed8..d5003332c 100644
    --- a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java
    @@ -2,8 +2,10 @@
     
     import io.dropwizard.metrics5.MetricFilter;
     import io.dropwizard.metrics5.MetricRegistry;
    +import io.prometheus.metrics.core.metrics.Counter;
     import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
     import io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExports;
    +import io.prometheus.metrics.model.registry.PrometheusRegistry;
     import io.prometheus.metrics.model.snapshots.MetricSnapshots;
     import org.junit.Before;
     import org.junit.Test;
    @@ -69,9 +71,9 @@ public void test_WHEN_OneMatch_THEN_ShouldReturnConverted() {
     
             metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.total").inc(1);
     
    -        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService counter\n" +
    -                "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_total{service=\"greatService\"} 1.0\n" +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient counter\n" +
    +                "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" +
    +                "app_okhttpclient_client_HttpClient_total{service=\"greatService\"} 1.0\n" +
                     "# EOF\n";
             assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
         }
    @@ -96,9 +98,9 @@ public void test_WHEN_MoreMatches_THEN_ShouldReturnFirstOne() {
             metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.total").inc(1);
     
     
    -        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService counter\n" +
    -                "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_total{service=\"greatService\"} 1.0\n" +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient counter\n" +
    +                "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" +
    +                "app_okhttpclient_client_HttpClient_total{service=\"greatService\"} 1.0\n" +
                     "# EOF\n";
             assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
         }
    @@ -113,19 +115,26 @@ public void test_WHEN_MoreMatchesReverseOrder_THEN_ShouldReturnFirstOne() {
                     "app.okhttpclient.client.HttpClient",
                     labels
             );
    +
    +        final MapperConfig mapperConfig2 = new MapperConfig(
    +                "app.okhttpclient.client.HttpClient.*.*",
    +                "app.okhttpclient.client.HttpClient2",
    +                labels
    +        );
    +
             final List mapperConfigs = Arrays.asList(
                     new MapperConfig("client-nope.*.*.*"),
                     mapperConfig,
    -                new MapperConfig("app.okhttpclient.client.HttpClient.*.total") // this matches as well
    +                mapperConfig2 // this matches as well
             );
     
             final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs);
             DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper);
             metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.400").inc(1);
     
    -        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService_400 counter\n" +
    -                "# HELP app_okhttpclient_client_HttpClient_greatService_400 Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_400_total{service=\"greatService\",status=\"400\"} 1.0\n" +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient counter\n" +
    +                "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" +
    +                "app_okhttpclient_client_HttpClient_total{service=\"greatService\",status=\"400\"} 1.0\n" +
                     "# EOF\n";
             assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
     
    @@ -144,7 +153,7 @@ public void test_WHEN_MoreToFormatInLabelsAndName_THEN_ShouldReturnCorrectSample
             final List mapperConfigs = Arrays.asList(
                     new MapperConfig("client-nope.*.*.*"),
                     mapperConfig,
    -                new MapperConfig("app.okhttpclient.client.HttpClient.*.total") // this matches as well
    +                new MapperConfig("app.okhttpclient.client.HttpClient.*.*") // this matches as well
             );
     
     
    @@ -154,9 +163,9 @@ public void test_WHEN_MoreToFormatInLabelsAndName_THEN_ShouldReturnCorrectSample
             System.out.println(convertToOpenMetricsFormat(dropwizardExports.collect()));
     
     
    -        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService_400 counter\n" +
    -                "# HELP app_okhttpclient_client_HttpClient_greatService_400 Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_400_total{service=\"greatService_400\",status=\"s_400\"} 1.0\n" +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService counter\n" +
    +                "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_total{service=\"greatService_400\",status=\"s_400\"} 1.0\n" +
                     "# EOF\n";
             assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
         }
    @@ -167,6 +176,7 @@ public void test_WHEN_AdditionalLabels_THEN_ShouldReturnCorrectSample() {
             final Map labels = new LinkedHashMap();
             labels.put("service", "${0}");
             labels.put("status", "s_${1}");
    +        labels.put("client", "sampleClient");
             final MapperConfig mapperConfig = new MapperConfig(
                     "app.okhttpclient.client.HttpClient.*.*",
                     "app.okhttpclient.client.HttpClient.${0}",
    @@ -174,23 +184,16 @@ public void test_WHEN_AdditionalLabels_THEN_ShouldReturnCorrectSample() {
             );
             final List mapperConfigs = Arrays.asList(
                     new MapperConfig("client-nope.*.*.*"),
    -                mapperConfig,
    -                new MapperConfig("app.okhttpclient.client.HttpClient.*.total") // this matches as well
    +                mapperConfig
             );
     
             final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs);
             DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry,MetricFilter.ALL,  labelMapper);
    -        metricRegistry.histogram("app.okhttpclient.client.HttpClient.greatService.400");
    -
    -        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService_400 summary\n" +
    -                "# HELP app_okhttpclient_client_HttpClient_greatService_400 Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Histogram)\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.5\"} 0.0\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.75\"} 0.0\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.95\"} 0.0\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.98\"} 0.0\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.99\"} 0.0\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_400{service=\"greatService\",status=\"s_400\",quantile=\"0.999\"} 0.0\n" +
    -                "app_okhttpclient_client_HttpClient_greatService_400_count{service=\"greatService\",status=\"s_400\"} 0\n" +
    +        metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.400").inc(1);
    +
    +        String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService counter\n" +
    +                "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" +
    +                "app_okhttpclient_client_HttpClient_greatService_total{client=\"sampleClient\",service=\"greatService\",status=\"s_400\"} 1.0\n" +
                     "# EOF\n";
             assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect()));
         }
    
    From 4a6495af9c2f7db788ee09f56798958c1e7bc91c Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Wed, 10 Apr 2024 20:31:15 +0200
    Subject: [PATCH 077/870] Allow metric names with only a single character
     (#951)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../io/prometheus/metrics/model/snapshots/PrometheusNaming.java | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java
    index 58de0c814..34d8251e1 100644
    --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java
    +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java
    @@ -13,7 +13,7 @@ public class PrometheusNaming {
         /**
          * Legal characters for metric names, including dot.
          */
    -    private static final Pattern METRIC_NAME_PATTERN = Pattern.compile("^[a-zA-Z_.:][a-zA-Z0-9_.:]+$");
    +    private static final Pattern METRIC_NAME_PATTERN = Pattern.compile("^[a-zA-Z_.:][a-zA-Z0-9_.:]*$");
     
         /**
          * Legal characters for label names, including dot.
    
    From 058b39959dff82ef5fcb126834d5c392cc64df37 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Fri, 12 Apr 2024 16:54:00 +0200
    Subject: [PATCH 078/870] Enable integration tests with ./mvnw verify (#952)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     integration-tests/pom.xml | 37 ++++++++++++++++++-------------------
     1 file changed, 18 insertions(+), 19 deletions(-)
    
    diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
    index 7523ab9b6..9e064fa42 100644
    --- a/integration-tests/pom.xml
    +++ b/integration-tests/pom.xml
    @@ -1,5 +1,6 @@
     
    -
    +
         4.0.0
     
         
    @@ -31,24 +32,22 @@
         
     
         
    -        
    -            
    -                
    -                    org.apache.maven.plugins
    -                    maven-failsafe-plugin
    -                    
    -                        
    -                            integration-test
    -                            integration-test
    -                            
    -                                integration-test
    -                                verify
    -                            
    -                        
    -                    
    -                
    -            
    -        
    +        
    +            
    +                org.apache.maven.plugins
    +                maven-failsafe-plugin
    +                
    +                    
    +                        integration-test
    +                        integration-test
    +                        
    +                            integration-test
    +                            verify
    +                        
    +                    
    +                
    +            
    +        
         
         
             
    
    From 13315ebcad0fa29f47ada0d03310ba153fdcd9dd Mon Sep 17 00:00:00 2001
    From: Matthias Berndt 
    Date: Tue, 7 May 2024 17:39:30 +0200
    Subject: [PATCH 079/870] Start HTTP server on the provided executor
    
    The metrics HTTP server should run on a daemon JVM
    thread so as to not keep the JVM running even
    though all relevant threads have already exited.
    Unfortunately, the OpenJDK builtin HTTP server
    likes to spawn its own HTTP Dispatcher thread on
    startup.
    https://github.com/openjdk/jdk/blob/02c95a6d7eb77ed17ae64d0f585197e87a67cc4a/src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java#L190
    This new thread inherits the daemon flag from the
    thread that started it, therefore we need to call
    the start method from the executor service,
    because those threads are daemon threads.
    
    Signed-off-by: Matthias Berndt 
    ---
     .../metrics/exporter/httpserver/HTTPServer.java        | 10 ++++++++--
     1 file changed, 8 insertions(+), 2 deletions(-)
    
    diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java
    index 81f8871e4..b97d71b5b 100644
    --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java
    +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java
    @@ -6,7 +6,6 @@
     import com.sun.net.httpserver.HttpServer;
     import com.sun.net.httpserver.HttpsConfigurator;
     import com.sun.net.httpserver.HttpsServer;
    -import io.prometheus.metrics.config.ExporterHttpServerProperties;
     import io.prometheus.metrics.config.PrometheusProperties;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
     
    @@ -14,6 +13,7 @@
     import java.io.IOException;
     import java.net.InetAddress;
     import java.net.InetSocketAddress;
    +import java.util.concurrent.ExecutionException;
     import java.util.concurrent.ExecutorService;
     import java.util.concurrent.RejectedExecutionHandler;
     import java.util.concurrent.SynchronousQueue;
    @@ -55,7 +55,13 @@ private HTTPServer(PrometheusProperties config, ExecutorService executorService,
             registerHandler("/", defaultHandler == null ? new DefaultHandler() : defaultHandler, authenticator);
             registerHandler("/metrics", new MetricsHandler(config, registry), authenticator);
             registerHandler("/-/healthy", new HealthyHandler(), authenticator);
    -        this.server.start();
    +        try {
    +            executorService.submit(() -> this.server.start()).get();
    +        } catch (InterruptedException e) {
    +            throw new RuntimeException(e);
    +        } catch (ExecutionException e) {
    +            throw new RuntimeException(e.getCause());
    +        }
         }
     
         private void registerHandler(String path, HttpHandler handler, Authenticator authenticator) {
    
    From a224960e7d9935456dd9860c6e5541825ce6e7b2 Mon Sep 17 00:00:00 2001
    From: Matthias Berndt 
    Date: Tue, 7 May 2024 18:05:23 +0200
    Subject: [PATCH 080/870] does this help to make the tests pass?
    
    Signed-off-by: Matthias Berndt 
    ---
     .../metrics/it/exporter/httpserver/HTTPServerSample.java         | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java b/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java
    index 9187ecfcb..ccd0b7724 100644
    --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java
    +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java
    @@ -65,6 +65,7 @@ public static void main(String[] args) throws IOException, InterruptedException
                     .buildAndStart();
     
             System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics");
    +        Thread.sleep(10_000);
         }
     
         private static int parsePortOrExit(String port) {
    
    From b3dd57c8104dc368dd2e166056c55ae761f966c5 Mon Sep 17 00:00:00 2001
    From: Matthias Berndt 
    Date: Wed, 8 May 2024 22:04:48 +0200
    Subject: [PATCH 081/870] change error handling
    
    Signed-off-by: Matthias Berndt 
    ---
     .../io/prometheus/metrics/exporter/httpserver/HTTPServer.java   | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java
    index b97d71b5b..1b23dfaf0 100644
    --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java
    +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java
    @@ -60,7 +60,7 @@ private HTTPServer(PrometheusProperties config, ExecutorService executorService,
             } catch (InterruptedException e) {
                 throw new RuntimeException(e);
             } catch (ExecutionException e) {
    -            throw new RuntimeException(e.getCause());
    +            throw new RuntimeException(e);
             }
         }
     
    
    From bc479bcea63f42f021b3b406cc06a41819278863 Mon Sep 17 00:00:00 2001
    From: Matthias Berndt 
    Date: Wed, 8 May 2024 23:18:27 +0200
    Subject: [PATCH 082/870] add comment
    
    Signed-off-by: Matthias Berndt 
    ---
     .../io/prometheus/metrics/exporter/httpserver/HTTPServer.java    | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java
    index 1b23dfaf0..eb5b5f39d 100644
    --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java
    +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java
    @@ -57,6 +57,7 @@ private HTTPServer(PrometheusProperties config, ExecutorService executorService,
             registerHandler("/-/healthy", new HealthyHandler(), authenticator);
             try {
                 executorService.submit(() -> this.server.start()).get();
    +            // calling .get() on the Future here to avoid silently discarding errors
             } catch (InterruptedException e) {
                 throw new RuntimeException(e);
             } catch (ExecutionException e) {
    
    From 6b97066ae90248dd9a907213a703db7f73c2dcac Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Tue, 14 May 2024 19:43:03 +0200
    Subject: [PATCH 083/870] Restore Pushgateway from archive
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../pom.xml                                                    | 0
     .../io/prometheus/metrics/exporter/pushgateway}/Base64.java    | 2 +-
     .../exporter/pushgateway}/BasicAuthHttpConnectionFactory.java  | 2 +-
     .../exporter/pushgateway}/DefaultHttpConnectionFactory.java    | 2 +-
     .../metrics/exporter/pushgateway}/HttpConnectionFactory.java   | 2 +-
     .../prometheus/metrics/exporter/pushgateway}/PushGateway.java  | 2 +-
     .../exporter/pushgateway}/BasicAuthPushGatewayTest.java        | 2 +-
     .../metrics/exporter/pushgateway}/ExamplePushGateway.java      | 2 +-
     .../metrics/exporter/pushgateway}/PushGatewayTest.java         | 3 ++-
     .../version-rules.xml                                          | 0
     10 files changed, 9 insertions(+), 8 deletions(-)
     rename {simpleclient-archive/simpleclient_pushgateway => prometheus-metrics-exporter-pushgateway}/pom.xml (100%)
     rename {simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter => prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway}/Base64.java (96%)
     rename {simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter => prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway}/BasicAuthHttpConnectionFactory.java (96%)
     rename {simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter => prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway}/DefaultHttpConnectionFactory.java (86%)
     rename {simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter => prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway}/HttpConnectionFactory.java (76%)
     rename {simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter => prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway}/PushGateway.java (99%)
     rename {simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter => prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway}/BasicAuthPushGatewayTest.java (96%)
     rename {simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter => prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway}/ExamplePushGateway.java (91%)
     rename {simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter => prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway}/PushGatewayTest.java (99%)
     rename {simpleclient-archive/simpleclient_pushgateway => prometheus-metrics-exporter-pushgateway}/version-rules.xml (100%)
    
    diff --git a/simpleclient-archive/simpleclient_pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml
    similarity index 100%
    rename from simpleclient-archive/simpleclient_pushgateway/pom.xml
    rename to prometheus-metrics-exporter-pushgateway/pom.xml
    diff --git a/simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/Base64.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Base64.java
    similarity index 96%
    rename from simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/Base64.java
    rename to prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Base64.java
    index 9191f8142..2043bb36f 100644
    --- a/simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/Base64.java
    +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Base64.java
    @@ -1,4 +1,4 @@
    -package io.prometheus.client.exporter;
    +package io.prometheus.metrics.exporter.pushgateway;
     
     import javax.xml.bind.DatatypeConverter;
     
    diff --git a/simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/BasicAuthHttpConnectionFactory.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthHttpConnectionFactory.java
    similarity index 96%
    rename from simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/BasicAuthHttpConnectionFactory.java
    rename to prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthHttpConnectionFactory.java
    index ead505b1f..8d36b8f11 100644
    --- a/simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/BasicAuthHttpConnectionFactory.java
    +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthHttpConnectionFactory.java
    @@ -1,4 +1,4 @@
    -package io.prometheus.client.exporter;
    +package io.prometheus.metrics.exporter.pushgateway;
     
     import java.io.IOException;
     import java.io.UnsupportedEncodingException;
    diff --git a/simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/DefaultHttpConnectionFactory.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java
    similarity index 86%
    rename from simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/DefaultHttpConnectionFactory.java
    rename to prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java
    index 2987dfafe..44d47de98 100644
    --- a/simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/DefaultHttpConnectionFactory.java
    +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java
    @@ -1,4 +1,4 @@
    -package io.prometheus.client.exporter;
    +package io.prometheus.metrics.exporter.pushgateway;
     
     import java.io.IOException;
     import java.net.HttpURLConnection;
    diff --git a/simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/HttpConnectionFactory.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java
    similarity index 76%
    rename from simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/HttpConnectionFactory.java
    rename to prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java
    index 0b4521afa..94556fa28 100644
    --- a/simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/HttpConnectionFactory.java
    +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java
    @@ -1,4 +1,4 @@
    -package io.prometheus.client.exporter;
    +package io.prometheus.metrics.exporter.pushgateway;
     
     import java.io.IOException;
     import java.net.HttpURLConnection;
    diff --git a/simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/PushGateway.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java
    similarity index 99%
    rename from simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/PushGateway.java
    rename to prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java
    index 1ab56b6a6..0e00cc19e 100644
    --- a/simpleclient-archive/simpleclient_pushgateway/src/main/java/io/prometheus/client/exporter/PushGateway.java
    +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java
    @@ -1,4 +1,4 @@
    -package io.prometheus.client.exporter;
    +package io.prometheus.metrics.exporter.pushgateway;
     
     import java.io.BufferedWriter;
     import java.io.ByteArrayOutputStream;
    diff --git a/simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter/BasicAuthPushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java
    similarity index 96%
    rename from simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter/BasicAuthPushGatewayTest.java
    rename to prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java
    index 1d5bfd774..2fca7d9a4 100644
    --- a/simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter/BasicAuthPushGatewayTest.java
    +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java
    @@ -1,4 +1,4 @@
    -package io.prometheus.client.exporter;
    +package io.prometheus.metrics.exporter.pushgateway;
     
     
     import static org.mockserver.model.HttpRequest.request;
    diff --git a/simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter/ExamplePushGateway.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/ExamplePushGateway.java
    similarity index 91%
    rename from simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter/ExamplePushGateway.java
    rename to prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/ExamplePushGateway.java
    index 917539445..9b9196b7a 100644
    --- a/simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter/ExamplePushGateway.java
    +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/ExamplePushGateway.java
    @@ -1,4 +1,4 @@
    -package io.prometheus.client.exporter;
    +package io.prometheus.metrics.exporter.pushgateway;
     
     import io.prometheus.client.Gauge;
     import io.prometheus.client.CollectorRegistry;
    diff --git a/simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter/PushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java
    similarity index 99%
    rename from simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter/PushGatewayTest.java
    rename to prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java
    index ced492b8c..c1ac4b797 100644
    --- a/simpleclient-archive/simpleclient_pushgateway/src/test/java/io/prometheus/client/exporter/PushGatewayTest.java
    +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java
    @@ -1,4 +1,4 @@
    -package io.prometheus.client.exporter;
    +package io.prometheus.metrics.exporter.pushgateway;
     
     
     import static org.junit.rules.ExpectedException.none;
    @@ -10,6 +10,7 @@
     import java.io.IOException;
     import java.util.TreeMap;
     import java.util.Map;
    +
     import org.junit.Assert;
     import org.junit.Before;
     import org.junit.Rule;
    diff --git a/simpleclient-archive/simpleclient_pushgateway/version-rules.xml b/prometheus-metrics-exporter-pushgateway/version-rules.xml
    similarity index 100%
    rename from simpleclient-archive/simpleclient_pushgateway/version-rules.xml
    rename to prometheus-metrics-exporter-pushgateway/version-rules.xml
    
    From 608592e2bf2fe124c476e804153b3c04317a0919 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Fabian=20St=C3=A4ber?= 
    Date: Tue, 14 May 2024 19:47:49 +0200
    Subject: [PATCH 084/870] Port Pushgateway to client_java 1.x
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Signed-off-by: Fabian Stäber 
    ---
     .../prometheus/client/it/common/Volume.java   |   2 +-
     integration-tests/it-pushgateway/pom.xml      |  98 +++
     .../it/pushgateway/PushGatewayTestApp.java    | 131 ++++
     .../metrics/it/pushgateway/PushGatewayIT.java | 228 ++++++
     .../test/resources/prometheus-basicauth.yaml  |  11 +
     .../src/test/resources/prometheus-ssl.yaml    |  11 +
     .../src/test/resources/prometheus.yaml        |   8 +
     .../test/resources/pushgateway-basicauth.yaml |   4 +
     .../src/test/resources/pushgateway-ssl.yaml   |  86 +++
     .../it-pushgateway/version-rules.xml          |   6 +
     integration-tests/pom.xml                     |   1 +
     pom.xml                                       |   1 +
     .../config/ExporterPushgatewayProperties.java |  59 ++
     .../metrics/config/PrometheusProperties.java  |   7 +
     .../config/PrometheusPropertiesLoader.java    |   3 +-
     .../pom.xml                                   |  29 +-
     .../metrics/exporter/pushgateway/Base64.java  |  48 --
     .../BasicAuthHttpConnectionFactory.java       |  36 -
     .../DefaultHttpConnectionFactory.java         |  10 +-
     .../pushgateway/DefaultJobLabelDetector.java  |  60 ++
     .../metrics/exporter/pushgateway/Format.java  |   6 +
     .../pushgateway/HttpConnectionFactory.java    |   7 +-
     .../exporter/pushgateway/PushGateway.java     | 663 +++++++++++-------
     .../metrics/exporter/pushgateway/Scheme.java  |  29 +
     .../pushgateway/BasicAuthPushGatewayTest.java |  71 +-
     .../pushgateway/ExamplePushGateway.java       |  20 -
     .../exporter/pushgateway/PushGatewayTest.java | 514 ++++++++------
     27 files changed, 1516 insertions(+), 633 deletions(-)
     create mode 100644 integration-tests/it-pushgateway/pom.xml
     create mode 100644 integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java
     create mode 100644 integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java
     create mode 100644 integration-tests/it-pushgateway/src/test/resources/prometheus-basicauth.yaml
     create mode 100644 integration-tests/it-pushgateway/src/test/resources/prometheus-ssl.yaml
     create mode 100644 integration-tests/it-pushgateway/src/test/resources/prometheus.yaml
     create mode 100644 integration-tests/it-pushgateway/src/test/resources/pushgateway-basicauth.yaml
     create mode 100644 integration-tests/it-pushgateway/src/test/resources/pushgateway-ssl.yaml
     create mode 100644 integration-tests/it-pushgateway/version-rules.xml
     create mode 100644 prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java
     delete mode 100644 prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Base64.java
     delete mode 100644 prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthHttpConnectionFactory.java
     create mode 100644 prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultJobLabelDetector.java
     create mode 100644 prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Format.java
     create mode 100644 prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Scheme.java
     delete mode 100644 prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/ExamplePushGateway.java
    
    diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java
    index 6c32ba74b..dc9a32992 100644
    --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java
    +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java
    @@ -30,7 +30,7 @@ public static Volume create(String prefix) throws IOException, URISyntaxExceptio
     
         /**
          * Copy a file or directory to this volume.
    -     * @param src is reltive to {@code ./target/}
    +     * @param src is relative to {@code ./target/}
          */
         public Volume copy(String src) throws IOException {
             Path srcPath = tmpDir.getParent().resolve(src);
    diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml
    new file mode 100644
    index 000000000..d8b81a303
    --- /dev/null
    +++ b/integration-tests/it-pushgateway/pom.xml
    @@ -0,0 +1,98 @@
    +
    +
    +    4.0.0
    +
    +    
    +        io.prometheus
    +        integration-tests
    +        1.3.0-SNAPSHOT
    +    
    +
    +    it-pushgateway
    +
    +    Integration Test - Pushgateway
    +    http://github.com/prometheus/client_java
    +    
    +        Integration tests for the Pushgateway Exporter
    +    
    +
    +    
    +        
    +            The Apache Software License, Version 2.0
    +            http://www.apache.org/licenses/LICENSE-2.0.txt
    +            repo
    +        
    +    
    +
    +    
    +        
    +            fstab
    +            Fabian Stäber
    +            fabian@fstab.de
    +        
    +    
    +
    +    
    +        
    +            io.prometheus
    +            prometheus-metrics-core
    +            ${project.version}
    +        
    +        
    +            io.prometheus
    +            prometheus-metrics-exporter-pushgateway
    +            ${project.version}
    +        
    +        
    +            org.testcontainers
    +            testcontainers
    +            test
    +        
    +        
    +            io.prometheus
    +            it-common
    +            test-jar
    +            ${project.version}
    +            test
    +        
    +        
    +            com.squareup.okhttp
    +            okhttp
    +            2.7.5
    +            test
    +        
    +        
    +            com.jayway.jsonpath
    +            json-path
    +            2.8.0
    +            test
    +        
    +    
    +
    +    
    +        pushgateway-test-app
    +        
    +            
    +                org.apache.maven.plugins
    +                maven-shade-plugin
    +                
    +                    
    +                        package
    +                        
    +                            shade
    +                        
    +                        
    +                            
    +                                
    +                                    io.prometheus.metrics.it.pushgateway.PushGatewayTestApp
    +                                
    +                            
    +                        
    +                    
    +                
    +            
    +        
    +    
    +
    diff --git a/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java b/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java
    new file mode 100644
    index 000000000..279f05d90
    --- /dev/null
    +++ b/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java
    @@ -0,0 +1,131 @@
    +package io.prometheus.metrics.it.pushgateway;
    +
    +import io.prometheus.metrics.core.metrics.Gauge;
    +import io.prometheus.metrics.core.metrics.Histogram;
    +import io.prometheus.metrics.exporter.pushgateway.Format;
    +import io.prometheus.metrics.exporter.pushgateway.HttpConnectionFactory;
    +import io.prometheus.metrics.exporter.pushgateway.PushGateway;
    +import io.prometheus.metrics.model.snapshots.Unit;
    +
    +import javax.net.ssl.HttpsURLConnection;
    +import javax.net.ssl.SSLContext;
    +import javax.net.ssl.TrustManager;
    +import javax.net.ssl.X509TrustManager;
    +import java.io.IOException;
    +import java.security.KeyManagementException;
    +import java.security.NoSuchAlgorithmException;
    +import java.security.cert.X509Certificate;
    +
    +import static io.prometheus.metrics.exporter.pushgateway.Scheme.HTTPS;
    +
    +/**
    + * Example application using the {@link PushGateway}.
    + */
    +public class PushGatewayTestApp {
    +
    +    public static void main(String[] args) throws IOException {
    +        if (args.length != 1) {
    +            System.err.println("Usage: java -jar pushgateway-test-app.jar ");
    +            System.exit(-1);
    +        }
    +        switch (args[0]) {
    +            case "simple":
    +                runSimpleTest();
    +                break;
    +            case "textFormat":
    +                runTextFormatTest();
    +                break;
    +            case "basicauth":
    +                runBasicAuthTest();
    +                break;
    +            case "ssl":
    +                runSslTest();
    +                break;
    +            default:
    +                System.err.println(args[0] + ": Not implemented.");
    +                System.exit(-1);
    +        }
    +    }
    +
    +    private static void runSimpleTest() throws IOException {
    +        makeMetrics();
    +        PushGateway pg = PushGateway.builder().build();
    +        System.out.println("Pushing metrics...");
    +        pg.push();
    +        System.out.println("Push successful.");
    +    }
    +
    +    private static void runTextFormatTest() throws IOException {
    +        makeMetrics();
    +        PushGateway pg = PushGateway.builder().format(Format.PROMETHEUS_TEXT).build();
    +        System.out.println("Pushing metrics...");
    +        pg.push();
    +        System.out.println("Push successful.");
    +    }
    +
    +    private static void runBasicAuthTest() throws IOException {
    +        makeMetrics();
    +        PushGateway pg = PushGateway.builder()
    +                .basicAuth("my_user", "secret_password")
    +                .build();
    +        System.out.println("Pushing metrics...");
    +        pg.push();
    +        System.out.println("Push successful.");
    +    }
    +
    +    private static void runSslTest() throws IOException {
    +        makeMetrics();
    +        PushGateway pg = PushGateway.builder()
    +                .scheme(HTTPS)
    +                .connectionFactory(insecureConnectionFactory)
    +                .build();
    +        System.out.println("Pushing metrics...");
    +        pg.push();
    +        System.out.println("Push successful.");
    +    }
    +
    +    static TrustManager insecureTrustManager = new X509TrustManager() {
    +        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    +            return null;
    +        }
    +
    +        @Override
    +        public void checkClientTrusted(X509Certificate[] chain, String authType) {
    +        }
    +
    +        @Override
    +        public void checkServerTrusted(X509Certificate[] chain, String authType) {
    +        }
    +    };
    +
    +    static HttpConnectionFactory insecureConnectionFactory = url -> {
    +        try {
    +            SSLContext sslContext = SSLContext.getInstance("TLS");
    +            sslContext.init(null, new TrustManager[]{insecureTrustManager}, null);
    +            SSLContext.setDefault(sslContext);
    +
    +            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
    +            connection.setHostnameVerifier((hostname, session) -> true);
    +            return connection;
    +        } catch (NoSuchAlgorithmException | KeyManagementException e) {
    +            throw new RuntimeException(e);
    +        }
    +    };
    +
    +    private static void makeMetrics() {
    +        Histogram sizes = Histogram.builder()
    +                .name("file_sizes_bytes")
    +                .classicUpperBounds(256, 512, 1024, 2048)
    +                .unit(Unit.BYTES)
    +                .register();
    +        sizes.observe(513);
    +        sizes.observe(814);
    +        sizes.observe(1553);
    +        Gauge duration = Gauge.builder()
    +                .name("my_batch_job_duration_seconds")
    +                .help("Duration of my batch job in seconds.")
    +                .unit(Unit.SECONDS)
    +                .register();
    +        duration.set(0.5);
    +    }
    +}
    \ No newline at end of file
    diff --git a/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java b/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java
    new file mode 100644
    index 000000000..6b89a8c58
    --- /dev/null
    +++ b/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java
    @@ -0,0 +1,228 @@
    +package io.prometheus.metrics.it.pushgateway;
    +
    +import com.jayway.jsonpath.Criteria;
    +import com.jayway.jsonpath.Filter;
    +import com.jayway.jsonpath.JsonPath;
    +import com.squareup.okhttp.*;
    +import io.prometheus.client.it.common.LogConsumer;
    +import io.prometheus.client.it.common.Volume;
    +import net.minidev.json.JSONArray;
    +import org.junit.After;
    +import org.junit.Assert;
    +import org.junit.Before;
    +import org.junit.Test;
    +import org.testcontainers.containers.BindMode;
    +import org.testcontainers.containers.GenericContainer;
    +import org.testcontainers.containers.Network;
    +import org.testcontainers.containers.wait.strategy.Wait;
    +import org.testcontainers.utility.MountableFile;
    +
    +import java.io.IOException;
    +import java.net.URISyntaxException;
    +import java.util.concurrent.TimeUnit;
    +
    +public class PushGatewayIT {
    +
    +    private GenericContainer sampleAppContainer;
    +    private GenericContainer pushGatewayContainer;
    +    private GenericContainer prometheusContainer;
    +    private Volume sampleAppVolume;
    +
    +    @Before
    +    public void setUp() throws IOException, URISyntaxException {
    +        Network network = Network.newNetwork();
    +        sampleAppVolume = Volume.create("it-pushgateway")
    +                .copy("pushgateway-test-app.jar");
    +        pushGatewayContainer = new GenericContainer<>("prom/pushgateway:v1.8.0")
    +                .withExposedPorts(9091)
    +                .withNetwork(network)
    +                .withNetworkAliases("pushgateway")
    +                .withLogConsumer(LogConsumer.withPrefix("pushgateway"))
    +                .waitingFor(Wait.forListeningPort());
    +        sampleAppContainer = new GenericContainer<>("openjdk:17")
    +                .withFileSystemBind(sampleAppVolume.getHostPath(), "/app", BindMode.READ_ONLY)
    +                .withNetwork(network)
    +                .withWorkingDirectory("/app")
    +                .dependsOn(pushGatewayContainer)
    +                .withLogConsumer(LogConsumer.withPrefix("test-app"));
    +        prometheusContainer = new GenericContainer<>("prom/prometheus:v2.51.2")
    +                .withNetwork(network)
    +                .dependsOn(pushGatewayContainer)
    +                .withExposedPorts(9090)
    +                .withLogConsumer(LogConsumer.withPrefix("prometheus"));
    +    }
    +
    +    @After
    +    public void tearDown() throws IOException {
    +        prometheusContainer.stop();
    +        pushGatewayContainer.stop();
    +        sampleAppContainer.stop();
    +        sampleAppVolume.remove();
    +    }
    +
    +    final OkHttpClient client = new OkHttpClient();
    +
    +    @Test
    +    public void testSimple() throws IOException, InterruptedException {
    +        pushGatewayContainer
    +                .start();
    +        sampleAppContainer
    +                .withCommand("java",
    +                        "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091",
    +                        "-jar",
    +                        "/app/pushgateway-test-app.jar",
    +                        "simple"
    +                ).start();
    +        prometheusContainer
    +                .withCopyFileToContainer(MountableFile.forClasspathResource("/prometheus.yaml"), "/etc/prometheus/prometheus.yml")
    +                .start();
    +        awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS);
    +        assertMetrics();
    +    }
    +
    +    @Test
    +    public void testTextFormat() throws IOException, InterruptedException {
    +        pushGatewayContainer
    +                .start();
    +        sampleAppContainer
    +                .withCommand("java",
    +                        "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091",
    +                        "-jar",
    +                        "/app/pushgateway-test-app.jar",
    +                        "textFormat"
    +                ).start();
    +        prometheusContainer
    +                .withCopyFileToContainer(MountableFile.forClasspathResource("/prometheus.yaml"), "/etc/prometheus/prometheus.yml")
    +                .start();
    +        awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS);
    +        assertMetrics();
    +    }
    +
    +    @Test
    +    public void testBasicAuth() throws IOException, InterruptedException {
    +        pushGatewayContainer
    +                .withCopyFileToContainer(MountableFile.forClasspathResource("/pushgateway-basicauth.yaml"), "/pushgateway/pushgateway-basicauth.yaml")
    +                .withCommand("--web.config.file", "pushgateway-basicauth.yaml")
    +                .start();
    +        sampleAppContainer
    +                .withCommand("java",
    +                        "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091",
    +                        "-jar",
    +                        "/app/pushgateway-test-app.jar",
    +                        "basicauth"
    +                ).start();
    +        prometheusContainer
    +                .withCopyFileToContainer(MountableFile.forClasspathResource("/prometheus-basicauth.yaml"), "/etc/prometheus/prometheus.yml")
    +                .start();
    +        awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS);
    +        assertMetrics();
    +    }
    +
    +    @Test
    +    public void testSsl() throws InterruptedException, IOException {
    +        pushGatewayContainer
    +                .withCopyFileToContainer(MountableFile.forClasspathResource("/pushgateway-ssl.yaml"), "/pushgateway/pushgateway-ssl.yaml")
    +                .withCommand("--web.config.file", "pushgateway-ssl.yaml")
    +                .start();
    +        sampleAppContainer
    +                .withCommand("java",
    +                        "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091",
    +                        "-jar",
    +                        "/app/pushgateway-test-app.jar",
    +                        "ssl"
    +                ).start();
    +        prometheusContainer
    +                .withCopyFileToContainer(MountableFile.forClasspathResource("/prometheus-ssl.yaml"), "/etc/prometheus/prometheus.yml")
    +                .start();
    +        awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS);
    +        assertMetrics();
    +    }
    +
    +    @Test
    +    public void testProtobuf() throws IOException, InterruptedException {
    +        pushGatewayContainer
    +                .start();
    +        sampleAppContainer
    +                .withCommand("java",
    +                        "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091",
    +                        "-jar",
    +                        "/app/pushgateway-test-app.jar",
    +                        "simple"
    +                ).start();
    +        prometheusContainer
    +                .withCommand("--enable-feature=native-histograms", "--config.file", "/etc/prometheus/prometheus.yml")
    +                .withCopyFileToContainer(MountableFile.forClasspathResource("/prometheus.yaml"), "/etc/prometheus/prometheus.yml")
    +                .start();
    +        awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS);
    +        assertNativeHistogram();
    +    }
    +
    +    private void assertMetrics() throws IOException, InterruptedException {
    +        double value = getValue("my_batch_job_duration_seconds", "job", "pushgateway-test-app");
    +        Assert.assertEquals(0.5, value, 0.0);
    +        value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "512");
    +        Assert.assertEquals(0.0, value, 0.0);
    +        value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "1024");
    +        Assert.assertEquals(2.0, value, 0.0);
    +        value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "+Inf");
    +        Assert.assertEquals(3.0, value, 0.0);
    +    }
    +
    +    private double getValue(String name, String... labels) throws IOException, InterruptedException {
    +        String scrapeResponseJson = scrape(name);
    +        Criteria criteria = Criteria.where("metric.__name__").eq(name);
    +        for (int i = 0; i < labels.length; i += 2) {
    +            criteria = criteria.and("metric." + labels[i]).eq(labels[i + 1]);
    +        }
    +        JSONArray result = JsonPath.parse(scrapeResponseJson).read("$.data.result" + Filter.filter(criteria) + ".value[1]");
    +        Assert.assertEquals(1, result.size());
    +        return Double.valueOf(result.get(0).toString());
    +    }
    +
    +    private void assertNativeHistogram() throws IOException, InterruptedException {
    +        double count = getNativeHistogramCount("file_sizes_bytes", "pushgateway-test-app");
    +        Assert.assertEquals(3, count, 0.0);
    +    }
    +
    +    private double getNativeHistogramCount(String name, String job) throws IOException, InterruptedException {
    +        String scrapeResponseJson = scrape("histogram_count(" + name + ")");
    +        Criteria criteria = Criteria.where("metric.job").eq(job);
    +        JSONArray result = JsonPath.parse(scrapeResponseJson).read("$.data.result" + Filter.filter(criteria) + ".value[1]");
    +        return Double.valueOf(result.get(0).toString());
    +    }
    +
    +    private String scrape(String query) throws IOException, InterruptedException {
    +        System.out.println("Querying http://" + prometheusContainer.getHost() + ":" + prometheusContainer.getMappedPort(9090));
    +        HttpUrl baseUrl = HttpUrl.parse("http://" + prometheusContainer.getHost() + ":" + prometheusContainer.getMappedPort(9090) + "/api/v1/query");
    +        HttpUrl url = baseUrl.newBuilder()
    +                .addQueryParameter("query", query)
    +                .build();
    +        long timeRemaining = TimeUnit.SECONDS.toMillis(15);
    +        while (timeRemaining > 0) {
    +            Request request = new Request.Builder().url(url).build();
    +            Call call = client.newCall(request);
    +            Response response = call.execute();
    +            String body = response.body().string();
    +            if (!body.contains("\"result\":[]")) {
    +                // Result when data is not available yet:
    +                // {"status":"success","data":{"resultType":"vector","result":[]}}
    +                return body;
    +            }
    +            Thread.sleep(250);
    +            timeRemaining -= 250;
    +        }
    +        Assert.fail("timeout while scraping " + url);
    +        return null;
    +    }
    +
    +    private void awaitTermination(GenericContainer container, long timeout, TimeUnit unit) throws InterruptedException {
    +        long waitTimeMillis = 0;
    +        while (container.isRunning()) {
    +            if (waitTimeMillis > unit.toMillis(timeout)) {
    +                Assert.fail(container.getContainerName() + " did not terminate after " + timeout + " " + unit + ".");
    +            }
    +            Thread.sleep(20);
    +            waitTimeMillis += 20;
    +        }
    +    }
    +}
    diff --git a/integration-tests/it-pushgateway/src/test/resources/prometheus-basicauth.yaml b/integration-tests/it-pushgateway/src/test/resources/prometheus-basicauth.yaml
    new file mode 100644
    index 000000000..6f035f9d7
    --- /dev/null
    +++ b/integration-tests/it-pushgateway/src/test/resources/prometheus-basicauth.yaml
    @@ -0,0 +1,11 @@
    +global:
    +  scrape_interval: 5s
    +
    +scrape_configs:
    +  - job_name: "push"
    +    honor_labels: true
    +    static_configs:
    +      - targets: ["pushgateway:9091"]
    +    basic_auth:
    +      username: 'my_user'
    +      password: 'secret_password'
    \ No newline at end of file
    diff --git a/integration-tests/it-pushgateway/src/test/resources/prometheus-ssl.yaml b/integration-tests/it-pushgateway/src/test/resources/prometheus-ssl.yaml
    new file mode 100644
    index 000000000..a40bae9b1
    --- /dev/null
    +++ b/integration-tests/it-pushgateway/src/test/resources/prometheus-ssl.yaml
    @@ -0,0 +1,11 @@
    +global:
    +  scrape_interval: 5s
    +
    +scrape_configs:
    +  - job_name: "push"
    +    honor_labels: true
    +    scheme: https
    +    static_configs:
    +      - targets: ["pushgateway:9091"]
    +    tls_config:
    +      insecure_skip_verify: true
    \ No newline at end of file
    diff --git a/integration-tests/it-pushgateway/src/test/resources/prometheus.yaml b/integration-tests/it-pushgateway/src/test/resources/prometheus.yaml
    new file mode 100644
    index 000000000..c5ccb68a4
    --- /dev/null
    +++ b/integration-tests/it-pushgateway/src/test/resources/prometheus.yaml
    @@ -0,0 +1,8 @@
    +global:
    +  scrape_interval: 5s
    +
    +scrape_configs:
    +  - job_name: "push"
    +    honor_labels: true
    +    static_configs:
    +      - targets: ["pushgateway:9091"]
    \ No newline at end of file
    diff --git a/integration-tests/it-pushgateway/src/test/resources/pushgateway-basicauth.yaml b/integration-tests/it-pushgateway/src/test/resources/pushgateway-basicauth.yaml
    new file mode 100644
    index 000000000..90b470796
    --- /dev/null
    +++ b/integration-tests/it-pushgateway/src/test/resources/pushgateway-basicauth.yaml
    @@ -0,0 +1,4 @@
    +basic_auth_users:
    +    # Note: The bcrypt hash of the password was generated with the following command line:
    +    # python -c 'import bcrypt; print(bcrypt.hashpw(b"secret_password", bcrypt.gensalt(rounds=10)).decode("ascii"))'
    +    my_user: $2b$10$kmIxr/4wpcORDXnKLvTMC.WPGqT8nqjBm8AI3MqGkzcSrWJioTfUG
    \ No newline at end of file
    diff --git a/integration-tests/it-pushgateway/src/test/resources/pushgateway-ssl.yaml b/integration-tests/it-pushgateway/src/test/resources/pushgateway-ssl.yaml
    new file mode 100644
    index 000000000..3e4208bbb
    --- /dev/null
    +++ b/integration-tests/it-pushgateway/src/test/resources/pushgateway-ssl.yaml
    @@ -0,0 +1,86 @@
    +tls_server_config:
    +  # cert and key have been generated with the following command:
    +  # openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 36500 -nodes -subj "/CN=localhost"
    +  cert: |
    +    -----BEGIN CERTIFICATE-----
    +    MIIFCzCCAvOgAwIBAgIUPwSov6+heI4uY6+fvB1N+1EN3FwwDQYJKoZIhvcNAQEL
    +    BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTI0MDUxMDE0MzY1NloYDzIxMjQw
    +    NDE2MTQzNjU2WjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEB
    +    AQUAA4ICDwAwggIKAoICAQCnrySCLrYo5ad6w2/Tp/toGKnN4YW9C74eqmlqntht
    +    VbGNkBha4FpEuuadjB64bH3dTSwXWg3ZMxUnjZplRCdosM7+beApzh8ZR+/Ju/qk
    +    CPEw4N1J+NVZKzE7brt9rLKT+Cttjf4K8luUWnlVdOIl2UjqejCougV29TerctlD
    +    svx7jUAoyauPhxbVC8Fmww8rCEox3xbv0MEe2bsc0hQP2opTRfXHwRKBq0hmA9x4
    +    1FEqSl7gzQwbg7hHH/AfgxXSsQqRazIDzZEhDNePF0O9PYALrTJxonBrQ4uGBwJE
    +    NQmlyIDnmynYmp5dOuXY8nspansOq7pQkubsg0qYiQ9VwLLZ/ApmFnvcY2uqSpta
    +    TwqLalDYbUMqK61DtG6kHx3rHTokuLRFiXAqP++QdUkajqKtoH7quvKBAfzgrtHj
    +    WJhNkDbaGaYlpyIlekyrxFdp25T06BEHzpFjylRGhuAaz2tbo1n7ynQ6KusdHEAf
    +    l51JXQSS6yU/1Wy0yXo5yuKOykj0ey15s0AoH5yMHhEhAUVG0SKxtcWnnzAFcA9k
    +    DYagco+IjQ+wRuX4jdM5S/l2Kmu8tvW0O7olNyxdWh2gzH/gLmt8ZthNEyTmb4mM
    +    7kPNYjjcwrbs+oNc/Qfwk66+pn+vwYmRuZJolTZvGAhp9Es3OC19suDEgwz2bLYI
    +    4wIDAQABo1MwUTAdBgNVHQ4EFgQUMx8SJAoEhboJXjRR4iz+/I2tUhkwHwYDVR0j
    +    BBgwFoAUMx8SJAoEhboJXjRR4iz+/I2tUhkwDwYDVR0TAQH/BAUwAwEB/zANBgkq
    +    hkiG9w0BAQsFAAOCAgEASkE0xnofeUBGTZQK4BdRbqYgSaL9XSKi0UBH7Jw7a+nr
    +    vdNu1VqOYRuSjI1FH2aYFKIaKEOipd8Z/nb1LjYArCerC51Mf/pl1mEDiUVyxECL
    +    8F/IRj4xWwglbMMHpZw9wGYKAyG/QIpU/skbKEptAfUNb25kAVqhjuQ2vBb8w1kz
    +    GdLf9pGXRCUefYtJIhgLVMDLhR7XVI8tsL2KfBE9fAMeSO/YAr1sa1wVKdqsmxQD
    +    StQoecib3IhspO8QbRSJ10pb6p0sffTyU3jxDonv6b+E1jAslS0FQOxCUHnjwqG/
    +    TuwW1MPxl4QeOpX00cI9ReZd2qla6+aaxZDccbpDmHtJJ3nKoFVwknUYEqTu+B7y
    +    qZF2iyBtIaPJmdouMISMvlEsFdR4vkcD+2eCWMLlZDkOfDifIF1ny+ni8xU7UELa
    +    XoDOKdIey7A/ddKi86mUdvjp5DRD85ghpSByn20UTdSmvbjHqpdlTPuFSyvix9nk
    +    3KGJxS7Ra0hqOdGE8JHTmIXAFIjkOEEliNnmGRfd2l6EmDBEXufymlVgvz/DHlgF
    +    krIsjl2SB9AUJckwmj17LdYN6pq9cUdaq7+7SIr12XCxPXyomIBSjlNyPCCy7u5L
    +    nxDNTKImHmmupjoLCJ8MKpZ4fuva+kI372R47l2zMkwBWiEwn95C6+JB2kaFEiQ=
    +    -----END CERTIFICATE-----
    +  key: |
    +    -----BEGIN PRIVATE KEY-----
    +    MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCnrySCLrYo5ad6
    +    w2/Tp/toGKnN4YW9C74eqmlqnthtVbGNkBha4FpEuuadjB64bH3dTSwXWg3ZMxUn
    +    jZplRCdosM7+beApzh8ZR+/Ju/qkCPEw4N1J+NVZKzE7brt9rLKT+Cttjf4K8luU
    +    WnlVdOIl2UjqejCougV29TerctlDsvx7jUAoyauPhxbVC8Fmww8rCEox3xbv0MEe
    +    2bsc0hQP2opTRfXHwRKBq0hmA9x41FEqSl7gzQwbg7hHH/AfgxXSsQqRazIDzZEh
    +    DNePF0O9PYALrTJxonBrQ4uGBwJENQmlyIDnmynYmp5dOuXY8nspansOq7pQkubs
    +    g0qYiQ9VwLLZ/ApmFnvcY2uqSptaTwqLalDYbUMqK61DtG6kHx3rHTokuLRFiXAq
    +    P++QdUkajqKtoH7quvKBAfzgrtHjWJhNkDbaGaYlpyIlekyrxFdp25T06BEHzpFj
    +    ylRGhuAaz2tbo1n7ynQ6KusdHEAfl51JXQSS6yU/1Wy0yXo5yuKOykj0ey15s0Ao
    +    H5yMHhEhAUVG0SKxtcWnnzAFcA9kDYagco+IjQ+wRuX4jdM5S/l2Kmu8tvW0O7ol
    +    NyxdWh2gzH/gLmt8ZthNEyTmb4mM7kPNYjjcwrbs+oNc/Qfwk66+pn+vwYmRuZJo
    +    lTZvGAhp9Es3OC19suDEgwz2bLYI4wIDAQABAoICADi6JJSx7sgZITaDxWIKMx/9
    +    L/zJbbANt+yx4+XBBSC/28gzVjnwKjmULQ5hZ8cmVNI4GFFyErtG78IownG9w8NE
    +    BVLHow0hgR3RW0qZAGrb55SMjfBHcQ2wcgBULrOOZ/9s9mwinC3h3Z9rmB6T4ynA
    +    v00rtyhtfgnHXWTv/pZLh+TYXTsvNo3gupWqW2xDUu9Q56DFgwHwUlT4fbd7TnQq
    +    j58qTMKeC3+4jU6NwdlSon63GC/ezljEj+Pn5xkSBKD5acTWSd5FffJ7YLU0vqLX
    +    mmjY1/bfaD6xZBMcbeTbOH9QPGOd92Mis66AjV9+cLILJsRIzkgR2nNq2yKNQ5VG
    +    rtpV7Vf9Mw3eI9+VKa2vjfdLlQUK9sSoBDOyyoDBYrWj9uL4E118wDTVeq6Sgk1T
    +    Wxit6EDsyirNeax3VLj25KAiO0LWAp5kqvDLljMNgOkgKNAxSX5eM18ibKGWv2an
    +    VTQ0TeurHEQidUo6SJA3XJJ0yeFgAN4hHSJB/OGkeCCyjAq4aieCMh7ziuXGJ48h
    +    /g9hC9LcfIm8nOwPt/hrMVj4bpgIYGLlaNjLWvMoCoT/TwUdigqUSA4iYbR0bbVr
    +    /So7tv5RH1QxRRWLvF1Y6bE87LzHjd4TpuZdE2Nh/Q8tBRuda0WBZucF/7fRo1Sv
    +    +WPopY/3eXLhsrEmWsZxAoIBAQDsLxrag0KsOxyYB9J1z4fRrgpts8Af56ThxFOj
    +    /X1fdW2lkblCeZZO2B1LS9vEoMmp1M9culX1uj82ST8VZNlrIaCwa5YzofbpyF6X
    +    U2yVG+g8BxOREaMN0+V1hzrvI+lFFqx8Tl+3ex+pKYANOv+i4LfN5D+y5imlLzaT
    +    M9l3gqMXZk0ZrejZBKJa9sWm949WmDDyXaKj6qC9XXLLXKbdRE9tAkPf5CMe3aLm
    +    2pbt1+nvLXgsAnsz2dt65uZEXnlubdFJr3KGK5+5BzaV0W6+8J+LSfyqUxz+AcWZ
    +    +zrwRKzQ3VWx/3fuc+lkdQUJyXDz40Mk5Y2wqA9X8g5qfOcJAoIBAQC1wMI6XkyG
    +    ufQHdV/B8ALVKnN1mG82t35rxCdNpfWSqsyTuLxkem1F9ZgzK4Q6CmIgEW1TxbP9
    +    74eTdtPTuP0vP9cRMomRUREblCmsYZv5/c42DbJ7hfBPDiSJHB3JKpMT4yPfEuhN
    +    9DR3gnITV0L9QqxO9TVH2sqO7lM77l9LQpQt3xJARMKCqtGTWGLdEG6skUnXHKz3
    +    VBFFt1x4hT5noLVLh4M/df1A1nB2DRm5pEcyOaH1wSTMIGnCvUNgrq2xVoP3TIJs
    +    RvWak9h2RO2MHPFf13Nhai3L7gxsdodpswH650Qmk4YO6og7iwUxHXL3B4GCZnK6
    +    PDDOzm9Ptp+LAoIBAQDiZHS1KETsmuzZvgW67+cc0lsktLxg2MZvsqUJ+J4ItqMX
    +    pguS8MFnajkKR/itDgLATEFIfUSQeqrE+okBlN3jlyRUd4xOid4IUgx5uXnHpCyD
    +    /bR/xgwp4Qd+FNYlDKM5mnZT4TxWwCqlGCaqh/cqxYTqUvPMJFue/xatG3JE4HA8
    +    qc8V4mHkRFDsKMdlOL+pHdEtQRv5S5owajbzQCiiyCvqLdWp8yDHIWRZLQanjeOr
    +    ZEZgyTAXj6iWsmXe+0Ai3hlTLF32xjIgRg3Ipiwl0rjb51vOWETeJgyngO4KCYot
    +    2zudl2f6phj+Nj1SGEmxPhLKd0/OGgo7Hsc6w+chAoIBAHhdwcN58+A9ghj2aIY9
    +    dwLI7FHys6Re/QBNlWHdCLcrGfSyoUFBuuBb94HbzePKQJXQNMEH612+peDJDxvm
    +    JPaHptyixWxRba0AAGFC+1Mh/NDbXVpkp3MTgKq0zh0Nbv36rSTslqAZnC2RXA7m
    +    +VxULVzVE4YUpZTmzISiJsXmv89pLeMWJmL20XhtTnvsh/8M8QPe38WkDRRIjJrc
    +    Uym5ypbMleUPNLsdyLjFkEXbP7NJa7MfSElPJftr8BU1WZ5aF2dNagpfLARE6VPZ
    +    7h+eg1PfkW/wK4gkjGHAVYlwnV0Wj5GknWF/fN1CAhw2zo4+kExVoKEpf4FWQW1f
    +    GmUCggEBAKcJPOSdg26e0fBtTJ3CUXYwCyTDmvxVg5z9JCEuyziPoj5QqH0tmce3
    +    SWH/4bHOSWwnv1y3KwlAqGCzpa2VVvnXsfSn3dPcuQmrkXTtYv+zztMbXAMOyJxp
    +    4KEWow7AU2hKg9TrPXW6Sn3/0au3ejP5QBZBwp+1hbDqUawtSKTPmPIZkBsaGy8W
    +    6m1T5E5KtsNueMK97pH80jKc73zQtx6DjkhEnHRwMc/2EdGf/CB5k+BQ4TeXSUej
    +    2JftHmpMPwFWdtpTJ2jOqBNFps+ULuaX+4H6Bb7vOUKkAn3zhJfh4wFpvYVtnXE+
    +    v8yTmHG7BmzLiznu3uPyiEfAPQ3KQ9E=
    +    -----END PRIVATE KEY-----
    \ No newline at end of file
    diff --git a/integration-tests/it-pushgateway/version-rules.xml b/integration-tests/it-pushgateway/version-rules.xml
    new file mode 100644
    index 000000000..76f8da4fd
    --- /dev/null
    +++ b/integration-tests/it-pushgateway/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    \ No newline at end of file
    diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
    index 9e064fa42..9bac492fb 100644
    --- a/integration-tests/pom.xml
    +++ b/integration-tests/pom.xml
    @@ -29,6 +29,7 @@
         
             it-common
             it-exporter
    +        it-pushgateway
         
     
         
    diff --git a/pom.xml b/pom.xml
    index 057a36d2b..b79891eb9 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -63,6 +63,7 @@
             prometheus-metrics-exporter-servlet-javax
             prometheus-metrics-exporter-httpserver
             prometheus-metrics-exporter-opentelemetry
    +        prometheus-metrics-exporter-pushgateway
             prometheus-metrics-instrumentation-jvm
             prometheus-metrics-instrumentation-dropwizard5
             prometheus-metrics-simpleclient-bridge
    diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java
    new file mode 100644
    index 000000000..f38a7f4af
    --- /dev/null
    +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java
    @@ -0,0 +1,59 @@
    +package io.prometheus.metrics.config;
    +
    +import java.util.Map;
    +
    +public class ExporterPushgatewayProperties {
    +
    +    private static final String ADDRESS = "address";
    +    private static final String JOB = "job";
    +    private static final String SCHEME = "scheme";
    +    private final String scheme;
    +    private final String address;
    +    private final String job;
    +
    +    private ExporterPushgatewayProperties(String address, String job, String scheme) {
    +        this.address = address;
    +        this.job = job;
    +        this.scheme = scheme;
    +    }
    +
    +    /**
    +     * Address of the Pushgateway in the form {@code host:port}.
    +     * Default is {@code localhost:9091}
    +     */
    +    public String getAddress() {
    +        return address;
    +    }
    +
    +    /**
    +     * {@code job} label for metrics being pushed.
    +     * Default is the name of the JAR file that is running.
    +     */
    +    public String getJob() {
    +        return job;
    +    }
    +
    +    /**
    +     * Scheme to be used when pushing metrics to the pushgateway.
    +     * Must be "http" or "https". Default is "http".
    +     */
    +    public String getScheme() {
    +        return scheme;
    +    }
    +
    +    /**
    +     * Note that this will remove entries from {@code properties}.
    +     * This is because we want to know if there are unused properties remaining after all properties have been loaded.
    +     */
    +    static ExporterPushgatewayProperties load(String prefix, Map properties) throws PrometheusPropertiesException {
    +        String address = Util.loadString(prefix + "." + ADDRESS, properties);
    +        String job = Util.loadString(prefix + "." + JOB, properties);
    +        String scheme = Util.loadString(prefix + "." +  SCHEME, properties);
    +        if (scheme != null) {
    +            if (!scheme.equals("http") && !scheme.equals("https")) {
    +                throw new PrometheusPropertiesException(prefix + "." + SCHEME + "=" + scheme + ": Illegal value. Expecting 'http' or 'https'.");
    +            }
    +        }
    +        return new ExporterPushgatewayProperties(address, job, scheme);
    +    }
    +}
    diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java
    index 4707dd862..2e26a4c7b 100644
    --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java
    +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java
    @@ -19,6 +19,7 @@ public class PrometheusProperties {
         private final ExporterFilterProperties exporterFilterProperties;
         private final ExporterHttpServerProperties exporterHttpServerProperties;
         private final ExporterOpenTelemetryProperties exporterOpenTelemetryProperties;
    +    private final ExporterPushgatewayProperties exporterPushgatewayProperties;
     
         /**
          * Get the properties instance. When called for the first time, {@code get()} loads the properties from the following locations:
    @@ -39,6 +40,7 @@ public PrometheusProperties(
                 ExporterProperties exporterProperties,
                 ExporterFilterProperties exporterFilterProperties,
                 ExporterHttpServerProperties httpServerConfig,
    +            ExporterPushgatewayProperties pushgatewayProperties,
                 ExporterOpenTelemetryProperties otelConfig) {
             this.defaultMetricsProperties = defaultMetricsProperties;
             this.metricProperties.putAll(metricProperties);
    @@ -46,6 +48,7 @@ public PrometheusProperties(
             this.exporterProperties = exporterProperties;
             this.exporterFilterProperties = exporterFilterProperties;
             this.exporterHttpServerProperties = httpServerConfig;
    +        this.exporterPushgatewayProperties = pushgatewayProperties;
             this.exporterOpenTelemetryProperties = otelConfig;
         }
     
    @@ -80,6 +83,10 @@ public ExporterHttpServerProperties getExporterHttpServerProperties() {
             return exporterHttpServerProperties;
         }
     
    +    public ExporterPushgatewayProperties getExporterPushgatewayProperties() {
    +        return exporterPushgatewayProperties;
    +    }
    +
         public ExporterOpenTelemetryProperties getExporterOpenTelemetryProperties() {
             return exporterOpenTelemetryProperties;
         }
    diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java
    index 1cde3a188..bb9b3c2cb 100644
    --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java
    +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java
    @@ -36,9 +36,10 @@ public static PrometheusProperties load(Map externalProperties)
             ExporterProperties exporterProperties = ExporterProperties.load("io.prometheus.exporter", properties);
             ExporterFilterProperties exporterFilterProperties = ExporterFilterProperties.load("io.prometheus.exporter.filter", properties);
             ExporterHttpServerProperties exporterHttpServerProperties = ExporterHttpServerProperties.load("io.prometheus.exporter.httpServer", properties);
    +        ExporterPushgatewayProperties exporterPushgatewayProperties = ExporterPushgatewayProperties.load("io.prometheus.exporter.pushgateway", properties);
             ExporterOpenTelemetryProperties exporterOpenTelemetryProperties = ExporterOpenTelemetryProperties.load("io.prometheus.exporter.opentelemetry", properties);
             validateAllPropertiesProcessed(properties);
    -        return new PrometheusProperties(defaultMetricsProperties, metricsConfigs, exemplarConfig, exporterProperties, exporterFilterProperties, exporterHttpServerProperties, exporterOpenTelemetryProperties);
    +        return new PrometheusProperties(defaultMetricsProperties, metricsConfigs, exemplarConfig, exporterProperties, exporterFilterProperties, exporterHttpServerProperties, exporterPushgatewayProperties, exporterOpenTelemetryProperties);
         }
     
         // This will remove entries from properties when they are processed.
    diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml
    index 7553c7d29..47dbadf74 100644
    --- a/prometheus-metrics-exporter-pushgateway/pom.xml
    +++ b/prometheus-metrics-exporter-pushgateway/pom.xml
    @@ -5,15 +5,15 @@
         
             io.prometheus
             client_java
    -        1.0.0-beta-2-SNAPSHOT
    +        1.3.0-SNAPSHOT
         
     
    -    simpleclient_pushgateway
    +    prometheus-metrics-exporter-pushgateway
         bundle
     
    -    Prometheus Java Simpleclient Pushgateway
    +    Prometheus Metrics Exporter - Pushgateway
         
    -        Pushgateway exporter for the simpleclient.
    +        Exporter for pushing metrics to a pushgateway.
         
     
         
    @@ -25,10 +25,15 @@
         
     
         
    -        
    +       
                 brian-brazil
                 Brian Brazil
                 brian.brazil@boxever.com
    +       
    +       
    +            fstab
    +            Fabian Stäber
    +            fabian@fstab.de
             
         
     
    @@ -36,12 +41,7 @@
         
             
                 io.prometheus
    -            simpleclient
    -            ${project.version}
    -        
    -        
    -            io.prometheus
    -            simpleclient_common
    +            prometheus-metrics-exporter-common
                 ${project.version}
             
             
    @@ -50,7 +50,6 @@
                 2.4.0-b180830.0359
                 provided
             
    -        
             
                 junit
                 junit
    @@ -69,5 +68,11 @@
                 5.13.2
                 test
             
    +        
    +            io.prometheus
    +            prometheus-metrics-core
    +            ${project.version}
    +            test
    +        
         
     
    diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Base64.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Base64.java
    deleted file mode 100644
    index 2043bb36f..000000000
    --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Base64.java
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -package io.prometheus.metrics.exporter.pushgateway;
    -
    -import javax.xml.bind.DatatypeConverter;
    -
    -/**
    - * This class delegates to either javax.xml.bind.DatatypeConverter (for Java < 8) or java.util.Base64 (Java 8+)
    - * to perform Base64 encoding of a String.
    - *
    - * This code requires Java 8+ for compilation.
    - */
    -public class Base64 {
    -
    -    private static final boolean HAS_JAVA_UTIL_BASE64 = hasJavaUtilBase64();
    -
    -    private static boolean hasJavaUtilBase64() {
    -        try {
    -            Class.forName("java.util.Base64");
    -            // Java 8+
    -            return true;
    -        } catch (Throwable t) {
    -            // Java < 8
    -            return false;
    -        }
    -    }
    -
    -    private Base64() {}
    -
    -    /**
    -     * Encodes a byte[] to a String using Base64.
    -     *
    -     * Passing a null argument will cause a NullPointerException to be thrown.
    -     *
    -     * @param src string to be encoded
    -     * @return String in Base64 encoding
    -     */
    -    @SuppressWarnings("all")
    -    public static String encodeToString(byte[] src) {
    -        if (src == null) {
    -            throw new NullPointerException();
    -        }
    -
    -        if (HAS_JAVA_UTIL_BASE64) {
    -            return java.util.Base64.getEncoder().encodeToString(src);
    -        } else {
    -            return DatatypeConverter.printBase64Binary(src);
    -        }
    -    }
    -}
    diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthHttpConnectionFactory.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthHttpConnectionFactory.java
    deleted file mode 100644
    index 8d36b8f11..000000000
    --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthHttpConnectionFactory.java
    +++ /dev/null
    @@ -1,36 +0,0 @@
    -package io.prometheus.metrics.exporter.pushgateway;
    -
    -import java.io.IOException;
    -import java.io.UnsupportedEncodingException;
    -import java.net.HttpURLConnection;
    -
    -public class BasicAuthHttpConnectionFactory implements HttpConnectionFactory {
    -    private final HttpConnectionFactory originConnectionFactory;
    -    private final String basicAuthHeader;
    -
    -    public BasicAuthHttpConnectionFactory(HttpConnectionFactory connectionFactory, String user, String password) {
    -        this.originConnectionFactory = connectionFactory;
    -        this.basicAuthHeader = encode(user, password);
    -    }
    -
    -    public BasicAuthHttpConnectionFactory(String user, String password) {
    -        this(new DefaultHttpConnectionFactory(), user, password);
    -    }
    -
    -    @Override
    -    public HttpURLConnection create(String url) throws IOException {
    -        HttpURLConnection connection = originConnectionFactory.create(url);
    -        connection.setRequestProperty("Authorization", basicAuthHeader);
    -        return connection;
    -    }
    -
    -    private String encode(String user, String password) {
    -        try {
    -            byte[] credentialsBytes = (user + ":" + password).getBytes("UTF-8");
    -            String encoded = Base64.encodeToString(credentialsBytes);
    -            return String.format("Basic %s", encoded);
    -        } catch (UnsupportedEncodingException e) {
    -            throw new IllegalArgumentException(e);
    -        }
    -    }
    -}
    diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java
    index 44d47de98..f3223cb53 100644
    --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java
    +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java
    @@ -4,9 +4,15 @@
     import java.net.HttpURLConnection;
     import java.net.URL;
     
    +/**
    + * This can be used for creating {@link Scheme#HTTP} and {@link Scheme#HTTPS} connections.
    + * 

    + * However, if you want to use it with {@link Scheme#HTTPS} you must make sure that the keychain for verifying the server certificate is set up correctly. + * For an example of how to skip certificate verification see {@code PushGatewayTestApp} in {@code integration-tests/it-pushgateway/}. + */ public class DefaultHttpConnectionFactory implements HttpConnectionFactory { @Override - public HttpURLConnection create(String url) throws IOException { - return (HttpURLConnection) new URL(url).openConnection(); + public HttpURLConnection create(URL url) throws IOException { + return (HttpURLConnection) url.openConnection(); } } diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultJobLabelDetector.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultJobLabelDetector.java new file mode 100644 index 000000000..8d9afb71e --- /dev/null +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultJobLabelDetector.java @@ -0,0 +1,60 @@ +package io.prometheus.metrics.exporter.pushgateway; + +import java.nio.file.Files; +import java.nio.file.InvalidPathException; +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * The default {@code job} label is the name of the JAR file being executed. + *

    + * This is copy-and-paste from {@code ResourceAttributesFromJarFileName} + * in the {@code prometheus-metrics-exporter-opentelemetry} module. + */ +class DefaultJobLabelDetector { + + static String getDefaultJobLabel() { + Path jarPath = getJarPathFromSunCommandLine(); + if (jarPath == null) { + return "unknown_job"; + } + return getServiceName(jarPath); + } + + private static String getServiceName(Path jarPath) { + String jarName = jarPath.getFileName().toString(); + int dotIndex = jarName.lastIndexOf("."); + return dotIndex == -1 ? jarName : jarName.substring(0, dotIndex); + } + + private static Path getJarPathFromSunCommandLine() { + String programArguments = System.getProperty("sun.java.command"); + if (programArguments == null) { + return null; + } + // Take the path until the first space. If the path doesn't exist extend it up to the next + // space. Repeat until a path that exists is found or input runs out. + int next = 0; + while (true) { + int nextSpace = programArguments.indexOf(' ', next); + if (nextSpace == -1) { + return pathIfExists(programArguments); + } + Path path = pathIfExists(programArguments.substring(0, nextSpace)); + next = nextSpace + 1; + if (path != null) { + return path; + } + } + } + + private static Path pathIfExists(String programArguments) { + Path candidate; + try { + candidate = Paths.get(programArguments); + } catch (InvalidPathException e) { + return null; + } + return Files.isRegularFile(candidate) ? candidate : null; + } +} diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Format.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Format.java new file mode 100644 index 000000000..90204cff9 --- /dev/null +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Format.java @@ -0,0 +1,6 @@ +package io.prometheus.metrics.exporter.pushgateway; + +public enum Format { + PROMETHEUS_PROTOBUF, + PROMETHEUS_TEXT +} diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java index 94556fa28..c583b144e 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java @@ -2,7 +2,12 @@ import java.io.IOException; import java.net.HttpURLConnection; +import java.net.URL; +/** + * See {@link DefaultHttpConnectionFactory}. + */ +@FunctionalInterface public interface HttpConnectionFactory { - HttpURLConnection create(String url) throws IOException; + HttpURLConnection create(URL url) throws IOException; } diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java index 0e00cc19e..a2d587675 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java @@ -1,300 +1,425 @@ package io.prometheus.metrics.exporter.pushgateway; -import java.io.BufferedWriter; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStreamWriter; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.InetAddress; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.net.URLEncoder; -import java.net.UnknownHostException; -import java.util.HashMap; -import java.util.Map; - -import io.prometheus.client.Collector; -import io.prometheus.client.CollectorRegistry; -import io.prometheus.client.exporter.common.TextFormat; +import io.prometheus.metrics.config.ExporterPushgatewayProperties; +import io.prometheus.metrics.config.PrometheusProperties; +import io.prometheus.metrics.config.PrometheusPropertiesException; +import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; +import io.prometheus.metrics.expositionformats.PrometheusTextFormatWriter; +import io.prometheus.metrics.model.registry.Collector; +import io.prometheus.metrics.model.registry.MultiCollector; +import io.prometheus.metrics.model.registry.PrometheusRegistry; + +import java.io.*; +import java.net.*; +import java.nio.charset.StandardCharsets; +import java.util.*; + +import static io.prometheus.metrics.exporter.pushgateway.Scheme.HTTP; /** - * Export metrics via the Prometheus Pushgateway. + * Export metrics via the Prometheus Pushgateway *

    * The Prometheus Pushgateway exists to allow ephemeral and batch jobs to expose their metrics to Prometheus. * Since these kinds of jobs may not exist long enough to be scraped, they can instead push their metrics - * to a Pushgateway. This class allows pushing the contents of a {@link CollectorRegistry} to - * a Pushgateway. + * to a Pushgateway. This Java class allows pushing the contents of a {@link PrometheusRegistry} to a Pushgateway. *

    * Example usage: *

      * {@code
    - *   void executeBatchJob() throws Exception {
    - *     CollectorRegistry registry = new CollectorRegistry();
    - *     Gauge duration = Gauge.build()
    - *         .name("my_batch_job_duration_seconds").help("Duration of my batch job in seconds.").register(registry);
    - *     Gauge.Timer durationTimer = duration.startTimer();
    + * void executeBatchJob() throws Exception {
    + *     PrometheusRegistry registry = new PrometheusRegistry();
    + *     Gauge duration = Gauge.builder()
    + *             .name("my_batch_job_duration_seconds")
    + *             .help("Duration of my batch job in seconds.")
    + *             .register(registry);
    + *     Timer durationTimer = duration.startTimer();
      *     try {
    - *       // Your code here.
    + *         // Your code here.
      *
    - *       // This is only added to the registry after success,
    - *       // so that a previous success in the Pushgateway isn't overwritten on failure.
    - *       Gauge lastSuccess = Gauge.build()
    - *           .name("my_batch_job_last_success").help("Last time my batch job succeeded, in unixtime.").register(registry);
    - *       lastSuccess.setToCurrentTime();
    + *         // This is only added to the registry after success,
    + *         // so that a previous success in the Pushgateway isn't overwritten on failure.
    + *         Gauge lastSuccess = Gauge.builder()
    + *                 .name("my_batch_job_last_success")
    + *                 .help("Last time my batch job succeeded, in unixtime.")
    + *                 .register(registry);
    + *         lastSuccess.set(System.currentTimeMillis());
      *     } finally {
    - *       durationTimer.setDuration();
    - *       PushGateway pg = new PushGateway("127.0.0.1:9091");
    - *       pg.pushAdd(registry, "my_batch_job");
    + *         durationTimer.observeDuration();
    + *         PushGateway pg = PushGateway.builder()
    + *                 .address("127.0.0.1:9091")
    + *                 .job("my_batch_job")
    + *                 .registry(registry)
    + *                 .build();
    + *         pg.pushAdd();
      *     }
    - *   }
    + * }
      * }
      * 
    *

    - * See https://github.com/prometheus/pushgateway + * See https://github.com/prometheus/pushgateway. */ public class PushGateway { - private static final int MILLISECONDS_PER_SECOND = 1000; - - // Visible for testing. - protected final String gatewayBaseURL; - - private HttpConnectionFactory connectionFactory = new DefaultHttpConnectionFactory(); - - /** - * Construct a Pushgateway, with the given address. - *

    - * @param address host:port or ip:port of the Pushgateway. - */ - public PushGateway(String address) { - this(createURLSneakily("http://" + address)); - } - - /** - * Construct a Pushgateway, with the given URL. - *

    - * @param serverBaseURL the base URL and optional context path of the Pushgateway server. - */ - public PushGateway(URL serverBaseURL) { - this.gatewayBaseURL = URI.create(serverBaseURL.toString() + "/metrics/") - .normalize() - .toString(); - } - - public void setConnectionFactory(HttpConnectionFactory connectionFactory) { - this.connectionFactory = connectionFactory; - } - - /** - * Creates a URL instance from a String representation of a URL without throwing a checked exception. - * Required because you can't wrap a call to another constructor in a try statement. - * - * @param urlString the String representation of the URL. - * @return The URL instance. - */ - private static URL createURLSneakily(final String urlString) { - try { - return new URL(urlString); - } catch (MalformedURLException e) { - throw new RuntimeException(e); + private static final int MILLISECONDS_PER_SECOND = 1000; + + private final URL url; + private final Format format; + private final Map requestHeaders; + private final PrometheusRegistry registry; + private final HttpConnectionFactory connectionFactory; + + private PushGateway(PrometheusRegistry registry, Format format, URL url, HttpConnectionFactory connectionFactory, Map requestHeaders) { + this.registry = registry; + this.format = format; + this.url = url; + this.requestHeaders = Collections.unmodifiableMap(new HashMap<>(requestHeaders)); + this.connectionFactory = connectionFactory; } - } - - /** - * Pushes all metrics in a registry, replacing all those with the same job and no grouping key. - *

    - * This uses the PUT HTTP method. - */ - public void push(CollectorRegistry registry, String job) throws IOException { - doRequest(registry, job, null, "PUT"); - } - - /** - * Pushes all metrics in a Collector, replacing all those with the same job and no grouping key. - *

    - * This is useful for pushing a single Gauge. - *

    - * This uses the PUT HTTP method. - */ - public void push(Collector collector, String job) throws IOException { - CollectorRegistry registry = new CollectorRegistry(); - collector.register(registry); - push(registry, job); - } - - /** - * Pushes all metrics in a registry, replacing all those with the same job and grouping key. - *

    - * This uses the PUT HTTP method. - */ - public void push(CollectorRegistry registry, String job, Map groupingKey) throws IOException { - doRequest(registry, job, groupingKey, "PUT"); - } - - /** - * Pushes all metrics in a Collector, replacing all those with the same job and grouping key. - *

    - * This is useful for pushing a single Gauge. - *

    - * This uses the PUT HTTP method. - */ - public void push(Collector collector, String job, Map groupingKey) throws IOException { - CollectorRegistry registry = new CollectorRegistry(); - collector.register(registry); - push(registry, job, groupingKey); - } - - /** - * Pushes all metrics in a registry, replacing only previously pushed metrics of the same name and job and no grouping key. - *

    - * This uses the POST HTTP method. - */ - public void pushAdd(CollectorRegistry registry, String job) throws IOException { - doRequest(registry, job, null, "POST"); - } - - /** - * Pushes all metrics in a Collector, replacing only previously pushed metrics of the same name and job and no grouping key. - *

    - * This is useful for pushing a single Gauge. - *

    - * This uses the POST HTTP method. - */ - public void pushAdd(Collector collector, String job) throws IOException { - CollectorRegistry registry = new CollectorRegistry(); - collector.register(registry); - pushAdd(registry, job); - } - - /** - * Pushes all metrics in a registry, replacing only previously pushed metrics of the same name, job and grouping key. - *

    - * This uses the POST HTTP method. - */ - public void pushAdd(CollectorRegistry registry, String job, Map groupingKey) throws IOException { - doRequest(registry, job, groupingKey, "POST"); - } - - /** - * Pushes all metrics in a Collector, replacing only previously pushed metrics of the same name, job and grouping key. - *

    - * This is useful for pushing a single Gauge. - *

    - * This uses the POST HTTP method. - */ - public void pushAdd(Collector collector, String job, Map groupingKey) throws IOException { - CollectorRegistry registry = new CollectorRegistry(); - collector.register(registry); - pushAdd(registry, job, groupingKey); - } - - - /** - * Deletes metrics from the Pushgateway. - *

    - * Deletes metrics with no grouping key and the provided job. - * This uses the DELETE HTTP method. - */ - public void delete(String job) throws IOException { - doRequest(null, job, null, "DELETE"); - } - - /** - * Deletes metrics from the Pushgateway. - *

    - * Deletes metrics with the provided job and grouping key. - * This uses the DELETE HTTP method. - */ - public void delete(String job, Map groupingKey) throws IOException { - doRequest(null, job, groupingKey, "DELETE"); - } - - void doRequest(CollectorRegistry registry, String job, Map groupingKey, String method) throws IOException { - String url = gatewayBaseURL; - if (job.contains("/")) { - url += "job@base64/" + base64url(job); - } else { - url += "job/" + URLEncoder.encode(job, "UTF-8"); + + /** + * Push all metrics. All metrics with the same job and grouping key are replaced. + *

    + * This uses the PUT HTTP method. + */ + public void push() throws IOException { + doRequest(registry, "PUT"); } - if (groupingKey != null) { - for (Map.Entry entry: groupingKey.entrySet()) { - if (entry.getValue().isEmpty()) { - url += "/" + entry.getKey() + "@base64/="; - } else if (entry.getValue().contains("/")) { - url += "/" + entry.getKey() + "@base64/" + base64url(entry.getValue()); - } else { - url += "/" + entry.getKey() + "/" + URLEncoder.encode(entry.getValue(), "UTF-8"); - } - } + /** + * Push a single metric. All metrics with the same job and grouping key are replaced. + *

    + * This is useful for pushing a single Gauge. + *

    + * This uses the PUT HTTP method. + */ + public void push(Collector collector) throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + doRequest(registry, "PUT"); + } + + /** + * Push a single collector. All metrics with the same job and grouping key are replaced. + *

    + * This uses the PUT HTTP method. + */ + public void push(MultiCollector collector) throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + doRequest(registry, "PUT"); + } + + /** + * Like {@link #push()}, but only metrics with the same name as the newly pushed metrics are replaced. + *

    + * This uses the POST HTTP method. + */ + public void pushAdd() throws IOException { + doRequest(registry, "POST"); + } + + /** + * Like {@link #push(Collector)}, but only the specified metric will be replaced. + *

    + * This uses the POST HTTP method. + */ + public void pushAdd(Collector collector) throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + doRequest(registry, "POST"); + } + + /** + * Like {@link #push(MultiCollector)}, but only the metrics from the collector will be replaced. + *

    + * This uses the POST HTTP method. + */ + public void pushAdd(MultiCollector collector) throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + doRequest(registry, "POST"); + } + + /** + * Deletes metrics from the Pushgateway. + *

    + * This uses the DELETE HTTP method. + */ + public void delete() throws IOException { + doRequest(null, "DELETE"); } - HttpURLConnection connection = connectionFactory.create(url); - connection.setRequestProperty("Content-Type", TextFormat.CONTENT_TYPE_004); - if (!method.equals("DELETE")) { - connection.setDoOutput(true); + + private void doRequest(PrometheusRegistry registry, String method) throws IOException { + try { + HttpURLConnection connection = connectionFactory.create(url); + requestHeaders.forEach(connection::setRequestProperty); + if (format == Format.PROMETHEUS_TEXT) { + connection.setRequestProperty("Content-Type", PrometheusTextFormatWriter.CONTENT_TYPE); + } else { + connection.setRequestProperty("Content-Type", PrometheusProtobufWriter.CONTENT_TYPE); + } + if (!method.equals("DELETE")) { + connection.setDoOutput(true); + } + connection.setRequestMethod(method); + + connection.setConnectTimeout(10 * MILLISECONDS_PER_SECOND); + connection.setReadTimeout(10 * MILLISECONDS_PER_SECOND); + connection.connect(); + + try { + if (!method.equals("DELETE")) { + OutputStream outputStream = connection.getOutputStream(); + if (format == Format.PROMETHEUS_TEXT) { + new PrometheusTextFormatWriter(false).write(outputStream, registry.scrape()); + } else { + new PrometheusProtobufWriter().write(outputStream, registry.scrape()); + } + outputStream.flush(); + outputStream.close(); + } + + int response = connection.getResponseCode(); + if (response / 100 != 2) { + String errorMessage; + InputStream errorStream = connection.getErrorStream(); + if (errorStream != null) { + String errBody = readFromStream(errorStream); + errorMessage = "Response code from " + url + " was " + response + ", response body: " + errBody; + } else { + errorMessage = "Response code from " + url + " was " + response; + } + throw new IOException(errorMessage); + } + + } finally { + connection.disconnect(); + } + } catch (IOException e) { + String baseUrl = url.getProtocol() + "://" + url.getHost(); + if (url.getPort() != -1) { + baseUrl += ":" + url.getPort(); + } + throw new IOException("Failed to push metrics to the Prometheus Pushgateway on " + baseUrl + ": " + e.getMessage(), e); + } } - connection.setRequestMethod(method); - - connection.setConnectTimeout(10 * MILLISECONDS_PER_SECOND); - connection.setReadTimeout(10 * MILLISECONDS_PER_SECOND); - connection.connect(); - - try { - if (!method.equals("DELETE")) { - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8")); - TextFormat.write004(writer, registry.metricFamilySamples()); - writer.flush(); - writer.close(); - } - - int response = connection.getResponseCode(); - if (response/100 != 2) { - String errorMessage; - InputStream errorStream = connection.getErrorStream(); - if(errorStream != null) { - String errBody = readFromStream(errorStream); - errorMessage = "Response code from " + url + " was " + response + ", response body: " + errBody; - } else { - errorMessage = "Response code from " + url + " was " + response; + + private static String readFromStream(InputStream is) throws IOException { + ByteArrayOutputStream result = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int length; + while ((length = is.read(buffer)) != -1) { + result.write(buffer, 0, length); } - throw new IOException(errorMessage); - } - } finally { - connection.disconnect(); + return result.toString("UTF-8"); } - } - - private static String base64url(String v) { - // Per RFC4648 table 2. We support Java 6, and java.util.Base64 was only added in Java 8, - try { - return Base64.encodeToString(v.getBytes("UTF-8")).replace("+", "-").replace("/", "_"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); // Unreachable. + + public static Builder builder() { + return builder(PrometheusProperties.get()); + } + + /** + * The {@link PrometheusProperties} will be used to override what is set in the {@link Builder}. + */ + public static Builder builder(PrometheusProperties config) { + return new Builder(config); } - } - - /** - * Returns a grouping key with the instance label set to the machine's IP address. - *

    - * This is a convenience function, and should only be used where you want to - * push per-instance metrics rather than cluster/job level metrics. - */ - public static Map instanceIPGroupingKey() throws UnknownHostException { - Map groupingKey = new HashMap(); - groupingKey.put("instance", InetAddress.getLocalHost().getHostAddress()); - return groupingKey; - } - - private static String readFromStream(InputStream is) throws IOException { - ByteArrayOutputStream result = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int length; - while ((length = is.read(buffer)) != -1) { - result.write(buffer, 0, length); + + public static class Builder { + + private final PrometheusProperties config; + private Format format; + private String address; + private Scheme scheme; + private String job; + private final Map requestHeaders = new HashMap<>(); + private PrometheusRegistry registry = PrometheusRegistry.defaultRegistry; + private HttpConnectionFactory connectionFactory = new DefaultHttpConnectionFactory(); + private Map groupingKey = new TreeMap<>(); + + private Builder(PrometheusProperties config) { + this.config = config; + } + + /** + * Default is {@link Format#PROMETHEUS_PROTOBUF}. + */ + public Builder format(Format format) { + if (format == null) { + throw new NullPointerException(); + } + this.format = format; + return this; + } + + /** + * Address of the Pushgateway in format {@code host:port}. + * Default is {@code localhost:9091}. + * Can be overwritten at runtime with the {@code io.prometheus.exporter.pushgateway.address} property. + */ + public Builder address(String address) { + if (address == null) { + throw new NullPointerException(); + } + this.address = address; + return this; + } + + /** + * Username and password for HTTP basic auth when pushing to the Pushgateway. + */ + public Builder basicAuth(String user, String password) { + if (user == null || password == null) { + throw new NullPointerException(); + } + byte[] credentialsBytes = (user + ":" + password).getBytes(StandardCharsets.UTF_8); + String encoded = Base64.getEncoder().encodeToString(credentialsBytes); + requestHeaders.put("Authorization", String.format("Basic %s", encoded)); + return this; + } + + /** + * Specify if metrics should be pushed using HTTP or HTTPS. Default is HTTP. + * Can be overwritten at runtime with the {@code io.prometheus.exporter.pushgateway.scheme} property. + */ + public Builder scheme(Scheme scheme) { + if (scheme == null) { + throw new NullPointerException(); + } + this.scheme = scheme; + return this; + } + + /** + * Custom connection factory. Default is {@link DefaultHttpConnectionFactory}. + *

    + * The {@code PushGatewayTestApp} in {@code integration-tests/it-pushgateway/} has an example of a custom + * connection factory that skips SSL certificate validation for HTTPS connections. + */ + public Builder connectionFactory(HttpConnectionFactory connectionFactory) { + if (connectionFactory == null) { + throw new NullPointerException(); + } + this.connectionFactory = connectionFactory; + return this; + } + + /** + * The {@code job} label to be used when pushing metrics. + * If not provided, the name of the JAR file will be used by default. + * Can be overwritten at runtime with the {@code io.prometheus.exporter.pushgateway.job} property. + */ + public Builder job(String job) { + if (job == null) { + throw new NullPointerException(); + } + this.job = job; + return this; + } + + /** + * Grouping keys to be used when pushing/deleting metrics. + * Call this method multiple times for adding multiple grouping keys. + */ + public Builder groupingKey(String name, String value) { + if (name == null || value == null) { + throw new NullPointerException(); + } + groupingKey.put(name, value); + return this; + } + + /** + * Convenience method for adding the current IP address as an "instance" label. + */ + public Builder instanceIpGroupingKey() throws UnknownHostException { + return groupingKey("instance", InetAddress.getLocalHost().getHostAddress()); + } + + /** + * Push metrics from this registry instead of {@link PrometheusRegistry#defaultRegistry}. + */ + public Builder registry(PrometheusRegistry registry) { + if (registry == null) { + throw new NullPointerException(); + } + this.registry = registry; + return this; + } + + private Scheme getScheme(ExporterPushgatewayProperties properties) { + if (properties != null && properties.getScheme() != null) { + return Scheme.valueOf(properties.getScheme()); + } else if (this.scheme != null) { + return this.scheme; + } else { + return HTTP; + } + } + + private String getAddress(ExporterPushgatewayProperties properties) { + if (properties != null && properties.getAddress() != null) { + return properties.getAddress(); + } else if (this.address != null) { + return this.address; + } else { + return "localhost:9091"; + } + } + + private String getJob(ExporterPushgatewayProperties properties) { + if (properties != null && properties.getJob() != null) { + return properties.getJob(); + } else if (this.job != null) { + return this.job; + } else { + return DefaultJobLabelDetector.getDefaultJobLabel(); + } + } + + private Format getFormat(ExporterPushgatewayProperties properties) { + // currently not configurable via properties + if (this.format != null) { + return this.format; + } + return Format.PROMETHEUS_PROTOBUF; + } + + private URL makeUrl(ExporterPushgatewayProperties properties) throws UnsupportedEncodingException, MalformedURLException { + String url = getScheme(properties) + "://" + getAddress(properties) + "/metrics/"; + String job = getJob(properties); + if (job.contains("/")) { + url += "job@base64/" + base64url(job); + } else { + url += "job/" + URLEncoder.encode(job, "UTF-8"); + } + if (groupingKey != null) { + for (Map.Entry entry : groupingKey.entrySet()) { + if (entry.getValue().isEmpty()) { + url += "/" + entry.getKey() + "@base64/="; + } else if (entry.getValue().contains("/")) { + url += "/" + entry.getKey() + "@base64/" + base64url(entry.getValue()); + } else { + url += "/" + entry.getKey() + "/" + URLEncoder.encode(entry.getValue(), "UTF-8"); + } + } + } + return URI.create(url).normalize().toURL(); + } + + private String base64url(String v) { + return Base64.getEncoder().encodeToString(v.getBytes(StandardCharsets.UTF_8)).replace("+", "-").replace("/", "_"); + } + + public PushGateway build() { + ExporterPushgatewayProperties properties = config == null ? null : config.getExporterPushgatewayProperties(); + try { + return new PushGateway(registry, getFormat(properties), makeUrl(properties), connectionFactory, requestHeaders); + } catch (MalformedURLException e) { + throw new PrometheusPropertiesException(address + ": Invalid address. Expecting :"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); // cannot happen, UTF-8 is always supported + } + } } - return result.toString("UTF-8"); - } } diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Scheme.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Scheme.java new file mode 100644 index 000000000..adb7ebf07 --- /dev/null +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Scheme.java @@ -0,0 +1,29 @@ +package io.prometheus.metrics.exporter.pushgateway; + +public enum Scheme { + + HTTP("http"), + HTTPS("https"); + + private final String name; + + Scheme(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } + + public static Scheme fromString(String name) { + switch (name) { + case "http": + return HTTP; + case "https": + return HTTPS; + default: + throw new IllegalArgumentException(name + ": Unsupported scheme. Expecting 'http' or 'https'."); + } + } +} diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java index 2fca7d9a4..78706ee49 100644 --- a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java @@ -1,45 +1,48 @@ package io.prometheus.metrics.exporter.pushgateway; - -import static org.mockserver.model.HttpRequest.request; -import static org.mockserver.model.HttpResponse.response; - -import java.io.IOException; - -import io.prometheus.client.CollectorRegistry; -import io.prometheus.client.Gauge; +import io.prometheus.metrics.core.metrics.Gauge; +import io.prometheus.metrics.model.registry.PrometheusRegistry; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockserver.client.MockServerClient; import org.mockserver.junit.MockServerRule; +import java.io.IOException; + +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; + public class BasicAuthPushGatewayTest { - @Rule - public MockServerRule mockServerRule = new MockServerRule(this); - private MockServerClient mockServerClient; - - CollectorRegistry registry; - Gauge gauge; - PushGateway pushGateway; - - @Before - public void setUp() { - registry = new CollectorRegistry(); - gauge = Gauge.build().name("g").help("help").create(); - pushGateway = new PushGateway("localhost:" + mockServerRule.getPort()); - pushGateway.setConnectionFactory(new BasicAuthHttpConnectionFactory("testUser", "testPwd")); - } - - @Test - public void testAuthorizedPush() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withHeader("Authorization", "Basic dGVzdFVzZXI6dGVzdFB3ZA==") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - pushGateway.push(registry, "j"); - } + @Rule + public MockServerRule mockServerRule = new MockServerRule(this); + private MockServerClient mockServerClient; + + PrometheusRegistry registry; + Gauge gauge; + PushGateway pushGateway; + + @Before + public void setUp() { + registry = new PrometheusRegistry(); + gauge = Gauge.builder().name("g").help("help").build(); + pushGateway = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .basicAuth("testUser", "testPwd") + .registry(registry) + .job("j") + .build(); + } + + @Test + public void testAuthorizedPush() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withHeader("Authorization", "Basic dGVzdFVzZXI6dGVzdFB3ZA==") + .withPath("/metrics/job/j") + ).respond(response().withStatusCode(202)); + pushGateway.push(); + } } diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/ExamplePushGateway.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/ExamplePushGateway.java deleted file mode 100644 index 9b9196b7a..000000000 --- a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/ExamplePushGateway.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.prometheus.metrics.exporter.pushgateway; - -import io.prometheus.client.Gauge; -import io.prometheus.client.CollectorRegistry; - - -public class ExamplePushGateway { - static final CollectorRegistry pushRegistry = new CollectorRegistry(); - static final Gauge g = (Gauge) Gauge.build().name("gauge").help("blah").register(pushRegistry); - - /** - * Example of how to use the pushgateway, pass in the host:port of a pushgateway. - */ - public static void main(String[] args) throws Exception { - PushGateway pg = new PushGateway(args[0]); - g.set(42); - pg.push(pushRegistry, "job"); - } -} - diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java index c1ac4b797..74ebae7ac 100644 --- a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java @@ -1,223 +1,319 @@ package io.prometheus.metrics.exporter.pushgateway; -import static org.junit.rules.ExpectedException.none; -import static org.mockserver.model.HttpRequest.request; -import static org.mockserver.model.HttpResponse.response; - -import io.prometheus.client.CollectorRegistry; -import io.prometheus.client.Gauge; -import java.io.IOException; -import java.util.TreeMap; -import java.util.Map; - +import io.prometheus.metrics.core.metrics.Gauge; +import io.prometheus.metrics.model.registry.PrometheusRegistry; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.mockserver.junit.MockServerRule; import org.mockserver.client.MockServerClient; +import org.mockserver.junit.MockServerRule; + +import java.io.IOException; +import java.lang.reflect.Field; +import java.net.InetAddress; +import java.net.URL; + +import static org.junit.rules.ExpectedException.none; +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; public class PushGatewayTest { + @Rule + public final ExpectedException thrown = none(); + + @Rule + public MockServerRule mockServerRule = new MockServerRule(this); + private MockServerClient mockServerClient; + + PrometheusRegistry registry; + Gauge gauge; + + @Before + public void setUp() { + registry = new PrometheusRegistry(); + gauge = Gauge.builder().name("g").help("help").build(); + } + + @Test(expected = RuntimeException.class) + public void testInvalidURLThrowsRuntimeException() { + PushGateway.builder().address("::").build(); // ":" is interpreted as port number, so parsing fails + } + + @Test + public void testMultipleSlashesAreStrippedFromURL() throws NoSuchFieldException, IllegalAccessException { + final PushGateway pushGateway = PushGateway.builder() + .address("example.com:1234/context///path//") + .job("test") + .build(); + Assert.assertEquals( + "http://example.com:1234/context/path/metrics/job/test", + getUrl(pushGateway).toString() + ); + } + + private URL getUrl(PushGateway pushGateway) throws IllegalAccessException, NoSuchFieldException { + Field field = pushGateway.getClass().getDeclaredField("url"); + field.setAccessible(true); + return (URL) field.get(pushGateway); + } + + @Test + public void testPush() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withPath("/metrics/job/j") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .build(); + pg.push(); + } + + @Test + public void testPush200Response() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withPath("/metrics/job/j") + ).respond(response().withStatusCode(200)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .build(); + pg.push(); + } + + @Test + public void testNon202ResponseThrows() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withPath("/metrics/job/j") + ).respond(response().withStatusCode(500)); + thrown.expect(IOException.class); + thrown.expectMessage( + "Response code from http://localhost:" + + mockServerRule.getPort() + + "/metrics/job/j was 500"); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .build(); + pg.push(); + } + + @Test + public void testPushCollector() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withPath("/metrics/job/j") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .build(); + pg.push(); + } + + @Test + public void testPushWithGroupingKey() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withPath("/metrics/job/j/l/v") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .groupingKey("l", "v") + .build(); + pg.push(); + } + + @Test + public void testPushWithMultiGroupingKey() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withPath("/metrics/job/j/l/v/l2/v2") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .groupingKey("l", "v") + .groupingKey("l2", "v2") + .build(); + pg.push(); + } + + @Test + public void testPushWithEmptyLabelGroupingKey() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withPath("/metrics/job/j/l/v/l2@base64/=") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .groupingKey("l", "v") + .groupingKey("l2", "") + .build(); + pg.push(); + } + + @Test + public void testPushWithGroupingKeyWithSlashes() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withPath("/metrics/job@base64/YS9i/l/v/l2@base64/75-_Lw==") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("a/b") + .groupingKey("l", "v") + .groupingKey("l2", "\uF7FF/") + .build(); + pg.push(); + } + + @Test + public void testPushCollectorWithGroupingKey() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withPath("/metrics/job/j/l/v") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .groupingKey("l", "v") + .build(); + pg.push(gauge); + } + + @Test + public void testPushAdd() throws IOException { + mockServerClient.when( + request() + .withMethod("POST") + .withPath("/metrics/job/j") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .build(); + pg.pushAdd(); + } + + @Test + public void testPushAddCollector() throws IOException { + mockServerClient.when( + request() + .withMethod("POST") + .withPath("/metrics/job/j") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .job("j") + .build(); + pg.pushAdd(gauge); + } + + @Test + public void testPushAddWithGroupingKey() throws IOException { + mockServerClient.when( + request() + .withMethod("POST") + .withPath("/metrics/job/j/l/v") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .groupingKey("l", "v") + .job("j") + .build(); + pg.pushAdd(); + } + + @Test + public void testPushAddCollectorWithGroupingKey() throws IOException { + mockServerClient.when( + request() + .withMethod("POST") + .withPath("/metrics/job/j/l/v") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .groupingKey("l", "v") + .job("j") + .build(); + pg.pushAdd(gauge); + } + + @Test + public void testDelete() throws IOException { + mockServerClient.when( + request() + .withMethod("DELETE") + .withPath("/metrics/job/j") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .job("j") + .build(); + pg.delete(); + } + + @Test + public void testDeleteWithGroupingKey() throws IOException { + mockServerClient.when( + request() + .withMethod("DELETE") + .withPath("/metrics/job/j/l/v") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .job("j") + .groupingKey("l", "v") + .build(); + pg.delete(); + } - @Rule - public final ExpectedException thrown = none(); - - @Rule - public MockServerRule mockServerRule = new MockServerRule(this); - private MockServerClient mockServerClient; - - CollectorRegistry registry; - Gauge gauge; - PushGateway pg; - Map groupingKey; - - @Before - public void setUp() { - registry = new CollectorRegistry(); - gauge = (Gauge) Gauge.build().name("g").help("help").create(); - pg = new PushGateway("localhost:" + mockServerRule.getPort()); - groupingKey = new TreeMap(); - groupingKey.put("l", "v"); - } - - @Test(expected = RuntimeException.class) - public void testInvalidURLThrowsRuntimeException() { - new PushGateway("::"); // ":" is interpreted as port number, so parsing fails - } - - @Test - public void testMultipleSlashesAreStrippedFromURL() { - final PushGateway pushGateway = new PushGateway("example.com:1234/context///path//"); - Assert.assertEquals( - "http://example.com:1234/context/path/metrics/", - pushGateway.gatewayBaseURL - ); - } - - @Test - public void testPush() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - pg.push(registry, "j"); - } - - @Test - public void testPush200Response() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(200)); - pg.push(registry, "j"); - } - - @Test - public void testNon202ResponseThrows() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(500)); - thrown.expect(IOException.class); - thrown.expectMessage( - "Response code from http://localhost:" - + mockServerRule.getPort() - + "/metrics/job/j was 500"); - pg.push(registry, "j"); - } - - @Test - public void testPushCollector() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - pg.push(gauge, "j"); - } - - @Test - public void testPushWithGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j/l/v") - ).respond(response().withStatusCode(202)); - pg.push(registry, "j", groupingKey); - } - - @Test - public void testPushWithMultiGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j/l/v/l2/v2") - ).respond(response().withStatusCode(202)); - groupingKey.put("l2", "v2"); - pg.push(registry, "j", groupingKey); - } - - @Test - public void testPushWithEmptyLabelGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j/l/v/l2@base64/=") - ).respond(response().withStatusCode(202)); - groupingKey.put("l2", ""); - pg.push(registry, "j", groupingKey); - } - - @Test - public void testPushWithGroupingKeyWithSlashes() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job@base64/YS9i/l/v/l2@base64/75-_Lw==") - ).respond(response().withStatusCode(202)); - groupingKey.put("l2", "\uF7FF/"); - pg.push(registry, "a/b", groupingKey); - } - - @Test - public void testPushCollectorWithGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j/l/v") - ).respond(response().withStatusCode(202)); - pg.push(gauge, "j", groupingKey); - } - - @Test - public void testPushAdd() throws IOException { - mockServerClient.when( - request() - .withMethod("POST") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - pg.pushAdd(registry, "j"); - } - - @Test - public void testPushAddCollector() throws IOException { - mockServerClient.when( - request() - .withMethod("POST") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - pg.pushAdd(gauge, "j"); - } - - @Test - public void testPushAddWithGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("POST") - .withPath("/metrics/job/j/l/v") - ).respond(response().withStatusCode(202)); - pg.pushAdd(registry, "j", groupingKey); - } - - @Test - public void testPushAddCollectorWithGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("POST") - .withPath("/metrics/job/j/l/v") - ).respond(response().withStatusCode(202)); - pg.pushAdd(gauge, "j", groupingKey); - } - - @Test - public void testDelete() throws IOException { - mockServerClient.when( - request() - .withMethod("DELETE") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - pg.delete("j"); - } - - @Test - public void testDeleteWithGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("DELETE") - .withPath("/metrics/job/j/l/v") - ).respond(response().withStatusCode(202)); - pg.delete("j", groupingKey); - } - - @Test - public void testInstanceIPGroupingKey() throws IOException { - groupingKey = PushGateway.instanceIPGroupingKey(); - Assert.assertTrue(!groupingKey.get("instance").equals("")); - } + @Test + public void testInstanceIpGroupingKey() throws IOException { + String ip = InetAddress.getLocalHost().getHostAddress(); + Assert.assertFalse(ip.isEmpty()); + mockServerClient.when( + request() + .withMethod("DELETE") + .withPath("/metrics/job/j/instance/" + ip + "/l/v") + ).respond(response().withStatusCode(202)); + PushGateway pg = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .job("j") + .groupingKey("l", "v") + .instanceIpGroupingKey() + .build(); + pg.delete(); + } } From dfc559d5d823b746c3c2af7555838a032b418dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 15 May 2024 14:25:57 +0200 Subject: [PATCH 085/870] Add PushGateway docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- docs/content/config/config.md | 10 +++ docs/content/exporters/pushgateway.md | 103 ++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 docs/content/exporters/pushgateway.md diff --git a/docs/content/config/config.md b/docs/content/config/config.md index 543ce26e4..a7e57ac0d 100644 --- a/docs/content/config/config.md +++ b/docs/content/config/config.md @@ -137,3 +137,13 @@ Exporter OpenTelemetry Properties (3) Format: `key1=value1,key2=value2` Many of these attributes can alternatively be configured via OpenTelemetry environment variables, like `OTEL_EXPORTER_OTLP_ENDPOINT`. The Prometheus metrics library has support for OpenTelemetry environment variables. See Javadoc for details. + +Exporter PushGateway Properties +------------------------------- + +| Name | Javadoc | Note | +|--------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|------| +| io.prometheus.exporter.pushgateway.address | [PushGateway.Builder.address()](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.Builder.html#address(java.lang.String)) | | +| io.prometheus.exporter.pushgateway.scheme | [PushGateway.Builder.scheme()](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.Builder.html#scheme(java.lang.String)) | | +| io.prometheus.exporter.pushgateway.job | [PushGateway.Builder.job()](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.Builder.html#job(java.lang.String)) | | + diff --git a/docs/content/exporters/pushgateway.md b/docs/content/exporters/pushgateway.md new file mode 100644 index 000000000..8f002fba9 --- /dev/null +++ b/docs/content/exporters/pushgateway.md @@ -0,0 +1,103 @@ +--- +title: Pushgateway +weight: 5 +--- + +The [Prometheus Pushgateway](https://github.com/prometheus/pushgateway) exists to allow ephemeral and batch jobs to expose their metrics to Prometheus. +Since these kinds of jobs may not exist long enough to be scraped, they can instead push their metrics to a Pushgateway. +The Pushgateway then exposes these metrics to Prometheus. + +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) Java class allows you to push metrics to a Prometheus Pushgateway. + +Example +------- + +{{< tabs "uniqueid" >}} +{{< tab "Gradle" >}} +``` +implementation 'io.prometheus:prometheus-metrics-core:1.3.0' +implementation 'io.prometheus:prometheus-metrics-exporter-pushgateway:1.3.0' +``` +{{< /tab >}} +{{< tab "Maven" >}} +```xml + + io.prometheus + prometheus-metrics-core + 1.3.0 + + + io.prometheus + prometheus-metrics-exporter-pushgateway + 1.3.0 + +``` +{{< /tab >}} +{{< /tabs >}} + +```java +public class ExampleBatchJob { + + private static PushGateway pushGateway = PushGateway.builder() + .address("localhost:9091") // not needed as localhost:9091 is the default + .job("example") + .build(); + + private static Gauge dataProcessedInBytes = Gauge.builder() + .name("data_processed") + .help("data processed in the last batch job run") + .unit(Unit.BYTES) + .register(); + + public static void main(String[] args) throws Exception { + try { + long bytesProcessed = processData(); + dataProcessedInBytes.set(bytesProcessed); + } finally { + pushGateway.push(); + } + } + + public static long processData() { + // Imagine a batch job here that processes data + // and returns the number of Bytes processed. + return 42; + } +} +``` + +Basic Auth +---------- + +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) supports basic authentication. + +```java +PushGateway pushGateway = PushGateway.builder() + .job("example") + .basicAuth("my_user", "my_password") + .build(); +``` + +The `PushGatewayTestApp` in `integration-tests/it-pushgateway` has a complete example of this. + +SSL +--- + +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) supports SSL. + +```java +PushGateway pushGateway = PushGateway.builder() + .job("example") + .scheme(Scheme.HTTPS) + .build(); +``` + +However, this requires that the JVM can validate the server certificate. + +If you want to skip certificate verification, you need to provide your own [HttpConnectionFactory](/client_java/api/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.html). +The `PushGatewayTestApp` in `integration-tests/it-pushgateway` has a complete example of this. + +Configuration Properties +------------------------ + +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) supports a couple of properties that can be configured at runtime. See [config](../../config/config). \ No newline at end of file From 2ae979d459b7cd3d9856fc8220eafefeab816fb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 15 May 2024 20:12:37 +0200 Subject: [PATCH 086/870] Add comments to the HTTPServer start() method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../it/exporter/httpserver/HTTPServerSample.java | 2 +- .../metrics/exporter/httpserver/HTTPServer.java | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java b/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java index ccd0b7724..b8cdc5141 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java @@ -65,7 +65,7 @@ public static void main(String[] args) throws IOException, InterruptedException .buildAndStart(); System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); - Thread.sleep(10_000); + Thread.currentThread().join(); // wait forever } private static int parsePortOrExit(String port) { diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java index eb5b5f39d..de572ba9f 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java @@ -56,11 +56,14 @@ private HTTPServer(PrometheusProperties config, ExecutorService executorService, registerHandler("/metrics", new MetricsHandler(config, registry), authenticator); registerHandler("/-/healthy", new HealthyHandler(), authenticator); try { - executorService.submit(() -> this.server.start()).get(); + // HttpServer.start() starts the HttpServer in a new background thread. + // If we call HttpServer.start() from a thread of the executorService, + // the background thread will inherit the "daemon" property, + // i.e. the server will run as a Daemon thread. + // See https://github.com/prometheus/client_java/pull/955 + this.executorService.submit(this.server::start).get(); // calling .get() on the Future here to avoid silently discarding errors - } catch (InterruptedException e) { - throw new RuntimeException(e); - } catch (ExecutionException e) { + } catch (InterruptedException | ExecutionException e) { throw new RuntimeException(e); } } From c82ab1fa65b859c7844e7d9e378aa8b3a954be47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Wed, 15 May 2024 21:27:56 +0200 Subject: [PATCH 087/870] Prevent illegal metric names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../core/metrics/MetricWithFixedMetadata.java | 4 +- .../ExpositionFormatsTest.java | 43 ++++++------------- .../model/snapshots/MetricMetadata.java | 6 +++ .../model/snapshots/PrometheusNaming.java | 14 ++++++ .../model/snapshots/MetricMetadataTest.java | 6 +-- 5 files changed, 39 insertions(+), 34 deletions(-) diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java index 9d39593eb..5b96ea303 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java @@ -32,8 +32,8 @@ protected MetricMetadata getMetadata() { private String makeName(String name, Unit unit) { if (unit != null) { - if (!name.endsWith(unit.toString())) { - name = name + "_" + unit; + if (!name.endsWith("_" + unit) && !name.endsWith("." + unit)) { + name += "_" + unit; } } return name; diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index c86bc6520..09600eafd 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -1,26 +1,11 @@ package io.prometheus.metrics.expositionformats; +import io.prometheus.metrics.model.snapshots.*; import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; -import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; -import io.prometheus.metrics.model.snapshots.Exemplar; -import io.prometheus.metrics.model.snapshots.Exemplars; -import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; -import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; -import io.prometheus.metrics.model.snapshots.HistogramSnapshot; -import io.prometheus.metrics.model.snapshots.InfoSnapshot; -import io.prometheus.metrics.model.snapshots.Labels; -import io.prometheus.metrics.model.snapshots.MetricSnapshot; -import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import io.prometheus.metrics.model.snapshots.NativeHistogramBuckets; -import io.prometheus.metrics.model.snapshots.Quantiles; -import io.prometheus.metrics.model.snapshots.StateSetSnapshot; -import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot.SummaryDataPointSnapshot; -import io.prometheus.metrics.model.snapshots.Unit; -import io.prometheus.metrics.model.snapshots.UnknownSnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot.UnknownDataPointSnapshot; import org.junit.Assert; import org.junit.Test; @@ -1825,24 +1810,24 @@ public void testUnknownMinimal() throws IOException { @Test public void testUnknownWithDots() throws IOException { String openMetrics = "" + - "# TYPE some_unknown_metric unknown\n" + - "# UNIT some_unknown_metric bytes\n" + - "# HELP some_unknown_metric help message\n" + - "some_unknown_metric{test_env=\"7\"} 0.7\n" + + "# TYPE some_unknown_metric_bytes unknown\n" + + "# UNIT some_unknown_metric_bytes bytes\n" + + "# HELP some_unknown_metric_bytes help message\n" + + "some_unknown_metric_bytes{test_env=\"7\"} 0.7\n" + "# EOF\n"; String openMetricsWithExemplarsOnAllTimeSeries = "" + - "# TYPE some_unknown_metric unknown\n" + - "# UNIT some_unknown_metric bytes\n" + - "# HELP some_unknown_metric help message\n" + - "some_unknown_metric{test_env=\"7\"} 0.7 # " + exemplarWithDotsString + "\n" + + "# TYPE some_unknown_metric_bytes unknown\n" + + "# UNIT some_unknown_metric_bytes bytes\n" + + "# HELP some_unknown_metric_bytes help message\n" + + "some_unknown_metric_bytes{test_env=\"7\"} 0.7 # " + exemplarWithDotsString + "\n" + "# EOF\n"; String prometheus = "" + - "# HELP some_unknown_metric help message\n" + - "# TYPE some_unknown_metric untyped\n" + - "some_unknown_metric{test_env=\"7\"} 0.7\n"; + "# HELP some_unknown_metric_bytes help message\n" + + "# TYPE some_unknown_metric_bytes untyped\n" + + "some_unknown_metric_bytes{test_env=\"7\"} 0.7\n"; String prometheusProtobuf = "" + //@formatter:off - "name: \"some_unknown_metric\" " + + "name: \"some_unknown_metric_bytes\" " + "help: \"help message\" " + "type: UNTYPED " + "metric { " + @@ -1851,7 +1836,7 @@ public void testUnknownWithDots() throws IOException { "}"; //@formatter:on UnknownSnapshot unknown = UnknownSnapshot.builder() - .name("some.unknown.metric") + .name(PrometheusNaming.sanitizeMetricName("some.unknown.metric", Unit.BYTES)) .help("help message") .unit(Unit.BYTES) .dataPoint(UnknownDataPointSnapshot.builder() diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java index 366805ddf..b9e577e2c 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java @@ -105,5 +105,11 @@ private void validate() { throw new IllegalArgumentException("'" + name + "': Illegal metric name. " + error + " Call " + PrometheusNaming.class.getSimpleName() + ".sanitizeMetricName(name) to avoid this error."); } + if (hasUnit()) { + if (!name.endsWith("_" + unit) && !name.endsWith("." + unit)) { + throw new IllegalArgumentException("'" + name + "': Illegal metric name. The name must end with _" + unit + "." + + " Call " + PrometheusNaming.class.getSimpleName() + ".sanitizeMetricName(name, unit) to avoid this error."); + } + } } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java index 34d8251e1..b07e0d07e 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java @@ -121,6 +121,20 @@ public static String sanitizeMetricName(String metricName) { return sanitizedName; } + /** + * Like {@link #sanitizeMetricName(String)}, but also makes sure that the unit is appended + * as a suffix if the unit is not {@code null}. + */ + public static String sanitizeMetricName(String metricName, Unit unit) { + String result = sanitizeLabelName(metricName); + if (unit != null) { + if (!result.endsWith("_" + unit) && !result.endsWith("." + unit)) { + result += "_" + unit; + } + } + return result; + } + /** * Convert an arbitrary string to a name where {@link #isValidLabelName(String) isValidLabelName(name)} is true. */ diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java index 6e76f724a..77a328873 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java @@ -25,9 +25,9 @@ public void testIllegalName() { @Test public void testSanitizationIllegalCharacters() { - MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("my_namespace/http.server.duration"), "help string", Unit.SECONDS); - Assert.assertEquals("my_namespace_http.server.duration", metadata.getName()); - Assert.assertEquals("my_namespace_http_server_duration", metadata.getPrometheusName()); + MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("my_namespace/http.server.duration", Unit.SECONDS), "help string", Unit.SECONDS); + Assert.assertEquals("my_namespace_http.server.duration_seconds", metadata.getName()); + Assert.assertEquals("my_namespace_http_server_duration_seconds", metadata.getPrometheusName()); Assert.assertEquals("help string", metadata.getHelp()); Assert.assertEquals("seconds", metadata.getUnit().toString()); } From bf242dc217fe5a0d87c426d99e7938e45addd201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 16 May 2024 21:32:16 +0200 Subject: [PATCH 088/870] Prevent illegal metric names - code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../metrics/model/snapshots/MetricMetadata.java | 2 +- .../model/snapshots/MetricMetadataTest.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java index b9e577e2c..8a393cf95 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java @@ -107,7 +107,7 @@ private void validate() { } if (hasUnit()) { if (!name.endsWith("_" + unit) && !name.endsWith("." + unit)) { - throw new IllegalArgumentException("'" + name + "': Illegal metric name. The name must end with _" + unit + "." + throw new IllegalArgumentException("'" + name + "': Illegal metric name. If the unit is non-null, the name must end with the unit: _" + unit + "." + " Call " + PrometheusNaming.class.getSimpleName() + ".sanitizeMetricName(name, unit) to avoid this error."); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java index 77a328873..f9e9a18d6 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java @@ -54,4 +54,19 @@ public void testSanitizationWeirdCornerCase() { public void testSanitizeEmptyString() { sanitizeMetricName(""); } + + @Test(expected = IllegalArgumentException.class) + public void testUnitSuffixRequired() { + new MetricMetadata("my_counter", "help", Unit.SECONDS); + } + + @Test + public void testUnitSuffixAdded() { + new MetricMetadata(sanitizeMetricName("my_counter", Unit.SECONDS), "help", Unit.SECONDS); + } + + @Test + public void testUnitNotDuplicated() { + Assert.assertEquals("my_counter_bytes", sanitizeMetricName("my_counter_bytes", Unit.BYTES)); + } } From 2a27d6b5154df33405444b717c88296cef7589c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 16 May 2024 22:21:44 +0200 Subject: [PATCH 089/870] Update dependencies and temporarily add shaded dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- .../example-exporter-servlet-tomcat/pom.xml | 2 +- .../it-exporter-servlet-jetty-sample/pom.xml | 4 ++-- .../it-exporter-servlet-tomcat-sample/pom.xml | 2 +- .../it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-pushgateway/pom.xml | 2 +- integration-tests/pom.xml | 2 +- pom.xml | 2 +- prometheus-metrics-bom/pom.xml | 12 +++++------ .../pom.xml | 8 ++++---- .../opentelemetry/OpenTelemetryExporter.java | 18 ++++++++--------- .../PrometheusInstrumentationScope.java | 2 +- .../PrometheusMetricProducer.java | 14 ++++++------- .../otelmodel/DoublePointDataImpl.java | 6 +++--- .../ExponentialHistogramBucketsImpl.java | 2 +- .../ExponentialHistogramPointDataImpl.java | 8 ++++---- .../otelmodel/HistogramPointDataImpl.java | 6 +++--- .../otelmodel/MetricDataFactory.java | 6 +++--- .../otelmodel/PointDataImpl.java | 7 +++---- .../otelmodel/PrometheusClassicHistogram.java | 8 ++++---- .../otelmodel/PrometheusCounter.java | 8 ++++---- .../otelmodel/PrometheusData.java | 20 +++++++++---------- .../otelmodel/PrometheusGauge.java | 6 +++--- .../otelmodel/PrometheusInfo.java | 8 ++++---- .../otelmodel/PrometheusMetricData.java | 13 ++++++------ .../otelmodel/PrometheusNativeHistogram.java | 10 +++++----- .../otelmodel/PrometheusStateSet.java | 8 ++++---- .../otelmodel/PrometheusSummary.java | 6 +++--- .../otelmodel/PrometheusUnknown.java | 6 +++--- .../otelmodel/SummaryPointDataImpl.java | 8 ++++---- .../otelmodel/ValueAtQuantileImpl.java | 2 +- .../pom.xml | 4 ++-- prometheus-metrics-exposition-formats/pom.xml | 4 ++-- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 4 ++-- prometheus-metrics-tracer/pom.xml | 2 +- 38 files changed, 114 insertions(+), 116 deletions(-) diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 1b20a0470..e4c898ef2 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -50,7 +50,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.19 + 10.1.24 diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 5baa99dd8..346417583 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -50,7 +50,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.19 + 10.1.24 diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index bf6598e6f..a78cfd229 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -50,7 +50,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.19 + 10.1.24 diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index a17fcb2c7..28bb7c1d8 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -45,12 +45,12 @@ org.eclipse.jetty jetty-server - 11.0.20 + 11.0.21 org.eclipse.jetty jetty-servlet - 11.0.20 + 11.0.21 diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 016433ec2..78914a7ea 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -45,7 +45,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.19 + 10.1.24 diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index def7ff0ca..9de44493a 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -51,7 +51,7 @@ commons-io commons-io - 2.15.1 + 2.16.1 test diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index d8b81a303..85c49d2b2 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -65,7 +65,7 @@ com.jayway.jsonpath json-path - 2.8.0 + 2.9.0 test diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 9bac492fb..b51829120 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -55,7 +55,7 @@ org.testcontainers testcontainers - 1.19.7 + 1.19.8 test diff --git a/pom.xml b/pom.xml index b79891eb9..f9b64b7e7 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ prometheus-metrics-instrumentation-jvm prometheus-metrics-instrumentation-dropwizard5 prometheus-metrics-simpleclient-bridge - + prometheus-metrics-shaded-dependencies examples benchmarks integration-tests diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index d000aac2d..afdd84cf0 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -118,20 +118,20 @@ io.prometheus prometheus-metrics-shaded-dependencies - ${prometheus.metrics.shaded.dependencies.version} - + + ${project.version} io.prometheus prometheus-metrics-shaded-protobuf - ${prometheus.metrics.shaded.dependencies.version} - + + ${project.version} io.prometheus prometheus-metrics-shaded-opentelemetry - ${prometheus.metrics.shaded.dependencies.version} - + + ${project.version} diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 8d80bda14..25f657f31 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -17,7 +17,7 @@ - 1.36.0 + 1.38.0 io.prometheus.metrics.exporter.opentelemetry @@ -46,8 +46,8 @@ io.prometheus prometheus-metrics-shaded-opentelemetry - 1.2.1 - + + ${project.version} @@ -60,7 +60,7 @@ org.wiremock wiremock - 3.4.2 + 3.5.4 test diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java index 6cb3b4731..97719d6c3 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java @@ -3,15 +3,15 @@ import io.prometheus.metrics.config.ExporterOpenTelemetryProperties; import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.exporter.otlp.http.metrics.OtlpHttpMetricExporter; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.exporter.otlp.metrics.OtlpGrpcMetricExporter; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.export.MetricExporter; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.export.PeriodicMetricReader; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.Resource; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.ResourceBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.exporter.otlp.http.metrics.OtlpHttpMetricExporter; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.exporter.otlp.metrics.OtlpGrpcMetricExporter; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.export.MetricExporter; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.export.PeriodicMetricReader; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.Resource; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.ResourceBuilder; import java.time.Duration; import java.util.HashMap; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java index acaf0d2a9..de14def11 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.exporter.opentelemetry; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.common.InstrumentationScopeInfo; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; import java.util.Properties; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java index 63b042ecd..37ee4d1de 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java @@ -12,13 +12,13 @@ import io.prometheus.metrics.model.snapshots.StateSetSnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.AttributesBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.export.CollectionRegistration; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.Resource; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.ResourceBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.AttributesBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.export.CollectionRegistration; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.Resource; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.ResourceBuilder; import java.util.ArrayList; import java.util.Collection; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java index b8b850367..8f4a627ff 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java index 664d03cc1..5acacc457 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramBuckets; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramBuckets; import java.util.ArrayList; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java index 1756bf63f..799e44712 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramBuckets; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramBuckets; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramPointData; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java index 9e2eb70dd..af9c1519d 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.HistogramPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.HistogramPointData; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java index 24dd549e4..6e723e20a 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java @@ -7,9 +7,9 @@ import io.prometheus.metrics.model.snapshots.StateSetSnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.Resource; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.Resource; public class MetricDataFactory { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java index c9b3713e7..b3795e5dd 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java @@ -1,9 +1,8 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.PointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.PointData; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java index 55eddc9be..0040c7d17 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java @@ -2,10 +2,10 @@ import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.HistogramSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.HistogramData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.HistogramPointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.HistogramData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.HistogramPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import java.util.ArrayList; import java.util.Collection; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java index be0a54a19..4ad04975f 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SumData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import java.util.Collection; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java index ef5028871..7d67a22fa 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java @@ -1,16 +1,16 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; import io.prometheus.metrics.model.snapshots.*; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.AttributesBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.trace.SpanContext; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.trace.TraceFlags; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.trace.TraceState; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.Data; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.PointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.internal.data.ImmutableDoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.AttributesBuilder; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.trace.SpanContext; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.trace.TraceFlags; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.trace.TraceState; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.Data; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.PointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.internal.data.ImmutableDoubleExemplarData; import java.util.Collections; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java index 21136b338..73e176bb6 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.GaugeData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.GaugeData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import java.util.Collection; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java index 88be12ba7..6159e77fb 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java @@ -1,10 +1,10 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; import io.prometheus.metrics.model.snapshots.InfoSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SumData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData; import java.util.Collection; import java.util.Collections; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java index a12e63f76..348ff535f 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java @@ -1,14 +1,13 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; import io.prometheus.metrics.model.snapshots.MetricMetadata; -import io.prometheus.metrics.model.snapshots.PrometheusNaming; import io.prometheus.metrics.model.snapshots.Unit; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SumData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.resources.Resource; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.Resource; class PrometheusMetricData> implements MetricData { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java index c0fcfdf13..83ce1f14a 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java @@ -2,11 +2,11 @@ import io.prometheus.metrics.model.snapshots.HistogramSnapshot; import io.prometheus.metrics.model.snapshots.NativeHistogramBuckets; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramBuckets; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ExponentialHistogramPointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramBuckets; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import java.util.Collection; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java index 6631813fb..110919428 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java @@ -2,10 +2,10 @@ import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.StateSetSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SumData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData; import java.util.ArrayList; import java.util.Collection; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java index 29f861e2e..11e780018 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java @@ -2,9 +2,9 @@ import io.prometheus.metrics.model.snapshots.Quantile; import io.prometheus.metrics.model.snapshots.SummarySnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SummaryData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SummaryPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SummaryData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SummaryPointData; import java.util.Collection; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java index bcda2e74a..9bb2f8e76 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.GaugeData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.MetricDataType; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.GaugeData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import java.util.Collection; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java index 03a9179c5..83155f05a 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.SummaryPointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ValueAtQuantile; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SummaryPointData; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ValueAtQuantile; import java.util.ArrayList; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java index 09c244534..8117c5a8c 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_36_0.sdk.metrics.data.ValueAtQuantile; +import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ValueAtQuantile; public class ValueAtQuantileImpl implements ValueAtQuantile { diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index 47dbadf74..66690e973 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -59,13 +59,13 @@ org.mock-server mockserver-netty - 5.13.2 + 5.15.0 test org.mock-server mockserver-junit-rule-no-dependencies - 5.13.2 + 5.15.0 test diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 88e2b1955..66ec6a427 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -50,8 +50,8 @@ io.prometheus prometheus-metrics-shaded-protobuf - 1.2.1 - + + ${project.version} diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index 92fc3de4c..40d04d516 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -70,7 +70,7 @@ org.mockito mockito-core - 5.11.0 + 5.12.0 test diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index 2b0208e5a..0e42c50c5 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -58,7 +58,7 @@ org.mockito mockito-core - 5.11.0 + 5.12.0 test diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml index e613da510..e48a18808 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml @@ -16,8 +16,8 @@ - 1.36.0 - 1_36_0 + 1.38.0 + 1_38_0 diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 5a547bfce..0e08aae71 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -37,7 +37,7 @@ io.opentelemetry opentelemetry-api - 1.36.0 + 1.38.0 From 8f4b89f727ef06894a8bb0b8dad06785955e64d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 16 May 2024 23:21:43 +0200 Subject: [PATCH 090/870] Fix module name and dependency in pushgateway pom.xml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- prometheus-metrics-exporter-pushgateway/pom.xml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index 66690e973..c217374ba 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -16,6 +16,10 @@ Exporter for pushing metrics to a pushgateway. + + io.prometheus.metrics.exporter.pushgateway + + The Apache Software License, Version 2.0 @@ -37,19 +41,12 @@ - io.prometheus prometheus-metrics-exporter-common ${project.version} - - javax.xml.bind - jaxb-api - 2.4.0-b180830.0359 - provided - junit junit From 87f6d42db7d3b6db30deda840a9970fb9897707a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 16 May 2024 23:38:25 +0200 Subject: [PATCH 091/870] Add pushgateway to BOM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- prometheus-metrics-bom/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index afdd84cf0..c22de6e13 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -55,6 +55,11 @@ prometheus-metrics-exporter-opentelemetry ${project.version} + + io.prometheus + prometheus-metrics-exporter-pushgateway + ${project.version} + io.prometheus prometheus-metrics-exporter-servlet-jakarta From 5768efe8e829bf88c7af789adb31e2fffa551143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 16 May 2024 23:48:37 +0200 Subject: [PATCH 092/870] [maven-release-plugin] prepare release v1.3.0 --- benchmarks/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exemplars-tail-sampling/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-multi-target/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter/it-exporter-httpserver-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-exporter/pom.xml | 4 ++-- integration-tests/it-pushgateway/pom.xml | 8 +++----- integration-tests/pom.xml | 5 ++--- pom.xml | 4 ++-- prometheus-metrics-bom/pom.xml | 2 +- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- prometheus-metrics-exporter-httpserver/pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exporter-pushgateway/pom.xml | 2 +- prometheus-metrics-exporter-servlet-jakarta/pom.xml | 2 +- prometheus-metrics-exporter-servlet-javax/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard5/pom.xml | 2 +- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- prometheus-metrics-shaded-dependencies/pom.xml | 2 +- .../prometheus-metrics-shaded-opentelemetry/pom.xml | 2 +- .../prometheus-metrics-shaded-protobuf/pom.xml | 2 +- prometheus-metrics-simpleclient-bridge/pom.xml | 2 +- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../prometheus-metrics-tracer-initializer/pom.xml | 2 +- .../prometheus-metrics-tracer-otel-agent/pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- 43 files changed, 48 insertions(+), 51 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 89181cfb9..80f5c594a 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 benchmarks diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index e4c898ef2..181384a0b 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.3.0-SNAPSHOT + 1.3.0 example-greeting-service diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 346417583..c393bfcd6 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.3.0-SNAPSHOT + 1.3.0 example-hello-world-app diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index 9d10957fb..cdf55bd6e 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0-SNAPSHOT + 1.3.0 example-exemplars-tail-sampling diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index a48c660d2..6b6da8ea7 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0-SNAPSHOT + 1.3.0 example-exporter-httpserver diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index 25ed35b83..60a6ceeeb 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0-SNAPSHOT + 1.3.0 example-exporter-multi-target diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index 9d5162f0d..e775c80c6 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0-SNAPSHOT + 1.3.0 example-exporter-opentelemetry diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index a78cfd229..3f83002ab 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0-SNAPSHOT + 1.3.0 example-exporter-servlet-tomcat diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index fb86430ef..494c777cd 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0-SNAPSHOT + 1.3.0 example-native-histogram diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index 6566acff3..f6be3b751 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0-SNAPSHOT + 1.3.0 example-prometheus-properties diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index 73453d437..a256ac54e 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0-SNAPSHOT + 1.3.0 example-simpleclient-bridge diff --git a/examples/pom.xml b/examples/pom.xml index c5ba5bff4..3b043e6f5 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 examples diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index e9fc2d60a..bd0bf5e04 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.3.0-SNAPSHOT + 1.3.0 it-common diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index 0d49e17a5..2050a3bf8 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.0-SNAPSHOT + 1.3.0 it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index 28bb7c1d8..7be578a17 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.0-SNAPSHOT + 1.3.0 it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 78914a7ea..0599f2e53 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.0-SNAPSHOT + 1.3.0 it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 9de44493a..842c793d8 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.0-SNAPSHOT + 1.3.0 it-exporter-test diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index 2d012f5dd..d8636141c 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.3.0-SNAPSHOT + 1.3.0 it-exporter @@ -29,7 +29,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - HEAD + v1.3.0 diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index 85c49d2b2..8d53a7cac 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -1,12 +1,11 @@ - + 4.0.0 io.prometheus integration-tests - 1.3.0-SNAPSHOT + 1.3.0 it-pushgateway @@ -84,8 +83,7 @@ - + io.prometheus.metrics.it.pushgateway.PushGatewayTestApp diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index b51829120..e49ef85fa 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -1,12 +1,11 @@ - + 4.0.0 io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 integration-tests diff --git a/pom.xml b/pom.xml index f9b64b7e7..8fdda21af 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 Prometheus Metrics Library http://github.com/prometheus/client_java @@ -30,7 +30,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - HEAD + v1.3.0 diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index c22de6e13..6768f9194 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-bom diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index ec8e44b56..7463d4eed 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 283a00a0b..94fe8990e 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index d8f89cef0..4dd28da79 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index 34908364e..c4861dfae 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 25f657f31..1a107390d 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index c217374ba..fe5da088e 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-exporter-pushgateway diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 63d05d998..4f802d3e6 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml index 41984e48b..65e8b8bb9 100644 --- a/prometheus-metrics-exporter-servlet-javax/pom.xml +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-exporter-servlet-javax diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 66ec6a427..6e574f04d 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index 40d04d516..d87da6b6b 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-instrumentation-dropwizard5 diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index 0e42c50c5..47f3ba704 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index e6ac36c97..24f3c23e4 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-model diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml index ded184f1a..70d6f0754 100644 --- a/prometheus-metrics-shaded-dependencies/pom.xml +++ b/prometheus-metrics-shaded-dependencies/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-shaded-dependencies diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml index e48a18808..878872ca8 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-shaded-opentelemetry diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml index cb0ca8ee7..5a1b90017 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-shaded-protobuf diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index ed4dd8921..defa85806 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-simpleclient-bridge diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 0e08aae71..c67dd26bb 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index b44735d05..4791ca998 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index 3b9aa5e5e..9a3bd3c6a 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index a5ed05f54..4d6190b34 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index f10225ae1..c7f0d9689 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.0-SNAPSHOT + 1.3.0 prometheus-metrics-tracer-otel From 81017d37026fa5f3395058e3c229fad267965d41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 16 May 2024 23:48:41 +0200 Subject: [PATCH 093/870] [maven-release-plugin] prepare for next development iteration --- benchmarks/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exemplars-tail-sampling/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-multi-target/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter/it-exporter-httpserver-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-exporter/pom.xml | 4 ++-- integration-tests/it-pushgateway/pom.xml | 2 +- integration-tests/pom.xml | 2 +- pom.xml | 4 ++-- prometheus-metrics-bom/pom.xml | 2 +- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- prometheus-metrics-exporter-httpserver/pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exporter-pushgateway/pom.xml | 2 +- prometheus-metrics-exporter-servlet-jakarta/pom.xml | 2 +- prometheus-metrics-exporter-servlet-javax/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard5/pom.xml | 2 +- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- prometheus-metrics-shaded-dependencies/pom.xml | 2 +- .../prometheus-metrics-shaded-opentelemetry/pom.xml | 2 +- .../prometheus-metrics-shaded-protobuf/pom.xml | 2 +- prometheus-metrics-simpleclient-bridge/pom.xml | 2 +- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../prometheus-metrics-tracer-initializer/pom.xml | 2 +- .../prometheus-metrics-tracer-otel-agent/pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- 43 files changed, 45 insertions(+), 45 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 80f5c594a..f9d2f1866 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT benchmarks diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 181384a0b..72ebcbedd 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.3.0 + 1.4.0-SNAPSHOT example-greeting-service diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index c393bfcd6..ae0b36799 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.3.0 + 1.4.0-SNAPSHOT example-hello-world-app diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index cdf55bd6e..ed3cb087f 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0 + 1.4.0-SNAPSHOT example-exemplars-tail-sampling diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index 6b6da8ea7..189e74c6c 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0 + 1.4.0-SNAPSHOT example-exporter-httpserver diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index 60a6ceeeb..0f1b03cff 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0 + 1.4.0-SNAPSHOT example-exporter-multi-target diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index e775c80c6..29c9ab152 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0 + 1.4.0-SNAPSHOT example-exporter-opentelemetry diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 3f83002ab..1f9df84c5 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0 + 1.4.0-SNAPSHOT example-exporter-servlet-tomcat diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index 494c777cd..336a4d05a 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0 + 1.4.0-SNAPSHOT example-native-histogram diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index f6be3b751..62b44cfec 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0 + 1.4.0-SNAPSHOT example-prometheus-properties diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index a256ac54e..d874aacb9 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.0 + 1.4.0-SNAPSHOT example-simpleclient-bridge diff --git a/examples/pom.xml b/examples/pom.xml index 3b043e6f5..a1eb17226 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT examples diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index bd0bf5e04..195a10caa 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.3.0 + 1.4.0-SNAPSHOT it-common diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index 2050a3bf8..2743b3933 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.0 + 1.4.0-SNAPSHOT it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index 7be578a17..622f93254 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.0 + 1.4.0-SNAPSHOT it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 0599f2e53..bb78e0543 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.0 + 1.4.0-SNAPSHOT it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 842c793d8..899a17f10 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.0 + 1.4.0-SNAPSHOT it-exporter-test diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index d8636141c..694cee959 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.3.0 + 1.4.0-SNAPSHOT it-exporter @@ -29,7 +29,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - v1.3.0 + HEAD diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index 8d53a7cac..25ce45b12 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.3.0 + 1.4.0-SNAPSHOT it-pushgateway diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index e49ef85fa..2ed77b95d 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT integration-tests diff --git a/pom.xml b/pom.xml index 8fdda21af..e678cf66d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT Prometheus Metrics Library http://github.com/prometheus/client_java @@ -30,7 +30,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - v1.3.0 + HEAD diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index 6768f9194..f316bb141 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-bom diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index 7463d4eed..2d1e95c88 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 94fe8990e..fd3c9a04f 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index 4dd28da79..f65aabf68 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index c4861dfae..45fbfe18f 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 1a107390d..27c8cedbb 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index fe5da088e..8b6e22525 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-pushgateway diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 4f802d3e6..18559c8e7 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml index 65e8b8bb9..b930dd9cf 100644 --- a/prometheus-metrics-exporter-servlet-javax/pom.xml +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-servlet-javax diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 6e574f04d..027faa19b 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index d87da6b6b..085e6de74 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-instrumentation-dropwizard5 diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index 47f3ba704..c847500db 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index 24f3c23e4..8d3051dfe 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-model diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml index 70d6f0754..49b015e49 100644 --- a/prometheus-metrics-shaded-dependencies/pom.xml +++ b/prometheus-metrics-shaded-dependencies/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-shaded-dependencies diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml index 878872ca8..415735290 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-shaded-opentelemetry diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml index 5a1b90017..9f9d46f14 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-shaded-protobuf diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index defa85806..ba88815f7 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-simpleclient-bridge diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index c67dd26bb..2d10bca44 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index 4791ca998..dee1f5a43 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index 9a3bd3c6a..4898db46f 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index 4d6190b34..66a15e397 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index c7f0d9689..2c91242e1 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.0 + 1.4.0-SNAPSHOT prometheus-metrics-tracer-otel From c0a38270c021e4d63998a98a68bacf2b6f32ace5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Fri, 17 May 2024 00:18:15 +0200 Subject: [PATCH 094/870] Exclude shaded dependencies from build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- pom.xml | 2 +- prometheus-metrics-bom/pom.xml | 14 +++++++------- prometheus-metrics-exporter-opentelemetry/pom.xml | 4 ++-- prometheus-metrics-exposition-formats/pom.xml | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index e678cf66d..6db493f10 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ prometheus-metrics-instrumentation-jvm prometheus-metrics-instrumentation-dropwizard5 prometheus-metrics-simpleclient-bridge - prometheus-metrics-shaded-dependencies + examples benchmarks integration-tests diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index f316bb141..02b9ab9e8 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -17,7 +17,7 @@ - 1.2.1 + 1.3.0 @@ -123,20 +123,20 @@ io.prometheus prometheus-metrics-shaded-dependencies - - ${project.version} + ${prometheus.metrics.shaded.dependencies.version} + io.prometheus prometheus-metrics-shaded-protobuf - - ${project.version} + ${prometheus.metrics.shaded.dependencies.version} + io.prometheus prometheus-metrics-shaded-opentelemetry - - ${project.version} + ${prometheus.metrics.shaded.dependencies.version} + diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 27c8cedbb..966f79d7f 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -46,8 +46,8 @@ io.prometheus prometheus-metrics-shaded-opentelemetry - - ${project.version} + 1.3.0 + diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 027faa19b..d8d150114 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -50,8 +50,8 @@ io.prometheus prometheus-metrics-shaded-protobuf - - ${project.version} + 1.3.0 + From 4a9347202e8fe30f9aab50bc84769e0b1a5b443e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 23 May 2024 12:09:39 +0200 Subject: [PATCH 095/870] Add method for sanitizing Unit names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- .../model/snapshots/PrometheusNaming.java | 88 +++++++++++++++++++ .../metrics/model/snapshots/Unit.java | 8 +- .../model/snapshots/PrometheusNamingTest.java | 48 +++++++++- 3 files changed, 138 insertions(+), 6 deletions(-) diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java index b07e0d07e..06e004398 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java @@ -20,6 +20,11 @@ public class PrometheusNaming { */ private static final Pattern LABEL_NAME_PATTERN = Pattern.compile("^[a-zA-Z_.][a-zA-Z0-9_.]*$"); + /** + * Legal characters for unit names, including dot. + */ + private static final Pattern UNIT_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_.:]+$"); + /** * According to OpenMetrics {@code _count} and {@code _sum} (and {@code _gcount}, {@code _gsum}) should also be * reserved metric name suffixes. However, popular instrumentation libraries have Gauges with names @@ -83,6 +88,32 @@ public static boolean isValidLabelName(String name) { !(name.startsWith("__") || name.startsWith("._") || name.startsWith("..") || name.startsWith("_.")); } + /** + * Units may not have illegal characters, and they may not end with a reserved suffix like 'total'. + */ + public static boolean isValidUnitName(String name) { + return validateUnitName(name) == null; + } + + /** + * Same as {@link #isValidUnitName(String)} but returns an error message. + */ + public static String validateUnitName(String name) { + if (name.isEmpty()) { + return "The unit name must not be empty."; + } + for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { + String suffixName = reservedSuffix.substring(1); + if (name.endsWith(suffixName)) { + return suffixName + " is a reserved suffix in Prometheus"; + } + } + if (!UNIT_NAME_PATTERN.matcher(name).matches()) { + return "The unit name contains unsupported characters"; + } + return null; + } + /** * Get the metric or label name that is used in Prometheus exposition format. * @@ -149,6 +180,42 @@ public static String sanitizeLabelName(String labelName) { return sanitizedName; } + /** + * Convert an arbitrary string to a name where {@link #isValidUnitName(String) isValidUnitName(name)} is true. + * + * @throws IllegalArgumentException if the {@code unitName} cannot be converted, for example if you call {@code sanitizeUnitName("total")} or {@code sanitizeUnitName("")}. + * @throws NullPointerException if {@code unitName} is null. + */ + public static String sanitizeUnitName(String unitName) { + if (unitName.isEmpty()) { + throw new IllegalArgumentException("Cannot convert an empty string to a valid unit name."); + } + String sanitizedName = replaceIllegalCharsInUnitName(unitName); + boolean modified = true; + while (modified) { + modified = false; + while (sanitizedName.startsWith("_") || sanitizedName.startsWith(".")) { + sanitizedName = sanitizedName.substring(1); + modified = true; + } + while (sanitizedName.endsWith(".") || sanitizedName.endsWith("_")) { + sanitizedName = sanitizedName.substring(0, sanitizedName.length()-1); + modified = true; + } + for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { + String suffixName = reservedSuffix.substring(1); + if (sanitizedName.endsWith(suffixName)) { + sanitizedName = sanitizedName.substring(0, sanitizedName.length() - suffixName.length()); + modified = true; + } + } + } + if (sanitizedName.isEmpty()) { + throw new IllegalArgumentException("Cannot convert '" + unitName + "' into a valid unit name."); + } + return sanitizedName; + } + /** * Returns a string that matches {@link #METRIC_NAME_PATTERN}. */ @@ -189,4 +256,25 @@ private static String replaceIllegalCharsInLabelName(String name) { } return new String(sanitized); } + + /** + * Returns a string that matches {@link #UNIT_NAME_PATTERN}. + */ + private static String replaceIllegalCharsInUnitName(String name) { + int length = name.length(); + char[] sanitized = new char[length]; + for (int i = 0; i < length; i++) { + char ch = name.charAt(i); + if (ch == ':' || + ch == '.' || + (ch >= 'a' && ch <= 'z') || + (ch >= 'A' && ch <= 'Z') || + (ch >= '0' && ch <= '9')) { + sanitized[i] = ch; + } else { + sanitized[i] = '_'; + } + } + return new String(sanitized); + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java index 94827c64c..16a6c5941 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java @@ -28,10 +28,12 @@ public Unit(String name) { if (name == null) { throw new NullPointerException("Unit name cannot be null."); } - if (name.trim().isEmpty()) { - throw new IllegalArgumentException("Unit name cannot be empty."); + name = name.trim(); + String error = PrometheusNaming.validateUnitName(name); + if (error != null) { + throw new IllegalArgumentException(name + ": Illegal unit name: " + error); } - this.name = name.trim(); + this.name = name; } @Override diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java index d9ba9339d..3a7788743 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java @@ -3,9 +3,7 @@ import org.junit.Assert; import org.junit.Test; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.sanitizeLabelName; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.sanitizeMetricName; +import static io.prometheus.metrics.model.snapshots.PrometheusNaming.*; public class PrometheusNamingTest { @@ -19,6 +17,8 @@ public void testSanitizeMetricName() { Assert.assertEquals("jvm", sanitizeMetricName("jvm_info")); Assert.assertEquals("jvm", sanitizeMetricName("jvm.info")); Assert.assertEquals("a.b", sanitizeMetricName("a.b")); + Assert.assertEquals("total", sanitizeMetricName("_total")); + Assert.assertEquals("total", sanitizeMetricName("total")); } @Test @@ -31,4 +31,46 @@ public void testSanitizeLabelName() { Assert.assertEquals("abc.def", sanitizeLabelName("abc.def")); Assert.assertEquals("abc.def2", sanitizeLabelName("abc.def2")); } + + @Test + public void testValidateUnitName() { + Assert.assertNotNull(validateUnitName("secondstotal")); + Assert.assertNotNull(validateUnitName("total")); + Assert.assertNotNull(validateUnitName("seconds_total")); + Assert.assertNotNull(validateUnitName("_total")); + Assert.assertNotNull(validateUnitName("")); + + Assert.assertNull(validateUnitName("seconds")); + Assert.assertNull(validateUnitName("2")); + } + + @Test + public void testSanitizeUnitName() { + Assert.assertEquals("seconds", sanitizeUnitName("seconds")); + Assert.assertEquals("seconds", sanitizeUnitName("seconds_total")); + Assert.assertEquals("seconds", sanitizeUnitName("seconds_total_total")); + Assert.assertEquals("m_s", sanitizeUnitName("m/s")); + Assert.assertEquals("seconds", sanitizeUnitName("secondstotal")); + Assert.assertEquals("2", sanitizeUnitName("2")); + } + + @Test(expected = IllegalArgumentException.class) + public void testInvalidUnitName1() { + sanitizeUnitName("total"); + } + + @Test(expected = IllegalArgumentException.class) + public void testInvalidUnitName2() { + sanitizeUnitName("_total"); + } + + @Test(expected = IllegalArgumentException.class) + public void testInvalidUnitName3() { + sanitizeUnitName("%"); + } + + @Test(expected = IllegalArgumentException.class) + public void testEmptyUnitName() { + sanitizeUnitName(""); + } } From 99b933d9f4eaf817b17a9047cfabab6276913d14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 23 May 2024 12:57:55 +0200 Subject: [PATCH 096/870] Temporarily add shaded dependencies to prepare for release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- pom.xml | 2 +- prometheus-metrics-bom/pom.xml | 12 ++++++------ prometheus-metrics-exporter-opentelemetry/pom.xml | 4 ++-- prometheus-metrics-exposition-formats/pom.xml | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 6db493f10..e678cf66d 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ prometheus-metrics-instrumentation-jvm prometheus-metrics-instrumentation-dropwizard5 prometheus-metrics-simpleclient-bridge - + prometheus-metrics-shaded-dependencies examples benchmarks integration-tests diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index 02b9ab9e8..9ce68947c 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -123,20 +123,20 @@ io.prometheus prometheus-metrics-shaded-dependencies - ${prometheus.metrics.shaded.dependencies.version} - + + ${project.version} io.prometheus prometheus-metrics-shaded-protobuf - ${prometheus.metrics.shaded.dependencies.version} - + + ${project.version} io.prometheus prometheus-metrics-shaded-opentelemetry - ${prometheus.metrics.shaded.dependencies.version} - + + ${project.version} diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 966f79d7f..be9de3f84 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -46,8 +46,8 @@ io.prometheus prometheus-metrics-shaded-opentelemetry - 1.3.0 - + + ${project.version} diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index d8d150114..209151f65 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -50,8 +50,8 @@ io.prometheus prometheus-metrics-shaded-protobuf - 1.3.0 - + + ${project.version} From 7c964699a6fe9e6a2355ad8a43603e3ea01b92a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 23 May 2024 13:01:51 +0200 Subject: [PATCH 097/870] [maven-release-plugin] prepare release v1.3.1 --- benchmarks/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exemplars-tail-sampling/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-multi-target/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter/it-exporter-httpserver-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-exporter/pom.xml | 4 ++-- integration-tests/it-pushgateway/pom.xml | 2 +- integration-tests/pom.xml | 2 +- pom.xml | 4 ++-- prometheus-metrics-bom/pom.xml | 2 +- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- prometheus-metrics-exporter-httpserver/pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exporter-pushgateway/pom.xml | 2 +- prometheus-metrics-exporter-servlet-jakarta/pom.xml | 2 +- prometheus-metrics-exporter-servlet-javax/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard5/pom.xml | 2 +- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- prometheus-metrics-shaded-dependencies/pom.xml | 2 +- .../prometheus-metrics-shaded-opentelemetry/pom.xml | 2 +- .../prometheus-metrics-shaded-protobuf/pom.xml | 2 +- prometheus-metrics-simpleclient-bridge/pom.xml | 2 +- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../prometheus-metrics-tracer-initializer/pom.xml | 2 +- .../prometheus-metrics-tracer-otel-agent/pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- 43 files changed, 45 insertions(+), 45 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index f9d2f1866..a54b64fbf 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 benchmarks diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 72ebcbedd..635018986 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.4.0-SNAPSHOT + 1.3.1 example-greeting-service diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index ae0b36799..2a1b7a881 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.4.0-SNAPSHOT + 1.3.1 example-hello-world-app diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index ed3cb087f..6e83dc254 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 1.3.1 example-exemplars-tail-sampling diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index 189e74c6c..6a3f18542 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 1.3.1 example-exporter-httpserver diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index 0f1b03cff..7a3243953 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 1.3.1 example-exporter-multi-target diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index 29c9ab152..820f4e592 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 1.3.1 example-exporter-opentelemetry diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 1f9df84c5..48fd93e0c 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 1.3.1 example-exporter-servlet-tomcat diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index 336a4d05a..8b690ae08 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 1.3.1 example-native-histogram diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index 62b44cfec..7c3dbed02 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 1.3.1 example-prometheus-properties diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index d874aacb9..a909a328d 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 1.3.1 example-simpleclient-bridge diff --git a/examples/pom.xml b/examples/pom.xml index a1eb17226..210b4a942 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 examples diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index 195a10caa..d6850e2bd 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.4.0-SNAPSHOT + 1.3.1 it-common diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index 2743b3933..945db776c 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.4.0-SNAPSHOT + 1.3.1 it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index 622f93254..cd1e1796b 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.4.0-SNAPSHOT + 1.3.1 it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index bb78e0543..b4d96d570 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.4.0-SNAPSHOT + 1.3.1 it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 899a17f10..fb04863a6 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.4.0-SNAPSHOT + 1.3.1 it-exporter-test diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index 694cee959..15c506722 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.4.0-SNAPSHOT + 1.3.1 it-exporter @@ -29,7 +29,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - HEAD + v1.3.1 diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index 25ce45b12..fef36075e 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.4.0-SNAPSHOT + 1.3.1 it-pushgateway diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 2ed77b95d..7c1c64054 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 integration-tests diff --git a/pom.xml b/pom.xml index e678cf66d..84f1c21ce 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 Prometheus Metrics Library http://github.com/prometheus/client_java @@ -30,7 +30,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - HEAD + v1.3.1 diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index 9ce68947c..9f92b1c38 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-bom diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index 2d1e95c88..7ee92ad7d 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index fd3c9a04f..678123e85 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index f65aabf68..d09693172 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index 45fbfe18f..a1367181c 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index be9de3f84..2b6eb46dd 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index 8b6e22525..55ee69618 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-exporter-pushgateway diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 18559c8e7..0d47dee4f 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml index b930dd9cf..faeb0c96d 100644 --- a/prometheus-metrics-exporter-servlet-javax/pom.xml +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-exporter-servlet-javax diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 209151f65..0cff443c0 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index 085e6de74..677210a02 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-instrumentation-dropwizard5 diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index c847500db..b2aee1548 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index 8d3051dfe..aeaec90f8 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-model diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml index 49b015e49..611334abc 100644 --- a/prometheus-metrics-shaded-dependencies/pom.xml +++ b/prometheus-metrics-shaded-dependencies/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-shaded-dependencies diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml index 415735290..7a7b9f9d2 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-shaded-opentelemetry diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml index 9f9d46f14..2e58cc371 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-shaded-protobuf diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index ba88815f7..e75ff9ecb 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-simpleclient-bridge diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 2d10bca44..37d7a31ca 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index dee1f5a43..5c71aa55e 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index 4898db46f..ffca00d8a 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index 66a15e397..3f54f084b 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index 2c91242e1..0496e6546 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.4.0-SNAPSHOT + 1.3.1 prometheus-metrics-tracer-otel From eea6c4e196311b35c8adc463e78ab8972a3df2b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 23 May 2024 13:01:55 +0200 Subject: [PATCH 098/870] [maven-release-plugin] prepare for next development iteration --- benchmarks/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exemplars-tail-sampling/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-multi-target/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter/it-exporter-httpserver-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-exporter/pom.xml | 4 ++-- integration-tests/it-pushgateway/pom.xml | 2 +- integration-tests/pom.xml | 2 +- pom.xml | 4 ++-- prometheus-metrics-bom/pom.xml | 2 +- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- prometheus-metrics-exporter-httpserver/pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exporter-pushgateway/pom.xml | 2 +- prometheus-metrics-exporter-servlet-jakarta/pom.xml | 2 +- prometheus-metrics-exporter-servlet-javax/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard5/pom.xml | 2 +- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- prometheus-metrics-shaded-dependencies/pom.xml | 2 +- .../prometheus-metrics-shaded-opentelemetry/pom.xml | 2 +- .../prometheus-metrics-shaded-protobuf/pom.xml | 2 +- prometheus-metrics-simpleclient-bridge/pom.xml | 2 +- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../prometheus-metrics-tracer-initializer/pom.xml | 2 +- .../prometheus-metrics-tracer-otel-agent/pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- 43 files changed, 45 insertions(+), 45 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index a54b64fbf..f9d2f1866 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT benchmarks diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 635018986..72ebcbedd 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.3.1 + 1.4.0-SNAPSHOT example-greeting-service diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 2a1b7a881..ae0b36799 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.3.1 + 1.4.0-SNAPSHOT example-hello-world-app diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index 6e83dc254..ed3cb087f 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.1 + 1.4.0-SNAPSHOT example-exemplars-tail-sampling diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index 6a3f18542..189e74c6c 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.1 + 1.4.0-SNAPSHOT example-exporter-httpserver diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index 7a3243953..0f1b03cff 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.1 + 1.4.0-SNAPSHOT example-exporter-multi-target diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index 820f4e592..29c9ab152 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.1 + 1.4.0-SNAPSHOT example-exporter-opentelemetry diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 48fd93e0c..1f9df84c5 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.1 + 1.4.0-SNAPSHOT example-exporter-servlet-tomcat diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index 8b690ae08..336a4d05a 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.1 + 1.4.0-SNAPSHOT example-native-histogram diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index 7c3dbed02..62b44cfec 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.1 + 1.4.0-SNAPSHOT example-prometheus-properties diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index a909a328d..d874aacb9 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.1 + 1.4.0-SNAPSHOT example-simpleclient-bridge diff --git a/examples/pom.xml b/examples/pom.xml index 210b4a942..a1eb17226 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT examples diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index d6850e2bd..195a10caa 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.3.1 + 1.4.0-SNAPSHOT it-common diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index 945db776c..2743b3933 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.1 + 1.4.0-SNAPSHOT it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index cd1e1796b..622f93254 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.1 + 1.4.0-SNAPSHOT it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index b4d96d570..bb78e0543 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.1 + 1.4.0-SNAPSHOT it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index fb04863a6..899a17f10 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.1 + 1.4.0-SNAPSHOT it-exporter-test diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index 15c506722..694cee959 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.3.1 + 1.4.0-SNAPSHOT it-exporter @@ -29,7 +29,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - v1.3.1 + HEAD diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index fef36075e..25ce45b12 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.3.1 + 1.4.0-SNAPSHOT it-pushgateway diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 7c1c64054..2ed77b95d 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT integration-tests diff --git a/pom.xml b/pom.xml index 84f1c21ce..e678cf66d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT Prometheus Metrics Library http://github.com/prometheus/client_java @@ -30,7 +30,7 @@ scm:git:git@github.com:prometheus/client_java.git scm:git:git@github.com:prometheus/client_java.git git@github.com:prometheus/client_java.git - v1.3.1 + HEAD diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index 9f92b1c38..9ce68947c 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-bom diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index 7ee92ad7d..2d1e95c88 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 678123e85..fd3c9a04f 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index d09693172..f65aabf68 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index a1367181c..45fbfe18f 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 2b6eb46dd..be9de3f84 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index 55ee69618..8b6e22525 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-pushgateway diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 0d47dee4f..18559c8e7 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml index faeb0c96d..b930dd9cf 100644 --- a/prometheus-metrics-exporter-servlet-javax/pom.xml +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-exporter-servlet-javax diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 0cff443c0..209151f65 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index 677210a02..085e6de74 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-instrumentation-dropwizard5 diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index b2aee1548..c847500db 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index aeaec90f8..8d3051dfe 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-model diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml index 611334abc..49b015e49 100644 --- a/prometheus-metrics-shaded-dependencies/pom.xml +++ b/prometheus-metrics-shaded-dependencies/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-shaded-dependencies diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml index 7a7b9f9d2..415735290 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-shaded-opentelemetry diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml index 2e58cc371..9f9d46f14 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-shaded-dependencies - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-shaded-protobuf diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index e75ff9ecb..ba88815f7 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-simpleclient-bridge diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 37d7a31ca..2d10bca44 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index 5c71aa55e..dee1f5a43 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index ffca00d8a..4898db46f 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index 3f54f084b..66a15e397 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index 0496e6546..2c91242e1 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.1 + 1.4.0-SNAPSHOT prometheus-metrics-tracer-otel From fa5e057f216908f83a30c86045a2c24037acf710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Thu, 23 May 2024 14:12:27 +0200 Subject: [PATCH 099/870] Exclude shaded dependencies from build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Stäber --- pom.xml | 2 +- prometheus-metrics-bom/pom.xml | 14 +++++++------- prometheus-metrics-exporter-opentelemetry/pom.xml | 4 ++-- prometheus-metrics-exposition-formats/pom.xml | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index e678cf66d..6db493f10 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ prometheus-metrics-instrumentation-jvm prometheus-metrics-instrumentation-dropwizard5 prometheus-metrics-simpleclient-bridge - prometheus-metrics-shaded-dependencies + examples benchmarks integration-tests diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index 9ce68947c..be1d1b1ca 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -17,7 +17,7 @@ - 1.3.0 + 1.3.1 @@ -123,20 +123,20 @@ io.prometheus prometheus-metrics-shaded-dependencies - - ${project.version} + ${prometheus.metrics.shaded.dependencies.version} + io.prometheus prometheus-metrics-shaded-protobuf - - ${project.version} + ${prometheus.metrics.shaded.dependencies.version} + io.prometheus prometheus-metrics-shaded-opentelemetry - - ${project.version} + ${prometheus.metrics.shaded.dependencies.version} + diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index be9de3f84..bde4e05f8 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -46,8 +46,8 @@ io.prometheus prometheus-metrics-shaded-opentelemetry - - ${project.version} + 1.3.1 + diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 209151f65..b745e62cc 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -50,8 +50,8 @@ io.prometheus prometheus-metrics-shaded-protobuf - - ${project.version} + 1.3.1 + From 5867b799a735288147bfd9ee680ca588a34490b9 Mon Sep 17 00:00:00 2001 From: dhoard Date: Thu, 23 May 2024 07:58:02 -0400 Subject: [PATCH 100/870] Simple MetricsSnapshot performance change Signed-off-by: dhoard --- .../prometheus/metrics/model/snapshots/MetricSnapshots.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java index 6fcf3fd25..83d932f87 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java @@ -79,8 +79,12 @@ private Builder() { } public boolean containsMetricName(String name) { + if (name == null) { + return false; + } + String prometheusName = prometheusName(name); for (MetricSnapshot snapshot : snapshots) { - if (snapshot.getMetadata().getPrometheusName().equals(prometheusName(name))) { + if (snapshot.getMetadata().getPrometheusName().equals(prometheusName)) { return true; } } From 594a9de376cc60625cf35e363807d209ce6dbaa2 Mon Sep 17 00:00:00 2001 From: Martin Chodur Date: Thu, 18 Jul 2024 18:07:08 +0200 Subject: [PATCH 101/870] feat: add bearerToken builder to pushgateway exporter (#968) * feat: add bearerToken builder to pushgateway exporter Signed-off-by: Martin Chodur * feat: add tests and docs Signed-off-by: Martin Chodur * fix: drop integration tests for bearer token Signed-off-by: Martin Chodur --------- Signed-off-by: Martin Chodur --- docs/content/exporters/pushgateway.md | 17 ++++++- .../it/pushgateway/PushGatewayTestApp.java | 2 +- .../exporter/pushgateway/PushGateway.java | 11 +++++ .../BearerTokenPushGatewayTest.java | 48 +++++++++++++++++++ 4 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java diff --git a/docs/content/exporters/pushgateway.md b/docs/content/exporters/pushgateway.md index 8f002fba9..1ca2946b1 100644 --- a/docs/content/exporters/pushgateway.md +++ b/docs/content/exporters/pushgateway.md @@ -80,6 +80,21 @@ PushGateway pushGateway = PushGateway.builder() The `PushGatewayTestApp` in `integration-tests/it-pushgateway` has a complete example of this. +Bearer token +---------- + +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) supports Bearer token authentication. + +```java +PushGateway pushGateway = PushGateway.builder() + .job("example") + .bearerToken("my_token") + .build(); +``` + +The `PushGatewayTestApp` in `integration-tests/it-pushgateway` has a complete example of this. + + SSL --- @@ -100,4 +115,4 @@ The `PushGatewayTestApp` in `integration-tests/it-pushgateway` has a complete ex Configuration Properties ------------------------ -The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) supports a couple of properties that can be configured at runtime. See [config](../../config/config). \ No newline at end of file +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) supports a couple of properties that can be configured at runtime. See [config](../../config/config). diff --git a/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java b/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java index 279f05d90..69ef63081 100644 --- a/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java +++ b/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java @@ -128,4 +128,4 @@ private static void makeMetrics() { .register(); duration.set(0.5); } -} \ No newline at end of file +} diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java index a2d587675..0e6ab8d54 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java @@ -278,6 +278,17 @@ public Builder basicAuth(String user, String password) { return this; } + /** + * Bearer token authorization when pushing to the Pushgateway. + */ + public Builder bearerToken(String token) { + if (token == null) { + throw new NullPointerException(); + } + requestHeaders.put("Authorization", String.format("Bearer %s", token)); + return this; + } + /** * Specify if metrics should be pushed using HTTP or HTTPS. Default is HTTP. * Can be overwritten at runtime with the {@code io.prometheus.exporter.pushgateway.scheme} property. diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java new file mode 100644 index 000000000..8687b2d55 --- /dev/null +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java @@ -0,0 +1,48 @@ +package io.prometheus.metrics.exporter.pushgateway; + +import io.prometheus.metrics.core.metrics.Gauge; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockserver.client.MockServerClient; +import org.mockserver.junit.MockServerRule; + +import java.io.IOException; + +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; + +public class BearerTokenPushGatewayTest { + + @Rule + public MockServerRule mockServerRule = new MockServerRule(this); + private MockServerClient mockServerClient; + + PrometheusRegistry registry; + Gauge gauge; + PushGateway pushGateway; + + @Before + public void setUp() { + registry = new PrometheusRegistry(); + gauge = Gauge.builder().name("g").help("help").build(); + pushGateway = PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .bearerToken("xxx") + .registry(registry) + .job("j") + .build(); + } + + @Test + public void testAuthorizedPush() throws IOException { + mockServerClient.when( + request() + .withMethod("PUT") + .withHeader("Authorization", "Bearer xxx") + .withPath("/metrics/job/j") + ).respond(response().withStatusCode(202)); + pushGateway.push(); + } +} From d567081ad4a9b8698c9d412bddd327517ca89f81 Mon Sep 17 00:00:00 2001 From: Mickael Maison Date: Tue, 30 Jul 2024 18:09:04 +0200 Subject: [PATCH 102/870] Fix UnknownDataPointSnapshot constructor (#977) Signed-off-by: Mickael Maison --- .../metrics/model/snapshots/UnknownSnapshot.java | 2 +- .../model/snapshots/UnknownSnapshotTest.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java index b02228907..60873013a 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java @@ -40,7 +40,7 @@ public static final class UnknownDataPointSnapshot extends DataPointSnapshot { * @param exemplar may be null. */ public UnknownDataPointSnapshot(double value, Labels labels, Exemplar exemplar) { - this(value, Labels.EMPTY, exemplar, 0); + this(value, labels, exemplar, 0); } /** diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java index dfc2e62a7..a6d7973b5 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java @@ -68,4 +68,20 @@ public void testNameMissing() { public void testValueMissing() { UnknownSnapshot.UnknownDataPointSnapshot.builder().build(); } + + @Test + public void testUnknownDataPointSnapshot() { + Labels labels = Labels.of("k1", "v1"); + Exemplar exemplar = Exemplar.builder().value(2.0).build(); + + UnknownSnapshot.UnknownDataPointSnapshot data = new UnknownSnapshot.UnknownDataPointSnapshot(1.0, labels, exemplar); + Assert.assertEquals(1.0, data.getValue(), 0.1); + Assert.assertEquals(labels, data.getLabels()); + Assert.assertEquals(exemplar, data.getExemplar()); + + data = new UnknownSnapshot.UnknownDataPointSnapshot(1.0, labels, exemplar, 0L); + Assert.assertEquals(1.0, data.getValue(), 0.1); + Assert.assertEquals(labels, data.getLabels()); + Assert.assertEquals(exemplar, data.getExemplar()); + } } From ac0a930dd213bc598030af417e58478ba29d669e Mon Sep 17 00:00:00 2001 From: Doug Hoard Date: Tue, 30 Jul 2024 12:34:29 -0400 Subject: [PATCH 103/870] Added methods (#978) Signed-off-by: dhoard --- .../metrics/model/snapshots/Label.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java index c31a8b1af..674eafff8 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java @@ -1,5 +1,7 @@ package io.prometheus.metrics.model.snapshots; +import java.util.Objects; + /** * Utility for iterating over {@link Labels}. */ @@ -16,6 +18,7 @@ public Label(String name, String value) { public String getName() { return name; } + public String getValue() { return value; } @@ -25,4 +28,25 @@ public int compareTo(Label other) { int nameCompare = name.compareTo(other.name); return nameCompare != 0 ? nameCompare : value.compareTo(other.value); } + + @Override + public String toString() { + return "Label{" + + "name='" + name + '\'' + + ", value='" + value + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Label label = (Label) o; + return Objects.equals(name, label.name) && Objects.equals(value, label.value); + } + + @Override + public int hashCode() { + return Objects.hash(name, value); + } } From 9f22e9d90f670e167f4f130c81979a27fc48b577 Mon Sep 17 00:00:00 2001 From: Doug Hoard Date: Wed, 28 Aug 2024 23:26:22 -0400 Subject: [PATCH 104/870] Updated CircleCI image (#982) Signed-off-by: dhoard --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ee84aafe6..55ce02110 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ machine: true jobs: build: machine: - image: ubuntu-2204:2023.07.2 + image: ubuntu-2204:current working_directory: ~/circleci-java steps: - run: From b29d4b85f3a63b5873253beba141659ffa6da40a Mon Sep 17 00:00:00 2001 From: MaBiConti <157379800+MaBiConti@users.noreply.github.com> Date: Thu, 29 Aug 2024 05:31:23 +0200 Subject: [PATCH 105/870] Change links on front page to be relative (#981) When the endpoint of the exporter is mapped to a subpath by a reverse proxy, absolute links would break. Relative links continue to work. Signed-off-by: Martin Bickel Co-authored-by: Karina Calma --- .../metrics/exporter/httpserver/DefaultHandler.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java index 0e6342a34..0bf3b5cc2 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java @@ -21,15 +21,15 @@ public DefaultHandler() { "\n" + "

    Prometheus Java Client

    \n" + "

    Metrics Path

    \n" + - "The metrics path is /metrics.\n" + + "The metrics path is /metrics.\n" + "

    Name Filter

    \n" + "If you want to scrape only specific metrics, use the name[] parameter like this:\n" + "\n" + "You can also use multiple name[] parameters to query multiple metrics:\n" + "\n" + "The name[] parameter can be used by the Prometheus server for scraping. Add the following snippet to your scrape job configuration in prometheus.yaml:\n" + "
    \n" +
    @@ -45,9 +45,9 @@ public DefaultHandler() {
                     "in which case the default is Prometheus protobuf.\n" +
                     "The Prometheus Java metrics library supports a debug query parameter for viewing the different formats in a Web browser:\n" +
                     "\n" +
                     "Note that the debug parameter is only for viewing different formats in a Web browser, it should not be used by the Prometheus server for scraping. The Prometheus server uses the Accept header for indicating which format it accepts.\n" +
                     "\n" +
    
    From c615b0a0c54a06955e365cebedec93934c9004e2 Mon Sep 17 00:00:00 2001
    From: Petar Heyken <48122009+pheyken@users.noreply.github.com>
    Date: Thu, 29 Aug 2024 05:49:39 +0200
    Subject: [PATCH 106/870] add support for guava instrumentation with 1.X.X
     (#979)
    
    * move files out of archive
    * add support for guava instrumentation with 1.X.X
    
    ---------
    
    Signed-off-by: Petar Heyken 
    ---
     pom.xml                                       |   1 +
     .../pom.xml                                   |  33 ++-
     .../guava/CacheMetricsCollector.java          | 203 ++++++++++++++++++
     .../guava/CacheMetricsCollectorTest.java      | 142 ++++++++++++
     .../version-rules.xml                         |   0
     .../guava/cache/CacheMetricsCollector.java    | 142 ------------
     .../cache/CacheMetricsCollectorTest.java      |  85 --------
     7 files changed, 371 insertions(+), 235 deletions(-)
     rename {simpleclient-archive/simpleclient_guava => prometheus-metrics-instrumentation-guava}/pom.xml (64%)
     create mode 100644 prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java
     create mode 100644 prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java
     rename {simpleclient-archive/simpleclient_guava => prometheus-metrics-instrumentation-guava}/version-rules.xml (100%)
     delete mode 100644 simpleclient-archive/simpleclient_guava/src/main/java/io/prometheus/client/guava/cache/CacheMetricsCollector.java
     delete mode 100644 simpleclient-archive/simpleclient_guava/src/test/java/io/prometheus/client/guava/cache/CacheMetricsCollectorTest.java
    
    diff --git a/pom.xml b/pom.xml
    index 6db493f10..033e89331 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -66,6 +66,7 @@
             prometheus-metrics-exporter-pushgateway
             prometheus-metrics-instrumentation-jvm
             prometheus-metrics-instrumentation-dropwizard5
    +        prometheus-metrics-instrumentation-guava
             prometheus-metrics-simpleclient-bridge
             
             examples
    diff --git a/simpleclient-archive/simpleclient_guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml
    similarity index 64%
    rename from simpleclient-archive/simpleclient_guava/pom.xml
    rename to prometheus-metrics-instrumentation-guava/pom.xml
    index 076491963..a4103e051 100644
    --- a/simpleclient-archive/simpleclient_guava/pom.xml
    +++ b/prometheus-metrics-instrumentation-guava/pom.xml
    @@ -5,17 +5,21 @@
         
             io.prometheus
             client_java
    -        1.0.0-beta-2-SNAPSHOT
    +        1.4.0-SNAPSHOT
         
     
    -    simpleclient_guava
    +    prometheus-metrics-instrumentation-guava
         bundle
     
    -    Prometheus Java Simpleclient guava
    +    Prometheus Metrics Instrumentation - Guava
         
    -        Metrics collector for guava based caches
    +        Instrumentation library guava based caches
         
     
    +    
    +        io.prometheus.metrics.instrumentation.guava
    +    
    +
         
             
                 The Apache Software License, Version 2.0
    @@ -30,18 +34,25 @@
                 Clint Checketts
                 checketts@gmail.com
             
    +
    +        
    +            pheyken
    +            Petar Heyken
    +            mail@petar-heyken.de
    +        
         
     
         
             
                 io.prometheus
    -            simpleclient
    +            prometheus-metrics-core
                 ${project.version}
             
             
                 com.google.guava
                 guava
    -            31.1-jre
    +            33.2.1-jre
    +            provided
             
             
     
    @@ -55,15 +66,21 @@
             
                 org.mockito
                 mockito-core
    -            4.6.1
    +            5.12.0
                 test
             
             
                 org.assertj
                 assertj-core
    -            3.23.1
    +            3.26.3
                 test
             
     
    +        
    +            io.prometheus
    +            prometheus-metrics-exposition-formats
    +            ${project.version}
    +            test
    +        
         
     
    diff --git a/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java
    new file mode 100644
    index 000000000..71ffea01c
    --- /dev/null
    +++ b/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java
    @@ -0,0 +1,203 @@
    +package io.prometheus.metrics.instrumentation.guava;
    +
    +import com.google.common.cache.Cache;
    +import com.google.common.cache.CacheStats;
    +import com.google.common.cache.LoadingCache;
    +import io.prometheus.metrics.model.registry.MultiCollector;
    +import io.prometheus.metrics.model.snapshots.CounterSnapshot;
    +import io.prometheus.metrics.model.snapshots.GaugeSnapshot;
    +import io.prometheus.metrics.model.snapshots.Labels;
    +import io.prometheus.metrics.model.snapshots.MetricSnapshots;
    +import io.prometheus.metrics.model.snapshots.SummarySnapshot;
    +
    +import java.util.Arrays;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.concurrent.ConcurrentHashMap;
    +import java.util.concurrent.ConcurrentMap;
    +
    +/**
    + * Collect metrics from Guava's com.google.common.cache.Cache.
    + * 

    + *

    {@code
    + *
    + * // Note that `recordStats()` is required to gather non-zero statistics
    + * Cache cache = CacheBuilder.newBuilder().recordStats().build();
    + * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector().register();
    + * cacheMetrics.addCache("mycache", cache);
    + *
    + * }
    + * + * Exposed metrics are labeled with the provided cache name. + * + * With the example above, sample metric names would be: + *
    + *     guava_cache_hit_total{cache="mycache"} 10.0
    + *     guava_cache_miss_total{cache="mycache"} 3.0
    + *     guava_cache_requests_total{cache="mycache"} 13.0
    + *     guava_cache_eviction_total{cache="mycache"} 1.0
    + *     guava_cache_size{cache="mycache"} 5.0
    + * 
    + * + * Additionally, if the cache includes a loader, the following metrics would be provided: + *
    + *     guava_cache_load_failure_total{cache="mycache"} 2.0
    + *     guava_cache_loads_total{cache="mycache"} 7.0
    + *     guava_cache_load_duration_seconds_count{cache="mycache"} 7.0
    + *     guava_cache_load_duration_seconds_sum{cache="mycache"} 0.0034
    + * 
    + * + */ +public class CacheMetricsCollector implements MultiCollector { + + private static final double NANOSECONDS_PER_SECOND = 1_000_000_000.0; + + protected final ConcurrentMap children = new ConcurrentHashMap<>(); + + /** + * Add or replace the cache with the given name. + *

    + * Any references any previous cache with this name is invalidated. + * + * @param cacheName The name of the cache, will be the metrics label value + * @param cache The cache being monitored + */ + public void addCache(String cacheName, Cache cache) { + children.put(cacheName, cache); + } + + /** + * Remove the cache with the given name. + *

    + * Any references to the cache are invalidated. + * + * @param cacheName cache to be removed + */ + public Cache removeCache(String cacheName) { + return children.remove(cacheName); + } + + /** + * Remove all caches. + *

    + * Any references to all caches are invalidated. + */ + public void clear(){ + children.clear(); + } + + @Override + public MetricSnapshots collect() { + final MetricSnapshots.Builder metricSnapshotsBuilder = MetricSnapshots.builder(); + final List labelNames = Arrays.asList("cache"); + + final CounterSnapshot.Builder cacheHitTotal = CounterSnapshot.builder() + .name("guava_cache_hit") + .help("Cache hit totals"); + + final CounterSnapshot.Builder cacheMissTotal = CounterSnapshot.builder() + .name("guava_cache_miss") + .help("Cache miss totals"); + + final CounterSnapshot.Builder cacheRequestsTotal = CounterSnapshot.builder() + .name("guava_cache_requests") + .help("Cache request totals"); + + final CounterSnapshot.Builder cacheEvictionTotal = CounterSnapshot.builder() + .name("guava_cache_eviction") + .help("Cache eviction totals, doesn't include manually removed entries"); + + final CounterSnapshot.Builder cacheLoadFailure = CounterSnapshot.builder() + .name("guava_cache_load_failure") + .help("Cache load failures"); + + final CounterSnapshot.Builder cacheLoadTotal = CounterSnapshot.builder() + .name("guava_cache_loads") + .help("Cache loads: both success and failures"); + + final GaugeSnapshot.Builder cacheSize = GaugeSnapshot.builder() + .name("guava_cache_size") + .help("Cache size"); + + final SummarySnapshot.Builder cacheLoadSummary = SummarySnapshot.builder() + .name("guava_cache_load_duration_seconds") + .help("Cache load duration: both success and failures"); + + for (final Map.Entry c: children.entrySet()) { + final List cacheName = Arrays.asList(c.getKey()); + final Labels labels = Labels.of(labelNames, cacheName); + + final CacheStats stats = c.getValue().stats(); + + cacheHitTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.hitCount()) + .build() + ); + + cacheMissTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.missCount()) + .build() + ); + + cacheRequestsTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.requestCount()) + .build() + ); + + cacheEvictionTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.evictionCount()) + .build() + ); + + cacheSize.dataPoint( + GaugeSnapshot.GaugeDataPointSnapshot.builder() + .labels(labels) + .value(c.getValue().size()) + .build() + ); + + if (c.getValue() instanceof LoadingCache) { + cacheLoadFailure.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.loadExceptionCount()) + .build() + ); + + cacheLoadTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.loadCount()) + .build() + ); + + cacheLoadSummary.dataPoint( + SummarySnapshot.SummaryDataPointSnapshot.builder() + .labels(labels) + .count(stats.loadCount()) + .sum(stats.totalLoadTime() / NANOSECONDS_PER_SECOND) + .build() + ); + } + } + + metricSnapshotsBuilder.metricSnapshot(cacheHitTotal.build()); + metricSnapshotsBuilder.metricSnapshot(cacheMissTotal.build()); + metricSnapshotsBuilder.metricSnapshot(cacheRequestsTotal.build()); + metricSnapshotsBuilder.metricSnapshot(cacheEvictionTotal.build()); + metricSnapshotsBuilder.metricSnapshot(cacheLoadFailure.build()); + metricSnapshotsBuilder.metricSnapshot(cacheLoadTotal.build()); + metricSnapshotsBuilder.metricSnapshot(cacheSize.build()); + metricSnapshotsBuilder.metricSnapshot(cacheLoadSummary.build()); + + return metricSnapshotsBuilder.build(); + } +} diff --git a/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java b/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java new file mode 100644 index 000000000..41b3bba8d --- /dev/null +++ b/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java @@ -0,0 +1,142 @@ +package io.prometheus.metrics.instrumentation.guava; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import io.prometheus.metrics.model.snapshots.DataPointSnapshot; +import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.model.snapshots.SummarySnapshot; +import org.junit.Test; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; + +import static org.assertj.core.api.Java6Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class CacheMetricsCollectorTest { + + @Test + public void cacheExposesMetricsForHitMissAndEviction() { + final Cache cache = CacheBuilder.newBuilder().maximumSize(2).recordStats().build(); + + final CacheMetricsCollector collector = new CacheMetricsCollector(); + collector.addCache("users", cache); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + cache.getIfPresent("user1"); + cache.getIfPresent("user1"); + cache.put("user1", "First User"); + cache.getIfPresent("user1"); + + // Add to cache to trigger eviction. + cache.put("user2", "Second User"); + cache.put("user3", "Third User"); + cache.put("user4", "Fourth User"); + + assertCounterMetric(registry, "guava_cache_hit", "users", 1.0); + assertCounterMetric(registry, "guava_cache_miss", "users", 2.0); + assertCounterMetric(registry, "guava_cache_requests", "users", 3.0); + assertCounterMetric(registry, "guava_cache_eviction", "users", 2.0); + + final String expected = "# TYPE guava_cache_eviction counter\n" + + "# HELP guava_cache_eviction Cache eviction totals, doesn't include manually removed entries\n" + + "guava_cache_eviction_total{cache=\"users\"} 2.0\n" + + "# TYPE guava_cache_hit counter\n" + + "# HELP guava_cache_hit Cache hit totals\n" + + "guava_cache_hit_total{cache=\"users\"} 1.0\n" + + "# TYPE guava_cache_miss counter\n" + + "# HELP guava_cache_miss Cache miss totals\n" + + "guava_cache_miss_total{cache=\"users\"} 2.0\n" + + "# TYPE guava_cache_requests counter\n" + + "# HELP guava_cache_requests Cache request totals\n" + + "guava_cache_requests_total{cache=\"users\"} 3.0\n" + + "# TYPE guava_cache_size gauge\n" + + "# HELP guava_cache_size Cache size\n" + + "guava_cache_size{cache=\"users\"} 2.0\n" + + "# EOF\n"; + + assertEquals(expected, convertToOpenMetricsFormat(registry)); + } + + @SuppressWarnings("unchecked") + @Test + public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { + final CacheLoader loader = mock(CacheLoader.class); + when(loader.load(anyString())) + .thenReturn("First User") + .thenThrow(new RuntimeException("Seconds time fails")) + .thenReturn("Third User"); + + final LoadingCache cache = CacheBuilder.newBuilder().recordStats().build(loader); + final CacheMetricsCollector collector = new CacheMetricsCollector(); + collector.addCache("loadingusers", cache); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + cache.get("user1"); + cache.get("user1"); + try { + cache.get("user2"); + } catch (Exception e) { + // ignoring. + } + cache.get("user3"); + + assertCounterMetric(registry, "guava_cache_hit", "loadingusers", 1.0); + assertCounterMetric(registry, "guava_cache_miss", "loadingusers", 3.0); + + assertCounterMetric(registry, "guava_cache_load_failure", "loadingusers", 1.0); + assertCounterMetric(registry, "guava_cache_loads", "loadingusers", 3.0); + + final SummarySnapshot.SummaryDataPointSnapshot loadDuration = (SummarySnapshot.SummaryDataPointSnapshot) getDataPointSnapshot( + registry, + "guava_cache_load_duration_seconds", + "loadingusers" + ); + + assertEquals(3, loadDuration.getCount()); + assertThat(loadDuration.getSum()).isGreaterThan(0); + } + + private void assertCounterMetric(PrometheusRegistry registry, String name, String cacheName, double value) { + final CounterSnapshot.CounterDataPointSnapshot dataPointSnapshot = + (CounterSnapshot.CounterDataPointSnapshot) getDataPointSnapshot(registry, name, cacheName); + + assertEquals(value, dataPointSnapshot.getValue(), 0); + } + + private DataPointSnapshot getDataPointSnapshot(PrometheusRegistry registry, String name, String cacheName) + { + final Labels labels = Labels.of(new String[]{"cache"}, new String[]{cacheName}); + + return registry.scrape(name::equals).stream() + .flatMap(metricSnapshot -> metricSnapshot.getDataPoints().stream()) + .filter(dataPoint -> dataPoint.getLabels().equals(labels)) + .findFirst() + .get(); + } + + private String convertToOpenMetricsFormat(PrometheusRegistry registry) { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + try { + writer.write(out, registry.scrape()); + return out.toString(StandardCharsets.UTF_8.name()); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/simpleclient-archive/simpleclient_guava/version-rules.xml b/prometheus-metrics-instrumentation-guava/version-rules.xml similarity index 100% rename from simpleclient-archive/simpleclient_guava/version-rules.xml rename to prometheus-metrics-instrumentation-guava/version-rules.xml diff --git a/simpleclient-archive/simpleclient_guava/src/main/java/io/prometheus/client/guava/cache/CacheMetricsCollector.java b/simpleclient-archive/simpleclient_guava/src/main/java/io/prometheus/client/guava/cache/CacheMetricsCollector.java deleted file mode 100644 index 5ed0276bb..000000000 --- a/simpleclient-archive/simpleclient_guava/src/main/java/io/prometheus/client/guava/cache/CacheMetricsCollector.java +++ /dev/null @@ -1,142 +0,0 @@ -package io.prometheus.client.guava.cache; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheStats; -import com.google.common.cache.LoadingCache; -import io.prometheus.client.Collector; -import io.prometheus.client.CounterMetricFamily; -import io.prometheus.client.GaugeMetricFamily; -import io.prometheus.client.SummaryMetricFamily; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -/** - * Collect metrics from Guava's com.google.common.cache.Cache. - *

    - *

    {@code
    - *
    - * // Note that `recordStats()` is required to gather non-zero statistics
    - * Cache cache = CacheBuilder.newBuilder().recordStats().build();
    - * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector().register();
    - * cacheMetrics.addCache("mycache", cache);
    - *
    - * }
    - * - * Exposed metrics are labeled with the provided cache name. - * - * With the example above, sample metric names would be: - *
    - *     guava_cache_hit_total{cache="mycache"} 10.0
    - *     guava_cache_miss_total{cache="mycache"} 3.0
    - *     guava_cache_requests_total{cache="mycache"} 13.0
    - *     guava_cache_eviction_total{cache="mycache"} 1.0
    - *     guava_cache_size{cache="mycache"} 5.0
    - * 
    - * - * Additionally if the cache includes a loader, the following metrics would be provided: - *
    - *     guava_cache_load_failure_total{cache="mycache"} 2.0
    - *     guava_cache_loads_total{cache="mycache"} 7.0
    - *     guava_cache_load_duration_seconds_count{cache="mycache"} 7.0
    - *     guava_cache_load_duration_seconds_sum{cache="mycache"} 0.0034
    - * 
    - * - */ -public class CacheMetricsCollector extends Collector { - - protected final ConcurrentMap children = new ConcurrentHashMap(); - - /** - * Add or replace the cache with the given name. - *

    - * Any references any previous cache with this name is invalidated. - * - * @param cacheName The name of the cache, will be the metrics label value - * @param cache The cache being monitored - */ - public void addCache(String cacheName, Cache cache) { - children.put(cacheName, cache); - } - - /** - * Remove the cache with the given name. - *

    - * Any references to the cache are invalidated. - * - * @param cacheName cache to be removed - */ - public Cache removeCache(String cacheName) { - return children.remove(cacheName); - } - - /** - * Remove all caches. - *

    - * Any references to all caches are invalidated. - */ - public void clear(){ - children.clear(); - } - - @Override - public List collect() { - List mfs = new ArrayList(); - List labelNames = Arrays.asList("cache"); - - CounterMetricFamily cacheHitTotal = new CounterMetricFamily("guava_cache_hit_total", - "Cache hit totals", labelNames); - mfs.add(cacheHitTotal); - - CounterMetricFamily cacheMissTotal = new CounterMetricFamily("guava_cache_miss_total", - "Cache miss totals", labelNames); - mfs.add(cacheMissTotal); - - CounterMetricFamily cacheRequestsTotal = new CounterMetricFamily("guava_cache_requests_total", - "Cache request totals, hits + misses", labelNames); - mfs.add(cacheRequestsTotal); - - CounterMetricFamily cacheEvictionTotal = new CounterMetricFamily("guava_cache_eviction_total", - "Cache eviction totals, doesn't include manually removed entries", labelNames); - mfs.add(cacheEvictionTotal); - - CounterMetricFamily cacheLoadFailure = new CounterMetricFamily("guava_cache_load_failure_total", - "Cache load failures", labelNames); - mfs.add(cacheLoadFailure); - - CounterMetricFamily cacheLoadTotal = new CounterMetricFamily("guava_cache_loads_total", - "Cache loads: both success and failures", labelNames); - mfs.add(cacheLoadTotal); - - GaugeMetricFamily cacheSize = new GaugeMetricFamily("guava_cache_size", - "Cache size", labelNames); - mfs.add(cacheSize); - - SummaryMetricFamily cacheLoadSummary = new SummaryMetricFamily("guava_cache_load_duration_seconds", - "Cache load duration: both success and failures", labelNames); - mfs.add(cacheLoadSummary); - - for(Map.Entry c: children.entrySet()) { - List cacheName = Arrays.asList(c.getKey()); - CacheStats stats = c.getValue().stats(); - - cacheHitTotal.addMetric(cacheName, stats.hitCount()); - cacheMissTotal.addMetric(cacheName, stats.missCount()); - cacheRequestsTotal.addMetric(cacheName, stats.requestCount()); - cacheEvictionTotal.addMetric(cacheName, stats.evictionCount()); - cacheSize.addMetric(cacheName, c.getValue().size()); - - if(c.getValue() instanceof LoadingCache) { - cacheLoadFailure.addMetric(cacheName, stats.loadExceptionCount()); - cacheLoadTotal.addMetric(cacheName, stats.loadCount()); - - cacheLoadSummary.addMetric(cacheName, stats.loadCount(), stats.totalLoadTime() / Collector.NANOSECONDS_PER_SECOND); - } - } - return mfs; - } -} diff --git a/simpleclient-archive/simpleclient_guava/src/test/java/io/prometheus/client/guava/cache/CacheMetricsCollectorTest.java b/simpleclient-archive/simpleclient_guava/src/test/java/io/prometheus/client/guava/cache/CacheMetricsCollectorTest.java deleted file mode 100644 index dab30b9fb..000000000 --- a/simpleclient-archive/simpleclient_guava/src/test/java/io/prometheus/client/guava/cache/CacheMetricsCollectorTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package io.prometheus.client.guava.cache; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import io.prometheus.client.CollectorRegistry; -import org.junit.Test; - -import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class CacheMetricsCollectorTest { - - @Test - public void cacheExposesMetricsForHitMissAndEviction() throws Exception { - Cache cache = CacheBuilder.newBuilder().maximumSize(2).recordStats().build(); - CollectorRegistry registry = new CollectorRegistry(); - - CacheMetricsCollector collector = new CacheMetricsCollector().register(registry); - collector.addCache("users", cache); - - cache.getIfPresent("user1"); - cache.getIfPresent("user1"); - cache.put("user1", "First User"); - cache.getIfPresent("user1"); - - // Add to cache to trigger eviction. - cache.put("user2", "Second User"); - cache.put("user3", "Third User"); - cache.put("user4", "Fourth User"); - - assertMetric(registry, "guava_cache_hit_total", "users", 1.0); - assertMetric(registry, "guava_cache_miss_total", "users", 2.0); - assertMetric(registry, "guava_cache_requests_total", "users", 3.0); - assertMetric(registry, "guava_cache_eviction_total", "users", 2.0); - } - - @SuppressWarnings("unchecked") - @Test - public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { - CacheLoader loader = mock(CacheLoader.class); - when(loader.load(anyString())) - .thenReturn("First User") - .thenThrow(new RuntimeException("Seconds time fails")) - .thenReturn("Third User"); - - LoadingCache cache = CacheBuilder.newBuilder().recordStats().build(loader); - CollectorRegistry registry = new CollectorRegistry(); - CacheMetricsCollector collector = new CacheMetricsCollector().register(registry); - collector.addCache("loadingusers", cache); - - cache.get("user1"); - cache.get("user1"); - try{ - cache.get("user2"); - } catch (Exception e) { - // ignoring. - } - cache.get("user3"); - - assertMetric(registry, "guava_cache_hit_total", "loadingusers", 1.0); - assertMetric(registry, "guava_cache_miss_total", "loadingusers", 3.0); - - assertMetric(registry, "guava_cache_load_failure_total", "loadingusers", 1.0); - assertMetric(registry, "guava_cache_loads_total", "loadingusers", 3.0); - - assertMetric(registry, "guava_cache_load_duration_seconds_count", "loadingusers", 3.0); - assertMetricGreatThan(registry, "guava_cache_load_duration_seconds_sum", "loadingusers", 0.0); - } - - - private void assertMetric(CollectorRegistry registry, String name, String cacheName, double value) { - assertThat(registry.getSampleValue(name, new String[]{"cache"}, new String[]{cacheName})).isEqualTo(value); - } - - - private void assertMetricGreatThan(CollectorRegistry registry, String name, String cacheName, double value) { - assertThat(registry.getSampleValue(name, new String[]{"cache"}, new String[]{cacheName})).isGreaterThan(value); - } - - -} From ec56b2c43b72f5b998ad11919911686afe49408d Mon Sep 17 00:00:00 2001 From: Petar Heyken <48122009+pheyken@users.noreply.github.com> Date: Sat, 31 Aug 2024 03:14:05 +0200 Subject: [PATCH 107/870] add support for caffeine instrumentation with 1.X.X (#983) * add support for caffeine instrumentation with 1.X.X --------- Signed-off-by: Petar Heyken --- pom.xml | 1 + .../pom.xml | 34 ++- .../caffeine/CacheMetricsCollector.java | 232 ++++++++++++++++++ .../caffeine/CacheMetricsCollectorTest.java | 153 ++++++++++++ .../version-rules.xml | 0 .../cache/caffeine/CacheMetricsCollector.java | 165 ------------- .../caffeine/CacheMetricsCollectorTest.java | 93 ------- 7 files changed, 412 insertions(+), 266 deletions(-) rename {simpleclient-archive/simpleclient_caffeine => prometheus-metrics-instrumentation-caffeine}/pom.xml (64%) create mode 100644 prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java create mode 100644 prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java rename {simpleclient-archive/simpleclient_caffeine => prometheus-metrics-instrumentation-caffeine}/version-rules.xml (100%) delete mode 100644 simpleclient-archive/simpleclient_caffeine/src/main/java/io/prometheus/client/cache/caffeine/CacheMetricsCollector.java delete mode 100644 simpleclient-archive/simpleclient_caffeine/src/test/java/io/prometheus/client/cache/caffeine/CacheMetricsCollectorTest.java diff --git a/pom.xml b/pom.xml index 033e89331..52953fbc9 100644 --- a/pom.xml +++ b/pom.xml @@ -64,6 +64,7 @@ prometheus-metrics-exporter-httpserver prometheus-metrics-exporter-opentelemetry prometheus-metrics-exporter-pushgateway + prometheus-metrics-instrumentation-caffeine prometheus-metrics-instrumentation-jvm prometheus-metrics-instrumentation-dropwizard5 prometheus-metrics-instrumentation-guava diff --git a/simpleclient-archive/simpleclient_caffeine/pom.xml b/prometheus-metrics-instrumentation-caffeine/pom.xml similarity index 64% rename from simpleclient-archive/simpleclient_caffeine/pom.xml rename to prometheus-metrics-instrumentation-caffeine/pom.xml index 73529822b..a1b560251 100644 --- a/simpleclient-archive/simpleclient_caffeine/pom.xml +++ b/prometheus-metrics-instrumentation-caffeine/pom.xml @@ -5,17 +5,21 @@ io.prometheus client_java - 1.0.0-beta-2-SNAPSHOT + 1.4.0-SNAPSHOT - simpleclient_caffeine + prometheus-metrics-instrumentation-caffeine bundle - Prometheus Java Simpleclient Caffeine + Prometheus Metrics Instrumentation - Caffeine - Metrics collector for caffeine based caches + Instrumentation library for caffeine based caches + + io.prometheus.metrics.instrumentation.caffeine + + The Apache Software License, Version 2.0 @@ -30,18 +34,25 @@ Clint Checketts checketts@gmail.com + + + pheyken + Petar Heyken + mail@petar-heyken.de + io.prometheus - simpleclient + prometheus-metrics-core ${project.version} com.github.ben-manes.caffeine caffeine - 3.1.1 + 3.1.8 + provided @@ -55,13 +66,20 @@ org.mockito mockito-core - 4.6.1 + 5.12.0 test org.assertj assertj-core - 3.23.1 + 3.26.3 + test + + + + io.prometheus + prometheus-metrics-exposition-formats + ${project.version} test diff --git a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java new file mode 100644 index 000000000..985a15711 --- /dev/null +++ b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java @@ -0,0 +1,232 @@ +package io.prometheus.metrics.instrumentation.caffeine; + +import com.github.benmanes.caffeine.cache.AsyncCache; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.LoadingCache; +import com.github.benmanes.caffeine.cache.stats.CacheStats; +import io.prometheus.metrics.model.registry.MultiCollector; +import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot; +import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import io.prometheus.metrics.model.snapshots.SummarySnapshot; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + + +/** + * Collect metrics from Caffeine's com.github.benmanes.caffeine.cache.Cache. + *

    + *

    {@code
    + *
    + * // Note that `recordStats()` is required to gather non-zero statistics
    + * Cache cache = Caffeine.newBuilder().recordStats().build();
    + * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector().register();
    + * cacheMetrics.addCache("mycache", cache);
    + *
    + * }
    + * + * Exposed metrics are labeled with the provided cache name. + * + * With the example above, sample metric names would be: + *
    + *     caffeine_cache_hit_total{cache="mycache"} 10.0
    + *     caffeine_cache_miss_total{cache="mycache"} 3.0
    + *     caffeine_cache_requests_total{cache="mycache"} 13.0
    + *     caffeine_cache_eviction_total{cache="mycache"} 1.0
    + *     caffeine_cache_estimated_size{cache="mycache"} 5.0
    + * 
    + * + * Additionally, if the cache includes a loader, the following metrics would be provided: + *
    + *     caffeine_cache_load_failure_total{cache="mycache"} 2.0
    + *     caffeine_cache_loads_total{cache="mycache"} 7.0
    + *     caffeine_cache_load_duration_seconds_count{cache="mycache"} 7.0
    + *     caffeine_cache_load_duration_seconds_sum{cache="mycache"} 0.0034
    + * 
    + * + */ +public class CacheMetricsCollector implements MultiCollector { + private static final double NANOSECONDS_PER_SECOND = 1_000_000_000.0; + + protected final ConcurrentMap children = new ConcurrentHashMap(); + + /** + * Add or replace the cache with the given name. + *

    + * Any references any previous cache with this name is invalidated. + * + * @param cacheName The name of the cache, will be the metrics label value + * @param cache The cache being monitored + */ + public void addCache(String cacheName, Cache cache) { + children.put(cacheName, cache); + } + + /** + * Add or replace the cache with the given name. + *

    + * Any references any previous cache with this name is invalidated. + * + * @param cacheName The name of the cache, will be the metrics label value + * @param cache The cache being monitored + */ + public void addCache(String cacheName, AsyncCache cache) { + children.put(cacheName, cache.synchronous()); + } + + /** + * Remove the cache with the given name. + *

    + * Any references to the cache are invalidated. + * + * @param cacheName cache to be removed + */ + public Cache removeCache(String cacheName) { + return children.remove(cacheName); + } + + /** + * Remove all caches. + *

    + * Any references to all caches are invalidated. + */ + public void clear(){ + children.clear(); + } + + @Override + public MetricSnapshots collect() { + final MetricSnapshots.Builder metricSnapshotsBuilder = MetricSnapshots.builder(); + final List labelNames = Arrays.asList("cache"); + + final CounterSnapshot.Builder cacheHitTotal = CounterSnapshot.builder() + .name("caffeine_cache_hit") + .help("Cache hit totals"); + + final CounterSnapshot.Builder cacheMissTotal = CounterSnapshot.builder() + .name("caffeine_cache_miss") + .help("Cache miss totals"); + + final CounterSnapshot.Builder cacheRequestsTotal = CounterSnapshot.builder() + .name("caffeine_cache_requests") + .help("Cache request totals, hits + misses"); + + final CounterSnapshot.Builder cacheEvictionTotal = CounterSnapshot.builder() + .name("caffeine_cache_eviction") + .help("Cache eviction totals, doesn't include manually removed entries"); + + final GaugeSnapshot.Builder cacheEvictionWeight = GaugeSnapshot.builder() + .name("caffeine_cache_eviction_weight") + .help("Cache eviction weight"); + + final CounterSnapshot.Builder cacheLoadFailure = CounterSnapshot.builder() + .name("caffeine_cache_load_failure") + .help("Cache load failures"); + + final CounterSnapshot.Builder cacheLoadTotal = CounterSnapshot.builder() + .name("caffeine_cache_loads") + .help("Cache loads: both success and failures"); + + final GaugeSnapshot.Builder cacheSize = GaugeSnapshot.builder() + .name("caffeine_cache_estimated_size") + .help("Estimated cache size"); + + final SummarySnapshot.Builder cacheLoadSummary = SummarySnapshot.builder() + .name("caffeine_cache_load_duration_seconds") + .help("Cache load duration: both success and failures"); + + for (final Map.Entry c: children.entrySet()) { + final List cacheName = Arrays.asList(c.getKey()); + final Labels labels = Labels.of(labelNames, cacheName); + + final CacheStats stats = c.getValue().stats(); + + try { + cacheEvictionWeight.dataPoint( + GaugeSnapshot.GaugeDataPointSnapshot.builder() + .labels(labels) + .value(stats.evictionWeight()) + .build() + ); + } catch (Exception e) { + // EvictionWeight metric is unavailable, newer version of Caffeine is needed. + } + + cacheHitTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.hitCount()) + .build() + ); + + cacheMissTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.missCount()) + .build() + ); + + cacheRequestsTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.requestCount()) + .build() + ); + + cacheEvictionTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.evictionCount()) + .build() + ); + + cacheSize.dataPoint( + GaugeSnapshot.GaugeDataPointSnapshot.builder() + .labels(labels) + .value(c.getValue().estimatedSize()) + .build() + ); + + if (c.getValue() instanceof LoadingCache) { + cacheLoadFailure.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.loadFailureCount()) + .build() + ); + + cacheLoadTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.loadCount()) + .build() + ); + + cacheLoadSummary.dataPoint( + SummarySnapshot.SummaryDataPointSnapshot.builder() + .labels(labels) + .count(stats.loadCount()) + .sum(stats.totalLoadTime() / NANOSECONDS_PER_SECOND) + .build() + ); + } + } + + return metricSnapshotsBuilder + .metricSnapshot(cacheHitTotal.build()) + .metricSnapshot(cacheMissTotal.build()) + .metricSnapshot(cacheRequestsTotal.build()) + .metricSnapshot(cacheEvictionTotal.build()) + .metricSnapshot(cacheEvictionWeight.build()) + .metricSnapshot(cacheLoadFailure.build()) + .metricSnapshot(cacheLoadTotal.build()) + .metricSnapshot(cacheSize.build()) + .metricSnapshot(cacheLoadSummary.build()) + .build(); + } +} diff --git a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java new file mode 100644 index 000000000..86f7ed185 --- /dev/null +++ b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java @@ -0,0 +1,153 @@ +package io.prometheus.metrics.instrumentation.caffeine; + +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.CacheLoader; +import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.benmanes.caffeine.cache.LoadingCache; +import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import io.prometheus.metrics.model.snapshots.DataPointSnapshot; +import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.model.snapshots.SummarySnapshot; +import org.junit.Test; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.Executor; + +import static org.assertj.core.api.Java6Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class CacheMetricsCollectorTest { + + @Test + public void cacheExposesMetricsForHitMissAndEviction() { + final Cache cache = Caffeine.newBuilder().maximumSize(2).recordStats().executor(new Executor() { + @Override + public void execute(Runnable command) { + // Run cleanup in same thread, to remove async behavior with evictions + command.run(); + } + }).build(); + + final CacheMetricsCollector collector = new CacheMetricsCollector(); + collector.addCache("users", cache); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + cache.getIfPresent("user1"); + cache.getIfPresent("user1"); + cache.put("user1", "First User"); + cache.getIfPresent("user1"); + + // Add to cache to trigger eviction. + cache.put("user2", "Second User"); + cache.put("user3", "Third User"); + cache.put("user4", "Fourth User"); + + assertCounterMetric(registry, "caffeine_cache_hit", "users", 1.0); + assertCounterMetric(registry, "caffeine_cache_miss", "users", 2.0); + assertCounterMetric(registry, "caffeine_cache_requests", "users", 3.0); + assertCounterMetric(registry, "caffeine_cache_eviction", "users", 2.0); + + final String expected = "# TYPE caffeine_cache_estimated_size gauge\n" + + "# HELP caffeine_cache_estimated_size Estimated cache size\n" + + "caffeine_cache_estimated_size{cache=\"users\"} 2.0\n" + + "# TYPE caffeine_cache_eviction counter\n" + + "# HELP caffeine_cache_eviction Cache eviction totals, doesn't include manually removed entries\n" + + "caffeine_cache_eviction_total{cache=\"users\"} 2.0\n" + + "# TYPE caffeine_cache_eviction_weight gauge\n" + + "# HELP caffeine_cache_eviction_weight Cache eviction weight\n" + + "caffeine_cache_eviction_weight{cache=\"users\"} 2.0\n" + + "# TYPE caffeine_cache_hit counter\n" + + "# HELP caffeine_cache_hit Cache hit totals\n" + + "caffeine_cache_hit_total{cache=\"users\"} 1.0\n" + + "# TYPE caffeine_cache_miss counter\n" + + "# HELP caffeine_cache_miss Cache miss totals\n" + + "caffeine_cache_miss_total{cache=\"users\"} 2.0\n" + + "# TYPE caffeine_cache_requests counter\n" + + "# HELP caffeine_cache_requests Cache request totals, hits + misses\n" + + "caffeine_cache_requests_total{cache=\"users\"} 3.0\n" + + "# EOF\n"; + + assertEquals(expected, convertToOpenMetricsFormat(registry)); + } + + @SuppressWarnings("unchecked") + @Test + public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { + final CacheLoader loader = mock(CacheLoader.class); + when(loader.load(anyString())) + .thenReturn("First User") + .thenThrow(new RuntimeException("Seconds time fails")) + .thenReturn("Third User"); + + final LoadingCache cache = Caffeine.newBuilder().recordStats().build(loader); + final CacheMetricsCollector collector = new CacheMetricsCollector(); + + collector.addCache("loadingusers", cache); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + cache.get("user1"); + cache.get("user1"); + try { + cache.get("user2"); + } catch (Exception e) { + // ignoring. + } + cache.get("user3"); + + assertCounterMetric(registry, "caffeine_cache_hit", "loadingusers", 1.0); + assertCounterMetric(registry, "caffeine_cache_miss", "loadingusers", 3.0); + + assertCounterMetric(registry, "caffeine_cache_load_failure", "loadingusers", 1.0); + assertCounterMetric(registry, "caffeine_cache_loads", "loadingusers", 3.0); + + final SummarySnapshot.SummaryDataPointSnapshot loadDuration = (SummarySnapshot.SummaryDataPointSnapshot) getDataPointSnapshot( + registry, + "caffeine_cache_load_duration_seconds", + "loadingusers" + ); + + assertEquals(3, loadDuration.getCount()); + assertThat(loadDuration.getSum()).isGreaterThan(0); + } + + private void assertCounterMetric(PrometheusRegistry registry, String name, String cacheName, double value) { + final CounterSnapshot.CounterDataPointSnapshot dataPointSnapshot = + (CounterSnapshot.CounterDataPointSnapshot) getDataPointSnapshot(registry, name, cacheName); + + assertEquals(value, dataPointSnapshot.getValue(), 0); + } + + private DataPointSnapshot getDataPointSnapshot(PrometheusRegistry registry, String name, String cacheName) + { + final Labels labels = Labels.of(new String[]{"cache"}, new String[]{cacheName}); + + return registry.scrape(name::equals).stream() + .flatMap(metricSnapshot -> metricSnapshot.getDataPoints().stream()) + .filter(dataPoint -> dataPoint.getLabels().equals(labels)) + .findFirst() + .get(); + } + + private String convertToOpenMetricsFormat(PrometheusRegistry registry) { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + try { + writer.write(out, registry.scrape()); + return out.toString(StandardCharsets.UTF_8.name()); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/simpleclient-archive/simpleclient_caffeine/version-rules.xml b/prometheus-metrics-instrumentation-caffeine/version-rules.xml similarity index 100% rename from simpleclient-archive/simpleclient_caffeine/version-rules.xml rename to prometheus-metrics-instrumentation-caffeine/version-rules.xml diff --git a/simpleclient-archive/simpleclient_caffeine/src/main/java/io/prometheus/client/cache/caffeine/CacheMetricsCollector.java b/simpleclient-archive/simpleclient_caffeine/src/main/java/io/prometheus/client/cache/caffeine/CacheMetricsCollector.java deleted file mode 100644 index bc48dd86f..000000000 --- a/simpleclient-archive/simpleclient_caffeine/src/main/java/io/prometheus/client/cache/caffeine/CacheMetricsCollector.java +++ /dev/null @@ -1,165 +0,0 @@ -package io.prometheus.client.cache.caffeine; - -import com.github.benmanes.caffeine.cache.AsyncCache; -import com.github.benmanes.caffeine.cache.Cache; -import com.github.benmanes.caffeine.cache.LoadingCache; -import com.github.benmanes.caffeine.cache.stats.CacheStats; -import io.prometheus.client.Collector; -import io.prometheus.client.CounterMetricFamily; -import io.prometheus.client.GaugeMetricFamily; -import io.prometheus.client.SummaryMetricFamily; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - - -/** - * Collect metrics from Caffeine's com.github.benmanes.caffeine.cache.Cache. - *

    - *

    {@code
    - *
    - * // Note that `recordStats()` is required to gather non-zero statistics
    - * Cache cache = Caffeine.newBuilder().recordStats().build();
    - * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector().register();
    - * cacheMetrics.addCache("mycache", cache);
    - *
    - * }
    - * - * Exposed metrics are labeled with the provided cache name. - * - * With the example above, sample metric names would be: - *
    - *     caffeine_cache_hit_total{cache="mycache"} 10.0
    - *     caffeine_cache_miss_total{cache="mycache"} 3.0
    - *     caffeine_cache_requests_total{cache="mycache"} 13.0
    - *     caffeine_cache_eviction_total{cache="mycache"} 1.0
    - *     caffeine_cache_estimated_size{cache="mycache"} 5.0
    - * 
    - * - * Additionally if the cache includes a loader, the following metrics would be provided: - *
    - *     caffeine_cache_load_failure_total{cache="mycache"} 2.0
    - *     caffeine_cache_loads_total{cache="mycache"} 7.0
    - *     caffeine_cache_load_duration_seconds_count{cache="mycache"} 7.0
    - *     caffeine_cache_load_duration_seconds_sum{cache="mycache"} 0.0034
    - * 
    - * - */ -public class CacheMetricsCollector extends Collector { - protected final ConcurrentMap children = new ConcurrentHashMap(); - - /** - * Add or replace the cache with the given name. - *

    - * Any references any previous cache with this name is invalidated. - * - * @param cacheName The name of the cache, will be the metrics label value - * @param cache The cache being monitored - */ - public void addCache(String cacheName, Cache cache) { - children.put(cacheName, cache); - } - - /** - * Add or replace the cache with the given name. - *

    - * Any references any previous cache with this name is invalidated. - * - * @param cacheName The name of the cache, will be the metrics label value - * @param cache The cache being monitored - */ - public void addCache(String cacheName, AsyncCache cache) { - children.put(cacheName, cache.synchronous()); - } - - /** - * Remove the cache with the given name. - *

    - * Any references to the cache are invalidated. - * - * @param cacheName cache to be removed - */ - public Cache removeCache(String cacheName) { - return children.remove(cacheName); - } - - /** - * Remove all caches. - *

    - * Any references to all caches are invalidated. - */ - public void clear(){ - children.clear(); - } - - @Override - public List collect() { - List mfs = new ArrayList(); - List labelNames = Arrays.asList("cache"); - - CounterMetricFamily cacheHitTotal = new CounterMetricFamily("caffeine_cache_hit_total", - "Cache hit totals", labelNames); - mfs.add(cacheHitTotal); - - CounterMetricFamily cacheMissTotal = new CounterMetricFamily("caffeine_cache_miss_total", - "Cache miss totals", labelNames); - mfs.add(cacheMissTotal); - - CounterMetricFamily cacheRequestsTotal = new CounterMetricFamily("caffeine_cache_requests_total", - "Cache request totals, hits + misses", labelNames); - mfs.add(cacheRequestsTotal); - - CounterMetricFamily cacheEvictionTotal = new CounterMetricFamily("caffeine_cache_eviction_total", - "Cache eviction totals, doesn't include manually removed entries", labelNames); - mfs.add(cacheEvictionTotal); - - GaugeMetricFamily cacheEvictionWeight = new GaugeMetricFamily("caffeine_cache_eviction_weight", - "Cache eviction weight", labelNames); - mfs.add(cacheEvictionWeight); - - CounterMetricFamily cacheLoadFailure = new CounterMetricFamily("caffeine_cache_load_failure_total", - "Cache load failures", labelNames); - mfs.add(cacheLoadFailure); - - CounterMetricFamily cacheLoadTotal = new CounterMetricFamily("caffeine_cache_loads_total", - "Cache loads: both success and failures", labelNames); - mfs.add(cacheLoadTotal); - - GaugeMetricFamily cacheSize = new GaugeMetricFamily("caffeine_cache_estimated_size", - "Estimated cache size", labelNames); - mfs.add(cacheSize); - - SummaryMetricFamily cacheLoadSummary = new SummaryMetricFamily("caffeine_cache_load_duration_seconds", - "Cache load duration: both success and failures", labelNames); - mfs.add(cacheLoadSummary); - - for(Map.Entry c: children.entrySet()) { - List cacheName = Arrays.asList(c.getKey()); - CacheStats stats = c.getValue().stats(); - - try{ - cacheEvictionWeight.addMetric(cacheName, stats.evictionWeight()); - } catch (Exception e) { - // EvictionWeight metric is unavailable, newer version of Caffeine is needed. - } - - cacheHitTotal.addMetric(cacheName, stats.hitCount()); - cacheMissTotal.addMetric(cacheName, stats.missCount()); - cacheRequestsTotal.addMetric(cacheName, stats.requestCount()); - cacheEvictionTotal.addMetric(cacheName, stats.evictionCount()); - cacheSize.addMetric(cacheName, c.getValue().estimatedSize()); - - if(c.getValue() instanceof LoadingCache) { - cacheLoadFailure.addMetric(cacheName, stats.loadFailureCount()); - cacheLoadTotal.addMetric(cacheName, stats.loadCount()); - - cacheLoadSummary.addMetric(cacheName, stats.loadCount(), stats.totalLoadTime() / Collector.NANOSECONDS_PER_SECOND); - } - } - return mfs; - } -} diff --git a/simpleclient-archive/simpleclient_caffeine/src/test/java/io/prometheus/client/cache/caffeine/CacheMetricsCollectorTest.java b/simpleclient-archive/simpleclient_caffeine/src/test/java/io/prometheus/client/cache/caffeine/CacheMetricsCollectorTest.java deleted file mode 100644 index 65429f337..000000000 --- a/simpleclient-archive/simpleclient_caffeine/src/test/java/io/prometheus/client/cache/caffeine/CacheMetricsCollectorTest.java +++ /dev/null @@ -1,93 +0,0 @@ -package io.prometheus.client.cache.caffeine; - -import com.github.benmanes.caffeine.cache.Cache; -import com.github.benmanes.caffeine.cache.CacheLoader; -import com.github.benmanes.caffeine.cache.Caffeine; -import com.github.benmanes.caffeine.cache.LoadingCache; -import io.prometheus.client.CollectorRegistry; -import org.junit.Test; - -import java.util.concurrent.Executor; - -import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class CacheMetricsCollectorTest { - - @Test - public void cacheExposesMetricsForHitMissAndEviction() throws Exception { - Cache cache = Caffeine.newBuilder().maximumSize(2).recordStats().executor(new Executor() { - @Override - public void execute(Runnable command) { - // Run cleanup in same thread, to remove async behavior with evictions - command.run(); - } - }).build(); - CollectorRegistry registry = new CollectorRegistry(); - - CacheMetricsCollector collector = new CacheMetricsCollector().register(registry); - collector.addCache("users", cache); - - cache.getIfPresent("user1"); - cache.getIfPresent("user1"); - cache.put("user1", "First User"); - cache.getIfPresent("user1"); - - // Add to cache to trigger eviction. - cache.put("user2", "Second User"); - cache.put("user3", "Third User"); - cache.put("user4", "Fourth User"); - - assertMetric(registry, "caffeine_cache_hit_total", "users", 1.0); - assertMetric(registry, "caffeine_cache_miss_total", "users", 2.0); - assertMetric(registry, "caffeine_cache_requests_total", "users", 3.0); - assertMetric(registry, "caffeine_cache_eviction_total", "users", 2.0); - } - - - @SuppressWarnings("unchecked") - @Test - public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { - CacheLoader loader = mock(CacheLoader.class); - when(loader.load(anyString())) - .thenReturn("First User") - .thenThrow(new RuntimeException("Seconds time fails")) - .thenReturn("Third User"); - - LoadingCache cache = Caffeine.newBuilder().recordStats().build(loader); - CollectorRegistry registry = new CollectorRegistry(); - CacheMetricsCollector collector = new CacheMetricsCollector().register(registry); - collector.addCache("loadingusers", cache); - - cache.get("user1"); - cache.get("user1"); - try { - cache.get("user2"); - } catch (Exception e) { - // ignoring. - } - cache.get("user3"); - - assertMetric(registry, "caffeine_cache_hit_total", "loadingusers", 1.0); - assertMetric(registry, "caffeine_cache_miss_total", "loadingusers", 3.0); - - assertMetric(registry, "caffeine_cache_load_failure_total", "loadingusers", 1.0); - assertMetric(registry, "caffeine_cache_loads_total", "loadingusers", 3.0); - - assertMetric(registry, "caffeine_cache_load_duration_seconds_count", "loadingusers", 3.0); - assertMetricGreatThan(registry, "caffeine_cache_load_duration_seconds_sum", "loadingusers", 0.0); - } - - private void assertMetric(CollectorRegistry registry, String name, String cacheName, double value) { - assertThat(registry.getSampleValue(name, new String[]{"cache"}, new String[]{cacheName})).isEqualTo(value); - } - - - private void assertMetricGreatThan(CollectorRegistry registry, String name, String cacheName, double value) { - assertThat(registry.getSampleValue(name, new String[]{"cache"}, new String[]{cacheName})).isGreaterThan(value); - } - - -} From b2db7094ce276bc534e60a843baf473c56003b03 Mon Sep 17 00:00:00 2001 From: Iacopo Date: Fri, 6 Sep 2024 20:42:25 -0700 Subject: [PATCH 108/870] Nullify noLabels in StatefulMetric during clear() to prevent no-labels increase to stop working (#972) Signed-off-by: Iacopo Pace Co-authored-by: Iacopo Pace --- .../io/prometheus/metrics/core/metrics/StatefulMetric.java | 1 + .../prometheus/metrics/core/metrics/StatefulMetricTest.java | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java index 43555167a..44f6cc57a 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java @@ -114,6 +114,7 @@ public void remove(String... labelValues) { */ public void clear() { data.clear(); + noLabels = null; } protected abstract T newDataPoint(); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java index b1c45fa80..dd2c4355a 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java @@ -60,5 +60,10 @@ public void testClearNoLabels() { // No labels is always present, but as no value has been observed after clear() the value should be 0.0 Assert.assertEquals(1, counter.collect().getDataPoints().size()); Assert.assertEquals(0.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + + // Making inc() works correctly after clear() + counter.inc(); + Assert.assertEquals(1, counter.collect().getDataPoints().size()); + Assert.assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); } } From 8a24bdea2eef88c7655cb9173db9d058fbc780a8 Mon Sep 17 00:00:00 2001 From: Mickael Maison Date: Sat, 7 Sep 2024 05:48:56 +0200 Subject: [PATCH 109/870] Add abstract build method to MetricSnapshot.Builder (#969) Signed-off-by: Mickael Maison --- .../io/prometheus/metrics/model/snapshots/CounterSnapshot.java | 1 + .../io/prometheus/metrics/model/snapshots/GaugeSnapshot.java | 3 ++- .../prometheus/metrics/model/snapshots/HistogramSnapshot.java | 1 + .../io/prometheus/metrics/model/snapshots/InfoSnapshot.java | 1 + .../io/prometheus/metrics/model/snapshots/MetricSnapshot.java | 2 ++ .../prometheus/metrics/model/snapshots/StateSetSnapshot.java | 1 + .../io/prometheus/metrics/model/snapshots/SummarySnapshot.java | 1 + .../io/prometheus/metrics/model/snapshots/UnknownSnapshot.java | 1 + 8 files changed, 10 insertions(+), 1 deletion(-) diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java index e62aeb9f8..4aceea6bd 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java @@ -139,6 +139,7 @@ public Builder dataPoint(CounterDataPointSnapshot dataPoint) { return this; } + @Override public CounterSnapshot build() { return new CounterSnapshot(buildMetadata(), dataPoints); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java index f69b8d2a6..2600214aa 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java @@ -118,13 +118,14 @@ private Builder() { } /** - * Add a data point. This can be alled multiple times to add multiple data points. + * Add a data point. This can be called multiple times to add multiple data points. */ public Builder dataPoint(GaugeDataPointSnapshot dataPoint) { dataPoints.add(dataPoint); return this; } + @Override public GaugeSnapshot build() { return new GaugeSnapshot(buildMetadata(), dataPoints); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java index 2e66c1a25..0737f7368 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java @@ -389,6 +389,7 @@ public Builder gaugeHistogram(boolean isGaugeHistogram) { return this; } + @Override public HistogramSnapshot build() { return new HistogramSnapshot(isGaugeHistogram, buildMetadata(), dataPoints); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java index e24747181..5d3890c0e 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java @@ -95,6 +95,7 @@ public Builder unit(Unit unit) { throw new IllegalArgumentException("Info metric cannot have a unit."); } + @Override public InfoSnapshot build() { return new InfoSnapshot(buildMetadata(), dataPoints); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java index 2405b9622..dcf41bc09 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java @@ -76,6 +76,8 @@ public T unit(Unit unit) { return self(); } + public abstract MetricSnapshot build(); + protected MetricMetadata buildMetadata() { return new MetricMetadata(name, help, unit); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java index 2a6094354..ddcc94bc2 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java @@ -219,6 +219,7 @@ public Builder unit(Unit unit) { throw new IllegalArgumentException("StateSet metric cannot have a unit."); } + @Override public StateSetSnapshot build() { return new StateSetSnapshot(buildMetadata(), dataPoints); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java index 16682dbae..40a31f85a 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java @@ -127,6 +127,7 @@ public Builder dataPoint(SummaryDataPointSnapshot data) { return this; } + @Override public SummarySnapshot build() { return new SummarySnapshot(buildMetadata(), dataPoints); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java index 60873013a..70cf07326 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java @@ -126,6 +126,7 @@ public Builder dataPoint(UnknownDataPointSnapshot data) { return this; } + @Override public UnknownSnapshot build() { return new UnknownSnapshot(buildMetadata(), dataPoints); } From 72b79d4aea750d14b018ae278be71bbcae884129 Mon Sep 17 00:00:00 2001 From: Mickael Maison Date: Mon, 9 Sep 2024 15:25:38 +0200 Subject: [PATCH 110/870] Fix PrometheusNaming.sanitizeMetricName() methods (#975) Signed-off-by: Mickael Maison --- .../model/snapshots/PrometheusNaming.java | 5 ++--- .../model/snapshots/PrometheusNamingTest.java | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java index 06e004398..21c162632 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java @@ -157,7 +157,7 @@ public static String sanitizeMetricName(String metricName) { * as a suffix if the unit is not {@code null}. */ public static String sanitizeMetricName(String metricName, Unit unit) { - String result = sanitizeLabelName(metricName); + String result = sanitizeMetricName(metricName); if (unit != null) { if (!result.endsWith("_" + unit) && !result.endsWith("." + unit)) { result += "_" + unit; @@ -224,8 +224,7 @@ private static String replaceIllegalCharsInMetricName(String name) { char[] sanitized = new char[length]; for (int i = 0; i < length; i++) { char ch = name.charAt(i); - if (ch == ':' || - ch == '.' || + if (ch == '.' || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (i > 0 && ch >= '0' && ch <= '9')) { diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java index 3a7788743..9631f9df3 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java @@ -10,7 +10,7 @@ public class PrometheusNamingTest { @Test public void testSanitizeMetricName() { Assert.assertEquals("_abc_def", prometheusName(sanitizeMetricName("0abc.def"))); - Assert.assertEquals("___ab_:c0", prometheusName(sanitizeMetricName("___ab.:c0"))); + Assert.assertEquals("___ab__c0", prometheusName(sanitizeMetricName("___ab.:c0"))); Assert.assertEquals("my_prefix_my_metric", sanitizeMetricName("my_prefix/my_metric")); Assert.assertEquals("my_counter", prometheusName(sanitizeMetricName("my_counter_total"))); Assert.assertEquals("jvm", sanitizeMetricName("jvm.info")); @@ -21,6 +21,20 @@ public void testSanitizeMetricName() { Assert.assertEquals("total", sanitizeMetricName("total")); } + @Test + public void testSanitizeMetricNameWithUnit() { + Assert.assertEquals("_abc_def_" + Unit.RATIO, prometheusName(sanitizeMetricName("0abc.def", Unit.RATIO))); + Assert.assertEquals("___ab__c0_" + Unit.RATIO, prometheusName(sanitizeMetricName("___ab.:c0", Unit.RATIO))); + Assert.assertEquals("my_prefix_my_metric_" + Unit.RATIO, sanitizeMetricName("my_prefix/my_metric", Unit.RATIO)); + Assert.assertEquals("my_counter_" + Unit.RATIO, prometheusName(sanitizeMetricName("my_counter_total", Unit.RATIO))); + Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm.info", Unit.RATIO)); + Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm_info", Unit.RATIO)); + Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm.info", Unit.RATIO)); + Assert.assertEquals("a.b_" + Unit.RATIO, sanitizeMetricName("a.b", Unit.RATIO)); + Assert.assertEquals("total_" + Unit.RATIO, sanitizeMetricName("_total", Unit.RATIO)); + Assert.assertEquals("total_" + Unit.RATIO, sanitizeMetricName("total", Unit.RATIO)); + } + @Test public void testSanitizeLabelName() { Assert.assertEquals("_abc_def", prometheusName(sanitizeLabelName("0abc.def"))); From 4ce0d1513b7b211285478e77b11375da2aecd09d Mon Sep 17 00:00:00 2001 From: Andrey Burov <31802895+burov4j@users.noreply.github.com> Date: Thu, 19 Sep 2024 16:00:36 +0300 Subject: [PATCH 111/870] additional improve MetricSnapshots.Builder performance (#985) Signed-off-by: Andrey Burov --- .../metrics/model/snapshots/MetricSnapshots.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java index 83d932f87..a4865acb9 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java @@ -3,8 +3,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import java.util.stream.Stream; import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; @@ -74,6 +76,7 @@ public static Builder builder() { public static class Builder { private final List snapshots = new ArrayList<>(); + private final Set prometheusNames = new HashSet<>(); private Builder() { } @@ -83,12 +86,7 @@ public boolean containsMetricName(String name) { return false; } String prometheusName = prometheusName(name); - for (MetricSnapshot snapshot : snapshots) { - if (snapshot.getMetadata().getPrometheusName().equals(prometheusName)) { - return true; - } - } - return false; + return prometheusNames.contains(prometheusName); } /** @@ -96,6 +94,7 @@ public boolean containsMetricName(String name) { */ public Builder metricSnapshot(MetricSnapshot snapshot) { snapshots.add(snapshot); + prometheusNames.add(snapshot.getMetadata().getPrometheusName()); return this; } From 14c09083e75b807837d5b1da80688c01d0ff1b73 Mon Sep 17 00:00:00 2001 From: Mickael Maison Date: Mon, 30 Sep 2024 16:37:07 +0200 Subject: [PATCH 112/870] Make JvmMetrics.register idempotent with the default registry (#987) * Make JvmMetrics.register idempotent with the default registry Signed-off-by: Mickael Maison * Make JvmMetrics.register() methods idempotent Signed-off-by: Mickael Maison --------- Signed-off-by: Mickael Maison --- .../instrumentation/jvm/JvmMetrics.java | 42 +++++++++---------- .../instrumentation/jvm/JvmMetricsTest.java | 19 +++++++++ 2 files changed, 40 insertions(+), 21 deletions(-) create mode 100644 prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java index fa909f629..54d937688 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java @@ -3,7 +3,8 @@ import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import java.util.concurrent.atomic.AtomicBoolean; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; /** * Registers all JVM metrics. Example usage: @@ -13,15 +14,14 @@ */ public class JvmMetrics { - private static AtomicBoolean registeredWithTheDefaultRegistry = new AtomicBoolean(false); - + private static final Set REGISTERED = ConcurrentHashMap.newKeySet(); public static Builder builder() { return new Builder(PrometheusProperties.get()); } // Note: Currently there is no configuration for JVM metrics, so it doesn't matter whether you pass a config or not. // However, we will add config options in the future, like whether you want to use Prometheus naming conventions - //'or OpenTelemetry semantic conventions for JVM metrics. + // or OpenTelemetry semantic conventions for JVM metrics. public static Builder builder(PrometheusProperties config) { return new Builder(config); } @@ -37,32 +37,32 @@ private Builder(PrometheusProperties config) { /** * Register all JVM metrics with the default registry. *

    - * It's safe to call this multiple times: - * Only the first call will register the metrics, all subsequent calls will be ignored. + * It's safe to call this multiple times, only the first call will register the metrics, all subsequent calls + * will be ignored. */ public void register() { - if (!registeredWithTheDefaultRegistry.getAndSet(true)) { - register(PrometheusRegistry.defaultRegistry); - } + register(PrometheusRegistry.defaultRegistry); } /** * Register all JVM metrics with the {@code registry}. *

    - * You must make sure to call this only once per {@code registry}, otherwise it will - * throw an Exception because you are trying to register duplicate metrics. + * It's safe to call this multiple times, only the first call will register the metrics, all subsequent calls + * will be ignored. */ public void register(PrometheusRegistry registry) { - JvmThreadsMetrics.builder(config).register(registry); - JvmBufferPoolMetrics.builder(config).register(registry); - JvmClassLoadingMetrics.builder(config).register(registry); - JvmCompilationMetrics.builder(config).register(registry); - JvmGarbageCollectorMetrics.builder(config).register(registry); - JvmMemoryPoolAllocationMetrics.builder(config).register(registry); - JvmMemoryMetrics.builder(config).register(registry); - JvmNativeMemoryMetrics.builder(config).register(registry); - JvmRuntimeInfoMetric.builder(config).register(registry); - ProcessMetrics.builder(config).register(registry); + if (REGISTERED.add(registry)) { + JvmThreadsMetrics.builder(config).register(registry); + JvmBufferPoolMetrics.builder(config).register(registry); + JvmClassLoadingMetrics.builder(config).register(registry); + JvmCompilationMetrics.builder(config).register(registry); + JvmGarbageCollectorMetrics.builder(config).register(registry); + JvmMemoryPoolAllocationMetrics.builder(config).register(registry); + JvmMemoryMetrics.builder(config).register(registry); + JvmNativeMemoryMetrics.builder(config).register(registry); + JvmRuntimeInfoMetric.builder(config).register(registry); + ProcessMetrics.builder(config).register(registry); + } } } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java new file mode 100644 index 000000000..d93b1682d --- /dev/null +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java @@ -0,0 +1,19 @@ +package io.prometheus.metrics.instrumentation.jvm; + +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class JvmMetricsTest { + + @Test + public void testRegisterIdempotent() { + PrometheusRegistry registry = new PrometheusRegistry(); + assertEquals(0, registry.scrape().size()); + JvmMetrics.builder().register(registry); + assertTrue(registry.scrape().size() > 0); + JvmMetrics.builder().register(registry); + } +} From bddcb487947375c6980f34fb7fce91ac62ee39d9 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 1 Oct 2024 13:26:27 +0200 Subject: [PATCH 113/870] move to github actions / require google java format for changed files (#988) * move to github actions Signed-off-by: Gregor Zeitlinger * apply spotless for all changed files Signed-off-by: Gregor Zeitlinger * apply spotless for all changed files Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .circleci/config.yml | 27 --------------------------- .github/workflows/build.yml | 25 +++++++++++++++++++++++++ pom.xml | 30 ++++++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 29 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/build.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 55ce02110..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,27 +0,0 @@ -version: 2 -machine: true -jobs: - build: - machine: - image: ubuntu-2204:current - working_directory: ~/circleci-java - steps: - - run: - name: Install OpenJDK 17 - command: | - sudo apt-get update && sudo apt-get install -y openjdk-17-jdk - sudo update-alternatives --set java /usr/lib/jvm/java-17-openjdk-amd64/bin/java - sudo update-alternatives --set javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac - java -version - - checkout - - restore_cache: - key: maven-dependencies-{{ checksum "pom.xml" }} - - run: cd prometheus-metrics-shaded-dependencies && ../mvnw clean install && cd .. - - run: ./mvnw clean install - - run: ./mvnw javadoc:jar - - save_cache: - paths: - - ~/.m2 - key: maven-dependencies-{{ checksum "pom.xml" }} -orbs: - prometheus: prometheus/prometheus@0.16.0 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..ed5d2605f --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,25 @@ +name: Build + +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + cache: 'maven' + - name: Shaded dependencies + run: | + cd prometheus-metrics-shaded-dependencies + ../mvnw clean install + - name: Run the Maven verify phase + run: | + ./mvnw clean install + ./mvnw javadoc:jar diff --git a/pom.xml b/pom.xml index 52953fbc9..0f0e27d08 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,6 @@ - + pom 4.0.0 @@ -156,9 +157,32 @@ maven-enforcer-plugin 1.4.1 + + com.diffplug.spotless + spotless-maven-plugin + 2.43.0 + + + com.diffplug.spotless + spotless-maven-plugin + + origin/main + + + + + + + verify + + check + + + + org.apache.maven.plugins maven-enforcer-plugin @@ -217,7 +241,9 @@ true all public - benchmarks,examples,integration-tests,integration_tests,,simpleclient,simpleclient_bom,simpleclient_caffeine,simpleclient_common,simpleclient_dropwizard,simpleclient_graphite_bridge,simpleclient_guava,simpleclient_hibernate,simpleclient_hotspot,simpleclient_httpserver,simpleclient_jetty,simpleclient_jetty_jdk8,simpleclient_log4j,simpleclient_log4j2,simpleclient_logback,simpleclient_pushgateway,simpleclient_servlet,simpleclient_servlet_common,simpleclient_servlet_jakarta,simpleclient_spring_boot,simpleclient_spring_web,simpleclient_tracer,simpleclient_vertx,simpleclient_vertx4 + + benchmarks,examples,integration-tests,integration_tests,,simpleclient,simpleclient_bom,simpleclient_caffeine,simpleclient_common,simpleclient_dropwizard,simpleclient_graphite_bridge,simpleclient_guava,simpleclient_hibernate,simpleclient_hotspot,simpleclient_httpserver,simpleclient_jetty,simpleclient_jetty_jdk8,simpleclient_log4j,simpleclient_log4j2,simpleclient_logback,simpleclient_pushgateway,simpleclient_servlet,simpleclient_servlet_common,simpleclient_servlet_jakarta,simpleclient_spring_boot,simpleclient_spring_web,simpleclient_tracer,simpleclient_vertx,simpleclient_vertx4 + io.prometheus.metrics.expositionformats.generated.* From 5a8ae85e63fc99e6cb992819e29de89e378873fb Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 1 Oct 2024 13:32:27 +0200 Subject: [PATCH 114/870] add Gregor Zeitlinger to MAINTAINERS.md (#990) Signed-off-by: Gregor Zeitlinger --- MAINTAINERS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS.md b/MAINTAINERS.md index c79384366..dae5c71de 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -1,3 +1,4 @@ * Fabian Stäber @fstab * Doug Hoard @dhoard * Tom Wilkie @tomwilkie +* Gregor Zeitlinger @zeitlinger From a6815dc33634c7f780f37afa82d412ddb2411fba Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 1 Oct 2024 13:59:00 +0200 Subject: [PATCH 115/870] Various cleanups in prometheus-metrics-model (#993) * Various cleanups in prometheus-metrics-model Signed-off-by: Mickael Maison * format Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Mickael Maison Signed-off-by: Gregor Zeitlinger Co-authored-by: Mickael Maison --- CONTRIBUTING.md | 6 + .../metrics/model/registry/Collector.java | 123 +-- .../model/registry/PrometheusRegistry.java | 229 ++--- .../metrics/model/snapshots/Exemplars.java | 228 +++-- .../metrics/model/snapshots/Labels.java | 836 +++++++++--------- .../metrics/model/snapshots/Quantile.java | 48 +- .../metrics/model/snapshots/Quantiles.java | 149 ++-- .../model/snapshots/StateSetSnapshot.java | 358 ++++---- .../model/registry/MetricNameFilterTest.java | 95 +- .../MultiCollectorNameFilterTest.java | 142 +-- .../registry/PrometheusRegistryTest.java | 153 ++-- .../snapshots/HistogramSnapshotTest.java | 535 +++++------ .../metrics/model/snapshots/LabelsTest.java | 243 +++-- .../model/snapshots/MetricMetadataTest.java | 112 +-- .../model/snapshots/SnapshotTestUtil.java | 18 +- .../model/snapshots/StateSetSnapshotTest.java | 258 +++--- .../metrics/model/snapshots/UnitTest.java | 79 +- 17 files changed, 1837 insertions(+), 1775 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3bbe74bc2..1e1eb867c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,3 +10,9 @@ Prometheus uses GitHub to manage reviews of pull requests. on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers). This will avoid unnecessary work and surely give you and us a good deal of inspiration. + +## Formatting + +This repository uses [Google Java Format](https://github.com/google/google-java-format) to format the code. + +Run `./mvnw spotless:apply` to format the code (only changed files) before committing. diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java index 0c69a89a9..57b2b640f 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java @@ -1,76 +1,77 @@ package io.prometheus.metrics.model.registry; import io.prometheus.metrics.model.snapshots.MetricSnapshot; - import java.util.function.Predicate; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; - /** - * To be registered with the Prometheus collector registry. - * See Overall Structure on - * https://prometheus.io/docs/instrumenting/writing_clientlibs/. + * To be registered with the Prometheus collector registry. See Overall Structure on https://prometheus.io/docs/instrumenting/writing_clientlibs/. */ @FunctionalInterface public interface Collector { - /** - * Called when the Prometheus server scrapes metrics. - */ - MetricSnapshot collect(); + /** Called when the Prometheus server scrapes metrics. */ + MetricSnapshot collect(); - /** - * Provides Collector with the details of the request issued by Prometheus to allow multi-target pattern implementation - * Override to implement request dependent logic to provide MetricSnapshot - */ - default MetricSnapshot collect(PrometheusScrapeRequest scrapeRequest) { - return collect(); - } - - /** - * Like {@link #collect()}, but returns {@code null} if {@code includedNames.test(name)} is {@code false}. - *

    - * Override this if there is a more efficient way than first collecting the snapshot and then discarding it. - */ - default MetricSnapshot collect(Predicate includedNames) { - MetricSnapshot result = collect(); - if (includedNames.test(result.getMetadata().getPrometheusName())) { - return result; - } else { - return null; - } - } - - /** - * Like {@link #collect(Predicate)}, but with support for multi-target pattern. - *

    - * Override this if there is a more efficient way than first collecting the snapshot and then discarding it. - */ - default MetricSnapshot collect(Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { - MetricSnapshot result = collect(scrapeRequest); - if (includedNames.test(result.getMetadata().getPrometheusName())) { - return result; - } else { - return null; - } + /** + * Provides Collector with the details of the request issued by Prometheus to allow multi-target + * pattern implementation Override to implement request dependent logic to provide MetricSnapshot + */ + default MetricSnapshot collect(PrometheusScrapeRequest scrapeRequest) { + return collect(); + } + + /** + * Like {@link #collect()}, but returns {@code null} if {@code includedNames.test(name)} is {@code + * false}. + * + *

    Override this if there is a more efficient way than first collecting the snapshot and then + * discarding it. + */ + default MetricSnapshot collect(Predicate includedNames) { + MetricSnapshot result = collect(); + if (includedNames.test(result.getMetadata().getPrometheusName())) { + return result; + } else { + return null; } - + } - /** - * This is called in two places: - *

      - *
    1. During registration to check if a metric with that name already exists.
    2. - *
    3. During scrape to check if this collector can be skipped because a name filter is present and the metric name is excluded.
    4. - *
    - * Returning {@code null} means checks are omitted (registration the metric always succeeds), - * and the collector is always scraped (the result is dropped after scraping if a name filter is present and - * the metric name is excluded). - *

    - * If your metric has a name that does not change at runtime it is a good idea to overwrite this and return the name. - *

    - * All metrics in {@code prometheus-metrics-core} override this. - */ - default String getPrometheusName() { - return null; + /** + * Like {@link #collect(Predicate)}, but with support for multi-target pattern. + * + *

    Override this if there is a more efficient way than first collecting the snapshot and then + * discarding it. + */ + default MetricSnapshot collect( + Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { + MetricSnapshot result = collect(scrapeRequest); + if (includedNames.test(result.getMetadata().getPrometheusName())) { + return result; + } else { + return null; } + } + + /** + * This is called in two places: + * + *

      + *
    1. During registration to check if a metric with that name already exists. + *
    2. During scrape to check if this collector can be skipped because a name filter is present + * and the metric name is excluded. + *
    + * + * Returning {@code null} means checks are omitted (registration the metric always succeeds), and + * the collector is always scraped (the result is dropped after scraping if a name filter is + * present and the metric name is excluded). + * + *

    If your metric has a name that does not change at runtime it is a good idea to overwrite + * this and return the name. + * + *

    All metrics in {@code prometheus-metrics-core} override this. + */ + default String getPrometheusName() { + return null; + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java index 8b059adb3..00a19d9f6 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java @@ -2,128 +2,143 @@ import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; +import io.prometheus.metrics.model.snapshots.MetricSnapshot; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; import java.util.List; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; -import io.prometheus.metrics.model.snapshots.MetricSnapshot; -import io.prometheus.metrics.model.snapshots.MetricSnapshots; - public class PrometheusRegistry { - public static final PrometheusRegistry defaultRegistry = new PrometheusRegistry(); - - private final Set prometheusNames = ConcurrentHashMap.newKeySet(); - private final List collectors = new CopyOnWriteArrayList<>(); - private final List multiCollectors = new CopyOnWriteArrayList<>(); + public static final PrometheusRegistry defaultRegistry = new PrometheusRegistry(); - public void register(Collector collector) { - String prometheusName = collector.getPrometheusName(); - if (prometheusName != null) { - if (!prometheusNames.add(prometheusName)) { - throw new IllegalStateException("Can't register " + prometheusName + " because a metric with that name is already registered."); - } - } - collectors.add(collector); - } + private final Set prometheusNames = ConcurrentHashMap.newKeySet(); + private final List collectors = new CopyOnWriteArrayList<>(); + private final List multiCollectors = new CopyOnWriteArrayList<>(); - public void register(MultiCollector collector) { - for (String prometheusName : collector.getPrometheusNames()) { - if (!prometheusNames.add(prometheusName)) { - throw new IllegalStateException("Can't register " + prometheusName + " because that name is already registered."); - } - } - multiCollectors.add(collector); - } + public void register(Collector collector) { + String prometheusName = collector.getPrometheusName(); + if (prometheusName != null) { + if (!prometheusNames.add(prometheusName)) { + throw new IllegalStateException( + "Can't register " + + prometheusName + + " because a metric with that name is already registered."); + } + } + collectors.add(collector); + } - public void unregister(Collector collector) { - collectors.remove(collector); - String prometheusName = collector.getPrometheusName(); - if (prometheusName != null) { - prometheusNames.remove(collector.getPrometheusName()); - } - } + public void register(MultiCollector collector) { + for (String prometheusName : collector.getPrometheusNames()) { + if (!prometheusNames.add(prometheusName)) { + throw new IllegalStateException( + "Can't register " + prometheusName + " because that name is already registered."); + } + } + multiCollectors.add(collector); + } - public void unregister(MultiCollector collector) { - multiCollectors.remove(collector); - for (String prometheusName : collector.getPrometheusNames()) { - prometheusNames.remove(prometheusName(prometheusName)); - } - } + public void unregister(Collector collector) { + collectors.remove(collector); + String prometheusName = collector.getPrometheusName(); + if (prometheusName != null) { + prometheusNames.remove(collector.getPrometheusName()); + } + } - public MetricSnapshots scrape() { - return scrape((PrometheusScrapeRequest) null); - } + public void unregister(MultiCollector collector) { + multiCollectors.remove(collector); + for (String prometheusName : collector.getPrometheusNames()) { + prometheusNames.remove(prometheusName(prometheusName)); + } + } - public MetricSnapshots scrape(PrometheusScrapeRequest scrapeRequest) { - MetricSnapshots.Builder result = MetricSnapshots.builder(); - for (Collector collector : collectors) { - MetricSnapshot snapshot = scrapeRequest == null ? collector.collect() : collector.collect(scrapeRequest); - if (snapshot != null) { - if (result.containsMetricName(snapshot.getMetadata().getName())) { - throw new IllegalStateException(snapshot.getMetadata().getPrometheusName() + ": duplicate metric name."); - } - result.metricSnapshot(snapshot); - } - } - for (MultiCollector collector : multiCollectors) { - MetricSnapshots snaphots = scrapeRequest == null ? collector.collect() : collector.collect(scrapeRequest); - for (MetricSnapshot snapshot : snaphots) { - if (result.containsMetricName(snapshot.getMetadata().getName())) { - throw new IllegalStateException(snapshot.getMetadata().getPrometheusName() + ": duplicate metric name."); - } - result.metricSnapshot(snapshot); - } - } - return result.build(); - } + public MetricSnapshots scrape() { + return scrape((PrometheusScrapeRequest) null); + } - public MetricSnapshots scrape(Predicate includedNames) { - if (includedNames == null) { - return scrape(); - } - return scrape(includedNames, null); - } + public MetricSnapshots scrape(PrometheusScrapeRequest scrapeRequest) { + MetricSnapshots.Builder result = MetricSnapshots.builder(); + for (Collector collector : collectors) { + MetricSnapshot snapshot = + scrapeRequest == null ? collector.collect() : collector.collect(scrapeRequest); + if (snapshot != null) { + if (result.containsMetricName(snapshot.getMetadata().getName())) { + throw new IllegalStateException( + snapshot.getMetadata().getPrometheusName() + ": duplicate metric name."); + } + result.metricSnapshot(snapshot); + } + } + for (MultiCollector collector : multiCollectors) { + MetricSnapshots snapshots = + scrapeRequest == null ? collector.collect() : collector.collect(scrapeRequest); + for (MetricSnapshot snapshot : snapshots) { + if (result.containsMetricName(snapshot.getMetadata().getName())) { + throw new IllegalStateException( + snapshot.getMetadata().getPrometheusName() + ": duplicate metric name."); + } + result.metricSnapshot(snapshot); + } + } + return result.build(); + } - public MetricSnapshots scrape(Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { - if (includedNames == null) { - return scrape(scrapeRequest); - } - MetricSnapshots.Builder result = MetricSnapshots.builder(); - for (Collector collector : collectors) { - String prometheusName = collector.getPrometheusName(); - // prometheusName == null means the name is unknown, and we have to scrape to learn the name. - // prometheusName != null means we can skip the scrape if the name is excluded. - if (prometheusName == null || includedNames.test(prometheusName)) { - MetricSnapshot snapshot = scrapeRequest == null ? collector.collect(includedNames) : collector.collect(includedNames, scrapeRequest); - if (snapshot != null) { - result.metricSnapshot(snapshot); - } - } - } - for (MultiCollector collector : multiCollectors) { - List prometheusNames = collector.getPrometheusNames(); - // empty prometheusNames means the names are unknown, and we have to scrape to learn the names. - // non-empty prometheusNames means we can exclude the collector if all names are excluded by the filter. - boolean excluded = !prometheusNames.isEmpty(); - for (String prometheusName : prometheusNames) { - if (includedNames.test(prometheusName)) { - excluded = false; - break; - } - } - if (!excluded) { - MetricSnapshots snapshots = scrapeRequest == null ? collector.collect(includedNames) : collector.collect(includedNames, scrapeRequest); - for (MetricSnapshot snapshot : snapshots) { - if (snapshot != null) { - result.metricSnapshot(snapshot); - } - } - } - } - return result.build(); - } + public MetricSnapshots scrape(Predicate includedNames) { + if (includedNames == null) { + return scrape(); + } + return scrape(includedNames, null); + } + public MetricSnapshots scrape( + Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { + if (includedNames == null) { + return scrape(scrapeRequest); + } + MetricSnapshots.Builder result = MetricSnapshots.builder(); + for (Collector collector : collectors) { + String prometheusName = collector.getPrometheusName(); + // prometheusName == null means the name is unknown, and we have to scrape to learn the name. + // prometheusName != null means we can skip the scrape if the name is excluded. + if (prometheusName == null || includedNames.test(prometheusName)) { + MetricSnapshot snapshot = + scrapeRequest == null + ? collector.collect(includedNames) + : collector.collect(includedNames, scrapeRequest); + if (snapshot != null) { + result.metricSnapshot(snapshot); + } + } + } + for (MultiCollector collector : multiCollectors) { + List prometheusNames = collector.getPrometheusNames(); + // empty prometheusNames means the names are unknown, and we have to scrape to learn the + // names. + // non-empty prometheusNames means we can exclude the collector if all names are excluded by + // the filter. + boolean excluded = !prometheusNames.isEmpty(); + for (String prometheusName : prometheusNames) { + if (includedNames.test(prometheusName)) { + excluded = false; + break; + } + } + if (!excluded) { + MetricSnapshots snapshots = + scrapeRequest == null + ? collector.collect(includedNames) + : collector.collect(includedNames, scrapeRequest); + for (MetricSnapshot snapshot : snapshots) { + if (snapshot != null) { + result.metricSnapshot(snapshot); + } + } + } + } + return result.build(); + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplars.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplars.java index b5286b0c2..ca9109b96 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplars.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplars.java @@ -9,141 +9,131 @@ /** * Immutable container for Exemplars. - *

    - * This is currently backed by a {@code List}. May be refactored later to use a more efficient data structure. + * + *

    This is currently backed by a {@code List}. May be refactored later to use a more + * efficient data structure. */ public class Exemplars implements Iterable { - /** - * EMPTY means no Exemplars. - */ - public static final Exemplars EMPTY = new Exemplars(Collections.emptyList()); - private final List exemplars; - - private Exemplars(Collection exemplars) { - ArrayList copy = new ArrayList<>(exemplars.size()); - for (Exemplar exemplar : exemplars) { - if (exemplar == null) { - throw new NullPointerException("Illegal null value in Exemplars"); - } - copy.add(exemplar); - } - this.exemplars = Collections.unmodifiableList(copy); - } + /** EMPTY means no Exemplars. */ + public static final Exemplars EMPTY = new Exemplars(Collections.emptyList()); - /** - * Create a new Exemplars instance. - * You can either create Exemplars with one of the static {@code Exemplars.of(...)} methods, - * or you can use the {@link Exemplars#builder()}. - * - * @param exemplars a copy of the exemplars collection will be created. - */ - public static Exemplars of(Collection exemplars) { - return new Exemplars(exemplars); - } - - /** - * Create a new Exemplars instance. - * You can either create Exemplars with one of the static {@code Exemplars.of(...)} methods, - * or you can use the {@link Exemplars#builder()}. - * - * @param exemplars a copy of the exemplars array will be created. - */ - public static Exemplars of(Exemplar... exemplars) { - return new Exemplars(Arrays.asList(exemplars)); - } - - @Override - public Iterator iterator() { - return exemplars.iterator(); - } - - public int size() { - return exemplars.size(); - } + private final List exemplars; - public Exemplar get(int index) { - return exemplars.get(index); + private Exemplars(Collection exemplars) { + List copy = new ArrayList<>(exemplars.size()); + for (Exemplar exemplar : exemplars) { + if (exemplar == null) { + throw new NullPointerException("Illegal null value in Exemplars"); + } + copy.add(exemplar); } - - /** - * This is used by classic histograms to find an exemplar with a value between lowerBound and upperBound. - * If there is more than one exemplar within the bounds the one with the newest time stamp is returned. - */ - public Exemplar get(double lowerBound, double upperBound) { - Exemplar result = null; - for (int i = 0; i < exemplars.size(); i++) { - Exemplar exemplar = exemplars.get(i); - double value = exemplar.getValue(); - if (value > lowerBound && value <= upperBound) { - if (result == null) { - result = exemplar; - } else if (result.hasTimestamp() && exemplar.hasTimestamp()) { - if (exemplar.getTimestampMillis() > result.getTimestampMillis()) { - result = exemplar; - } - } - } + this.exemplars = Collections.unmodifiableList(copy); + } + + /** + * Create a new Exemplars instance. You can either create Exemplars with one of the static {@code + * Exemplars.of(...)} methods, or you can use the {@link Exemplars#builder()}. + * + * @param exemplars a copy of the exemplars collection will be created. + */ + public static Exemplars of(Collection exemplars) { + return new Exemplars(exemplars); + } + + /** + * Create a new Exemplars instance. You can either create Exemplars with one of the static {@code + * Exemplars.of(...)} methods, or you can use the {@link Exemplars#builder()}. + * + * @param exemplars a copy of the exemplars array will be created. + */ + public static Exemplars of(Exemplar... exemplars) { + return new Exemplars(Arrays.asList(exemplars)); + } + + @Override + public Iterator iterator() { + return exemplars.iterator(); + } + + public int size() { + return exemplars.size(); + } + + public Exemplar get(int index) { + return exemplars.get(index); + } + + /** + * This is used by classic histograms to find an exemplar with a value between lowerBound and + * upperBound. If there is more than one exemplar within the bounds the one with the newest time + * stamp is returned. + */ + public Exemplar get(double lowerBound, double upperBound) { + Exemplar result = null; + for (Exemplar exemplar : exemplars) { + double value = exemplar.getValue(); + if (value > lowerBound && value <= upperBound) { + if (result == null) { + result = exemplar; + } else if (result.hasTimestamp() && exemplar.hasTimestamp()) { + if (exemplar.getTimestampMillis() > result.getTimestampMillis()) { + result = exemplar; + } } - return result; + } } - - /** - * Find the Exemplar with the newest timestamp. May return {@code null}. - */ - public Exemplar getLatest() { - Exemplar latest = null; - for (int i=0; i exemplars = new ArrayList<>(); + private final ArrayList exemplars = new ArrayList<>(); - private Builder() { - } + private Builder() {} - /** - * Add an exemplar. This can be called multiple times to add multiple exemplars. - */ - public Builder exemplar(Exemplar exemplar) { - exemplars.add(exemplar); - return this; - } + /** Add an exemplar. This can be called multiple times to add multiple exemplars. */ + public Builder exemplar(Exemplar exemplar) { + exemplars.add(exemplar); + return this; + } - /** - * Add all exemplars form the collection. - */ - public Builder exemplars(Collection exemplars) { - this.exemplars.addAll(exemplars); - return this; - } + /** Add all exemplars form the collection. */ + public Builder exemplars(Collection exemplars) { + this.exemplars.addAll(exemplars); + return this; + } - public Exemplars build() { - return Exemplars.of(exemplars); - } + public Exemplars build() { + return Exemplars.of(exemplars); } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java index 67a0dcf1f..170ec4fc2 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java @@ -1,5 +1,8 @@ package io.prometheus.metrics.model.snapshots; +import static io.prometheus.metrics.model.snapshots.PrometheusNaming.isValidLabelName; +import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -7,434 +10,427 @@ import java.util.List; import java.util.stream.Stream; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.isValidLabelName; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; - -/** - * Immutable set of name/value pairs, sorted by name. - */ +/** Immutable set of name/value pairs, sorted by name. */ public class Labels implements Comparable, Iterable

    - * Dots are treated as underscores, so {@code contains("my.label")} and {@code contains("my_label")} are the same. - */ - public boolean contains(String labelName) { - return get(labelName) != null; - } - - /** - * Get the label value for a given label name. - *

    - * Returns {@code null} if the {@code labelName} is not found. - *

    - * Dots are treated as underscores, so {@code get("my.label")} and {@code get("my_label")} are the same. - */ - public String get(String labelName) { - labelName = prometheusName(labelName); - for (int i=0; i 0 && prometheusNames[i - 1].equals(prometheusNames[i])) { - throw new IllegalArgumentException(names[i] + ": duplicate label name"); - } - } - } - - private static void sort(String[] names, String[] prometheusNames, String[] values) { - // bubblesort - int n = prometheusNames.length; - for (int i = 0; i < n - 1; i++) { - for (int j = 0; j < n - i - 1; j++) { - if (prometheusNames[j].compareTo(prometheusNames[j + 1]) > 0) { - swap(j, j + 1, names, prometheusNames, values); - } - } - } - } - - private static void swap(int i, int j, String[] names, String[] prometheusNames, String[] values) { - String tmp = names[j]; - names[j] = names[i]; - names[i] = tmp; - tmp = values[j]; - values[j] = values[i]; - values[i] = tmp; - if (prometheusNames != names) { - tmp = prometheusNames[j]; - prometheusNames[j] = prometheusNames[i]; - prometheusNames[i] = tmp; - } - } - - @Override - public Iterator

    - * This is used by Prometheus exposition formats. - */ - public String getPrometheusName(int i) { - return prometheusNames[i]; - } - - public String getValue(int i) { + prometheusNames[i] = PrometheusNaming.prometheusName(names[i]); + } + } + return prometheusNames; + } + + /** + * Create a new Labels instance. You can either create Labels with one of the static {@code + * Labels.of(...)} methods, or you can use the {@link Labels#builder()}. + * + * @param names label names. {@link PrometheusNaming#isValidLabelName(String)} must be true for + * each name. Use {@link PrometheusNaming#sanitizeLabelName(String)} to convert arbitrary + * strings to valid label names. Label names must be unique (no duplicate label names). + * @param values label values. {@code names.size()} must be equal to {@code values.size()}. + */ + public static Labels of(List names, List values) { + if (names.size() != values.size()) { + throw new IllegalArgumentException("Names and values must have the same size."); + } + if (names.isEmpty()) { + return EMPTY; + } + String[] namesCopy = names.toArray(new String[0]); + String[] valuesCopy = values.toArray(new String[0]); + String[] prometheusNames = makePrometheusNames(namesCopy); + sortAndValidate(namesCopy, prometheusNames, valuesCopy); + return new Labels(namesCopy, prometheusNames, valuesCopy); + } + + /** + * Create a new Labels instance. You can either create Labels with one of the static {@code + * Labels.of(...)} methods, or you can use the {@link Labels#builder()}. + * + * @param names label names. {@link PrometheusNaming#isValidLabelName(String)} must be true for + * each name. Use {@link PrometheusNaming#sanitizeLabelName(String)} to convert arbitrary + * strings to valid label names. Label names must be unique (no duplicate label names). + * @param values label values. {@code names.length} must be equal to {@code values.length}. + */ + public static Labels of(String[] names, String[] values) { + if (names.length != values.length) { + throw new IllegalArgumentException("Names and values must have the same length."); + } + if (names.length == 0) { + return EMPTY; + } + String[] namesCopy = Arrays.copyOf(names, names.length); + String[] valuesCopy = Arrays.copyOf(values, values.length); + String[] prometheusNames = makePrometheusNames(namesCopy); + sortAndValidate(namesCopy, prometheusNames, valuesCopy); + return new Labels(namesCopy, prometheusNames, valuesCopy); + } + + /** + * Test if these labels contain a specific label name. + * + *

    Dots are treated as underscores, so {@code contains("my.label")} and {@code + * contains("my_label")} are the same. + */ + public boolean contains(String labelName) { + return get(labelName) != null; + } + + /** + * Get the label value for a given label name. + * + *

    Returns {@code null} if the {@code labelName} is not found. + * + *

    Dots are treated as underscores, so {@code get("my.label")} and {@code get("my_label")} are + * the same. + */ + public String get(String labelName) { + labelName = prometheusName(labelName); + for (int i = 0; i < prometheusNames.length; i++) { + if (prometheusNames[i].equals(labelName)) { return values[i]; - } - - /** - * Create a new Labels instance containing the labels of this and the labels of other. - * This and other must not contain the same label name. - */ - public Labels merge(Labels other) { - if (this.isEmpty()) { - return other; - } - if (other.isEmpty()) { - return this; - } - String[] names = new String[this.names.length + other.names.length]; - String[] prometheusNames = names; - if (this.names != this.prometheusNames || other.names != other.prometheusNames) { - prometheusNames = new String[names.length]; - } - String[] values = new String[names.length]; - int thisPos = 0; - int otherPos = 0; - while (thisPos + otherPos < names.length) { - if (thisPos >= this.names.length) { - names[thisPos + otherPos] = other.names[otherPos]; - values[thisPos + otherPos] = other.values[otherPos]; - if (prometheusNames != names) { - prometheusNames[thisPos + otherPos] = other.prometheusNames[otherPos]; - } - otherPos++; - } else if (otherPos >= other.names.length) { - names[thisPos + otherPos] = this.names[thisPos]; - values[thisPos + otherPos] = this.values[thisPos]; - if (prometheusNames != names) { - prometheusNames[thisPos + otherPos] = this.prometheusNames[thisPos]; - } - thisPos++; - } else if (this.prometheusNames[thisPos].compareTo(other.prometheusNames[otherPos]) < 0) { - names[thisPos + otherPos] = this.names[thisPos]; - values[thisPos + otherPos] = this.values[thisPos]; - if (prometheusNames != names) { - prometheusNames[thisPos + otherPos] = this.prometheusNames[thisPos]; - } - thisPos++; - } else if (this.prometheusNames[thisPos].compareTo(other.prometheusNames[otherPos]) > 0) { - names[thisPos + otherPos] = other.names[otherPos]; - values[thisPos + otherPos] = other.values[otherPos]; - if (prometheusNames != names) { - prometheusNames[thisPos + otherPos] = other.prometheusNames[otherPos]; - } - otherPos++; - } else { - throw new IllegalArgumentException("Duplicate label name: '" + this.names[thisPos] + "'."); - } - } - return new Labels(names, prometheusNames, values); - } - - /** - * Create a new Labels instance containing the labels of this and the label passed as name and value. - * The label name must not already be contained in this Labels instance. - */ - public Labels add(String name, String value) { - return merge(Labels.of(name, value)); - } - - /** - * Create a new Labels instance containing the labels of this and the labels passed as names and values. - * The new label names must not already be contained in this Labels instance. - */ - public Labels merge(String[] names, String[] values) { - if (this.equals(EMPTY)) { - return Labels.of(names, values); - } - String[] mergedNames = new String[this.names.length + names.length]; - String[] mergedValues = new String[this.values.length + values.length]; - System.arraycopy(this.names, 0, mergedNames, 0, this.names.length); - System.arraycopy(this.values, 0, mergedValues, 0, this.values.length); - System.arraycopy(names, 0, mergedNames, this.names.length, names.length); - System.arraycopy(values, 0, mergedValues, this.values.length, values.length); - String[] prometheusNames = makePrometheusNames(mergedNames); - sortAndValidate(mergedNames, prometheusNames, mergedValues); - return new Labels(mergedNames, prometheusNames, mergedValues); - } - - public boolean hasSameNames(Labels other) { - return Arrays.equals(prometheusNames, other.prometheusNames); - } - - public boolean hasSameValues(Labels other) { - return Arrays.equals(values, other.values); - } - - @Override - public int compareTo(Labels other) { - int result = compare(prometheusNames, other.prometheusNames); - if (result != 0) { - return result; - } - return compare(values, other.values); - } - - // Looks like Java doesn't have a compareTo() method for arrays. - private int compare(String[] array1, String[] array2) { - int result; - for (int i = 0; i < array1.length; i++) { - if (array2.length <= i) { - return 1; - } - result = array1[i].compareTo(array2[i]); - if (result != 0) { - return result; - } + } + } + return null; + } + + private static void sortAndValidate(String[] names, String[] prometheusNames, String[] values) { + sort(names, prometheusNames, values); + validateNames(names, prometheusNames); + } + + private static void validateNames(String[] names, String[] prometheusNames) { + for (int i = 0; i < names.length; i++) { + if (!isValidLabelName(names[i])) { + throw new IllegalArgumentException("'" + names[i] + "' is an illegal label name"); + } + // The arrays are sorted, so duplicates are next to each other + if (i > 0 && prometheusNames[i - 1].equals(prometheusNames[i])) { + throw new IllegalArgumentException(names[i] + ": duplicate label name"); + } + } + } + + private static void sort(String[] names, String[] prometheusNames, String[] values) { + // bubblesort + int n = prometheusNames.length; + for (int i = 0; i < n - 1; i++) { + for (int j = 0; j < n - i - 1; j++) { + if (prometheusNames[j].compareTo(prometheusNames[j + 1]) > 0) { + swap(j, j + 1, names, prometheusNames, values); } - if (array2.length > array1.length) { - return -1; + } + } + } + + private static void swap( + int i, int j, String[] names, String[] prometheusNames, String[] values) { + String tmp = names[j]; + names[j] = names[i]; + names[i] = tmp; + tmp = values[j]; + values[j] = values[i]; + values[i] = tmp; + if (prometheusNames != names) { + tmp = prometheusNames[j]; + prometheusNames[j] = prometheusNames[i]; + prometheusNames[i] = tmp; + } + } + + @Override + public Iterator

    This is used by Prometheus exposition formats. + */ + public String getPrometheusName(int i) { + return prometheusNames[i]; + } + + public String getValue(int i) { + return values[i]; + } + + /** + * Create a new Labels instance containing the labels of this and the labels of other. This and + * other must not contain the same label name. + */ + public Labels merge(Labels other) { + if (this.isEmpty()) { + return other; + } + if (other.isEmpty()) { + return this; + } + String[] names = new String[this.names.length + other.names.length]; + String[] prometheusNames = names; + if (this.names != this.prometheusNames || other.names != other.prometheusNames) { + prometheusNames = new String[names.length]; + } + String[] values = new String[names.length]; + int thisPos = 0; + int otherPos = 0; + while (thisPos + otherPos < names.length) { + if (thisPos >= this.names.length) { + names[thisPos + otherPos] = other.names[otherPos]; + values[thisPos + otherPos] = other.values[otherPos]; + if (prometheusNames != names) { + prometheusNames[thisPos + otherPos] = other.prometheusNames[otherPos]; } - return 0; - } - - private List

    - * However, for debugging it's better to show the original names rather than the Prometheus names. - */ - @Override - public String toString() { - StringBuilder b = new StringBuilder(); - b.append("{"); - for (int i = 0; i < names.length; i++) { - if (i > 0) { - b.append(","); - } - b.append(names[i]); - b.append("=\""); - appendEscapedLabelValue(b, values[i]); - b.append("\""); + thisPos++; + } else if (this.prometheusNames[thisPos].compareTo(other.prometheusNames[otherPos]) < 0) { + names[thisPos + otherPos] = this.names[thisPos]; + values[thisPos + otherPos] = this.values[thisPos]; + if (prometheusNames != names) { + prometheusNames[thisPos + otherPos] = this.prometheusNames[thisPos]; } - b.append("}"); - return b.toString(); - } - - private void appendEscapedLabelValue(StringBuilder b, String value) { - for (int i = 0; i < value.length(); i++) { - char c = value.charAt(i); - switch (c) { - case '\\': - b.append("\\\\"); - break; - case '\"': - b.append("\\\""); - break; - case '\n': - b.append("\\n"); - break; - default: - b.append(c); - } + thisPos++; + } else if (this.prometheusNames[thisPos].compareTo(other.prometheusNames[otherPos]) > 0) { + names[thisPos + otherPos] = other.names[otherPos]; + values[thisPos + otherPos] = other.values[otherPos]; + if (prometheusNames != names) { + prometheusNames[thisPos + otherPos] = other.prometheusNames[otherPos]; } - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Labels labels = (Labels) o; - return labels.hasSameNames(this) && labels.hasSameValues(this); - } - - @Override - public int hashCode() { - int result = Arrays.hashCode(prometheusNames); - result = 31 * result + Arrays.hashCode(values); + otherPos++; + } else { + throw new IllegalArgumentException("Duplicate label name: '" + this.names[thisPos] + "'."); + } + } + return new Labels(names, prometheusNames, values); + } + + /** + * Create a new Labels instance containing the labels of this and the label passed as name and + * value. The label name must not already be contained in this Labels instance. + */ + public Labels add(String name, String value) { + return merge(Labels.of(name, value)); + } + + /** + * Create a new Labels instance containing the labels of this and the labels passed as names and + * values. The new label names must not already be contained in this Labels instance. + */ + public Labels merge(String[] names, String[] values) { + if (this.equals(EMPTY)) { + return Labels.of(names, values); + } + String[] mergedNames = new String[this.names.length + names.length]; + String[] mergedValues = new String[this.values.length + values.length]; + System.arraycopy(this.names, 0, mergedNames, 0, this.names.length); + System.arraycopy(this.values, 0, mergedValues, 0, this.values.length); + System.arraycopy(names, 0, mergedNames, this.names.length, names.length); + System.arraycopy(values, 0, mergedValues, this.values.length, values.length); + String[] prometheusNames = makePrometheusNames(mergedNames); + sortAndValidate(mergedNames, prometheusNames, mergedValues); + return new Labels(mergedNames, prometheusNames, mergedValues); + } + + public boolean hasSameNames(Labels other) { + return Arrays.equals(prometheusNames, other.prometheusNames); + } + + public boolean hasSameValues(Labels other) { + return Arrays.equals(values, other.values); + } + + @Override + public int compareTo(Labels other) { + int result = compare(prometheusNames, other.prometheusNames); + if (result != 0) { + return result; + } + return compare(values, other.values); + } + + // Looks like Java doesn't have a compareTo() method for arrays. + private int compare(String[] array1, String[] array2) { + int result; + for (int i = 0; i < array1.length; i++) { + if (array2.length <= i) { + return 1; + } + result = array1[i].compareTo(array2[i]); + if (result != 0) { return result; - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private final List names = new ArrayList<>(); - private final List values = new ArrayList<>(); - - private Builder() { - } - - /** - * Add a label. Call multiple times to add multiple labels. - */ - public Builder label(String name, String value) { - names.add(name); - values.add(value); - return this; - } - - public Labels build() { - return Labels.of(names, values); - } - } + } + } + if (array2.length > array1.length) { + return -1; + } + return 0; + } + + private List

    However, for debugging it's better to show the original names rather than the Prometheus + * names. + */ + @Override + public String toString() { + StringBuilder b = new StringBuilder(); + b.append("{"); + for (int i = 0; i < names.length; i++) { + if (i > 0) { + b.append(","); + } + b.append(names[i]); + b.append("=\""); + appendEscapedLabelValue(b, values[i]); + b.append("\""); + } + b.append("}"); + return b.toString(); + } + + private void appendEscapedLabelValue(StringBuilder b, String value) { + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + switch (c) { + case '\\': + b.append("\\\\"); + break; + case '\"': + b.append("\\\""); + break; + case '\n': + b.append("\\n"); + break; + default: + b.append(c); + } + } + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Labels labels = (Labels) o; + return labels.hasSameNames(this) && labels.hasSameValues(this); + } + + @Override + public int hashCode() { + int result = Arrays.hashCode(prometheusNames); + result = 31 * result + Arrays.hashCode(values); + return result; + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private final List names = new ArrayList<>(); + private final List values = new ArrayList<>(); + + private Builder() {} + + /** Add a label. Call multiple times to add multiple labels. */ + public Builder label(String name, String value) { + names.add(name); + values.add(value); + return this; + } + + public Labels build() { + return Labels.of(names, values); + } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantile.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantile.java index 7d5c1c166..1601920f0 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantile.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantile.java @@ -1,34 +1,34 @@ package io.prometheus.metrics.model.snapshots; -/** - * Immutable representation of a Quantile. - */ +/** Immutable representation of a Quantile. */ public class Quantile { - private final double quantile; - private final double value; + private final double quantile; + private final double value; - /** - * @param quantile expecting 0.0 <= quantile <= 1.0, otherwise an {@link IllegalArgumentException} will be thrown. - * @param value - */ - public Quantile(double quantile, double value) { - this.quantile = quantile; - this.value = value; - validate(); - } + /** + * @param quantile expecting 0.0 <= quantile <= 1.0, otherwise an {@link + * IllegalArgumentException} will be thrown. + * @param value the quantile value + */ + public Quantile(double quantile, double value) { + this.quantile = quantile; + this.value = value; + validate(); + } - public double getQuantile() { - return quantile; - } + public double getQuantile() { + return quantile; + } - public double getValue() { - return value; - } + public double getValue() { + return value; + } - private void validate() { - if (quantile < 0.0 || quantile > 1.0) { - throw new IllegalArgumentException(quantile + ": Illegal quantile. Expecting 0 <= quantile <= 1"); - } + private void validate() { + if (quantile < 0.0 || quantile > 1.0) { + throw new IllegalArgumentException( + quantile + ": Illegal quantile. Expecting 0 <= quantile <= 1"); } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantiles.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantiles.java index e4a7b3621..135af6658 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantiles.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantiles.java @@ -2,91 +2,86 @@ import java.util.*; -/** - * Immutable list of quantiles. - */ +/** Immutable list of quantiles. */ public class Quantiles implements Iterable { - private final List quantiles; - public static final Quantiles EMPTY = new Quantiles(Collections.emptyList()); - - private Quantiles(List quantiles) { - quantiles = new ArrayList<>(quantiles); - quantiles.sort(Comparator.comparing(Quantile::getQuantile)); - this.quantiles = Collections.unmodifiableList(quantiles); - validate(); + private final List quantiles; + public static final Quantiles EMPTY = new Quantiles(Collections.emptyList()); + + private Quantiles(List quantiles) { + quantiles = new ArrayList<>(quantiles); + quantiles.sort(Comparator.comparing(Quantile::getQuantile)); + this.quantiles = Collections.unmodifiableList(quantiles); + validate(); + } + + private void validate() { + for (int i = 0; i < quantiles.size() - 1; i++) { + if (quantiles.get(i).getQuantile() == quantiles.get(i + 1).getQuantile()) { + throw new IllegalArgumentException( + "Duplicate " + quantiles.get(i).getQuantile() + " quantile."); + } } - - private void validate() { - for (int i=0; i< quantiles.size() - 1; i++) { - if (quantiles.get(i).getQuantile() == quantiles.get(i+1).getQuantile()) { - throw new IllegalArgumentException("Duplicate " + quantiles.get(i).getQuantile() + " quantile."); - } - } - } - - /** - * Create a new Quantiles instance. - * You can either create Quantiles with one of the static {@code Quantiles.of(...)} methods, - * or you can use the {@link Quantiles#builder()}. - */ - public static Quantiles of(List quantiles) { - return new Quantiles(quantiles); + } + + /** + * Create a new Quantiles instance. You can either create Quantiles with one of the static {@code + * Quantiles.of(...)} methods, or you can use the {@link Quantiles#builder()}. + */ + public static Quantiles of(List quantiles) { + return new Quantiles(quantiles); + } + + /** + * Create a new Quantiles instance. You can either create Quantiles with one of the static {@code + * Quantiles.of(...)} methods, or you can use the {@link Quantiles#builder()}. + */ + public static Quantiles of(Quantile... quantiles) { + return of(Arrays.asList(quantiles)); + } + + public int size() { + return quantiles.size(); + } + + public Quantile get(int i) { + return quantiles.get(i); + } + + @Override + public Iterator iterator() { + return quantiles.iterator(); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + + private final List quantiles = new ArrayList<>(); + + private Builder() {} + + /** Add a quantile. Call multiple times to add multiple quantiles. */ + public Builder quantile(Quantile quantile) { + quantiles.add(quantile); + return this; } /** - * Create a new Quantiles instance. - * You can either create Quantiles with one of the static {@code Quantiles.of(...)} methods, - * or you can use the {@link Quantiles#builder()}. + * Add a quantile. Call multiple times to add multiple quantiles. + * + * @param quantile 0.0 <= quantile <= 1.0 + * @param value the quantile value */ - public static Quantiles of(Quantile... quantiles) { - return of(Arrays.asList(quantiles)); - } - - public int size() { - return quantiles.size(); + public Builder quantile(double quantile, double value) { + quantiles.add(new Quantile(quantile, value)); + return this; } - public Quantile get(int i) { - return quantiles.get(i); + public Quantiles build() { + return new Quantiles(quantiles); } - - @Override - public Iterator iterator() { - return quantiles.iterator(); - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - - private final List quantiles = new ArrayList<>(); - - private Builder() { - } - - /** - * Add a quantile. Call multiple times to add multiple quantiles. - */ - public Builder quantile(Quantile quantile) { - quantiles.add(quantile); - return this; - } - - /** - * Add a quantile. Call multiple times to add multiple quantiles. - * @param quantile 0.0 <= quantile <= 1.0 - */ - public Builder quantile(double quantile, double value) { - quantiles.add(new Quantile(quantile, value)); - return this; - } - - public Quantiles build() { - return new Quantiles(quantiles); - } - } - + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java index ddcc94bc2..591732137 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java @@ -8,225 +8,221 @@ import java.util.List; import java.util.stream.Stream; -/** - * Immutable snapshot of a StateSet metric. - */ +/** Immutable snapshot of a StateSet metric. */ public final class StateSetSnapshot extends MetricSnapshot { + /** + * To create a new {@link StateSetSnapshot}, you can either call the constructor directly or use + * the builder with {@link StateSetSnapshot#builder()}. + * + * @param metadata See {@link MetricMetadata} for more naming conventions. + * @param data the constructor will create a sorted copy of the collection. + */ + public StateSetSnapshot(MetricMetadata metadata, Collection data) { + super(metadata, data); + validate(); + } + + private void validate() { + if (getMetadata().hasUnit()) { + throw new IllegalArgumentException("An state set metric cannot have a unit."); + } + for (StateSetDataPointSnapshot entry : getDataPoints()) { + if (entry.getLabels().contains(getMetadata().getPrometheusName())) { + throw new IllegalArgumentException( + "Label name " + getMetadata().getPrometheusName() + " is reserved."); + } + } + } + + @Override + public List getDataPoints() { + return (List) dataPoints; + } + + public static class StateSetDataPointSnapshot extends DataPointSnapshot + implements Iterable { + private final String[] names; + private final boolean[] values; + /** - * To create a new {@link StateSetSnapshot}, you can either call the constructor directly or use - * the builder with {@link StateSetSnapshot#builder()}. + * To create a new {@link StateSetDataPointSnapshot}, you can either call the constructor + * directly or use the Builder with {@link StateSetDataPointSnapshot#builder()}. * - * @param metadata See {@link MetricMetadata} for more naming conventions. - * @param data the constructor will create a sorted copy of the collection. + * @param names state names. Must have at least 1 entry. The constructor will create a copy of + * the array. + * @param values state values. Must have the same length as {@code names}. The constructor will + * create a copy of the array. + * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. + */ + public StateSetDataPointSnapshot(String[] names, boolean[] values, Labels labels) { + this(names, values, labels, 0L); + } + + /** + * Constructor with an additional scrape timestamp. This is only useful in rare cases as the + * scrape timestamp is usually set by the Prometheus server during scraping. Exceptions include + * mirroring metrics with given timestamps from other metric sources. */ - public StateSetSnapshot(MetricMetadata metadata, Collection data) { - super(metadata, data); - validate(); + public StateSetDataPointSnapshot( + String[] names, boolean[] values, Labels labels, long scrapeTimestampMillis) { + super(labels, 0L, scrapeTimestampMillis); + if (names.length == 0) { + throw new IllegalArgumentException("StateSet must have at least one state."); + } + if (names.length != values.length) { + throw new IllegalArgumentException("names[] and values[] must have the same length"); + } + String[] namesCopy = Arrays.copyOf(names, names.length); + boolean[] valuesCopy = Arrays.copyOf(values, names.length); + sort(namesCopy, valuesCopy); + this.names = namesCopy; + this.values = valuesCopy; + validate(); + } + + public int size() { + return names.length; + } + + public String getName(int i) { + return names[i]; + } + + public boolean isTrue(int i) { + return values[i]; } private void validate() { - if (getMetadata().hasUnit()) { - throw new IllegalArgumentException("An state set metric cannot have a unit."); + for (int i = 0; i < names.length; i++) { + if (names[i].isEmpty()) { + throw new IllegalArgumentException("Empty string as state name"); } - for (StateSetDataPointSnapshot entry : getDataPoints()) { - if (entry.getLabels().contains(getMetadata().getPrometheusName())) { - throw new IllegalArgumentException("Label name " + getMetadata().getPrometheusName() + " is reserved."); - } + if (i > 0 && names[i - 1].equals(names[i])) { + throw new IllegalArgumentException(names[i] + " duplicate state name"); } + } } - @Override - public List getDataPoints() { - return (List) dataPoints; - } - - - public static class StateSetDataPointSnapshot extends DataPointSnapshot implements Iterable { - private final String[] names; - private final boolean[] values; - - /** - * To create a new {@link StateSetDataPointSnapshot}, you can either call the constructor directly or use the - * Builder with {@link StateSetDataPointSnapshot#builder()}. - * - * @param names state names. Must have at least 1 entry. - * The constructor will create a copy of the array. - * @param values state values. Must have the same length as {@code names}. - * The constructor will create a copy of the array. - * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. - */ - public StateSetDataPointSnapshot(String[] names, boolean[] values, Labels labels) { - this(names, values, labels, 0L); - } - - /** - * Constructor with an additional scrape timestamp. - * This is only useful in rare cases as the scrape timestamp is usually set by the Prometheus server - * during scraping. Exceptions include mirroring metrics with given timestamps from other metric sources. - */ - public StateSetDataPointSnapshot(String[] names, boolean[] values, Labels labels, long scrapeTimestampMillis) { - super(labels, 0L, scrapeTimestampMillis); - if (names.length == 0) { - throw new IllegalArgumentException("StateSet must have at least one state."); - } - if (names.length != values.length) { - throw new IllegalArgumentException("names[] and values[] must have the same length"); - } - String[] namesCopy = Arrays.copyOf(names, names.length); - boolean[] valuesCopy = Arrays.copyOf(values, names.length); - sort(namesCopy, valuesCopy); - this.names = namesCopy; - this.values = valuesCopy; - validate(); - } + private List asList() { + List result = new ArrayList<>(size()); + for (int i = 0; i < names.length; i++) { + result.add(new State(names[i], values[i])); + } + return Collections.unmodifiableList(result); + } - public int size() { - return names.length; - } + @Override + public Iterator iterator() { + return asList().iterator(); + } - public String getName(int i) { - return names[i]; - } + public Stream stream() { + return asList().stream(); + } - public boolean isTrue(int i) { - return values[i]; + private static void sort(String[] names, boolean[] values) { + // Bubblesort + int n = names.length; + for (int i = 0; i < n - 1; i++) { + for (int j = 0; j < n - i - 1; j++) { + if (names[j].compareTo(names[j + 1]) > 0) { + swap(j, j + 1, names, values); + } } + } + } - private void validate() { - for (int i = 0; i < names.length; i++) { - if (names[i].length() == 0) { - throw new IllegalArgumentException("Empty string as state name"); - } - if (i > 0 && names[i - 1].equals(names[i])) { - throw new IllegalArgumentException(names[i] + " duplicate state name"); - } - } - } + private static void swap(int i, int j, String[] names, boolean[] values) { + String tmpName = names[j]; + names[j] = names[i]; + names[i] = tmpName; + boolean tmpValue = values[j]; + values[j] = values[i]; + values[i] = tmpValue; + } - private List asList() { - List result = new ArrayList<>(size()); - for (int i = 0; i < names.length; i++) { - result.add(new State(names[i], values[i])); - } - return Collections.unmodifiableList(result); - } + public static Builder builder() { + return new Builder(); + } - @Override - public Iterator iterator() { - return asList().iterator(); - } + public static class Builder extends DataPointSnapshot.Builder { - public Stream stream() { - return asList().stream(); - } + private final List names = new ArrayList<>(); + private final List values = new ArrayList<>(); - private static void sort(String[] names, boolean[] values) { - // Bubblesort - int n = names.length; - for (int i = 0; i < n - 1; i++) { - for (int j = 0; j < n - i - 1; j++) { - if (names[j].compareTo(names[j + 1]) > 0) { - swap(j, j + 1, names, values); - } - } - } - } + private Builder() {} - private static void swap(int i, int j, String[] names, boolean[] values) { - String tmpName = names[j]; - names[j] = names[i]; - names[i] = tmpName; - boolean tmpValue = values[j]; - values[j] = values[i]; - values[i] = tmpValue; - } + /** Add a state. Call multiple times to add multiple states. */ + public Builder state(String name, boolean value) { + names.add(name); + values.add(value); + return this; + } - public static Builder builder() { - return new Builder(); - } + @Override + protected Builder self() { + return this; + } - public static class Builder extends DataPointSnapshot.Builder { - - private final ArrayList names = new ArrayList<>(); - private final ArrayList values = new ArrayList<>(); - - private Builder() {} - - /** - * Add a state. Call multple times to add multiple states. - */ - public Builder state(String name, boolean value) { - names.add(name); - values.add(value); - return this; - } - - @Override - protected Builder self() { - return this; - } - - public StateSetDataPointSnapshot build() { - boolean[] valuesArray = new boolean[values.size()]; - for (int i = 0; i < values.size(); i++) { - valuesArray[i] = values.get(i); - } - return new StateSetDataPointSnapshot(names.toArray(new String[]{}), valuesArray, labels, scrapeTimestampMillis); - } + public StateSetDataPointSnapshot build() { + boolean[] valuesArray = new boolean[values.size()]; + for (int i = 0; i < values.size(); i++) { + valuesArray[i] = values.get(i); } + return new StateSetDataPointSnapshot( + names.toArray(new String[] {}), valuesArray, labels, scrapeTimestampMillis); + } } + } - public static class State { - private final String name; - private final boolean value; - - private State(String name, boolean value) { - this.name = name; - this.value = value; - } + public static class State { + private final String name; + private final boolean value; - public String getName() { - return name; - } + private State(String name, boolean value) { + this.name = name; + this.value = value; + } - public boolean isTrue() { - return value; - } + public String getName() { + return name; } - public static Builder builder() { - return new Builder(); + public boolean isTrue() { + return value; } + } - public static class Builder extends MetricSnapshot.Builder { + public static Builder builder() { + return new Builder(); + } - private final List dataPoints = new ArrayList<>(); + public static class Builder extends MetricSnapshot.Builder { - private Builder() { - } + private final List dataPoints = new ArrayList<>(); - /** - * Add a data point. Call multiple times to add multiple data points. - */ - public Builder dataPoint(StateSetDataPointSnapshot dataPoint) { - dataPoints.add(dataPoint); - return this; - } + private Builder() {} - @Override - public Builder unit(Unit unit) { - throw new IllegalArgumentException("StateSet metric cannot have a unit."); - } + /** Add a data point. Call multiple times to add multiple data points. */ + public Builder dataPoint(StateSetDataPointSnapshot dataPoint) { + dataPoints.add(dataPoint); + return this; + } - @Override - public StateSetSnapshot build() { - return new StateSetSnapshot(buildMetadata(), dataPoints); - } + @Override + public Builder unit(Unit unit) { + throw new IllegalArgumentException("StateSet metric cannot have a unit."); + } - @Override - protected Builder self() { - return this; - } + @Override + public StateSetSnapshot build() { + return new StateSetSnapshot(buildMetadata(), dataPoints); + } + + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java index 91bcf74fc..6c7917bda 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java @@ -2,79 +2,70 @@ import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; -import io.prometheus.metrics.model.snapshots.GaugeSnapshot; -import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.Predicate; - public class MetricNameFilterTest { - private PrometheusRegistry registry; + private PrometheusRegistry registry; - @Before - public void setUp() { - registry = new PrometheusRegistry(); - } + @Before + public void setUp() { + registry = new PrometheusRegistry(); + } - @Test - public void testCounter() { - registry.register(() -> CounterSnapshot.builder() + @Test + public void testCounter() { + registry.register( + () -> + CounterSnapshot.builder() .name("counter1") .help("test counter 1") - .dataPoint(CounterDataPointSnapshot.builder() + .dataPoint( + CounterDataPointSnapshot.builder() .labels(Labels.of("path", "/hello")) .value(1.0) - .build() - ) - .dataPoint(CounterDataPointSnapshot.builder() + .build()) + .dataPoint( + CounterDataPointSnapshot.builder() .labels(Labels.of("path", "/goodbye")) .value(2.0) - .build() - ) - .build() - ); - registry.register(() -> CounterSnapshot.builder() + .build()) + .build()); + registry.register( + () -> + CounterSnapshot.builder() .name("counter2") .help("test counter 2") - .dataPoint(CounterDataPointSnapshot.builder() - .value(1.0) - .build() - ) - .build() - ); + .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) + .build()); - MetricNameFilter filter = MetricNameFilter.builder().build(); - Assert.assertEquals(2, registry.scrape(filter).size()); + MetricNameFilter filter = MetricNameFilter.builder().build(); + Assert.assertEquals(2, registry.scrape(filter).size()); - filter = MetricNameFilter.builder().nameMustStartWith("counter1").build(); - MetricSnapshots snapshots = registry.scrape(filter); - Assert.assertEquals(1, snapshots.size()); - Assert.assertEquals("counter1", snapshots.get(0).getMetadata().getName()); + filter = MetricNameFilter.builder().nameMustStartWith("counter1").build(); + MetricSnapshots snapshots = registry.scrape(filter); + Assert.assertEquals(1, snapshots.size()); + Assert.assertEquals("counter1", snapshots.get(0).getMetadata().getName()); - filter = MetricNameFilter.builder().nameMustNotStartWith("counter1").build(); - snapshots = registry.scrape(filter); - Assert.assertEquals(1, snapshots.size()); - Assert.assertEquals("counter2", snapshots.get(0).getMetadata().getName()); + filter = MetricNameFilter.builder().nameMustNotStartWith("counter1").build(); + snapshots = registry.scrape(filter); + Assert.assertEquals(1, snapshots.size()); + Assert.assertEquals("counter2", snapshots.get(0).getMetadata().getName()); - filter = MetricNameFilter.builder() - .nameMustBeEqualTo("counter2_total", "counter1_total") - .build(); - snapshots = registry.scrape(filter); - Assert.assertEquals(2, snapshots.size()); + filter = + MetricNameFilter.builder().nameMustBeEqualTo("counter2_total", "counter1_total").build(); + snapshots = registry.scrape(filter); + Assert.assertEquals(2, snapshots.size()); - filter = MetricNameFilter.builder() - .nameMustBeEqualTo("counter1_total") - .nameMustNotBeEqualTo("counter1_total") - .build(); - Assert.assertEquals(0, registry.scrape(filter).size()); - } + filter = + MetricNameFilter.builder() + .nameMustBeEqualTo("counter1_total") + .nameMustNotBeEqualTo("counter1_total") + .build(); + Assert.assertEquals(0, registry.scrape(filter).size()); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java index b36d58aa6..b302f4508 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java @@ -5,96 +5,96 @@ import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.function.Predicate; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; public class MultiCollectorNameFilterTest { - private PrometheusRegistry registry; - private boolean[] collectCalled = {false}; - private Predicate includedNames = null; - List prometheusNames = new ArrayList<>(); - - @Before - public void setUp() { - registry = new PrometheusRegistry(); - collectCalled[0] = false; - includedNames = null; - prometheusNames = Collections.emptyList(); - - registry.register(new MultiCollector() { - @Override - public MetricSnapshots collect() { - collectCalled[0] = true; - return MetricSnapshots.builder() - .metricSnapshot(CounterSnapshot.builder() - .name("counter_1") - .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) - .build() - ) - .metricSnapshot(GaugeSnapshot.builder() - .name("gauge_2") - .dataPoint(GaugeDataPointSnapshot.builder().value(1.0).build()) - .build() - ) - .build(); - } - - @Override - public List getPrometheusNames() { - return prometheusNames; - } + private final boolean[] collectCalled = {false}; + private PrometheusRegistry registry; + private Predicate includedNames = null; + private List prometheusNames = new ArrayList<>(); + + @Before + public void setUp() { + registry = new PrometheusRegistry(); + collectCalled[0] = false; + includedNames = null; + prometheusNames = Collections.emptyList(); + + registry.register( + new MultiCollector() { + @Override + public MetricSnapshots collect() { + collectCalled[0] = true; + return MetricSnapshots.builder() + .metricSnapshot( + CounterSnapshot.builder() + .name("counter_1") + .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) + .build()) + .metricSnapshot( + GaugeSnapshot.builder() + .name("gauge_2") + .dataPoint(GaugeDataPointSnapshot.builder().value(1.0).build()) + .build()) + .build(); + } + + @Override + public List getPrometheusNames() { + return prometheusNames; + } }); - } + } - @Test - public void testPartialFilter() { + @Test + public void testPartialFilter() { - includedNames = name -> name.equals("counter_1"); + includedNames = name -> name.equals("counter_1"); - MetricSnapshots snapshots = registry.scrape(includedNames); - Assert.assertTrue(collectCalled[0]); - Assert.assertEquals(1, snapshots.size()); - Assert.assertEquals("counter_1", snapshots.get(0).getMetadata().getName()); - } + MetricSnapshots snapshots = registry.scrape(includedNames); + Assert.assertTrue(collectCalled[0]); + Assert.assertEquals(1, snapshots.size()); + Assert.assertEquals("counter_1", snapshots.get(0).getMetadata().getName()); + } - @Test - public void testPartialFilterWithPrometheusNames() { + @Test + public void testPartialFilterWithPrometheusNames() { - includedNames = name -> name.equals("counter_1"); - prometheusNames = Arrays.asList("counter_1", "gauge_2"); + includedNames = name -> name.equals("counter_1"); + prometheusNames = Arrays.asList("counter_1", "gauge_2"); - MetricSnapshots snapshots = registry.scrape(includedNames); - Assert.assertTrue(collectCalled[0]); - Assert.assertEquals(1, snapshots.size()); - Assert.assertEquals("counter_1", snapshots.get(0).getMetadata().getName()); - } + MetricSnapshots snapshots = registry.scrape(includedNames); + Assert.assertTrue(collectCalled[0]); + Assert.assertEquals(1, snapshots.size()); + Assert.assertEquals("counter_1", snapshots.get(0).getMetadata().getName()); + } - @Test - public void testCompleteFilter_CollectCalled() { + @Test + public void testCompleteFilter_CollectCalled() { - includedNames = name -> !name.equals("counter_1") && !name.equals("gauge_2"); + includedNames = name -> !name.equals("counter_1") && !name.equals("gauge_2"); - MetricSnapshots snapshots = registry.scrape(includedNames); - Assert.assertTrue(collectCalled[0]); - Assert.assertEquals(0, snapshots.size()); - } + MetricSnapshots snapshots = registry.scrape(includedNames); + Assert.assertTrue(collectCalled[0]); + Assert.assertEquals(0, snapshots.size()); + } - @Test - public void testCompleteFilter_CollectNotCalled() { + @Test + public void testCompleteFilter_CollectNotCalled() { - includedNames = name -> !name.equals("counter_1") && !name.equals("gauge_2"); - prometheusNames = Arrays.asList("counter_1", "gauge_2"); + includedNames = name -> !name.equals("counter_1") && !name.equals("gauge_2"); + prometheusNames = Arrays.asList("counter_1", "gauge_2"); - MetricSnapshots snapshots = registry.scrape(includedNames); - Assert.assertFalse(collectCalled[0]); - Assert.assertEquals(0, snapshots.size()); - } + MetricSnapshots snapshots = registry.scrape(includedNames); + Assert.assertFalse(collectCalled[0]); + Assert.assertEquals(0, snapshots.size()); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java index 498d2354b..c5dd287d7 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java @@ -4,101 +4,140 @@ import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import java.util.Arrays; +import java.util.List; import org.junit.Assert; import org.junit.Test; public class PrometheusRegistryTest { - Collector noName = () -> GaugeSnapshot.builder() - .name("no_name_gauge") - .build(); + Collector noName = () -> GaugeSnapshot.builder().name("no_name_gauge").build(); - Collector counterA1 = new Collector() { + Collector counterA1 = + new Collector() { @Override public MetricSnapshot collect() { - return CounterSnapshot.builder().name("counter_a").build(); + return CounterSnapshot.builder().name("counter_a").build(); } @Override public String getPrometheusName() { - return "counter_a"; + return "counter_a"; } - }; + }; - Collector counterA2 = new Collector() { + Collector counterA2 = + new Collector() { @Override public MetricSnapshot collect() { - return CounterSnapshot.builder().name("counter.a").build(); + return CounterSnapshot.builder().name("counter.a").build(); } @Override public String getPrometheusName() { - return "counter_a"; + return "counter_a"; } - }; + }; - Collector counterB = new Collector() { + Collector counterB = + new Collector() { @Override public MetricSnapshot collect() { - return CounterSnapshot.builder().name("counter_b").build(); + return CounterSnapshot.builder().name("counter_b").build(); } @Override public String getPrometheusName() { - return "counter_b"; + return "counter_b"; } - }; + }; - Collector gaugeA = new Collector() { + Collector gaugeA = + new Collector() { @Override public MetricSnapshot collect() { - return GaugeSnapshot.builder().name("gauge_a").build(); + return GaugeSnapshot.builder().name("gauge_a").build(); } @Override public String getPrometheusName() { - return "gauge_a"; + return "gauge_a"; } - }; - - @Test - public void registerNoName() { - PrometheusRegistry registry = new PrometheusRegistry(); - // If the collector does not have a name at registration time, there is no conflict during registration. - registry.register(noName); - registry.register(noName); - // However, at scrape time the collector has to provide a metric name, and then we'll get a duplicat name error. - try { - registry.scrape(); - } catch (IllegalStateException e) { - Assert.assertTrue(e.getMessage().contains("duplicate") && e.getMessage().contains("no_name_gauge")); - return; - } - Assert.fail("Expected duplicate name exception"); - } + }; - @Test(expected = IllegalStateException.class) - public void registerDuplicateName() { - PrometheusRegistry registry = new PrometheusRegistry(); - registry.register(counterA1); - registry.register(counterA2); - } + MultiCollector multiCollector = + new MultiCollector() { + @Override + public MetricSnapshots collect() { + return new MetricSnapshots(gaugeA.collect(), counterB.collect()); + } - @Test - public void registerOk() { - PrometheusRegistry registry = new PrometheusRegistry(); - registry.register(counterA1); - registry.register(counterB); - registry.register(gaugeA); - MetricSnapshots snapshots = registry.scrape(); - Assert.assertEquals(3, snapshots.size()); - - registry.unregister(counterB); - snapshots = registry.scrape(); - Assert.assertEquals(2, snapshots.size()); - - registry.register(counterB); - snapshots = registry.scrape(); - Assert.assertEquals(3, snapshots.size()); + @Override + public List getPrometheusNames() { + return Arrays.asList(gaugeA.getPrometheusName(), counterB.getPrometheusName()); + } + }; + + @Test + public void registerNoName() { + PrometheusRegistry registry = new PrometheusRegistry(); + // If the collector does not have a name at registration time, there is no conflict during + // registration. + registry.register(noName); + registry.register(noName); + // However, at scrape time the collector has to provide a metric name, and then we'll get a + // duplicate name error. + try { + registry.scrape(); + } catch (IllegalStateException e) { + Assert.assertTrue( + e.getMessage().contains("duplicate") && e.getMessage().contains("no_name_gauge")); + return; } + Assert.fail("Expected duplicate name exception"); + } + + @Test(expected = IllegalStateException.class) + public void registerDuplicateName() { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(counterA1); + registry.register(counterA2); + } + + @Test + public void registerOk() { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(counterA1); + registry.register(counterB); + registry.register(gaugeA); + MetricSnapshots snapshots = registry.scrape(); + Assert.assertEquals(3, snapshots.size()); + + registry.unregister(counterB); + snapshots = registry.scrape(); + Assert.assertEquals(2, snapshots.size()); + + registry.register(counterB); + snapshots = registry.scrape(); + Assert.assertEquals(3, snapshots.size()); + } + + @Test(expected = IllegalStateException.class) + public void registerDuplicateMultiCollector() { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(multiCollector); + registry.register(multiCollector); + } + + @Test + public void registerOkMultiCollector() { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(multiCollector); + MetricSnapshots snapshots = registry.scrape(); + Assert.assertEquals(2, snapshots.size()); + + registry.unregister(multiCollector); + snapshots = registry.scrape(); + Assert.assertEquals(0, snapshots.size()); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java index 5ff838dd7..e8e53e219 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java @@ -1,269 +1,308 @@ package io.prometheus.metrics.model.snapshots; import io.prometheus.metrics.model.snapshots.HistogramSnapshot.HistogramDataPointSnapshot; -import org.junit.Assert; -import org.junit.Test; - import java.util.Iterator; import java.util.concurrent.TimeUnit; +import org.junit.Assert; +import org.junit.Test; public class HistogramSnapshotTest { - @Test - public void testGoodCaseComplete() { - long createdTimestamp = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1); - long scrapeTimestamp = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(2); - long exemplarTimestamp = System.currentTimeMillis(); - Exemplar exemplar1 = Exemplar.builder() - .value(129.0) - .traceId("abcabc") - .spanId("defdef") - .labels(Labels.of("status", "200")) - .timestampMillis(exemplarTimestamp) - .build(); - HistogramSnapshot snapshot = HistogramSnapshot.builder() - .name("request_size_bytes") - .help("request sizes in bytes") - .unit(Unit.BYTES) - .dataPoint( - HistogramDataPointSnapshot.builder() - .sum(27000.0) - .nativeSchema(5) - .nativeZeroCount(2) - .nativeZeroThreshold(0.0000001) - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(Double.POSITIVE_INFINITY, 0) - .bucket(128.0, 7) - .bucket(1024.0, 15) - .build()) - // The total number of observations in the native and classic histogram - // is consistent (22 observations), but the individual bucket counts don't fit. - // It doesn't matter for this test, but it would be good to use a more consistent - // example in the test. - .nativeBucketsForPositiveValues(NativeHistogramBuckets.builder() - .bucket(1, 12) - .bucket(2, 3) - .bucket(4, 2) - .build()) - .nativeBucketsForNegativeValues(NativeHistogramBuckets.builder() - .bucket(-1, 1) - .bucket(0, 2) - .build()) - .labels(Labels.of("path", "/")) - .exemplars(Exemplars.of(exemplar1)) - .createdTimestampMillis(createdTimestamp) - .scrapeTimestampMillis(scrapeTimestamp) - .build()) - .dataPoint(HistogramDataPointSnapshot.builder() - .count(3) // TODO how is that not a compile error? This is a protected method! - .sum(400.2) - .nativeSchema(5) - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(128.0, 0) - .bucket(1024.0, 4) - .bucket(Double.POSITIVE_INFINITY, 2) - .build()) - .nativeBucketsForPositiveValues(NativeHistogramBuckets.builder() - .bucket(-1, 1) - .bucket(3, 3) - .bucket(4, 2) - .build()) - .labels(Labels.of("path", "/api/v1")) - .exemplars(Exemplars.of(exemplar1)) - .createdTimestampMillis(createdTimestamp) - .scrapeTimestampMillis(scrapeTimestamp) - .build()) - .build(); - SnapshotTestUtil.assertMetadata(snapshot, "request_size_bytes", "request sizes in bytes", "bytes"); + @Test + public void testGoodCaseComplete() { + long createdTimestamp = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1); + long scrapeTimestamp = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(2); + long exemplarTimestamp = System.currentTimeMillis(); + Exemplar exemplar1 = + Exemplar.builder() + .value(129.0) + .traceId("abcabc") + .spanId("defdef") + .labels(Labels.of("status", "200")) + .timestampMillis(exemplarTimestamp) + .build(); + HistogramSnapshot snapshot = + HistogramSnapshot.builder() + .name("request_size_bytes") + .help("request sizes in bytes") + .unit(Unit.BYTES) + .dataPoint( + HistogramDataPointSnapshot.builder() + .sum(27000.0) + .nativeSchema(5) + .nativeZeroCount(2) + .nativeZeroThreshold(0.0000001) + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(Double.POSITIVE_INFINITY, 0) + .bucket(128.0, 7) + .bucket(1024.0, 15) + .build()) + // The total number of observations in the native and classic histogram + // is consistent (22 observations), but the individual bucket counts don't fit. + // It doesn't matter for this test, but it would be good to use a more + // consistent + // example in the test. + .nativeBucketsForPositiveValues( + NativeHistogramBuckets.builder() + .bucket(1, 12) + .bucket(2, 3) + .bucket(4, 2) + .build()) + .nativeBucketsForNegativeValues( + NativeHistogramBuckets.builder().bucket(-1, 1).bucket(0, 2).build()) + .labels(Labels.of("path", "/")) + .exemplars(Exemplars.of(exemplar1)) + .createdTimestampMillis(createdTimestamp) + .scrapeTimestampMillis(scrapeTimestamp) + .build()) + .dataPoint( + HistogramDataPointSnapshot.builder() + .count(3) + .sum(400.2) + .nativeSchema(5) + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(128.0, 0) + .bucket(1024.0, 4) + .bucket(Double.POSITIVE_INFINITY, 2) + .build()) + .nativeBucketsForPositiveValues( + NativeHistogramBuckets.builder() + .bucket(-1, 1) + .bucket(3, 3) + .bucket(4, 2) + .build()) + .labels(Labels.of("path", "/api/v1")) + .exemplars(Exemplars.of(exemplar1)) + .createdTimestampMillis(createdTimestamp) + .scrapeTimestampMillis(scrapeTimestamp) + .build()) + .build(); + SnapshotTestUtil.assertMetadata( + snapshot, "request_size_bytes", "request sizes in bytes", "bytes"); - Assert.assertEquals(2, snapshot.getDataPoints().size()); - HistogramDataPointSnapshot data = snapshot.getDataPoints().get(0); // data is sorted by labels, so the first one should be path="/" - Assert.assertTrue(data.hasSum()); - Assert.assertTrue(data.hasCount()); - Assert.assertTrue(data.hasCreatedTimestamp()); - Assert.assertTrue(data.hasScrapeTimestamp()); - Assert.assertEquals(22, data.getCount()); - Assert.assertEquals(27000.0, data.getSum(), 0.0); - Assert.assertEquals(Labels.of("path", "/"), data.getLabels()); - Assert.assertEquals(exemplar1.getValue(), data.getExemplars().get(128.0, 1024.0).getValue(), 0.0); - Assert.assertEquals(createdTimestamp, data.getCreatedTimestampMillis()); - Assert.assertEquals(scrapeTimestamp, data.getScrapeTimestampMillis()); - // classic histogram 1 - int i = 0; - for (ClassicHistogramBucket bucket : data.getClassicBuckets()) { - switch (i++) { - case 0: - Assert.assertEquals(128.0, bucket.getUpperBound(), 0.0); - Assert.assertEquals(7, bucket.getCount()); - break; - case 1: - Assert.assertEquals(1024.0, bucket.getUpperBound(), 0.0); - Assert.assertEquals(15, bucket.getCount()); - break; - case 2: - Assert.assertEquals(Double.POSITIVE_INFINITY, bucket.getUpperBound(), 0.0); - Assert.assertEquals(0, bucket.getCount()); - break; - } - } - Assert.assertEquals("expecting 3 classic histogram buckets", 3, i); - // native histogram 1 - Assert.assertEquals(5, data.getNativeSchema()); - Assert.assertEquals(2, data.getNativeZeroCount()); - Assert.assertEquals(0.0000001, data.getNativeZeroThreshold(), 0.0000001); - Assert.assertEquals(3, data.getNativeBucketsForPositiveValues().size()); - i = 0; - for (NativeHistogramBucket bucket : data.getNativeBucketsForPositiveValues()) { - switch (i++) { - case 0: - Assert.assertEquals(1, bucket.getBucketIndex()); - Assert.assertEquals(12, bucket.getCount()); - break; - case 1: - Assert.assertEquals(2, bucket.getBucketIndex()); - Assert.assertEquals(3, bucket.getCount()); - break; - case 2: - Assert.assertEquals(4, bucket.getBucketIndex()); - Assert.assertEquals(2, bucket.getCount()); - break; - } - } - Assert.assertEquals("expecting 3 native buckets for positive values", 3, i); - i = 0; - Assert.assertEquals(2, data.getNativeBucketsForNegativeValues().size()); - for (NativeHistogramBucket bucket : data.getNativeBucketsForNegativeValues()) { - switch (i++) { - case 0: - Assert.assertEquals(-1, bucket.getBucketIndex()); - Assert.assertEquals(1, bucket.getCount()); - break; - case 1: - Assert.assertEquals(0, bucket.getBucketIndex()); - Assert.assertEquals(2, bucket.getCount()); - break; - } - } - Assert.assertEquals("expecting 2 native buckets for positive values", 2, i); - // classic histogram 2 (it's ok that this is incomplete, because we covered it with the other tests) - data = snapshot.getDataPoints().get(1); - Assert.assertEquals(6, data.getCount()); - // native histogram 2 (it's ok that this is incomplete, because we covered it with the other tests) - Assert.assertEquals(5, data.getNativeSchema()); - Assert.assertEquals(0, data.getNativeZeroCount()); - Assert.assertEquals(0, data.getNativeZeroThreshold(), 0); + Assert.assertEquals(2, snapshot.getDataPoints().size()); + HistogramDataPointSnapshot data = + snapshot + .getDataPoints() + .get(0); // data is sorted by labels, so the first one should be path="/" + Assert.assertTrue(data.hasSum()); + Assert.assertTrue(data.hasCount()); + Assert.assertTrue(data.hasCreatedTimestamp()); + Assert.assertTrue(data.hasScrapeTimestamp()); + Assert.assertEquals(22, data.getCount()); + Assert.assertEquals(27000.0, data.getSum(), 0.0); + Assert.assertEquals(Labels.of("path", "/"), data.getLabels()); + Assert.assertEquals( + exemplar1.getValue(), data.getExemplars().get(128.0, 1024.0).getValue(), 0.0); + Assert.assertEquals(createdTimestamp, data.getCreatedTimestampMillis()); + Assert.assertEquals(scrapeTimestamp, data.getScrapeTimestampMillis()); + // classic histogram 1 + int i = 0; + for (ClassicHistogramBucket bucket : data.getClassicBuckets()) { + switch (i++) { + case 0: + Assert.assertEquals(128.0, bucket.getUpperBound(), 0.0); + Assert.assertEquals(7, bucket.getCount()); + break; + case 1: + Assert.assertEquals(1024.0, bucket.getUpperBound(), 0.0); + Assert.assertEquals(15, bucket.getCount()); + break; + case 2: + Assert.assertEquals(Double.POSITIVE_INFINITY, bucket.getUpperBound(), 0.0); + Assert.assertEquals(0, bucket.getCount()); + break; + } } - - @Test - public void testEmptyHistogram() { - HistogramSnapshot snapshot = HistogramSnapshot.builder() - .name("empty_histogram") - .build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); + Assert.assertEquals("expecting 3 classic histogram buckets", 3, i); + // native histogram 1 + Assert.assertEquals(5, data.getNativeSchema()); + Assert.assertEquals(2, data.getNativeZeroCount()); + Assert.assertEquals(0.0000001, data.getNativeZeroThreshold(), 0.0000001); + Assert.assertEquals(3, data.getNativeBucketsForPositiveValues().size()); + i = 0; + for (NativeHistogramBucket bucket : data.getNativeBucketsForPositiveValues()) { + switch (i++) { + case 0: + Assert.assertEquals(1, bucket.getBucketIndex()); + Assert.assertEquals(12, bucket.getCount()); + break; + case 1: + Assert.assertEquals(2, bucket.getBucketIndex()); + Assert.assertEquals(3, bucket.getCount()); + break; + case 2: + Assert.assertEquals(4, bucket.getBucketIndex()); + Assert.assertEquals(2, bucket.getCount()); + break; + } } - - @Test - public void testMinimalClassicHistogram() { - HistogramSnapshot snapshot = HistogramSnapshot.builder() - .name("minimal_histogram") - .dataPoint(HistogramDataPointSnapshot.builder() - .classicHistogramBuckets(ClassicHistogramBuckets.of(new double[]{Double.POSITIVE_INFINITY}, new long[]{0})) - .build()) - .build(); - HistogramDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertFalse(data.hasSum()); - Assert.assertEquals(1, snapshot.getDataPoints().get(0).getClassicBuckets().size()); + Assert.assertEquals("expecting 3 native buckets for positive values", 3, i); + i = 0; + Assert.assertEquals(2, data.getNativeBucketsForNegativeValues().size()); + for (NativeHistogramBucket bucket : data.getNativeBucketsForNegativeValues()) { + switch (i++) { + case 0: + Assert.assertEquals(-1, bucket.getBucketIndex()); + Assert.assertEquals(1, bucket.getCount()); + break; + case 1: + Assert.assertEquals(0, bucket.getBucketIndex()); + Assert.assertEquals(2, bucket.getCount()); + break; + } } + Assert.assertEquals("expecting 2 native buckets for positive values", 2, i); + // classic histogram 2 (it's ok that this is incomplete, because we covered it with the other + // tests) + data = snapshot.getDataPoints().get(1); + Assert.assertEquals(6, data.getCount()); + // native histogram 2 (it's ok that this is incomplete, because we covered it with the other + // tests) + Assert.assertEquals(5, data.getNativeSchema()); + Assert.assertEquals(0, data.getNativeZeroCount()); + Assert.assertEquals(0, data.getNativeZeroThreshold(), 0); + } - @Test - public void testMinimalNativeHistogram() { - HistogramSnapshot snapshot = HistogramSnapshot.builder() - .name("hist") - .dataPoint(HistogramDataPointSnapshot.builder() - .nativeSchema(5) - .build()) - .build(); - Assert.assertEquals("hist", snapshot.getMetadata().getName()); - Assert.assertFalse(snapshot.getMetadata().hasUnit()); - Assert.assertEquals(1, snapshot.getDataPoints().size()); - HistogramDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - Assert.assertTrue(data.hasCount()); - Assert.assertEquals(0, data.getCount()); - Assert.assertFalse(data.hasSum()); - Assert.assertEquals(0, data.getNativeBucketsForNegativeValues().size()); - Assert.assertEquals(0, data.getNativeBucketsForPositiveValues().size()); - } + @Test + public void testEmptyHistogram() { + HistogramSnapshot snapshot = HistogramSnapshot.builder().name("empty_histogram").build(); + Assert.assertEquals(0, snapshot.getDataPoints().size()); + } - @Test - public void testClassicCount() { - HistogramSnapshot snapshot = HistogramSnapshot.builder() - .name("test_histogram") - .dataPoint(HistogramDataPointSnapshot.builder() - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(1.0, 3) - .bucket(2.0, 2) - .bucket(Double.POSITIVE_INFINITY, 0) - .build()) - .build()) - .build(); - HistogramDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertFalse(data.hasSum()); - Assert.assertTrue(data.hasCount()); - Assert.assertEquals(5, data.getCount()); - } + @Test + public void testMinimalClassicHistogram() { + HistogramSnapshot snapshot = + HistogramSnapshot.builder() + .name("minimal_histogram") + .dataPoint( + HistogramDataPointSnapshot.builder() + .classicHistogramBuckets( + ClassicHistogramBuckets.of( + new double[] {Double.POSITIVE_INFINITY}, new long[] {0})) + .build()) + .build(); + HistogramDataPointSnapshot data = snapshot.getDataPoints().get(0); + Assert.assertFalse(data.hasSum()); + Assert.assertEquals(1, snapshot.getDataPoints().get(0).getClassicBuckets().size()); + } - @Test(expected = IllegalArgumentException.class) - public void testEmptyData() { - // This will fail because one of nativeSchema and classicHistogramBuckets is required - HistogramDataPointSnapshot.builder().build(); - } + @Test + public void testMinimalNativeHistogram() { + HistogramSnapshot snapshot = + HistogramSnapshot.builder() + .name("hist") + .dataPoint(HistogramDataPointSnapshot.builder().nativeSchema(5).build()) + .build(); + Assert.assertEquals("hist", snapshot.getMetadata().getName()); + Assert.assertFalse(snapshot.getMetadata().hasUnit()); + Assert.assertEquals(1, snapshot.getDataPoints().size()); + HistogramDataPointSnapshot data = snapshot.getDataPoints().get(0); + Assert.assertFalse(data.hasCreatedTimestamp()); + Assert.assertFalse(data.hasScrapeTimestamp()); + Assert.assertTrue(data.hasCount()); + Assert.assertEquals(0, data.getCount()); + Assert.assertFalse(data.hasSum()); + Assert.assertEquals(0, data.getNativeBucketsForNegativeValues().size()); + Assert.assertEquals(0, data.getNativeBucketsForPositiveValues().size()); + } - @Test - public void testEmptyNativeData() { - HistogramDataPointSnapshot data = HistogramDataPointSnapshot.builder() - .nativeSchema(5) - .build(); - Assert.assertEquals(0, data.getNativeBucketsForNegativeValues().size()); - Assert.assertEquals(0, data.getNativeBucketsForPositiveValues().size()); - } + @Test + public void testClassicCount() { + HistogramSnapshot snapshot = + HistogramSnapshot.builder() + .name("test_histogram") + .dataPoint( + HistogramDataPointSnapshot.builder() + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(1.0, 3) + .bucket(2.0, 2) + .bucket(Double.POSITIVE_INFINITY, 0) + .build()) + .build()) + .build(); + HistogramDataPointSnapshot data = snapshot.getDataPoints().get(0); + Assert.assertFalse(data.hasSum()); + Assert.assertTrue(data.hasCount()); + Assert.assertEquals(5, data.getCount()); + } - @Test(expected = UnsupportedOperationException.class) - public void testDataImmutable() { - HistogramSnapshot snapshot = HistogramSnapshot.builder() - .name("test_histogram") - .dataPoint(HistogramDataPointSnapshot.builder() - .labels(Labels.of("a", "a")) - .classicHistogramBuckets(ClassicHistogramBuckets.of(new double[]{Double.POSITIVE_INFINITY}, new long[]{0})) - .build()) - .dataPoint(HistogramDataPointSnapshot.builder() - .labels(Labels.of("a", "b")) - .classicHistogramBuckets(ClassicHistogramBuckets.of(new double[]{Double.POSITIVE_INFINITY}, new long[]{2})) - .build()) - .build(); - Iterator iterator = snapshot.getDataPoints().iterator(); - iterator.next(); - iterator.remove(); - } + @Test(expected = IllegalArgumentException.class) + public void testEmptyData() { + // This will fail because one of nativeSchema and classicHistogramBuckets is required + HistogramDataPointSnapshot.builder().build(); + } - @Test(expected = IllegalArgumentException.class) - public void testEmptyClassicBuckets() { - new HistogramDataPointSnapshot(ClassicHistogramBuckets.EMPTY, Double.NaN, Labels.EMPTY, Exemplars.EMPTY, 0L); - } + @Test + public void testEmptyNativeData() { + HistogramDataPointSnapshot data = HistogramDataPointSnapshot.builder().nativeSchema(5).build(); + Assert.assertEquals(0, data.getNativeBucketsForNegativeValues().size()); + Assert.assertEquals(0, data.getNativeBucketsForPositiveValues().size()); + } - @Test - public void testMinimalNativeData() { - new HistogramDataPointSnapshot(ClassicHistogramBuckets.EMPTY, 0, 0, 0.0, - NativeHistogramBuckets.EMPTY, NativeHistogramBuckets.EMPTY, Double.NaN, Labels.EMPTY, Exemplars.EMPTY, 0L); - } + @Test(expected = UnsupportedOperationException.class) + public void testDataImmutable() { + HistogramSnapshot snapshot = + HistogramSnapshot.builder() + .name("test_histogram") + .dataPoint( + HistogramDataPointSnapshot.builder() + .labels(Labels.of("a", "a")) + .classicHistogramBuckets( + ClassicHistogramBuckets.of( + new double[] {Double.POSITIVE_INFINITY}, new long[] {0})) + .build()) + .dataPoint( + HistogramDataPointSnapshot.builder() + .labels(Labels.of("a", "b")) + .classicHistogramBuckets( + ClassicHistogramBuckets.of( + new double[] {Double.POSITIVE_INFINITY}, new long[] {2})) + .build()) + .build(); + Iterator iterator = snapshot.getDataPoints().iterator(); + iterator.next(); + iterator.remove(); + } - @Test - public void testMinimalClassicData() { - ClassicHistogramBuckets buckets = ClassicHistogramBuckets.builder() - .bucket(Double.POSITIVE_INFINITY, 0) - .build(); - new HistogramDataPointSnapshot(buckets, HistogramSnapshot.CLASSIC_HISTOGRAM, 0, 0.0, - NativeHistogramBuckets.EMPTY, NativeHistogramBuckets.EMPTY, Double.NaN, Labels.EMPTY, Exemplars.EMPTY, 0L); - } + @Test(expected = IllegalArgumentException.class) + public void testEmptyClassicBuckets() { + new HistogramDataPointSnapshot( + ClassicHistogramBuckets.EMPTY, Double.NaN, Labels.EMPTY, Exemplars.EMPTY, 0L); + } + + @Test + public void testMinimalNativeData() { + new HistogramDataPointSnapshot( + ClassicHistogramBuckets.EMPTY, + 0, + 0, + 0.0, + NativeHistogramBuckets.EMPTY, + NativeHistogramBuckets.EMPTY, + Double.NaN, + Labels.EMPTY, + Exemplars.EMPTY, + 0L); + } + + @Test + public void testMinimalClassicData() { + ClassicHistogramBuckets buckets = + ClassicHistogramBuckets.builder().bucket(Double.POSITIVE_INFINITY, 0).build(); + new HistogramDataPointSnapshot( + buckets, + HistogramSnapshot.CLASSIC_HISTOGRAM, + 0, + 0.0, + NativeHistogramBuckets.EMPTY, + NativeHistogramBuckets.EMPTY, + Double.NaN, + Labels.EMPTY, + Exemplars.EMPTY, + 0L); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelsTest.java index d7a3e8b3e..e7ae37723 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelsTest.java @@ -1,131 +1,128 @@ package io.prometheus.metrics.model.snapshots; -import io.prometheus.metrics.model.snapshots.Labels; +import static org.junit.Assert.assertNotEquals; + import org.junit.Assert; -import org.junit.Ignore; import org.junit.Test; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.sanitizeLabelName; -import static org.junit.Assert.assertNotEquals; - public class LabelsTest { - private > void assertLessThan(T a, T b) { - Assert.assertTrue(a.compareTo(b) < 0); - } - - private > void assertGreaterThan(T a, T b) { - Assert.assertTrue(a.compareTo(b) > 0); - } - - @Test - public void testCompareDifferentLabelNames() { - Labels labels1 = Labels.of("env", "prod", "status2", "200"); - Labels labels2 = Labels.of("env", "prod", "status1", "200"); - assertGreaterThan(labels1, labels2); - assertLessThan(labels2, labels1); - assertNotEquals(labels1, labels2); - assertNotEquals(labels2, labels1); - } - - @Test - public void testCompareSameLabelNames() { - // If all label names are the same, labels should be sorted by label value. - Labels labels1 = Labels.of("env", "prod", "status", "200"); - Labels labels2 = Labels.of("env", "prod", "status", "500"); - assertLessThan(labels1, labels2); - assertGreaterThan(labels2, labels1); - assertNotEquals(labels1, labels2); - assertNotEquals(labels2, labels1); - } - - @Test - public void testCompareDifferentNumberOfLabels() { - Labels labels1 = Labels.of("env", "prod", "status", "200"); - Labels labels2 = Labels.of("env", "prod", "status", "200", "x_code", "none"); - assertLessThan(labels1, labels2); - assertGreaterThan(labels2, labels1); - assertNotEquals(labels1, labels2); - assertNotEquals(labels2, labels1); - } - - @Test - public void testComparePrometheusNames() { - Labels labels1 = Labels.of("my_a", "val"); - Labels labels2 = Labels.of("my.b", "val"); - assertLessThan(labels1, labels2); // this is true because it compares "my_a" to "my_b". - } - - @Test - public void testEqualsHashcodeDots() { - Labels labels1 = Labels.of("my_a", "val"); - Labels labels2 = Labels.of("my.a", "val"); - Assert.assertEquals(labels1, labels2); - Assert.assertEquals(labels1.hashCode(), labels2.hashCode()); - } - - @Test - public void testCompareEquals() { - Labels labels1 = Labels.of("env", "prod", "status", "200"); - Labels labels2 = Labels.of("env", "prod", "status", "200"); - Assert.assertEquals(0, labels1.compareTo(labels2)); - Assert.assertEquals(0, labels2.compareTo(labels1)); - Assert.assertEquals(labels1, labels2); - Assert.assertEquals(labels2, labels1); - } - - @Test(expected = IllegalArgumentException.class) - public void testIllegalLabelName() { - Labels.of("my_service/status", "200"); - } - - @Test(expected = IllegalArgumentException.class) - public void testReservedLabelName() { - Labels.of("__name__", "requests_total"); - } - - @Test(expected = IllegalArgumentException.class) - public void testDuplicateLabelName() { - Labels.of("name1", "value1", "name2", "value2", "name1", "value3"); - } - - @Test - public void testMakePrometheusNames() { - String[] names = new String[]{}; - String[] prometheusNames = Labels.makePrometheusNames(names); - Assert.assertSame(names, prometheusNames); - - names = new String[]{"no_dots", "at_all"}; - prometheusNames = Labels.makePrometheusNames(names); - Assert.assertSame(names, prometheusNames); - - names = new String[]{"dots", "here.it.is"}; - prometheusNames = Labels.makePrometheusNames(names); - Assert.assertNotSame(names, prometheusNames); - Assert.assertSame(names[0], prometheusNames[0]); - Assert.assertEquals("here.it.is", names[1]); - Assert.assertEquals("here_it_is", prometheusNames[1]); - } - - @Test - public void testMerge() { - Labels labels1 = Labels.of("key.1", "value 1", "key.3", "value 3"); - Labels labels2 = Labels.of("key_2", "value 2"); - Labels merged = labels2.merge(labels1); - Assert.assertEquals("key.1", merged.getName(0)); - Assert.assertEquals("key_2", merged.getName(1)); - Assert.assertEquals("key.3", merged.getName(2)); - } - - @Test(expected = IllegalArgumentException.class) - public void testMergeDuplicateName() { - Labels labels1 = Labels.of("key_one", "v1"); - Labels labels2 = Labels.of("key.one", "v2"); - labels2.merge(labels1); - } - - @Test(expected = IllegalArgumentException.class) - public void testDuplicateName() { - Labels.of("key_one", "v1", "key.one", "v2"); - } + private > void assertLessThan(T a, T b) { + Assert.assertTrue(a.compareTo(b) < 0); + } + + private > void assertGreaterThan(T a, T b) { + Assert.assertTrue(a.compareTo(b) > 0); + } + + @Test + public void testCompareDifferentLabelNames() { + Labels labels1 = Labels.of("env", "prod", "status2", "200"); + Labels labels2 = Labels.of("env", "prod", "status1", "200"); + assertGreaterThan(labels1, labels2); + assertLessThan(labels2, labels1); + assertNotEquals(labels1, labels2); + assertNotEquals(labels2, labels1); + } + + @Test + public void testCompareSameLabelNames() { + // If all label names are the same, labels should be sorted by label value. + Labels labels1 = Labels.of("env", "prod", "status", "200"); + Labels labels2 = Labels.of("env", "prod", "status", "500"); + assertLessThan(labels1, labels2); + assertGreaterThan(labels2, labels1); + assertNotEquals(labels1, labels2); + assertNotEquals(labels2, labels1); + } + + @Test + public void testCompareDifferentNumberOfLabels() { + Labels labels1 = Labels.of("env", "prod", "status", "200"); + Labels labels2 = Labels.of("env", "prod", "status", "200", "x_code", "none"); + assertLessThan(labels1, labels2); + assertGreaterThan(labels2, labels1); + assertNotEquals(labels1, labels2); + assertNotEquals(labels2, labels1); + } + + @Test + public void testComparePrometheusNames() { + Labels labels1 = Labels.of("my_a", "val"); + Labels labels2 = Labels.of("my.b", "val"); + assertLessThan(labels1, labels2); // this is true because it compares "my_a" to "my_b". + } + + @Test + public void testEqualsHashcodeDots() { + Labels labels1 = Labels.of("my_a", "val"); + Labels labels2 = Labels.of("my.a", "val"); + Assert.assertEquals(labels1, labels2); + Assert.assertEquals(labels1.hashCode(), labels2.hashCode()); + } + + @Test + public void testCompareEquals() { + Labels labels1 = Labels.of("env", "prod", "status", "200"); + Labels labels2 = Labels.of("env", "prod", "status", "200"); + Assert.assertEquals(0, labels1.compareTo(labels2)); + Assert.assertEquals(0, labels2.compareTo(labels1)); + Assert.assertEquals(labels1, labels2); + Assert.assertEquals(labels2, labels1); + } + + @Test(expected = IllegalArgumentException.class) + public void testIllegalLabelName() { + Labels.of("my_service/status", "200"); + } + + @Test(expected = IllegalArgumentException.class) + public void testReservedLabelName() { + Labels.of("__name__", "requests_total"); + } + + @Test(expected = IllegalArgumentException.class) + public void testDuplicateLabelName() { + Labels.of("name1", "value1", "name2", "value2", "name1", "value3"); + } + + @Test + public void testMakePrometheusNames() { + String[] names = new String[] {}; + String[] prometheusNames = Labels.makePrometheusNames(names); + Assert.assertSame(names, prometheusNames); + + names = new String[] {"no_dots", "at_all"}; + prometheusNames = Labels.makePrometheusNames(names); + Assert.assertSame(names, prometheusNames); + + names = new String[] {"dots", "here.it.is"}; + prometheusNames = Labels.makePrometheusNames(names); + Assert.assertNotSame(names, prometheusNames); + Assert.assertSame(names[0], prometheusNames[0]); + Assert.assertEquals("here.it.is", names[1]); + Assert.assertEquals("here_it_is", prometheusNames[1]); + } + + @Test + public void testMerge() { + Labels labels1 = Labels.of("key.1", "value 1", "key.3", "value 3"); + Labels labels2 = Labels.of("key_2", "value 2"); + Labels merged = labels2.merge(labels1); + Assert.assertEquals("key.1", merged.getName(0)); + Assert.assertEquals("key_2", merged.getName(1)); + Assert.assertEquals("key.3", merged.getName(2)); + } + + @Test(expected = IllegalArgumentException.class) + public void testMergeDuplicateName() { + Labels labels1 = Labels.of("key_one", "v1"); + Labels labels2 = Labels.of("key.one", "v2"); + labels2.merge(labels1); + } + + @Test(expected = IllegalArgumentException.class) + public void testDuplicateName() { + Labels.of("key_one", "v1", "key.one", "v2"); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java index f9e9a18d6..9a3a980bc 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java @@ -1,72 +1,76 @@ package io.prometheus.metrics.model.snapshots; +import static io.prometheus.metrics.model.snapshots.PrometheusNaming.sanitizeMetricName; + import org.junit.Assert; import org.junit.Test; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.sanitizeMetricName; - public class MetricMetadataTest { - @Test(expected = IllegalArgumentException.class) - public void testEmptyName() { - new MetricMetadata(""); - } + @Test(expected = IllegalArgumentException.class) + public void testEmptyName() { + new MetricMetadata(""); + } - @Test(expected = IllegalArgumentException.class) - public void testNullName() { - new MetricMetadata(null); - } + @Test(expected = IllegalArgumentException.class) + public void testNullName() { + new MetricMetadata(null); + } - @Test(expected = IllegalArgumentException.class) - public void testIllegalName() { - new MetricMetadata("my_namespace/http_server_duration"); // let's see when we decide to allow slashes :) - } + @Test(expected = IllegalArgumentException.class) + public void testIllegalName() { + new MetricMetadata( + "my_namespace/http_server_duration"); // let's see when we decide to allow slashes :) + } - @Test - public void testSanitizationIllegalCharacters() { - MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("my_namespace/http.server.duration", Unit.SECONDS), "help string", Unit.SECONDS); - Assert.assertEquals("my_namespace_http.server.duration_seconds", metadata.getName()); - Assert.assertEquals("my_namespace_http_server_duration_seconds", metadata.getPrometheusName()); - Assert.assertEquals("help string", metadata.getHelp()); - Assert.assertEquals("seconds", metadata.getUnit().toString()); - } + @Test + public void testSanitizationIllegalCharacters() { + MetricMetadata metadata = + new MetricMetadata( + sanitizeMetricName("my_namespace/http.server.duration", Unit.SECONDS), + "help string", + Unit.SECONDS); + Assert.assertEquals("my_namespace_http.server.duration_seconds", metadata.getName()); + Assert.assertEquals("my_namespace_http_server_duration_seconds", metadata.getPrometheusName()); + Assert.assertEquals("help string", metadata.getHelp()); + Assert.assertEquals("seconds", metadata.getUnit().toString()); + } - @Test - public void testSanitizationCounter() { - MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("my_events_total")); - Assert.assertEquals("my_events", metadata.getName()); - } + @Test + public void testSanitizationCounter() { + MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("my_events_total")); + Assert.assertEquals("my_events", metadata.getName()); + } - @Test - public void testSanitizationInfo() { - MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("target_info")); - Assert.assertEquals("target", metadata.getName()); - } + @Test + public void testSanitizationInfo() { + MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("target_info")); + Assert.assertEquals("target", metadata.getName()); + } - @Test - public void testSanitizationWeirdCornerCase() { - MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("_total_created")); - Assert.assertEquals("total", metadata.getName()); - } + @Test + public void testSanitizationWeirdCornerCase() { + MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("_total_created")); + Assert.assertEquals("total", metadata.getName()); + } - @Test(expected = IllegalArgumentException.class) - public void testSanitizeEmptyString() { - sanitizeMetricName(""); - } + @Test(expected = IllegalArgumentException.class) + public void testSanitizeEmptyString() { + sanitizeMetricName(""); + } - @Test(expected = IllegalArgumentException.class) - public void testUnitSuffixRequired() { - new MetricMetadata("my_counter", "help", Unit.SECONDS); - } + @Test(expected = IllegalArgumentException.class) + public void testUnitSuffixRequired() { + new MetricMetadata("my_counter", "help", Unit.SECONDS); + } - @Test - public void testUnitSuffixAdded() { - new MetricMetadata(sanitizeMetricName("my_counter", Unit.SECONDS), "help", Unit.SECONDS); - } + @Test + public void testUnitSuffixAdded() { + new MetricMetadata(sanitizeMetricName("my_counter", Unit.SECONDS), "help", Unit.SECONDS); + } - @Test - public void testUnitNotDuplicated() { - Assert.assertEquals("my_counter_bytes", sanitizeMetricName("my_counter_bytes", Unit.BYTES)); - } + @Test + public void testUnitNotDuplicated() { + Assert.assertEquals("my_counter_bytes", sanitizeMetricName("my_counter_bytes", Unit.BYTES)); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java index 54766debd..1a531b5fd 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java @@ -1,17 +1,17 @@ package io.prometheus.metrics.model.snapshots; -import io.prometheus.metrics.model.snapshots.MetricSnapshot; import org.junit.Assert; public class SnapshotTestUtil { - public static void assertMetadata(MetricSnapshot snapshot, String name, String help, String unit) { - Assert.assertEquals(name, snapshot.getMetadata().getName()); - Assert.assertEquals(help, snapshot.getMetadata().getHelp()); - if (unit != null) { - Assert.assertEquals(unit, snapshot.getMetadata().getUnit().toString()); - } else { - Assert.assertNull(snapshot.getMetadata().getUnit()); - } + public static void assertMetadata( + MetricSnapshot snapshot, String name, String help, String unit) { + Assert.assertEquals(name, snapshot.getMetadata().getName()); + Assert.assertEquals(help, snapshot.getMetadata().getHelp()); + if (unit != null) { + Assert.assertEquals(unit, snapshot.getMetadata().getUnit().toString()); + } else { + Assert.assertNull(snapshot.getMetadata().getUnit()); } + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java index 2795ec165..ccc159b30 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java @@ -1,145 +1,145 @@ package io.prometheus.metrics.model.snapshots; -import org.junit.Assert; -import org.junit.Test; - import java.util.Iterator; import java.util.concurrent.TimeUnit; +import org.junit.Assert; +import org.junit.Test; public class StateSetSnapshotTest { - @Test - public void testCompleteGoodCase() { - long scrapeTimestamp = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1); - StateSetSnapshot snapshot = StateSetSnapshot.builder() - .name("my_feature_flags") - .help("Feature Flags") - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .labels(Labels.of("entity", "controller")) - .scrapeTimestampMillis(scrapeTimestamp) - .state("feature1", true) - .state("feature2", false) - .build() - ) - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .labels(Labels.of("entity", "api")) - .state("feature1", false) - .state("feature2", false) - .build() - ) - .build(); - SnapshotTestUtil.assertMetadata(snapshot, "my_feature_flags", "Feature Flags", null); - Assert.assertEquals(2, snapshot.getDataPoints().size()); - StateSetSnapshot.StateSetDataPointSnapshot data = snapshot.getDataPoints().get(1); // data is sorted by labels, so the second one should be entity="controller" - Assert.assertEquals(Labels.of("entity", "controller"), data.getLabels()); - Assert.assertEquals(2, data.size()); - Assert.assertEquals("feature1", data.getName(0)); - Assert.assertTrue(data.isTrue(0)); - Assert.assertEquals("feature2", data.getName(1)); - Assert.assertFalse(data.isTrue(1)); - Assert.assertTrue(data.hasScrapeTimestamp()); - Assert.assertEquals(scrapeTimestamp, data.getScrapeTimestampMillis()); - Assert.assertFalse(data.hasCreatedTimestamp()); - } - - @Test - public void testStateSetDataSorted() { - StateSetSnapshot.StateSetDataPointSnapshot data = StateSetSnapshot.StateSetDataPointSnapshot.builder() - .state("b", true) - .state("d", false) - .state("c", true) - .state("a", false) - .build(); - Assert.assertEquals(4, data.size()); - Assert.assertEquals("a", data.getName(0)); - Assert.assertFalse(data.isTrue(0)); - Assert.assertEquals("b", data.getName(1)); - Assert.assertTrue(data.isTrue(1)); - Assert.assertEquals("c", data.getName(2)); - Assert.assertTrue(data.isTrue(2)); - Assert.assertEquals("d", data.getName(3)); - Assert.assertFalse(data.isTrue(3)); - } + @Test + public void testCompleteGoodCase() { + long scrapeTimestamp = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1); + StateSetSnapshot snapshot = + StateSetSnapshot.builder() + .name("my_feature_flags") + .help("Feature Flags") + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .labels(Labels.of("entity", "controller")) + .scrapeTimestampMillis(scrapeTimestamp) + .state("feature1", true) + .state("feature2", false) + .build()) + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .labels(Labels.of("entity", "api")) + .state("feature1", false) + .state("feature2", false) + .build()) + .build(); + SnapshotTestUtil.assertMetadata(snapshot, "my_feature_flags", "Feature Flags", null); + Assert.assertEquals(2, snapshot.getDataPoints().size()); + StateSetSnapshot.StateSetDataPointSnapshot data = + snapshot + .getDataPoints() + .get(1); // data is sorted by labels, so the second one should be entity="controller" + Assert.assertEquals(Labels.of("entity", "controller"), data.getLabels()); + Assert.assertEquals(2, data.size()); + Assert.assertEquals("feature1", data.getName(0)); + Assert.assertTrue(data.isTrue(0)); + Assert.assertEquals("feature2", data.getName(1)); + Assert.assertFalse(data.isTrue(1)); + Assert.assertTrue(data.hasScrapeTimestamp()); + Assert.assertEquals(scrapeTimestamp, data.getScrapeTimestampMillis()); + Assert.assertFalse(data.hasCreatedTimestamp()); + } - @Test(expected = IllegalArgumentException.class) - public void testMustHaveState() { - // Must have at least one state. - StateSetSnapshot.StateSetDataPointSnapshot.builder().build(); - } + @Test + public void testStateSetDataSorted() { + StateSetSnapshot.StateSetDataPointSnapshot data = + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .state("b", true) + .state("d", false) + .state("c", true) + .state("a", false) + .build(); + Assert.assertEquals(4, data.size()); + Assert.assertEquals("a", data.getName(0)); + Assert.assertFalse(data.isTrue(0)); + Assert.assertEquals("b", data.getName(1)); + Assert.assertTrue(data.isTrue(1)); + Assert.assertEquals("c", data.getName(2)); + Assert.assertTrue(data.isTrue(2)); + Assert.assertEquals("d", data.getName(3)); + Assert.assertFalse(data.isTrue(3)); + } - @Test - public void testMinimal() { - StateSetSnapshot snapshot = StateSetSnapshot.builder() - .name("my_flag") - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .state("flag", true) - .build() - ) - .build(); - Assert.assertEquals(1, snapshot.dataPoints.size()); - } + @Test(expected = IllegalArgumentException.class) + public void testMustHaveState() { + // Must have at least one state. + StateSetSnapshot.StateSetDataPointSnapshot.builder().build(); + } - @Test - public void testEmpty() { - StateSetSnapshot snapshot = StateSetSnapshot.builder() - .name("my_flag") - .build(); - Assert.assertEquals(0, snapshot.dataPoints.size()); - } + @Test + public void testMinimal() { + StateSetSnapshot snapshot = + StateSetSnapshot.builder() + .name("my_flag") + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder().state("flag", true).build()) + .build(); + Assert.assertEquals(1, snapshot.dataPoints.size()); + } - @Test(expected = UnsupportedOperationException.class) - public void testDataImmutable() { - StateSetSnapshot.StateSetDataPointSnapshot data = StateSetSnapshot.StateSetDataPointSnapshot.builder() - .state("a", true) - .state("b", true) - .state("c", true) - .build(); - Iterator iterator = data.iterator(); - iterator.next(); - iterator.remove(); - } + @Test + public void testEmpty() { + StateSetSnapshot snapshot = StateSetSnapshot.builder().name("my_flag").build(); + Assert.assertEquals(0, snapshot.dataPoints.size()); + } - @Test(expected = IllegalArgumentException.class) - public void testDuplicateState() { - StateSetSnapshot.StateSetDataPointSnapshot data = StateSetSnapshot.StateSetDataPointSnapshot.builder() - .state("a", true) - .state("b", true) - .state("a", true) - .build(); - } + @Test(expected = UnsupportedOperationException.class) + public void testDataImmutable() { + StateSetSnapshot.StateSetDataPointSnapshot data = + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .state("a", true) + .state("b", true) + .state("c", true) + .build(); + Iterator iterator = data.iterator(); + iterator.next(); + iterator.remove(); + } - @Test(expected = UnsupportedOperationException.class) - public void testStateSetImmutable() { - StateSetSnapshot snapshot = StateSetSnapshot.builder() - .name("flags") - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .labels(Labels.of("entity", "controller")) - .state("feature", true) - .build() - ) - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .labels(Labels.of("entity", "api")) - .state("feature", true) - .build() - ) - .build(); - Iterator iterator = snapshot.getDataPoints().iterator(); - iterator.next(); - iterator.remove(); - } + @Test(expected = IllegalArgumentException.class) + public void testDuplicateState() { + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .state("a", true) + .state("b", true) + .state("a", true) + .build(); + } - @Test(expected = IllegalArgumentException.class) - public void testLabelsUnique() { + @Test(expected = UnsupportedOperationException.class) + public void testStateSetImmutable() { + StateSetSnapshot snapshot = StateSetSnapshot.builder() - .name("flags") - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .state("feature", true) - .build() - ) - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .state("feature", true) - .build() - ) - .build(); - } + .name("flags") + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .labels(Labels.of("entity", "controller")) + .state("feature", true) + .build()) + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .labels(Labels.of("entity", "api")) + .state("feature", true) + .build()) + .build(); + Iterator iterator = + snapshot.getDataPoints().iterator(); + iterator.next(); + iterator.remove(); + } + + @Test(expected = IllegalArgumentException.class) + public void testLabelsUnique() { + StateSetSnapshot.builder() + .name("flags") + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder().state("feature", true).build()) + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder().state("feature", true).build()) + .build(); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java index f88458cc3..1f70f6520 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java @@ -3,49 +3,42 @@ import org.junit.Assert; import org.junit.Test; -import static org.junit.Assert.fail; - public class UnitTest { - @Test - public void testEmpty() { - try { - new Unit(" "); - fail("Expected IllegalArgumentException"); - } catch (IllegalArgumentException e) { - // Expected - } - } - - @Test - public void testEquals1() { - Unit unit1 = Unit.BYTES; - Unit unit2 = new Unit("bytes"); - - Assert.assertEquals(unit2, unit1); - } - - @Test - public void testEquals2() { - Unit unit1 = new Unit("bytes "); - Unit unit2 = new Unit("bytes"); - - Assert.assertEquals(unit2, unit1); - } - - @Test - public void testEquals3() { - Unit unit1 = new Unit(" bytes"); - Unit unit2 = new Unit("bytes"); - - Assert.assertEquals(unit2, unit1); - } - - @Test - public void testEquals4() { - Unit unit1 = new Unit(" bytes "); - Unit unit2 = new Unit("bytes"); - - Assert.assertEquals(unit2, unit1); - } + @Test(expected = IllegalArgumentException.class) + public void testEmpty() { + new Unit(" "); + } + + @Test + public void testEquals1() { + Unit unit1 = Unit.BYTES; + Unit unit2 = new Unit("bytes"); + + Assert.assertEquals(unit2, unit1); + } + + @Test + public void testEquals2() { + Unit unit1 = new Unit("bytes "); + Unit unit2 = new Unit("bytes"); + + Assert.assertEquals(unit2, unit1); + } + + @Test + public void testEquals3() { + Unit unit1 = new Unit(" bytes"); + Unit unit2 = new Unit("bytes"); + + Assert.assertEquals(unit2, unit1); + } + + @Test + public void testEquals4() { + Unit unit1 = new Unit(" bytes "); + Unit unit2 = new Unit("bytes"); + + Assert.assertEquals(unit2, unit1); + } } From e17ac02ee092dda726c019f3b31556e12ce3db9e Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 1 Oct 2024 14:44:56 +0200 Subject: [PATCH 116/870] add dependabot (#994) Signed-off-by: Gregor Zeitlinger --- .github/dependabot.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..b3a1dddd8 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: weekly + - package-ecosystem: maven + directory: "/" + schedule: + interval: daily From f28106bd03e2b0a00fddb40eb32b3de7ed112f48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:03:22 +0200 Subject: [PATCH 117/870] Bump org.apache.maven.plugins:maven-failsafe-plugin from 2.22.2 to 3.5.0 (#1003) Bumps [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 2.22.2 to 3.5.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-2.22.2...surefire-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-failsafe-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0f0e27d08..08257eaca 100644 --- a/pom.xml +++ b/pom.xml @@ -131,7 +131,7 @@ maven-failsafe-plugin - 2.22.2 + 3.5.0 maven-release-plugin From 1844d511f368f45d0b07530a1af1e606ef2707b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:09:30 +0200 Subject: [PATCH 118/870] Bump actions/upload-pages-artifact from 1 to 3 (#1002) Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 1 to 3. - [Release notes](https://github.com/actions/upload-pages-artifact/releases) - [Commits](https://github.com/actions/upload-pages-artifact/compare/v1...v3) --- updated-dependencies: - dependency-name: actions/upload-pages-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .github/workflows/github-pages.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 6edc0639a..cd88f043d 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -85,7 +85,7 @@ jobs: - name: ls ./docs/public/api run: echo 'ls ./docs/public/api' && ls ./docs/public/api - name: Upload artifact - uses: actions/upload-pages-artifact@v1 + uses: actions/upload-pages-artifact@v3 with: path: ./docs/public From c9be1fd7505243c7a2f1a6fc5dd966532512db72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:21:19 +0200 Subject: [PATCH 119/870] Bump com.google.protobuf:protobuf-java (#1008) Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 3.25.3 to 3.25.5. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.25.3...v3.25.5) --- updated-dependencies: - dependency-name: com.google.protobuf:protobuf-java dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .../prometheus-metrics-shaded-protobuf/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml index 9f9d46f14..eba000e1c 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml @@ -20,7 +20,7 @@ - 3.25.3 + 3.25.5 3_25_3 From b2f4ba74ae9d3042bf1f731d22683f037963de0b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:27:18 +0200 Subject: [PATCH 120/870] Bump actions/deploy-pages from 2 to 4 (#1000) Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 2 to 4. - [Release notes](https://github.com/actions/deploy-pages/releases) - [Commits](https://github.com/actions/deploy-pages/compare/v2...v4) --- updated-dependencies: - dependency-name: actions/deploy-pages dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .github/workflows/github-pages.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index cd88f043d..f51be93eb 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -99,4 +99,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v2 + uses: actions/deploy-pages@v4 From 8c2b5c56e653d85e2a7bfdd74f073dcbf3c80375 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:32:01 +0200 Subject: [PATCH 121/870] Bump org.awaitility:awaitility from 4.2.1 to 4.2.2 (#1009) Bumps [org.awaitility:awaitility](https://github.com/awaitility/awaitility) from 4.2.1 to 4.2.2. - [Changelog](https://github.com/awaitility/awaitility/blob/master/changelog.txt) - [Commits](https://github.com/awaitility/awaitility/compare/awaitility-4.2.1...awaitility-4.2.2) --- updated-dependencies: - dependency-name: org.awaitility:awaitility dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index bde4e05f8..6c576eae6 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -66,7 +66,7 @@ org.awaitility awaitility - 4.2.1 + 4.2.2 test From addfb9f01770372729d8569271108354e9e7d316 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:36:38 +0200 Subject: [PATCH 122/870] Bump ch.qos.logback:logback-classic (#1007) Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.2.11 to 1.2.13. - [Commits](https://github.com/qos-ch/logback/compare/v_1.2.11...v_1.2.13) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- simpleclient-archive/simpleclient_logback/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simpleclient-archive/simpleclient_logback/pom.xml b/simpleclient-archive/simpleclient_logback/pom.xml index 96f4fb34d..a92b408b4 100644 --- a/simpleclient-archive/simpleclient_logback/pom.xml +++ b/simpleclient-archive/simpleclient_logback/pom.xml @@ -41,7 +41,7 @@ ch.qos.logback logback-classic - 1.2.11 + 1.2.13 From f8046ae6bf262e6799ee5c0f6bf25aeeda5a2416 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:46:29 +0200 Subject: [PATCH 123/870] Bump actions/configure-pages from 3 to 5 (#999) Bumps [actions/configure-pages](https://github.com/actions/configure-pages) from 3 to 5. - [Release notes](https://github.com/actions/configure-pages/releases) - [Commits](https://github.com/actions/configure-pages/compare/v3...v5) --- updated-dependencies: - dependency-name: actions/configure-pages dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .github/workflows/github-pages.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index f51be93eb..27479c2a1 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -67,7 +67,7 @@ jobs: run: mv ./target/site/apidocs ./docs/static/api && echo && echo 'ls ./docs/static/api' && ls ./docs/static/api - name: Setup Pages id: pages - uses: actions/configure-pages@v3 + uses: actions/configure-pages@v5 - name: Install Node.js dependencies run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true" working-directory: ./docs From 2b74c2089c703b48f59b8e1356e7f968dfeb9a26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:54:32 +0200 Subject: [PATCH 124/870] Bump ch.qos.logback:logback-classic (#1010) Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.2.11 to 1.2.13. - [Commits](https://github.com/qos-ch/logback/compare/v_1.2.11...v_1.2.13) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .../it_servlet_jakarta_exporter_webxml/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml b/simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml index 71e8c536a..061733553 100644 --- a/simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml +++ b/simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml @@ -45,7 +45,7 @@ ch.qos.logback logback-classic - 1.2.11 + 1.2.13 jakarta.servlet From 05dd98274b9d93136e660d501d80b49d1ba92296 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:09:46 +0200 Subject: [PATCH 125/870] Bump ch.qos.logback:logback-classic (#1011) Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.2.11 to 1.2.13. - [Commits](https://github.com/qos-ch/logback/compare/v_1.2.11...v_1.2.13) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- simpleclient-archive/integration_tests/it_pushgateway/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simpleclient-archive/integration_tests/it_pushgateway/pom.xml b/simpleclient-archive/integration_tests/it_pushgateway/pom.xml index 2eba31efa..5fd8c8a5a 100644 --- a/simpleclient-archive/integration_tests/it_pushgateway/pom.xml +++ b/simpleclient-archive/integration_tests/it_pushgateway/pom.xml @@ -36,7 +36,7 @@ ch.qos.logback logback-classic - 1.2.11 + 1.2.13 test From 08a1aeb302a7c86edf204f629dcbec44c4012d31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:16:46 +0200 Subject: [PATCH 126/870] Bump actions/checkout from 3 to 4 (#998) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .github/workflows/github-pages.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 27479c2a1..6b2639ffd 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -55,7 +55,7 @@ jobs: #- name: Install Dart Sass # run: sudo snap install dart-sass - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 From 50d9950197110df8fa563e4a171b3cf3e2402ade Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:31:34 +0200 Subject: [PATCH 127/870] Bump org.apache.maven.plugins:maven-resources-plugin from 2.6 to 3.3.1 (#997) Bumps [org.apache.maven.plugins:maven-resources-plugin](https://github.com/apache/maven-resources-plugin) from 2.6 to 3.3.1. - [Release notes](https://github.com/apache/maven-resources-plugin/releases) - [Commits](https://github.com/apache/maven-resources-plugin/compare/maven-resources-plugin-2.6...maven-resources-plugin-3.3.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-resources-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 08257eaca..44eadc391 100644 --- a/pom.xml +++ b/pom.xml @@ -98,7 +98,7 @@ maven-resources-plugin - 2.6 + 3.3.1 maven-compiler-plugin From 397738e33bf00f0219bbed92f7a8a5e78b949cb0 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 1 Oct 2024 16:55:49 +0200 Subject: [PATCH 128/870] reformat all files with spotless (#1015) * reformat all files with spotless Signed-off-by: Gregor Zeitlinger * reformat all files with spotless Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .github/workflows/build.yml | 2 - .../metrics/benchmarks/BenchmarkRunner.java | 6 +- .../metrics/benchmarks/CounterBenchmark.java | 305 +- .../benchmarks/HistogramBenchmark.java | 279 +- .../metrics/benchmarks/RandomNumbers.java | 15 +- .../greeting/GreetingServlet.java | 50 +- .../otel_exemplars/greeting/Main.java | 33 +- .../otel_exemplars/app/HelloWorldServlet.java | 87 +- .../examples/otel_exemplars/app/Main.java | 33 +- .../metrics/examples/httpserver/Main.java | 47 +- .../metrics/examples/multitarget/Main.java | 22 +- .../multitarget/SampleMultiCollector.java | 123 +- .../metrics/examples/opentelemetry/Main.java | 51 +- .../ManualCompleteMetricsTest.java | 247 +- .../tomcat_servlet/HelloWorldServlet.java | 83 +- .../metrics/examples/tomcat_servlet/Main.java | 39 +- .../examples/nativehistogram/Main.java | 39 +- .../examples/prometheus_properties/Main.java | 50 +- .../metrics/examples/simpleclient/Main.java | 39 +- .../client/it/common/LogConsumer.java | 47 +- .../prometheus/client/it/common/Volume.java | 150 +- .../exporter/httpserver/HTTPServerSample.java | 138 +- .../jetty/ExporterServletJettySample.java | 166 +- .../tomcat/ExporterServletTomcatSample.java | 163 +- .../metrics/it/exporter/test/ExporterIT.java | 645 +-- .../it/pushgateway/PushGatewayTestApp.java | 189 +- .../metrics/it/pushgateway/PushGatewayIT.java | 420 +- pom.xml | 1 - .../metrics/config/ExemplarsProperties.java | 214 +- .../config/ExporterFilterProperties.java | 206 +- .../config/ExporterHttpServerProperties.java | 65 +- .../ExporterOpenTelemetryProperties.java | 358 +- .../metrics/config/ExporterProperties.java | 110 +- .../config/ExporterPushgatewayProperties.java | 101 +- .../metrics/config/MetricsProperties.java | 789 +-- .../metrics/config/PrometheusProperties.java | 147 +- .../config/PrometheusPropertiesException.java | 12 +- .../config/PrometheusPropertiesLoader.java | 188 +- .../io/prometheus/metrics/config/Util.java | 222 +- .../PrometheusPropertiesLoaderTests.java | 57 +- .../config/PrometheusPropertiesTest.java | 44 +- .../core/datapoints/CounterDataPoint.java | 110 +- .../metrics/core/datapoints/DataPoint.java | 3 +- .../datapoints/DistributionDataPoint.java | 44 +- .../core/datapoints/GaugeDataPoint.java | 108 +- .../core/datapoints/StateSetDataPoint.java | 49 +- .../metrics/core/datapoints/Timer.java | 53 +- .../metrics/core/datapoints/TimerApi.java | 119 +- .../core/exemplars/ExemplarSampler.java | 575 ++- .../core/exemplars/ExemplarSamplerConfig.java | 251 +- .../metrics/core/metrics/Buffer.java | 122 +- .../metrics/core/metrics/CKMSQuantiles.java | 446 +- .../metrics/core/metrics/CallbackMetric.java | 61 +- .../metrics/core/metrics/Counter.java | 399 +- .../core/metrics/CounterWithCallback.java | 133 +- .../metrics/core/metrics/Gauge.java | 304 +- .../core/metrics/GaugeWithCallback.java | 87 +- .../metrics/core/metrics/Histogram.java | 1679 +++--- .../prometheus/metrics/core/metrics/Info.java | 227 +- .../metrics/core/metrics/Metric.java | 84 +- .../core/metrics/MetricWithFixedMetadata.java | 152 +- .../metrics/core/metrics/SlidingWindow.java | 121 +- .../metrics/core/metrics/StateSet.java | 238 +- .../metrics/core/metrics/StatefulMetric.java | 332 +- .../metrics/core/metrics/Summary.java | 571 +- .../core/metrics/SummaryWithCallback.java | 88 +- .../metrics/core/util/Scheduler.java | 38 +- .../metrics/core/datapoints/TimerApiTest.java | 2 +- .../ExemplarSamplerConfigTestUtil.java | 42 +- .../core/exemplars/ExemplarSamplerTest.java | 403 +- .../exemplars/SpanContextSupplierTest.java | 184 +- .../core/metrics/CKMSQuantilesTest.java | 641 +-- .../metrics/core/metrics/CounterTest.java | 552 +- .../metrics/core/metrics/GaugeTest.java | 367 +- .../metrics/core/metrics/HistogramTest.java | 2671 +++++----- .../metrics/core/metrics/InfoTest.java | 167 +- .../core/metrics/SlidingWindowTest.java | 132 +- .../metrics/core/metrics/StateSetTest.java | 117 +- .../core/metrics/StatefulMetricTest.java | 102 +- .../core/metrics/SummaryWithCallbackTest.java | 2 +- .../metrics/core/metrics/TestUtil.java | 10 +- .../metrics/core/metrics/TodoTest.java | 15 +- .../common/PrometheusHttpExchange.java | 15 +- .../common/PrometheusHttpRequest.java | 105 +- .../common/PrometheusHttpResponse.java | 17 +- .../common/PrometheusScrapeHandler.java | 288 +- .../exporter/httpserver/DefaultHandler.java | 112 +- .../exporter/httpserver/HTTPServer.java | 403 +- .../exporter/httpserver/HealthyHandler.java | 39 +- .../httpserver/HttpExchangeAdapter.java | 197 +- .../exporter/httpserver/MetricsHandler.java | 48 +- .../httpserver/NamedDaemonThreadFactory.java | 38 +- .../opentelemetry/OpenTelemetryExporter.java | 842 +-- .../PrometheusInstrumentationScope.java | 61 +- .../PrometheusMetricProducer.java | 175 +- .../opentelemetry/ResourceAttributes.java | 48 +- .../ResourceAttributesDefaults.java | 10 +- .../ResourceAttributesFromJarFileName.java | 84 +- .../ResourceAttributesFromOtelAgent.java | 155 +- .../otelmodel/DoublePointDataImpl.java | 24 +- .../ExponentialHistogramBucketsImpl.java | 71 +- .../ExponentialHistogramPointDataImpl.java | 162 +- .../otelmodel/HistogramPointDataImpl.java | 106 +- .../otelmodel/MetricDataFactory.java | 109 +- .../otelmodel/PointDataImpl.java | 67 +- .../otelmodel/PrometheusClassicHistogram.java | 109 +- .../otelmodel/PrometheusCounter.java | 75 +- .../otelmodel/PrometheusData.java | 126 +- .../otelmodel/PrometheusGauge.java | 45 +- .../otelmodel/PrometheusInfo.java | 73 +- .../otelmodel/PrometheusMetricData.java | 240 +- .../otelmodel/PrometheusNativeHistogram.java | 125 +- .../otelmodel/PrometheusStateSet.java | 77 +- .../otelmodel/PrometheusSummary.java | 51 +- .../otelmodel/PrometheusUnknown.java | 45 +- .../otelmodel/SummaryPointDataImpl.java | 65 +- .../otelmodel/ValueAtQuantileImpl.java | 28 +- .../exporter/opentelemetry/ExemplarTest.java | 222 +- .../DefaultHttpConnectionFactory.java | 16 +- .../pushgateway/DefaultJobLabelDetector.java | 82 +- .../metrics/exporter/pushgateway/Format.java | 4 +- .../pushgateway/HttpConnectionFactory.java | 6 +- .../exporter/pushgateway/PushGateway.java | 708 +-- .../metrics/exporter/pushgateway/Scheme.java | 40 +- .../pushgateway/BasicAuthPushGatewayTest.java | 70 +- .../BearerTokenPushGatewayTest.java | 70 +- .../exporter/pushgateway/PushGatewayTest.java | 536 +- .../servlet/jakarta/HttpExchangeAdapter.java | 155 +- .../jakarta/PrometheusMetricsServlet.java | 41 +- .../servlet/javax/HttpExchangeAdapter.java | 222 +- .../javax/PrometheusMetricsServlet.java | 97 +- .../ExpositionFormatWriter.java | 12 +- .../expositionformats/ExpositionFormats.java | 81 +- .../OpenMetricsTextFormatWriter.java | 569 +- .../PrometheusProtobufWriter.java | 605 +-- .../PrometheusTextFormatWriter.java | 586 ++- .../expositionformats/ProtobufUtil.java | 12 +- .../expositionformats/TextFormatUtil.java | 130 +- .../ExpositionFormatsTest.java | 4572 ++++++++++------- .../caffeine/CacheMetricsCollector.java | 322 +- .../caffeine/CacheMetricsCollectorTest.java | 265 +- .../dropwizard5/DropwizardExports.java | 405 +- .../dropwizard5/labels/CustomLabelMapper.java | 181 +- .../labels/GraphiteNamePattern.java | 143 +- .../dropwizard5/labels/MapperConfig.java | 280 +- .../dropwizard5/DropwizardExportsTest.java | 547 +- .../labels/CustomLabelMapperTest.java | 397 +- .../labels/GraphiteNamePatternTest.java | 261 +- .../dropwizard5/labels/MapperConfigTest.java | 97 +- .../guava/CacheMetricsCollector.java | 275 +- .../guava/CacheMetricsCollectorTest.java | 241 +- .../jvm/JvmBufferPoolMetrics.java | 169 +- .../jvm/JvmClassLoadingMetrics.java | 126 +- .../jvm/JvmCompilationMetrics.java | 108 +- .../jvm/JvmGarbageCollectorMetrics.java | 124 +- .../instrumentation/jvm/JvmMemoryMetrics.java | 367 +- .../jvm/JvmMemoryPoolAllocationMetrics.java | 253 +- .../instrumentation/jvm/JvmMetrics.java | 95 +- .../jvm/JvmNativeMemoryMetrics.java | 70 +- .../jvm/JvmRuntimeInfoMetric.java | 145 +- .../jvm/JvmThreadsMetrics.java | 302 +- .../jvm/NativeImageChecker.java | 14 +- .../instrumentation/jvm/ProcessMetrics.java | 422 +- .../jvm/ExampleExporterForManualTesting.java | 21 +- .../jvm/JvmBufferPoolMetricsTest.java | 123 +- .../jvm/JvmClassLoadingMetricsTest.java | 105 +- .../jvm/JvmCompilationMetricsTest.java | 95 +- .../jvm/JvmGarbageCollectorMetricsTest.java | 106 +- .../jvm/JvmMemoryMetricsTest.java | 326 +- .../JvmMemoryPoolAllocationMetricsTest.java | 83 +- .../instrumentation/jvm/JvmMetricsTest.java | 22 +- .../jvm/JvmNativeMemoryMetricsTest.java | 319 +- .../jvm/JvmRuntimeInfoMetricTest.java | 40 +- .../jvm/JvmThreadsMetricsTest.java | 335 +- .../jvm/ProcessMetricsTest.java | 190 +- .../metrics/instrumentation/jvm/TestUtil.java | 13 +- .../model/registry/MetricNameFilter.java | 367 +- .../model/registry/MultiCollector.java | 111 +- .../registry/PrometheusScrapeRequest.java | 16 +- .../snapshots/ClassicHistogramBucket.java | 60 +- .../snapshots/ClassicHistogramBuckets.java | 382 +- .../model/snapshots/CounterSnapshot.java | 237 +- .../model/snapshots/DataPointSnapshot.java | 131 +- .../DistributionDataPointSnapshot.java | 135 +- .../snapshots/DuplicateLabelsException.java | 32 +- .../metrics/model/snapshots/Exemplar.java | 216 +- .../model/snapshots/GaugeSnapshot.java | 203 +- .../model/snapshots/HistogramSnapshot.java | 788 +-- .../metrics/model/snapshots/InfoSnapshot.java | 155 +- .../metrics/model/snapshots/Label.java | 85 +- .../model/snapshots/MetricMetadata.java | 199 +- .../model/snapshots/MetricSnapshot.java | 130 +- .../model/snapshots/MetricSnapshots.java | 155 +- .../snapshots/NativeHistogramBucket.java | 32 +- .../snapshots/NativeHistogramBuckets.java | 261 +- .../model/snapshots/PrometheusNaming.java | 486 +- .../model/snapshots/SummarySnapshot.java | 234 +- .../metrics/model/snapshots/Unit.java | 100 +- .../model/snapshots/UnknownSnapshot.java | 205 +- .../ClassicHistogramBucketsTest.java | 166 +- .../model/snapshots/CounterSnapshotTest.java | 195 +- .../metrics/model/snapshots/ExemplarTest.java | 128 +- .../model/snapshots/ExemplarsTest.java | 86 +- .../model/snapshots/GaugeSnapshotTest.java | 194 +- .../model/snapshots/InfoSnapshotTest.java | 102 +- .../model/snapshots/MetricSnapshotTest.java | 57 +- .../model/snapshots/MetricSnapshotsTest.java | 158 +- .../snapshots/NativeHistogramBucketsTest.java | 101 +- .../model/snapshots/PrometheusNamingTest.java | 151 +- .../model/snapshots/QuantilesTest.java | 69 +- .../model/snapshots/SummarySnapshotTest.java | 192 +- .../model/snapshots/UnknownSnapshotTest.java | 144 +- .../PrometheusMetricsShadedOpenTelemetry.java | 10 +- .../PrometheusMetricsShadedProtobuf.java | 10 +- .../bridge/SimpleclientCollector.java | 649 +-- .../bridge/SimpleclientCollectorTest.java | 473 +- .../metrics/tracer/common/SpanContext.java | 15 +- .../initializer/SpanContextSupplier.java | 66 +- .../OpenTelemetryAgentSpanContext.java | 12 +- .../tracer/otel/OpenTelemetrySpanContext.java | 44 +- 220 files changed, 23898 insertions(+), 22085 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ed5d2605f..835d4dcde 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,8 +7,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - with: - fetch-depth: 0 - name: Set up JDK uses: actions/setup-java@v4 with: diff --git a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/BenchmarkRunner.java b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/BenchmarkRunner.java index 6503c0d60..9d5d242ae 100644 --- a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/BenchmarkRunner.java +++ b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/BenchmarkRunner.java @@ -1,7 +1,7 @@ package io.prometheus.metrics.benchmarks; public class BenchmarkRunner { - public static void main(String[] args) throws Exception { - org.openjdk.jmh.Main.main(args); - } + public static void main(String[] args) throws Exception { + org.openjdk.jmh.Main.main(args); + } } diff --git a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java index 31678ad10..6730e1bab 100644 --- a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java +++ b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java @@ -19,6 +19,7 @@ /** * Results on a machine with dedicated 8 vCPU cores: + * *

      * Benchmark                                                                  Mode  Cnt      Score     Error  Units
      * i.p.metrics.benchmarks.CounterBenchmark.codahaleIncNoLabels               thrpt   25  30978.055 ± 424.088  ops/s
    @@ -32,182 +33,174 @@
      * i.p.metrics.benchmarks.CounterBenchmark.simpleclientInc                   thrpt   25   9057.637 ±  67.761  ops/s
      * i.p.metrics.benchmarks.CounterBenchmark.simpleclientNoLabelsInc           thrpt   25   8993.471 ±  49.581  ops/s
      * 
    - * Prometheus counters are faster than counters of other libraries. For example, incrementing a single counter - * without labels is more than 2 times faster (34752 ops / second) than doing the same with an OpenTelemetry - * counter (16634 ops / sec). + * + * Prometheus counters are faster than counters of other libraries. For example, incrementing a + * single counter without labels is more than 2 times faster (34752 ops / second) than doing the + * same with an OpenTelemetry counter (16634 ops / sec). */ public class CounterBenchmark { - @State(Scope.Benchmark) - public static class PrometheusCounter { - - final Counter noLabels; - final CounterDataPoint dataPoint; - - public PrometheusCounter() { - noLabels = Counter.builder() - .name("test") - .help("help") - .build(); - - Counter labels = Counter.builder() - .name("test") - .help("help") - .labelNames("path", "status") - .build(); - this.dataPoint = labels.labelValues("/", "200"); - } - } + @State(Scope.Benchmark) + public static class PrometheusCounter { - @State(Scope.Benchmark) - public static class SimpleclientCounter { + final Counter noLabels; + final CounterDataPoint dataPoint; - final io.prometheus.client.Counter noLabels; - final io.prometheus.client.Counter.Child dataPoint; + public PrometheusCounter() { + noLabels = Counter.builder().name("test").help("help").build(); - public SimpleclientCounter() { - noLabels = io.prometheus.client.Counter.build() - .name("name") - .help("help") - .create(); + Counter labels = + Counter.builder().name("test").help("help").labelNames("path", "status").build(); + this.dataPoint = labels.labelValues("/", "200"); + } + } - io.prometheus.client.Counter counter = io.prometheus.client.Counter.build() - .name("name") - .help("help") - .labelNames("path", "status") - .create(); + @State(Scope.Benchmark) + public static class SimpleclientCounter { - this.dataPoint = counter.labels("/", "200"); - } - } + final io.prometheus.client.Counter noLabels; + final io.prometheus.client.Counter.Child dataPoint; - @State(Scope.Benchmark) - public static class CodahaleCounterNoLabels { - final com.codahale.metrics.Counter counter = new com.codahale.metrics.MetricRegistry().counter("test"); - } + public SimpleclientCounter() { + noLabels = io.prometheus.client.Counter.build().name("name").help("help").create(); - @State(Scope.Benchmark) - public static class OpenTelemetryCounter { - - final LongCounter longCounter; - final DoubleCounter doubleCounter; - final Attributes attributes; - - public OpenTelemetryCounter() { - - SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder() - .registerMetricReader(InMemoryMetricReader.create()) - .setResource(Resource.getDefault()) - .build(); - OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() - .setMeterProvider(sdkMeterProvider) - .build(); - Meter meter = openTelemetry - .meterBuilder("instrumentation-library-name") - .setInstrumentationVersion("1.0.0") - .build(); - this.longCounter = meter - .counterBuilder("test1") - .setDescription("test") - .build(); - this.doubleCounter = meter - .counterBuilder("test2") - .ofDoubles() - .setDescription("test") - .build(); - this.attributes = Attributes.of( - AttributeKey.stringKey("path"), "/", - AttributeKey.stringKey("status"), "200"); - } - } + io.prometheus.client.Counter counter = + io.prometheus.client.Counter.build() + .name("name") + .help("help") + .labelNames("path", "status") + .create(); - @Benchmark - @Threads(4) - public CounterDataPoint prometheusAdd(RandomNumbers randomNumbers, PrometheusCounter counter) { - for (int i=0; i * Benchmark Mode Cnt Score Error Units * i.p.metrics.benchmarks.HistogramBenchmark.openTelemetryClassic thrpt 25 1908.715 ± 114.050 ops/s @@ -27,164 +27,159 @@ * i.p.metrics.benchmarks.HistogramBenchmark.prometheusNative thrpt 25 3372.789 ± 339.328 ops/s * i.p.metrics.benchmarks.HistogramBenchmark.simpleclient thrpt 25 6488.252 ± 96.737 ops/s *
    + * * The simpleclient (i.e. client_java version 0.16.0 and older) histograms perform about the same as * the classic histogram of the current 1.0.0 version. - *

    - * Compared to OpenTelemetry histograms the Prometheus Java client histograms perform more than 3 times better - * (OpenTelemetry has 1908 ops / sec for classic histograms, while Prometheus has 6451 ops / sec). + * + *

    Compared to OpenTelemetry histograms the Prometheus Java client histograms perform more than 3 + * times better (OpenTelemetry has 1908 ops / sec for classic histograms, while Prometheus has 6451 + * ops / sec). */ - public class HistogramBenchmark { - @State(Scope.Benchmark) - public static class PrometheusClassicHistogram { + @State(Scope.Benchmark) + public static class PrometheusClassicHistogram { - final Histogram noLabels; + final Histogram noLabels; - public PrometheusClassicHistogram() { - noLabels = Histogram.builder() - .name("test") - .help("help") - .classicOnly() - .build(); - } + public PrometheusClassicHistogram() { + noLabels = Histogram.builder().name("test").help("help").classicOnly().build(); } - - @State(Scope.Benchmark) - public static class PrometheusNativeHistogram { - - final Histogram noLabels; - - public PrometheusNativeHistogram() { - noLabels = Histogram.builder() - .name("test") - .help("help") - .nativeOnly() - .nativeInitialSchema(5) - .nativeMaxNumberOfBuckets(0) - .build(); - } + } + + @State(Scope.Benchmark) + public static class PrometheusNativeHistogram { + + final Histogram noLabels; + + public PrometheusNativeHistogram() { + noLabels = + Histogram.builder() + .name("test") + .help("help") + .nativeOnly() + .nativeInitialSchema(5) + .nativeMaxNumberOfBuckets(0) + .build(); } + } - @State(Scope.Benchmark) - public static class SimpleclientHistogram { + @State(Scope.Benchmark) + public static class SimpleclientHistogram { - final io.prometheus.client.Histogram noLabels; + final io.prometheus.client.Histogram noLabels; - public SimpleclientHistogram() { - noLabels = io.prometheus.client.Histogram.build() - .name("name") - .help("help") - .create(); - } + public SimpleclientHistogram() { + noLabels = io.prometheus.client.Histogram.build().name("name").help("help").create(); } - - @State(Scope.Benchmark) - public static class OpenTelemetryClassicHistogram { - - final io.opentelemetry.api.metrics.DoubleHistogram histogram; - - public OpenTelemetryClassicHistogram() { - - SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder() - .registerMetricReader(InMemoryMetricReader.create()) - .setResource(Resource.getDefault()) - .registerView(InstrumentSelector.builder() - .setName("test") - .build(), - View.builder() - .setAggregation(Aggregation.explicitBucketHistogram(Arrays.asList(.005, .01, .025, .05, .1, .25, .5, 1.0, 2.5, 5.0, 10.0))) - .build() - ) - .build(); - OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() - .setMeterProvider(sdkMeterProvider) - .build(); - Meter meter = openTelemetry - .meterBuilder("instrumentation-library-name") - .setInstrumentationVersion("1.0.0") - .build(); - this.histogram = meter - .histogramBuilder("test") - .setDescription("test") - .build(); - } + } + + @State(Scope.Benchmark) + public static class OpenTelemetryClassicHistogram { + + final io.opentelemetry.api.metrics.DoubleHistogram histogram; + + public OpenTelemetryClassicHistogram() { + + SdkMeterProvider sdkMeterProvider = + SdkMeterProvider.builder() + .registerMetricReader(InMemoryMetricReader.create()) + .setResource(Resource.getDefault()) + .registerView( + InstrumentSelector.builder().setName("test").build(), + View.builder() + .setAggregation( + Aggregation.explicitBucketHistogram( + Arrays.asList( + .005, .01, .025, .05, .1, .25, .5, 1.0, 2.5, 5.0, 10.0))) + .build()) + .build(); + OpenTelemetry openTelemetry = + OpenTelemetrySdk.builder().setMeterProvider(sdkMeterProvider).build(); + Meter meter = + openTelemetry + .meterBuilder("instrumentation-library-name") + .setInstrumentationVersion("1.0.0") + .build(); + this.histogram = meter.histogramBuilder("test").setDescription("test").build(); } - - @State(Scope.Benchmark) - public static class OpenTelemetryExponentialHistogram { - - final io.opentelemetry.api.metrics.DoubleHistogram histogram; - - public OpenTelemetryExponentialHistogram() { - - SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder() - .registerMetricReader(InMemoryMetricReader.create()) - .setResource(Resource.getDefault()) - .registerView(InstrumentSelector.builder() - .setName("test") - .build(), - View.builder() - .setAggregation(Aggregation.base2ExponentialBucketHistogram(10_000, 5)) - .build() - ) - .build(); - OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() - .setMeterProvider(sdkMeterProvider) - .build(); - Meter meter = openTelemetry - .meterBuilder("instrumentation-library-name") - .setInstrumentationVersion("1.0.0") - .build(); - this.histogram = meter - .histogramBuilder("test") - .setDescription("test") - .build(); - } + } + + @State(Scope.Benchmark) + public static class OpenTelemetryExponentialHistogram { + + final io.opentelemetry.api.metrics.DoubleHistogram histogram; + + public OpenTelemetryExponentialHistogram() { + + SdkMeterProvider sdkMeterProvider = + SdkMeterProvider.builder() + .registerMetricReader(InMemoryMetricReader.create()) + .setResource(Resource.getDefault()) + .registerView( + InstrumentSelector.builder().setName("test").build(), + View.builder() + .setAggregation(Aggregation.base2ExponentialBucketHistogram(10_000, 5)) + .build()) + .build(); + OpenTelemetry openTelemetry = + OpenTelemetrySdk.builder().setMeterProvider(sdkMeterProvider).build(); + Meter meter = + openTelemetry + .meterBuilder("instrumentation-library-name") + .setInstrumentationVersion("1.0.0") + .build(); + this.histogram = meter.histogramBuilder("test").setDescription("test").build(); } - - @Benchmark - @Threads(4) - public Histogram prometheusClassic(RandomNumbers randomNumbers, PrometheusClassicHistogram histogram) { - for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { - histogram.noLabels.observe(randomNumbers.randomNumbers[i]); - } - return histogram.noLabels; + } + + @Benchmark + @Threads(4) + public Histogram prometheusClassic( + RandomNumbers randomNumbers, PrometheusClassicHistogram histogram) { + for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { + histogram.noLabels.observe(randomNumbers.randomNumbers[i]); } - - @Benchmark - @Threads(4) - public Histogram prometheusNative(RandomNumbers randomNumbers, PrometheusNativeHistogram histogram) { - for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { - histogram.noLabels.observe(randomNumbers.randomNumbers[i]); - } - return histogram.noLabels; + return histogram.noLabels; + } + + @Benchmark + @Threads(4) + public Histogram prometheusNative( + RandomNumbers randomNumbers, PrometheusNativeHistogram histogram) { + for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { + histogram.noLabels.observe(randomNumbers.randomNumbers[i]); } - - @Benchmark - @Threads(4) - public io.prometheus.client.Histogram simpleclient(RandomNumbers randomNumbers, SimpleclientHistogram histogram) { - for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { - histogram.noLabels.observe(randomNumbers.randomNumbers[i]); - } - return histogram.noLabels; + return histogram.noLabels; + } + + @Benchmark + @Threads(4) + public io.prometheus.client.Histogram simpleclient( + RandomNumbers randomNumbers, SimpleclientHistogram histogram) { + for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { + histogram.noLabels.observe(randomNumbers.randomNumbers[i]); } - - @Benchmark - @Threads(4) - public io.opentelemetry.api.metrics.DoubleHistogram openTelemetryClassic(RandomNumbers randomNumbers, OpenTelemetryClassicHistogram histogram) { - for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { - histogram.histogram.record(randomNumbers.randomNumbers[i]); - } - return histogram.histogram; + return histogram.noLabels; + } + + @Benchmark + @Threads(4) + public io.opentelemetry.api.metrics.DoubleHistogram openTelemetryClassic( + RandomNumbers randomNumbers, OpenTelemetryClassicHistogram histogram) { + for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { + histogram.histogram.record(randomNumbers.randomNumbers[i]); } - - @Benchmark - @Threads(4) - public io.opentelemetry.api.metrics.DoubleHistogram openTelemetryExponential(RandomNumbers randomNumbers, OpenTelemetryExponentialHistogram histogram) { - for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { - histogram.histogram.record(randomNumbers.randomNumbers[i]); - } - return histogram.histogram; + return histogram.histogram; + } + + @Benchmark + @Threads(4) + public io.opentelemetry.api.metrics.DoubleHistogram openTelemetryExponential( + RandomNumbers randomNumbers, OpenTelemetryExponentialHistogram histogram) { + for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { + histogram.histogram.record(randomNumbers.randomNumbers[i]); } + return histogram.histogram; + } } diff --git a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/RandomNumbers.java b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/RandomNumbers.java index d7002d909..6778c4ea1 100644 --- a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/RandomNumbers.java +++ b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/RandomNumbers.java @@ -1,19 +1,18 @@ package io.prometheus.metrics.benchmarks; +import java.util.Random; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; -import java.util.Random; - @State(Scope.Thread) public class RandomNumbers { - final double[] randomNumbers = new double[10*1024]; + final double[] randomNumbers = new double[10 * 1024]; - public RandomNumbers() { - Random rand = new Random(0); - for (int i = 0; i < randomNumbers.length; i++) { - randomNumbers[i] = Math.abs(rand.nextGaussian()); - } + public RandomNumbers() { + Random rand = new Random(0); + for (int i = 0; i < randomNumbers.length; i++) { + randomNumbers[i] = Math.abs(rand.nextGaussian()); } + } } diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java index 7a0870bf3..af1652f76 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java @@ -1,47 +1,45 @@ package io.prometheus.metrics.examples.otel_exemplars.greeting; +import static io.prometheus.metrics.model.snapshots.Unit.nanosToSeconds; + import io.prometheus.metrics.core.metrics.Histogram; import io.prometheus.metrics.model.snapshots.Unit; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - import java.io.IOException; import java.util.Random; -import static io.prometheus.metrics.model.snapshots.Unit.nanosToSeconds; - -/** - * Hello World REST servlet, with an example counter and an example histogram. - */ +/** Hello World REST servlet, with an example counter and an example histogram. */ public class GreetingServlet extends HttpServlet { - private final Random random = new Random(0); + private final Random random = new Random(0); - private final Histogram histogram; + private final Histogram histogram; - public GreetingServlet() { - histogram = Histogram.builder() + public GreetingServlet() { + histogram = + Histogram.builder() .name("request_duration_seconds") .help("request duration in seconds") .unit(Unit.SECONDS) .labelNames("http_status") .register(); - histogram.initLabelValues("200"); - } - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - long start = System.nanoTime(); - try { - Thread.sleep((long) (Math.abs((random.nextGaussian() + 1.0) * 100.0))); - resp.setStatus(200); - resp.setContentType("text/plain"); - resp.getWriter().println("Hello, World!"); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } finally { - histogram.labelValues("200").observe(nanosToSeconds(System.nanoTime() - start)); - } + histogram.initLabelValues("200"); + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + long start = System.nanoTime(); + try { + Thread.sleep((long) (Math.abs((random.nextGaussian() + 1.0) * 100.0))); + resp.setStatus(200); + resp.setContentType("text/plain"); + resp.getWriter().println("Hello, World!"); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } finally { + histogram.labelValues("200").observe(nanosToSeconds(System.nanoTime() - start)); } + } } diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/Main.java b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/Main.java index 731e05cf9..c0cf09830 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/Main.java +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/Main.java @@ -2,34 +2,31 @@ import io.prometheus.metrics.exporter.servlet.jakarta.PrometheusMetricsServlet; import io.prometheus.metrics.instrumentation.jvm.JvmMetrics; +import java.io.File; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; -import java.io.File; - -/** - * Simple example using embedded Tomcat and the {@link PrometheusMetricsServlet}. - */ +/** Simple example using embedded Tomcat and the {@link PrometheusMetricsServlet}. */ public class Main { - public static void main(String[] args) throws LifecycleException { + public static void main(String[] args) throws LifecycleException { - JvmMetrics.builder().register(); + JvmMetrics.builder().register(); - Tomcat tomcat = new Tomcat(); - tomcat.setPort(8081); + Tomcat tomcat = new Tomcat(); + tomcat.setPort(8081); - Context ctx = tomcat.addContext("", new File(".").getAbsolutePath()); + Context ctx = tomcat.addContext("", new File(".").getAbsolutePath()); - Tomcat.addServlet(ctx, "hello", new GreetingServlet()); - ctx.addServletMappingDecoded("/*", "hello"); + Tomcat.addServlet(ctx, "hello", new GreetingServlet()); + ctx.addServletMappingDecoded("/*", "hello"); - Tomcat.addServlet(ctx, "metrics", new PrometheusMetricsServlet()); - ctx.addServletMappingDecoded("/metrics", "metrics"); + Tomcat.addServlet(ctx, "metrics", new PrometheusMetricsServlet()); + ctx.addServletMappingDecoded("/metrics", "metrics"); - tomcat.getConnector(); - tomcat.start(); - tomcat.getServer().await(); - } + tomcat.getConnector(); + tomcat.start(); + tomcat.getServer().await(); + } } diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java index 11c048d68..fbe293d50 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java @@ -1,12 +1,14 @@ package io.prometheus.metrics.examples.otel_exemplars.app; +import static io.prometheus.metrics.model.snapshots.Unit.nanosToSeconds; +import static java.net.http.HttpResponse.BodyHandlers.ofString; + import io.prometheus.metrics.core.metrics.Histogram; import io.prometheus.metrics.model.snapshots.Unit; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -15,51 +17,46 @@ import java.net.http.HttpResponse; import java.util.Random; -import static io.prometheus.metrics.model.snapshots.Unit.nanosToSeconds; -import static java.net.http.HttpResponse.BodyHandlers.ofString; - -/** - * Hello World REST servlet, with an example counter and an example histogram. - */ +/** Hello World REST servlet, with an example counter and an example histogram. */ public class HelloWorldServlet extends HttpServlet { - private final Random random = new Random(0); - - private final Histogram histogram; - - public HelloWorldServlet() { - histogram = Histogram.builder() - .name("request_duration_seconds") - .help("request duration in seconds") - .unit(Unit.SECONDS) - .labelNames("http_status") - .register(); - histogram.initLabelValues("200"); - } - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException { - long start = System.nanoTime(); - try { - Thread.sleep((long) (Math.abs((random.nextGaussian() + 1.0) * 100.0))); - String greeting = executeGreetingServiceRequest(); - resp.setStatus(200); - resp.setContentType("text/plain"); - resp.getWriter().print(greeting); - } catch (Exception e) { - throw new ServletException(e); - } finally { - histogram.labelValues("200").observe(nanosToSeconds(System.nanoTime() - start)); - } - } - - private String executeGreetingServiceRequest() throws URISyntaxException, IOException, InterruptedException { - HttpRequest request = HttpRequest.newBuilder() - .GET() - .uri(new URI("http://localhost:8081/")) - .build(); - HttpClient httpClient = HttpClient.newHttpClient(); - HttpResponse response = httpClient.send(request, ofString()); - return response.body(); + private final Random random = new Random(0); + + private final Histogram histogram; + + public HelloWorldServlet() { + histogram = + Histogram.builder() + .name("request_duration_seconds") + .help("request duration in seconds") + .unit(Unit.SECONDS) + .labelNames("http_status") + .register(); + histogram.initLabelValues("200"); + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException { + long start = System.nanoTime(); + try { + Thread.sleep((long) (Math.abs((random.nextGaussian() + 1.0) * 100.0))); + String greeting = executeGreetingServiceRequest(); + resp.setStatus(200); + resp.setContentType("text/plain"); + resp.getWriter().print(greeting); + } catch (Exception e) { + throw new ServletException(e); + } finally { + histogram.labelValues("200").observe(nanosToSeconds(System.nanoTime() - start)); } + } + + private String executeGreetingServiceRequest() + throws URISyntaxException, IOException, InterruptedException { + HttpRequest request = + HttpRequest.newBuilder().GET().uri(new URI("http://localhost:8081/")).build(); + HttpClient httpClient = HttpClient.newHttpClient(); + HttpResponse response = httpClient.send(request, ofString()); + return response.body(); + } } diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/Main.java b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/Main.java index 5fb5114bb..dc58256cb 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/Main.java +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/Main.java @@ -2,34 +2,31 @@ import io.prometheus.metrics.exporter.servlet.jakarta.PrometheusMetricsServlet; import io.prometheus.metrics.instrumentation.jvm.JvmMetrics; +import java.io.File; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; -import java.io.File; - -/** - * Simple example using embedded Tomcat and the {@link PrometheusMetricsServlet}. - */ +/** Simple example using embedded Tomcat and the {@link PrometheusMetricsServlet}. */ public class Main { - public static void main(String[] args) throws LifecycleException { + public static void main(String[] args) throws LifecycleException { - JvmMetrics.builder().register(); + JvmMetrics.builder().register(); - Tomcat tomcat = new Tomcat(); - tomcat.setPort(8080); + Tomcat tomcat = new Tomcat(); + tomcat.setPort(8080); - Context ctx = tomcat.addContext("", new File(".").getAbsolutePath()); + Context ctx = tomcat.addContext("", new File(".").getAbsolutePath()); - Tomcat.addServlet(ctx, "hello", new HelloWorldServlet()); - ctx.addServletMappingDecoded("/*", "hello"); + Tomcat.addServlet(ctx, "hello", new HelloWorldServlet()); + ctx.addServletMappingDecoded("/*", "hello"); - Tomcat.addServlet(ctx, "metrics", new PrometheusMetricsServlet()); - ctx.addServletMappingDecoded("/metrics", "metrics"); + Tomcat.addServlet(ctx, "metrics", new PrometheusMetricsServlet()); + ctx.addServletMappingDecoded("/metrics", "metrics"); - tomcat.getConnector(); - tomcat.start(); - tomcat.getServer().await(); - } + tomcat.getConnector(); + tomcat.start(); + tomcat.getServer().await(); + } } diff --git a/examples/example-exporter-httpserver/src/main/java/io/prometheus/metrics/examples/httpserver/Main.java b/examples/example-exporter-httpserver/src/main/java/io/prometheus/metrics/examples/httpserver/Main.java index f01874ef8..3b0976778 100644 --- a/examples/example-exporter-httpserver/src/main/java/io/prometheus/metrics/examples/httpserver/Main.java +++ b/examples/example-exporter-httpserver/src/main/java/io/prometheus/metrics/examples/httpserver/Main.java @@ -4,39 +4,36 @@ import io.prometheus.metrics.exporter.httpserver.HTTPServer; import io.prometheus.metrics.instrumentation.jvm.JvmMetrics; import io.prometheus.metrics.model.snapshots.Unit; - import java.io.IOException; -/** - * Simple example of an application exposing metrics via Prometheus' built-in HTTPServer. - */ +/** Simple example of an application exposing metrics via Prometheus' built-in HTTPServer. */ public class Main { - public static void main(String[] args) throws IOException, InterruptedException { + public static void main(String[] args) throws IOException, InterruptedException { - JvmMetrics.builder().register(); + JvmMetrics.builder().register(); - // Note: uptime_seconds_total is not a great example: - // The built-in JvmMetrics have an out-of-the-box metric named process_start_time_seconds - // with the start timestamp in seconds, so if you want to know the uptime you can simply - // run the Prometheus query - // time() - process_start_time_seconds - // rather than creating a custom uptime metric. - Counter counter = Counter.builder() - .name("uptime_seconds_total") - .help("total number of seconds since this application was started") - .unit(Unit.SECONDS) - .register(); + // Note: uptime_seconds_total is not a great example: + // The built-in JvmMetrics have an out-of-the-box metric named process_start_time_seconds + // with the start timestamp in seconds, so if you want to know the uptime you can simply + // run the Prometheus query + // time() - process_start_time_seconds + // rather than creating a custom uptime metric. + Counter counter = + Counter.builder() + .name("uptime_seconds_total") + .help("total number of seconds since this application was started") + .unit(Unit.SECONDS) + .register(); - HTTPServer server = HTTPServer.builder() - .port(9400) - .buildAndStart(); + HTTPServer server = HTTPServer.builder().port(9400).buildAndStart(); - System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + System.out.println( + "HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); - while (true) { - Thread.sleep(1000); - counter.inc(); - } + while (true) { + Thread.sleep(1000); + counter.inc(); } + } } diff --git a/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/Main.java b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/Main.java index da36346b9..0fac9a0d3 100644 --- a/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/Main.java +++ b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/Main.java @@ -1,23 +1,19 @@ package io.prometheus.metrics.examples.multitarget; -import java.io.IOException; - import io.prometheus.metrics.exporter.httpserver.HTTPServer; import io.prometheus.metrics.model.registry.PrometheusRegistry; +import java.io.IOException; -/** - * Simple example of an application exposing metrics via Prometheus' built-in HTTPServer. - */ +/** Simple example of an application exposing metrics via Prometheus' built-in HTTPServer. */ public class Main { - public static void main(String[] args) throws IOException, InterruptedException { + public static void main(String[] args) throws IOException, InterruptedException { - SampleMultiCollector xmc = new SampleMultiCollector(); - PrometheusRegistry.defaultRegistry.register(xmc); - HTTPServer server = HTTPServer.builder() - .port(9401) - .buildAndStart(); + SampleMultiCollector xmc = new SampleMultiCollector(); + PrometheusRegistry.defaultRegistry.register(xmc); + HTTPServer server = HTTPServer.builder().port(9401).buildAndStart(); - System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); - } + System.out.println( + "HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + } } diff --git a/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java index 819bb3028..7a05f0a8b 100644 --- a/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java +++ b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java @@ -1,9 +1,5 @@ package io.prometheus.metrics.examples.multitarget; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - import io.prometheus.metrics.model.registry.MultiCollector; import io.prometheus.metrics.model.registry.PrometheusScrapeRequest; import io.prometheus.metrics.model.snapshots.CounterSnapshot; @@ -13,76 +9,79 @@ import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import io.prometheus.metrics.model.snapshots.PrometheusNaming; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; public class SampleMultiCollector implements MultiCollector { - public SampleMultiCollector() { - super(); - } - - @Override - public MetricSnapshots collect() { - return new MetricSnapshots(); - } + public SampleMultiCollector() { + super(); + } - @Override - public MetricSnapshots collect(PrometheusScrapeRequest scrapeRequest) { - return collectMetricSnapshots(scrapeRequest); - } + @Override + public MetricSnapshots collect() { + return new MetricSnapshots(); + } - protected MetricSnapshots collectMetricSnapshots(PrometheusScrapeRequest scrapeRequest) { + @Override + public MetricSnapshots collect(PrometheusScrapeRequest scrapeRequest) { + return collectMetricSnapshots(scrapeRequest); + } - GaugeSnapshot.Builder gaugeBuilder = GaugeSnapshot.builder(); - gaugeBuilder.name("x_load").help("process load"); + protected MetricSnapshots collectMetricSnapshots(PrometheusScrapeRequest scrapeRequest) { - CounterSnapshot.Builder counterBuilder = CounterSnapshot.builder(); - counterBuilder.name(PrometheusNaming.sanitizeMetricName("x_calls_total")).help("invocations"); + GaugeSnapshot.Builder gaugeBuilder = GaugeSnapshot.builder(); + gaugeBuilder.name("x_load").help("process load"); - String[] targetNames = scrapeRequest.getParameterValues("target"); - String targetName; - String[] procs = scrapeRequest.getParameterValues("proc"); - if (targetNames == null || targetNames.length == 0) { - targetName = "defaultTarget"; - procs = null; //ignore procs param - } else { - targetName = targetNames[0]; - } - Builder counterDataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder(); - io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot.Builder gaugeDataPointBuilder = GaugeSnapshot.GaugeDataPointSnapshot.builder(); - Labels lbls = Labels.of("target", targetName); + CounterSnapshot.Builder counterBuilder = CounterSnapshot.builder(); + counterBuilder.name(PrometheusNaming.sanitizeMetricName("x_calls_total")).help("invocations"); - if (procs == null || procs.length == 0) { - counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); - gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); - counterDataPointBuilder.value(70); - gaugeDataPointBuilder.value(Math.random()); + String[] targetNames = scrapeRequest.getParameterValues("target"); + String targetName; + String[] procs = scrapeRequest.getParameterValues("proc"); + if (targetNames == null || targetNames.length == 0) { + targetName = "defaultTarget"; + procs = null; // ignore procs param + } else { + targetName = targetNames[0]; + } + Builder counterDataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder(); + io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot.Builder + gaugeDataPointBuilder = GaugeSnapshot.GaugeDataPointSnapshot.builder(); + Labels lbls = Labels.of("target", targetName); - counterBuilder.dataPoint(counterDataPointBuilder.build()); - gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); + if (procs == null || procs.length == 0) { + counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); + gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); + counterDataPointBuilder.value(70); + gaugeDataPointBuilder.value(Math.random()); - } else { - for (int i = 0; i < procs.length; i++) { - counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); - gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); - counterDataPointBuilder.value(Math.random()); - gaugeDataPointBuilder.value(Math.random()); + counterBuilder.dataPoint(counterDataPointBuilder.build()); + gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); - counterBuilder.dataPoint(counterDataPointBuilder.build()); - gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); - } - } - Collection snaps = new ArrayList(); - snaps.add(counterBuilder.build()); - snaps.add(gaugeBuilder.build()); - MetricSnapshots msnaps = new MetricSnapshots(snaps); - return msnaps; - } + } else { + for (int i = 0; i < procs.length; i++) { + counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); + gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); + counterDataPointBuilder.value(Math.random()); + gaugeDataPointBuilder.value(Math.random()); - public List getPrometheusNames() { - List names = new ArrayList(); - names.add("x_calls_total"); - names.add("x_load"); - return names; - } + counterBuilder.dataPoint(counterDataPointBuilder.build()); + gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); + } + } + Collection snaps = new ArrayList(); + snaps.add(counterBuilder.build()); + snaps.add(gaugeBuilder.build()); + MetricSnapshots msnaps = new MetricSnapshots(snaps); + return msnaps; + } + public List getPrometheusNames() { + List names = new ArrayList(); + names.add("x_calls_total"); + names.add("x_load"); + return names; + } } diff --git a/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/Main.java b/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/Main.java index 966b16d92..defe85074 100644 --- a/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/Main.java +++ b/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/Main.java @@ -5,37 +5,36 @@ import io.prometheus.metrics.instrumentation.jvm.JvmMetrics; import io.prometheus.metrics.model.snapshots.Unit; -/** - * Simple example of an application exposing metrics pushing metrics via OTLP. - */ +/** Simple example of an application exposing metrics pushing metrics via OTLP. */ public class Main { - public static void main(String[] args) throws Exception { + public static void main(String[] args) throws Exception { - // Note: Some JVM metrics are also defined as OpenTelemetry's semantic conventions. - // We have plans to implement a configuration option for JvmMetrics to use OpenTelemetry - // naming conventions rather than the Prometheus names. - JvmMetrics.builder().register(); + // Note: Some JVM metrics are also defined as OpenTelemetry's semantic conventions. + // We have plans to implement a configuration option for JvmMetrics to use OpenTelemetry + // naming conventions rather than the Prometheus names. + JvmMetrics.builder().register(); - // Note: uptime_seconds_total is not a great example: - // The built-in JvmMetrics have an out-of-the-box metric named process_start_time_seconds - // with the start timestamp in seconds, so if you want to know the uptime you can simply - // run the Prometheus query - // time() - process_start_time_seconds - // rather than creating a custom uptime metric. - Counter counter = Counter.builder() - .name("uptime_seconds_total") - .help("total number of seconds since this application was started") - .unit(Unit.SECONDS) - .register(); + // Note: uptime_seconds_total is not a great example: + // The built-in JvmMetrics have an out-of-the-box metric named process_start_time_seconds + // with the start timestamp in seconds, so if you want to know the uptime you can simply + // run the Prometheus query + // time() - process_start_time_seconds + // rather than creating a custom uptime metric. + Counter counter = + Counter.builder() + .name("uptime_seconds_total") + .help("total number of seconds since this application was started") + .unit(Unit.SECONDS) + .register(); - OpenTelemetryExporter.builder() - .intervalSeconds(5) // ridiculously short interval for demo purposes - .buildAndStart(); + OpenTelemetryExporter.builder() + .intervalSeconds(5) // ridiculously short interval for demo purposes + .buildAndStart(); - while (true) { - Thread.sleep(1000); - counter.inc(); - } + while (true) { + Thread.sleep(1000); + counter.inc(); } + } } diff --git a/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java b/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java index 72e8dd107..b8b8ef98b 100644 --- a/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java +++ b/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java @@ -19,127 +19,128 @@ public class ManualCompleteMetricsTest { - // This contains a complete set of all metric types, and target_info and otel_scope_info. - // I used this to expose in Prometheus format and OTLP format at the same time and compare the results. - // I'm keeping this as a backup for now, but this should be converted to an integration test. - // - // To run it, add prometheus-metrics-exporter-httpserver as a dependency and configure Prometheus - // to scrape from port 9400 in addition to receiving metrics via remote write. - - /* - public static void main(String[] args) throws Exception { - - Counter counter = Counter.newBuilder() - .withName("uptime_seconds_total") - .withHelp("total number of seconds since this application was started") - .withUnit(Unit.SECONDS) - .register(); - - Gauge gauge = Gauge.newBuilder() - .withName("temperature_celsius") - .withHelp("temperature in celsius") - .withUnit(Unit.CELSIUS) - .withLabelNames("location") - .register(); - - gauge.labelValues("inside").set(23.4); - gauge.labelValues("outside").set(9.3); - - // By default, the histogram will be exported as an exponential histogram in OpenTelemetry. - Histogram histogram = Histogram.newBuilder() - .withName("request_latency_seconds") - .withHelp("Request duration in seconds") - .withUnit(Unit.SECONDS) - .withLabelNames("http_status") - .register(); - - Random random = new Random(0); - for (int i = 0; i < 1000; i++) { - histogram.labelValues("200").observe(random.nextGaussian()); - } - - // Explicitly use a classic-only histogram to have an example of a classic histogram in OpenTelemetry - Histogram classicHistogram = Histogram.newBuilder() - .withName("request_size_bytes") - .withHelp("Request size in Bytes") - .withUnit(Unit.BYTES) - .withLabelNames("path") - .classicOnly() - .withClassicBuckets(128, 256, 512, 1024, 2048) - .register(); - - for (int i = 0; i < 15; i++) { - classicHistogram.labelValues("200").observe(random.nextInt(3000)); - } - - Summary summary = Summary.newBuilder() - .withName("response_latency_seconds") - .withHelp("Response latency seconds") - .withUnit(Unit.BYTES) - .withQuantile(0.95) - .withQuantile(0.99) - .register(); - - for (int i = 0; i < 1000; i++) { - summary.observe(random.nextGaussian()); - } - - Info targetInfo = Info.newBuilder() - .withName("target_info") - .withHelp("OTel resource") - .withLabelNames("service.version") - .register(); - targetInfo.setLabelValues("1.0.0"); - - Info scopeInfo = Info.newBuilder() - .withName("otel_scope_info") - .withLabelNames("otel.scope.name", "otel.scope.version", "library_mascot") - .register(); - - scopeInfo.setLabelValues("my.instrumentation.lib", "100.3", "bear"); - - Info info = Info.newBuilder() - .withName("java_runtime_info") - .withHelp("Java runtime info") - .withLabelNames("version", "vendor", "runtime") - .register(); - - String version = System.getProperty("java.runtime.version", "unknown"); - String vendor = System.getProperty("java.vm.vendor", "unknown"); - String runtime = System.getProperty("java.runtime.name", "unknown"); - - info.setLabelValues(version, vendor, runtime); - - StateSet stateSet = StateSet.newBuilder() - .withName("feature_flags") - .withLabelNames("env") - .withStates("feature1", "feature2") - .register(); - - stateSet.labelValues("dev").setFalse("feature1"); - stateSet.labelValues("dev").setTrue("feature2"); - - PrometheusRegistry.defaultRegistry.register(() -> UnknownSnapshot.newBuilder() - .withName("my_unknown_metric") - .addDataPoint(UnknownSnapshot.UnknownDataPointSnapshot.newBuilder() - .withLabels(Labels.of("a", "1", "b", "2")) - .withValue(3.0) - .build()) - .build()); - - HTTPServer server = HTTPServer.newBuilder() - .withPort(9400) - .buildAndStart(); - System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); - - OpenTelemetryExporter.newBuilder() - .withIntervalSeconds(5) - .buildAndStart(); - - while (true) { - Thread.sleep(1000); - counter.inc(); - } - } - */ + // This contains a complete set of all metric types, and target_info and otel_scope_info. + // I used this to expose in Prometheus format and OTLP format at the same time and compare the + // results. + // I'm keeping this as a backup for now, but this should be converted to an integration test. + // + // To run it, add prometheus-metrics-exporter-httpserver as a dependency and configure Prometheus + // to scrape from port 9400 in addition to receiving metrics via remote write. + + /* + public static void main(String[] args) throws Exception { + + Counter counter = Counter.newBuilder() + .withName("uptime_seconds_total") + .withHelp("total number of seconds since this application was started") + .withUnit(Unit.SECONDS) + .register(); + + Gauge gauge = Gauge.newBuilder() + .withName("temperature_celsius") + .withHelp("temperature in celsius") + .withUnit(Unit.CELSIUS) + .withLabelNames("location") + .register(); + + gauge.labelValues("inside").set(23.4); + gauge.labelValues("outside").set(9.3); + + // By default, the histogram will be exported as an exponential histogram in OpenTelemetry. + Histogram histogram = Histogram.newBuilder() + .withName("request_latency_seconds") + .withHelp("Request duration in seconds") + .withUnit(Unit.SECONDS) + .withLabelNames("http_status") + .register(); + + Random random = new Random(0); + for (int i = 0; i < 1000; i++) { + histogram.labelValues("200").observe(random.nextGaussian()); + } + + // Explicitly use a classic-only histogram to have an example of a classic histogram in OpenTelemetry + Histogram classicHistogram = Histogram.newBuilder() + .withName("request_size_bytes") + .withHelp("Request size in Bytes") + .withUnit(Unit.BYTES) + .withLabelNames("path") + .classicOnly() + .withClassicBuckets(128, 256, 512, 1024, 2048) + .register(); + + for (int i = 0; i < 15; i++) { + classicHistogram.labelValues("200").observe(random.nextInt(3000)); + } + + Summary summary = Summary.newBuilder() + .withName("response_latency_seconds") + .withHelp("Response latency seconds") + .withUnit(Unit.BYTES) + .withQuantile(0.95) + .withQuantile(0.99) + .register(); + + for (int i = 0; i < 1000; i++) { + summary.observe(random.nextGaussian()); + } + + Info targetInfo = Info.newBuilder() + .withName("target_info") + .withHelp("OTel resource") + .withLabelNames("service.version") + .register(); + targetInfo.setLabelValues("1.0.0"); + + Info scopeInfo = Info.newBuilder() + .withName("otel_scope_info") + .withLabelNames("otel.scope.name", "otel.scope.version", "library_mascot") + .register(); + + scopeInfo.setLabelValues("my.instrumentation.lib", "100.3", "bear"); + + Info info = Info.newBuilder() + .withName("java_runtime_info") + .withHelp("Java runtime info") + .withLabelNames("version", "vendor", "runtime") + .register(); + + String version = System.getProperty("java.runtime.version", "unknown"); + String vendor = System.getProperty("java.vm.vendor", "unknown"); + String runtime = System.getProperty("java.runtime.name", "unknown"); + + info.setLabelValues(version, vendor, runtime); + + StateSet stateSet = StateSet.newBuilder() + .withName("feature_flags") + .withLabelNames("env") + .withStates("feature1", "feature2") + .register(); + + stateSet.labelValues("dev").setFalse("feature1"); + stateSet.labelValues("dev").setTrue("feature2"); + + PrometheusRegistry.defaultRegistry.register(() -> UnknownSnapshot.newBuilder() + .withName("my_unknown_metric") + .addDataPoint(UnknownSnapshot.UnknownDataPointSnapshot.newBuilder() + .withLabels(Labels.of("a", "1", "b", "2")) + .withValue(3.0) + .build()) + .build()); + + HTTPServer server = HTTPServer.newBuilder() + .withPort(9400) + .buildAndStart(); + System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + + OpenTelemetryExporter.newBuilder() + .withIntervalSeconds(5) + .buildAndStart(); + + while (true) { + Thread.sleep(1000); + counter.inc(); + } + } + */ } diff --git a/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java b/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java index d3d8f37e5..eb2fa4f19 100644 --- a/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java +++ b/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java @@ -1,57 +1,56 @@ package io.prometheus.metrics.examples.tomcat_servlet; +import static io.prometheus.metrics.model.snapshots.Unit.nanosToSeconds; + import io.prometheus.metrics.core.metrics.Counter; import io.prometheus.metrics.core.metrics.Histogram; import io.prometheus.metrics.model.snapshots.Unit; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - import java.io.IOException; import java.util.Random; -import static io.prometheus.metrics.model.snapshots.Unit.nanosToSeconds; - -/** - * Hello World REST servlet, with an example counter and an example histogram. - */ +/** Hello World REST servlet, with an example counter and an example histogram. */ public class HelloWorldServlet extends HttpServlet { - private final Random random = new Random(0); - - // Note: The requests_total counter is not a great example, because the - // request_duration_seconds histogram below also has a count with the number of requests. - private final Counter counter = Counter.builder() - .name("requests_total") - .help("total number of requests") - .labelNames("http_status") - .register(); - - private final Histogram histogram = Histogram.builder() - .name("request_duration_seconds") - .help("request duration in seconds") - .unit(Unit.SECONDS) - .labelNames("http_status") - .register(); - - public HelloWorldServlet() { - counter.initLabelValues("200"); - histogram.initLabelValues("200"); - } - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - long start = System.nanoTime(); - try { - Thread.sleep((long) (Math.abs((random.nextGaussian() + 1.0) * 100.0))); - resp.setStatus(200); - resp.setContentType("text/plain"); - resp.getWriter().println("Hello, World!"); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } finally { - counter.labelValues("200").inc(); - histogram.labelValues("200").observe(nanosToSeconds(System.nanoTime() - start)); - } + private final Random random = new Random(0); + + // Note: The requests_total counter is not a great example, because the + // request_duration_seconds histogram below also has a count with the number of requests. + private final Counter counter = + Counter.builder() + .name("requests_total") + .help("total number of requests") + .labelNames("http_status") + .register(); + + private final Histogram histogram = + Histogram.builder() + .name("request_duration_seconds") + .help("request duration in seconds") + .unit(Unit.SECONDS) + .labelNames("http_status") + .register(); + + public HelloWorldServlet() { + counter.initLabelValues("200"); + histogram.initLabelValues("200"); + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + long start = System.nanoTime(); + try { + Thread.sleep((long) (Math.abs((random.nextGaussian() + 1.0) * 100.0))); + resp.setStatus(200); + resp.setContentType("text/plain"); + resp.getWriter().println("Hello, World!"); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } finally { + counter.labelValues("200").inc(); + histogram.labelValues("200").observe(nanosToSeconds(System.nanoTime() - start)); } + } } diff --git a/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/Main.java b/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/Main.java index 4ce6353db..81bc2ac19 100644 --- a/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/Main.java +++ b/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/Main.java @@ -2,38 +2,35 @@ import io.prometheus.metrics.exporter.servlet.jakarta.PrometheusMetricsServlet; import io.prometheus.metrics.instrumentation.jvm.JvmMetrics; -import org.apache.catalina.Context; -import org.apache.catalina.LifecycleException; -import org.apache.catalina.startup.Tomcat; - import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import org.apache.catalina.Context; +import org.apache.catalina.LifecycleException; +import org.apache.catalina.startup.Tomcat; -/** - * Simple example using embedded Tomcat and the {@link PrometheusMetricsServlet}. - */ +/** Simple example using embedded Tomcat and the {@link PrometheusMetricsServlet}. */ public class Main { - public static void main(String[] args) throws LifecycleException, IOException { + public static void main(String[] args) throws LifecycleException, IOException { - JvmMetrics.builder().register(); + JvmMetrics.builder().register(); - Tomcat tomcat = new Tomcat(); - Path tmpDir = Files.createTempDirectory("prometheus-tomcat-servlet-example-"); - tomcat.setBaseDir(tmpDir.toFile().getAbsolutePath()); + Tomcat tomcat = new Tomcat(); + Path tmpDir = Files.createTempDirectory("prometheus-tomcat-servlet-example-"); + tomcat.setBaseDir(tmpDir.toFile().getAbsolutePath()); - Context ctx = tomcat.addContext("", new File(".").getAbsolutePath()); + Context ctx = tomcat.addContext("", new File(".").getAbsolutePath()); - Tomcat.addServlet(ctx, "hello", new HelloWorldServlet()); - ctx.addServletMappingDecoded("/*", "hello"); + Tomcat.addServlet(ctx, "hello", new HelloWorldServlet()); + ctx.addServletMappingDecoded("/*", "hello"); - Tomcat.addServlet(ctx, "metrics", new PrometheusMetricsServlet()); - ctx.addServletMappingDecoded("/metrics", "metrics"); + Tomcat.addServlet(ctx, "metrics", new PrometheusMetricsServlet()); + ctx.addServletMappingDecoded("/metrics", "metrics"); - tomcat.getConnector(); - tomcat.start(); - tomcat.getServer().await(); - } + tomcat.getConnector(); + tomcat.start(); + tomcat.getServer().await(); + } } diff --git a/examples/example-native-histogram/src/main/java/io/prometheus/metrics/examples/nativehistogram/Main.java b/examples/example-native-histogram/src/main/java/io/prometheus/metrics/examples/nativehistogram/Main.java index 591216fb7..b23fd054d 100644 --- a/examples/example-native-histogram/src/main/java/io/prometheus/metrics/examples/nativehistogram/Main.java +++ b/examples/example-native-histogram/src/main/java/io/prometheus/metrics/examples/nativehistogram/Main.java @@ -4,36 +4,35 @@ import io.prometheus.metrics.exporter.httpserver.HTTPServer; import io.prometheus.metrics.instrumentation.jvm.JvmMetrics; import io.prometheus.metrics.model.snapshots.Unit; - import java.io.IOException; import java.util.Random; public class Main { - public static void main(String[] args) throws IOException, InterruptedException { + public static void main(String[] args) throws IOException, InterruptedException { - JvmMetrics.builder().register(); + JvmMetrics.builder().register(); - Histogram histogram = Histogram.builder() - .name("request_latency_seconds") - .help("request latency in seconds") - .unit(Unit.SECONDS) - .labelNames("path", "status") - .register(); + Histogram histogram = + Histogram.builder() + .name("request_latency_seconds") + .help("request latency in seconds") + .unit(Unit.SECONDS) + .labelNames("path", "status") + .register(); - HTTPServer server = HTTPServer.builder() - .port(9400) - .buildAndStart(); + HTTPServer server = HTTPServer.builder().port(9400).buildAndStart(); - System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + System.out.println( + "HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); - Random random = new Random(0); + Random random = new Random(0); - while (true) { - double duration = Math.abs(random.nextGaussian() / 10.0 + 0.2); - String status = random.nextInt(100) < 20 ? "500" : "200"; - histogram.labelValues("/", status).observe(duration); - Thread.sleep(1000); - } + while (true) { + double duration = Math.abs(random.nextGaussian() / 10.0 + 0.2); + String status = random.nextInt(100) < 20 ? "500" : "200"; + histogram.labelValues("/", status).observe(duration); + Thread.sleep(1000); } + } } diff --git a/examples/example-prometheus-properties/src/main/java/io/prometheus/metrics/examples/prometheus_properties/Main.java b/examples/example-prometheus-properties/src/main/java/io/prometheus/metrics/examples/prometheus_properties/Main.java index 97611fe7b..e1f5954bc 100644 --- a/examples/example-prometheus-properties/src/main/java/io/prometheus/metrics/examples/prometheus_properties/Main.java +++ b/examples/example-prometheus-properties/src/main/java/io/prometheus/metrics/examples/prometheus_properties/Main.java @@ -4,42 +4,42 @@ import io.prometheus.metrics.exporter.httpserver.HTTPServer; import io.prometheus.metrics.instrumentation.jvm.JvmMetrics; import io.prometheus.metrics.model.snapshots.Unit; - import java.io.IOException; import java.util.Random; public class Main { - public static void main(String[] args) throws IOException, InterruptedException { + public static void main(String[] args) throws IOException, InterruptedException { - JvmMetrics.builder().register(); + JvmMetrics.builder().register(); - Histogram requestDuration = Histogram.builder() - .name("request_duration_seconds") - .help("request duration in seconds") - .unit(Unit.SECONDS) - .register(); + Histogram requestDuration = + Histogram.builder() + .name("request_duration_seconds") + .help("request duration in seconds") + .unit(Unit.SECONDS) + .register(); - Histogram requestSize = Histogram.builder() - .name("request_size_bytes") - .help("request size in bytes") - .unit(Unit.BYTES) - .register(); + Histogram requestSize = + Histogram.builder() + .name("request_size_bytes") + .help("request size in bytes") + .unit(Unit.BYTES) + .register(); - HTTPServer server = HTTPServer.builder() - .port(9400) - .buildAndStart(); + HTTPServer server = HTTPServer.builder().port(9400).buildAndStart(); - System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + System.out.println( + "HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); - Random random = new Random(0); + Random random = new Random(0); - while (true) { - double duration = Math.abs(random.nextGaussian() / 10.0 + 0.2); - double size = random.nextInt(1000) + 256; - requestDuration.observe(duration); - requestSize.observe(size); - Thread.sleep(1000); - } + while (true) { + double duration = Math.abs(random.nextGaussian() / 10.0 + 0.2); + double size = random.nextInt(1000) + 256; + requestDuration.observe(duration); + requestSize.observe(size); + Thread.sleep(1000); } + } } diff --git a/examples/example-simpleclient-bridge/src/main/java/io/prometheus/metrics/examples/simpleclient/Main.java b/examples/example-simpleclient-bridge/src/main/java/io/prometheus/metrics/examples/simpleclient/Main.java index cb0488d57..dd9dbcdcb 100644 --- a/examples/example-simpleclient-bridge/src/main/java/io/prometheus/metrics/examples/simpleclient/Main.java +++ b/examples/example-simpleclient-bridge/src/main/java/io/prometheus/metrics/examples/simpleclient/Main.java @@ -3,39 +3,34 @@ import io.prometheus.client.Counter; import io.prometheus.metrics.exporter.httpserver.HTTPServer; import io.prometheus.metrics.simpleclient.bridge.SimpleclientCollector; - import java.io.IOException; -/** - * Simple example of the simpleclient backwards compatibility module. - */ +/** Simple example of the simpleclient backwards compatibility module. */ public class Main { - public static void main(String[] args) throws IOException, InterruptedException { + public static void main(String[] args) throws IOException, InterruptedException { - // The following call will register all metrics from the old CollectorRegistry.defaultRegistry - // with the new PrometheusRegistry.defaultRegistry. + // The following call will register all metrics from the old CollectorRegistry.defaultRegistry + // with the new PrometheusRegistry.defaultRegistry. - SimpleclientCollector.builder().register(); + SimpleclientCollector.builder().register(); - // Register a counter with the old CollectorRegistry. - // It doesn't matter whether the counter is registered before or after bridging with PrometheusRegistry. + // Register a counter with the old CollectorRegistry. + // It doesn't matter whether the counter is registered before or after bridging with + // PrometheusRegistry. - Counter simpleclientCounter = Counter.build() - .name("events_total") - .help("total number of events") - .register(); + Counter simpleclientCounter = + Counter.build().name("events_total").help("total number of events").register(); - simpleclientCounter.inc(); + simpleclientCounter.inc(); - // Expose metrics from the new PrometheusRegistry. This should contain the events_total metric. + // Expose metrics from the new PrometheusRegistry. This should contain the events_total metric. - HTTPServer server = HTTPServer.builder() - .port(9400) - .buildAndStart(); + HTTPServer server = HTTPServer.builder().port(9400).buildAndStart(); - System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + System.out.println( + "HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); - Thread.currentThread().join(); - } + Thread.currentThread().join(); + } } diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/LogConsumer.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/LogConsumer.java index d60e53979..0e6cfbcc6 100644 --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/LogConsumer.java +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/LogConsumer.java @@ -1,36 +1,33 @@ package io.prometheus.client.it.common; -import org.testcontainers.containers.output.OutputFrame; - import java.util.function.Consumer; +import org.testcontainers.containers.output.OutputFrame; -/** - * Print Docker logs from TestContainers to stdout or stderr. - */ +/** Print Docker logs from TestContainers to stdout or stderr. */ public class LogConsumer implements Consumer { - private final String prefix; + private final String prefix; - private LogConsumer(String prefix) { - this.prefix = prefix; - } + private LogConsumer(String prefix) { + this.prefix = prefix; + } - public static LogConsumer withPrefix(String prefix) { - return new LogConsumer(prefix); - } + public static LogConsumer withPrefix(String prefix) { + return new LogConsumer(prefix); + } - @Override - public void accept(OutputFrame outputFrame) { - switch (outputFrame.getType()) { - case STDOUT: - System.out.print(prefix + " - " + outputFrame.getUtf8String()); - break; - case END: - System.out.println(prefix + " - END"); - break; - default: // STDERR or unexpected - System.err.print(prefix + " - " + outputFrame.getUtf8String()); - break; - } + @Override + public void accept(OutputFrame outputFrame) { + switch (outputFrame.getType()) { + case STDOUT: + System.out.print(prefix + " - " + outputFrame.getUtf8String()); + break; + case END: + System.out.println(prefix + " - END"); + break; + default: // STDERR or unexpected + System.err.print(prefix + " - " + outputFrame.getUtf8String()); + break; } + } } diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java index dc9a32992..783ccb7a5 100644 --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java @@ -1,6 +1,6 @@ package io.prometheus.client.it.common; -import org.junit.Assert; +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; import java.io.File; import java.io.IOException; @@ -8,94 +8,96 @@ import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.util.function.Predicate; +import org.junit.Assert; -import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; - -/** - * Temporary directory in ./target/ to be mounted as a volume in Docker containers. - */ +/** Temporary directory in ./target/ to be mounted as a volume in Docker containers. */ public class Volume { - private final Path tmpDir; // will be created in the ./target/ directory + private final Path tmpDir; // will be created in the ./target/ directory - private Volume(Path tmpDir) { - this.tmpDir = tmpDir; - } + private Volume(Path tmpDir) { + this.tmpDir = tmpDir; + } - public static Volume create(String prefix) throws IOException, URISyntaxException { - Path targetDir = Paths.get(Volume.class.getResource("/").toURI()).getParent(); - Assert.assertEquals("failed to locate target/ directory", "target", targetDir.getFileName().toString()); - return new Volume(Files.createTempDirectory(targetDir, prefix + "-")); - } + public static Volume create(String prefix) throws IOException, URISyntaxException { + Path targetDir = Paths.get(Volume.class.getResource("/").toURI()).getParent(); + Assert.assertEquals( + "failed to locate target/ directory", "target", targetDir.getFileName().toString()); + return new Volume(Files.createTempDirectory(targetDir, prefix + "-")); + } - /** - * Copy a file or directory to this volume. - * @param src is relative to {@code ./target/} - */ - public Volume copy(String src) throws IOException { - Path srcPath = tmpDir.getParent().resolve(src); - if (Files.isRegularFile(srcPath)) { - Files.copy(srcPath, tmpDir.resolve(srcPath.getFileName()), REPLACE_EXISTING); - } else if (Files.isDirectory(srcPath)) { - Path dest = tmpDir.resolve(srcPath.getFileName()); - Files.createDirectories(dest); - Files.walkFileTree(srcPath, new SimpleFileVisitor() { + /** + * Copy a file or directory to this volume. + * + * @param src is relative to {@code ./target/} + */ + public Volume copy(String src) throws IOException { + Path srcPath = tmpDir.getParent().resolve(src); + if (Files.isRegularFile(srcPath)) { + Files.copy(srcPath, tmpDir.resolve(srcPath.getFileName()), REPLACE_EXISTING); + } else if (Files.isDirectory(srcPath)) { + Path dest = tmpDir.resolve(srcPath.getFileName()); + Files.createDirectories(dest); + Files.walkFileTree( + srcPath, + new SimpleFileVisitor() { - // create parent directories - @Override - public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { - Files.createDirectories(dest.resolve(srcPath.relativize(dir))); - return FileVisitResult.CONTINUE; - } + // create parent directories + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) + throws IOException { + Files.createDirectories(dest.resolve(srcPath.relativize(dir))); + return FileVisitResult.CONTINUE; + } - // copy file - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - Files.copy(file, dest.resolve(srcPath.relativize(file)), REPLACE_EXISTING); - return FileVisitResult.CONTINUE; - } - }); - } else { - Assert.fail(src + ": No such file or directory"); - } - return this; + // copy file + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) + throws IOException { + Files.copy(file, dest.resolve(srcPath.relativize(file)), REPLACE_EXISTING); + return FileVisitResult.CONTINUE; + } + }); + } else { + Assert.fail(src + ": No such file or directory"); } + return this; + } - /** - * Remove files in tmpDir if they match the predicate. - */ - public void rm(Predicate predicate) throws IOException { - Files.walkFileTree(tmpDir, new SimpleFileVisitor() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - if (predicate.test(file)) { - Files.delete(file); - } - return FileVisitResult.CONTINUE; + /** Remove files in tmpDir if they match the predicate. */ + public void rm(Predicate predicate) throws IOException { + Files.walkFileTree( + tmpDir, + new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) + throws IOException { + if (predicate.test(file)) { + Files.delete(file); } + return FileVisitResult.CONTINUE; + } }); - } + } - public String getHostPath() { - return tmpDir.toString(); - } + public String getHostPath() { + return tmpDir.toString(); + } - /** - * Recursively remove tmpDir and its contents. - */ - public void remove() throws IOException { - if (!deleteRecursively(tmpDir.toFile())) { - throw new IOException(tmpDir + ": Failed to remove temporary test directory."); - } + /** Recursively remove tmpDir and its contents. */ + public void remove() throws IOException { + if (!deleteRecursively(tmpDir.toFile())) { + throw new IOException(tmpDir + ": Failed to remove temporary test directory."); } + } - private boolean deleteRecursively(File file) { - File[] allContents = file.listFiles(); - if (allContents != null) { - for (File child : allContents) { - deleteRecursively(child); - } - } - return file.delete(); + private boolean deleteRecursively(File file) { + File[] allContents = file.listFiles(); + if (allContents != null) { + for (File child : allContents) { + deleteRecursively(child); + } } + return file.delete(); + } } diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java b/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java index b8cdc5141..4c665dd81 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java @@ -6,85 +6,87 @@ import io.prometheus.metrics.exporter.httpserver.HTTPServer; import io.prometheus.metrics.model.registry.Collector; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.Unit; - import java.io.IOException; public class HTTPServerSample { - enum Mode { - success, - error - } - - public static void main(String[] args) throws IOException, InterruptedException { - - if (args.length != 2) { - System.err.println("Usage: java -jar exporter-httpserver-sample.jar "); - System.err.println("Where mode is \"success\" or \"error\"."); - System.exit(1); - } - - int port = parsePortOrExit(args[0]); - Mode mode = parseModeOrExit(args[1]); - - Counter counter = Counter.builder() - .name("uptime_seconds_total") - .help("total number of seconds since this application was started") - .unit(Unit.SECONDS) - .register(); - counter.inc(17); + enum Mode { + success, + error + } - Info info = Info.builder() - .name("integration_test_info") - .help("Info metric on this integration test") - .labelNames("test_name") - .register(); - info.addLabelValues("exporter-httpserver-sample"); + public static void main(String[] args) throws IOException, InterruptedException { - Gauge gauge = Gauge.builder() - .name("temperature_celsius") - .help("Temperature in Celsius") - .unit(Unit.CELSIUS) - .labelNames("location") - .register(); - gauge.labelValues("inside").set(23.0); - gauge.labelValues("outside").set(27.0); + if (args.length != 2) { + System.err.println("Usage: java -jar exporter-httpserver-sample.jar "); + System.err.println("Where mode is \"success\" or \"error\"."); + System.exit(1); + } - if (mode == Mode.error) { - Collector failingCollector = () -> { - throw new RuntimeException("Simulating an error."); - }; + int port = parsePortOrExit(args[0]); + Mode mode = parseModeOrExit(args[1]); + + Counter counter = + Counter.builder() + .name("uptime_seconds_total") + .help("total number of seconds since this application was started") + .unit(Unit.SECONDS) + .register(); + counter.inc(17); + + Info info = + Info.builder() + .name("integration_test_info") + .help("Info metric on this integration test") + .labelNames("test_name") + .register(); + info.addLabelValues("exporter-httpserver-sample"); + + Gauge gauge = + Gauge.builder() + .name("temperature_celsius") + .help("Temperature in Celsius") + .unit(Unit.CELSIUS) + .labelNames("location") + .register(); + gauge.labelValues("inside").set(23.0); + gauge.labelValues("outside").set(27.0); + + if (mode == Mode.error) { + Collector failingCollector = + () -> { + throw new RuntimeException("Simulating an error."); + }; + + PrometheusRegistry.defaultRegistry.register(failingCollector); + } - PrometheusRegistry.defaultRegistry.register(failingCollector); - } + HTTPServer server = HTTPServer.builder().port(port).buildAndStart(); - HTTPServer server = HTTPServer.builder() - .port(port) - .buildAndStart(); + System.out.println( + "HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + Thread.currentThread().join(); // wait forever + } - System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); - Thread.currentThread().join(); // wait forever + private static int parsePortOrExit(String port) { + try { + return Integer.parseInt(port); + } catch (NumberFormatException e) { + System.err.println("\"" + port + "\": Invalid port number."); + System.exit(1); } - - private static int parsePortOrExit(String port) { - try { - return Integer.parseInt(port); - } catch (NumberFormatException e) { - System.err.println("\"" + port + "\": Invalid port number."); - System.exit(1); - } - return 0; // this won't happen - } - - private static Mode parseModeOrExit(String mode) { - try { - return Mode.valueOf(mode); - } catch (IllegalArgumentException e) { - System.err.println("\"" + mode + "\": Invalid mode. Legal values are \"success\" and \"error\"."); - System.exit(1); - } - return null; // this won't happen + return 0; // this won't happen + } + + private static Mode parseModeOrExit(String mode) { + try { + return Mode.valueOf(mode); + } catch (IllegalArgumentException e) { + System.err.println( + "\"" + mode + "\": Invalid mode. Legal values are \"success\" and \"error\"."); + System.exit(1); } + return null; // this won't happen + } } diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java index 9e1a22487..1cc16ee4b 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java @@ -6,99 +6,101 @@ import io.prometheus.metrics.exporter.servlet.jakarta.PrometheusMetricsServlet; import io.prometheus.metrics.model.registry.Collector; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.Unit; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.servlet.ServletHandler; -/** - * Sample application using the {@link PrometheusMetricsServlet} in Jetty. - */ +/** Sample application using the {@link PrometheusMetricsServlet} in Jetty. */ public class ExporterServletJettySample { - enum Mode { - success, - error - } + enum Mode { + success, + error + } + + public static void main(String[] args) throws Exception { - public static void main(String[] args) throws Exception { - - if (args.length != 2) { - System.err.println("Usage: java -jar exporter-servlet-jetty-sample.jar "); - System.err.println("Where mode is \"success\" or \"error\"."); - System.exit(1); - } - - int port = parsePortOrExit(args[0]); - Mode mode = parseModeOrExit(args[1]); - - Counter counter = Counter.builder() - .name("uptime_seconds_total") - .help("total number of seconds since this application was started") - .unit(Unit.SECONDS) - .register(); - counter.inc(17); - - Info info = Info.builder() - .name("integration_test_info") - .help("Info metric on this integration test") - .labelNames("test_name") - .register(); - info.addLabelValues("exporter-servlet-jetty-sample"); - - Gauge gauge = Gauge.builder() - .name("temperature_celsius") - .help("Temperature in Celsius") - .unit(Unit.CELSIUS) - .labelNames("location") - .register(); - gauge.labelValues("inside").set(23.0); - gauge.labelValues("outside").set(27.0); - - if (mode == Mode.error) { - Collector failingCollector = () -> { - throw new RuntimeException("Simulating an error."); - }; - - PrometheusRegistry.defaultRegistry.register(failingCollector); - } - - Server server = new Server(); - - // set port - ServerConnector connector = new ServerConnector(server); - connector.setPort(port); - server.setConnectors(new Connector[] {connector}); - - // register servlet - ServletHandler servletHandler = new ServletHandler(); - servletHandler.addServletWithMapping(PrometheusMetricsServlet.class, "/metrics"); - server.setHandler(servletHandler); - - System.out.println("Running on http://localhost:" + port + "/metrics"); - - // run - server.start(); + if (args.length != 2) { + System.err.println("Usage: java -jar exporter-servlet-jetty-sample.jar "); + System.err.println("Where mode is \"success\" or \"error\"."); + System.exit(1); } - private static int parsePortOrExit(String port) { - try { - return Integer.parseInt(port); - } catch (NumberFormatException e) { - System.err.println("\"" + port + "\": Invalid port number."); - System.exit(1); - } - return 0; // this won't happen + int port = parsePortOrExit(args[0]); + Mode mode = parseModeOrExit(args[1]); + + Counter counter = + Counter.builder() + .name("uptime_seconds_total") + .help("total number of seconds since this application was started") + .unit(Unit.SECONDS) + .register(); + counter.inc(17); + + Info info = + Info.builder() + .name("integration_test_info") + .help("Info metric on this integration test") + .labelNames("test_name") + .register(); + info.addLabelValues("exporter-servlet-jetty-sample"); + + Gauge gauge = + Gauge.builder() + .name("temperature_celsius") + .help("Temperature in Celsius") + .unit(Unit.CELSIUS) + .labelNames("location") + .register(); + gauge.labelValues("inside").set(23.0); + gauge.labelValues("outside").set(27.0); + + if (mode == Mode.error) { + Collector failingCollector = + () -> { + throw new RuntimeException("Simulating an error."); + }; + + PrometheusRegistry.defaultRegistry.register(failingCollector); } - private static Mode parseModeOrExit(String mode) { - try { - return Mode.valueOf(mode); - } catch (IllegalArgumentException e) { - System.err.println("\"" + mode + "\": Invalid mode. Legal values are \"success\" and \"error\"."); - System.exit(1); - } - return null; // this won't happen + Server server = new Server(); + + // set port + ServerConnector connector = new ServerConnector(server); + connector.setPort(port); + server.setConnectors(new Connector[] {connector}); + + // register servlet + ServletHandler servletHandler = new ServletHandler(); + servletHandler.addServletWithMapping(PrometheusMetricsServlet.class, "/metrics"); + server.setHandler(servletHandler); + + System.out.println("Running on http://localhost:" + port + "/metrics"); + + // run + server.start(); + } + + private static int parsePortOrExit(String port) { + try { + return Integer.parseInt(port); + } catch (NumberFormatException e) { + System.err.println("\"" + port + "\": Invalid port number."); + System.exit(1); + } + return 0; // this won't happen + } + + private static Mode parseModeOrExit(String mode) { + try { + return Mode.valueOf(mode); + } catch (IllegalArgumentException e) { + System.err.println( + "\"" + mode + "\": Invalid mode. Legal values are \"success\" and \"error\"."); + System.exit(1); } + return null; // this won't happen + } } diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java index 8d13082b7..ead2ee88f 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java @@ -6,99 +6,100 @@ import io.prometheus.metrics.exporter.servlet.jakarta.PrometheusMetricsServlet; import io.prometheus.metrics.model.registry.Collector; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.Unit; -import org.apache.catalina.Context; -import org.apache.catalina.LifecycleException; -import org.apache.catalina.startup.Tomcat; - import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import org.apache.catalina.Context; +import org.apache.catalina.LifecycleException; +import org.apache.catalina.startup.Tomcat; -/** - * Sample application using the {@link PrometheusMetricsServlet} in Tomcat. - */ +/** Sample application using the {@link PrometheusMetricsServlet} in Tomcat. */ public class ExporterServletTomcatSample { - enum Mode { - success, - error - } - - public static void main(String[] args) throws LifecycleException, IOException { + enum Mode { + success, + error + } - if (args.length != 2) { - System.err.println("Usage: java -jar exporter-servlet-tomcat-sample.jar "); - System.err.println("Where mode is \"success\" or \"error\"."); - System.exit(1); - } + public static void main(String[] args) throws LifecycleException, IOException { - int port = parsePortOrExit(args[0]); - Mode mode = parseModeOrExit(args[1]); - - Counter counter = Counter.builder() - .name("uptime_seconds_total") - .help("total number of seconds since this application was started") - .unit(Unit.SECONDS) - .register(); - counter.inc(17); - - Info info = Info.builder() - .name("integration_test_info") - .help("Info metric on this integration test") - .labelNames("test_name") - .register(); - info.addLabelValues("exporter-servlet-tomcat-sample"); - - Gauge gauge = Gauge.builder() - .name("temperature_celsius") - .help("Temperature in Celsius") - .unit(Unit.CELSIUS) - .labelNames("location") - .register(); - gauge.labelValues("inside").set(23.0); - gauge.labelValues("outside").set(27.0); - - if (mode == Mode.error) { - Collector failingCollector = () -> { - throw new RuntimeException("Simulating an error."); - }; - - PrometheusRegistry.defaultRegistry.register(failingCollector); - } - - Tomcat tomcat = new Tomcat(); - tomcat.setPort(port); - - Path tmpDir = Files.createTempDirectory("exporter-servlet-tomcat-sample-"); - tomcat.setBaseDir(tmpDir.toFile().getAbsolutePath()); - Context ctx = tomcat.addContext("", new File(".").getAbsolutePath()); - Tomcat.addServlet(ctx, "metrics", new PrometheusMetricsServlet()); - ctx.addServletMappingDecoded("/metrics", "metrics"); - - tomcat.getConnector(); - tomcat.start(); - tomcat.getServer().await(); + if (args.length != 2) { + System.err.println("Usage: java -jar exporter-servlet-tomcat-sample.jar "); + System.err.println("Where mode is \"success\" or \"error\"."); + System.exit(1); } - private static int parsePortOrExit(String port) { - try { - return Integer.parseInt(port); - } catch (NumberFormatException e) { - System.err.println("\"" + port + "\": Invalid port number."); - System.exit(1); - } - return 0; // this won't happen + int port = parsePortOrExit(args[0]); + Mode mode = parseModeOrExit(args[1]); + + Counter counter = + Counter.builder() + .name("uptime_seconds_total") + .help("total number of seconds since this application was started") + .unit(Unit.SECONDS) + .register(); + counter.inc(17); + + Info info = + Info.builder() + .name("integration_test_info") + .help("Info metric on this integration test") + .labelNames("test_name") + .register(); + info.addLabelValues("exporter-servlet-tomcat-sample"); + + Gauge gauge = + Gauge.builder() + .name("temperature_celsius") + .help("Temperature in Celsius") + .unit(Unit.CELSIUS) + .labelNames("location") + .register(); + gauge.labelValues("inside").set(23.0); + gauge.labelValues("outside").set(27.0); + + if (mode == Mode.error) { + Collector failingCollector = + () -> { + throw new RuntimeException("Simulating an error."); + }; + + PrometheusRegistry.defaultRegistry.register(failingCollector); } - private static Mode parseModeOrExit(String mode) { - try { - return Mode.valueOf(mode); - } catch (IllegalArgumentException e) { - System.err.println("\"" + mode + "\": Invalid mode. Legal values are \"success\" and \"error\"."); - System.exit(1); - } - return null; // this won't happen + Tomcat tomcat = new Tomcat(); + tomcat.setPort(port); + + Path tmpDir = Files.createTempDirectory("exporter-servlet-tomcat-sample-"); + tomcat.setBaseDir(tmpDir.toFile().getAbsolutePath()); + Context ctx = tomcat.addContext("", new File(".").getAbsolutePath()); + Tomcat.addServlet(ctx, "metrics", new PrometheusMetricsServlet()); + ctx.addServletMappingDecoded("/metrics", "metrics"); + + tomcat.getConnector(); + tomcat.start(); + tomcat.getServer().await(); + } + + private static int parsePortOrExit(String port) { + try { + return Integer.parseInt(port); + } catch (NumberFormatException e) { + System.err.println("\"" + port + "\": Invalid port number."); + System.exit(1); + } + return 0; // this won't happen + } + + private static Mode parseModeOrExit(String mode) { + try { + return Mode.valueOf(mode); + } catch (IllegalArgumentException e) { + System.err.println( + "\"" + mode + "\": Invalid mode. Legal values are \"success\" and \"error\"."); + System.exit(1); } + return null; // this won't happen + } } diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index 657b890db..949f71840 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -1,17 +1,10 @@ package io.prometheus.metrics.it.exporter.test; +import static java.nio.charset.StandardCharsets.UTF_8; + import io.prometheus.client.it.common.LogConsumer; import io.prometheus.client.it.common.Volume; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; -import org.apache.commons.io.IOUtils; -import org.junit.After; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; - import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -26,317 +19,397 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.zip.GZIPInputStream; - -import static java.nio.charset.StandardCharsets.UTF_8; +import org.apache.commons.io.IOUtils; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.GenericContainer; @RunWith(Parameterized.class) public class ExporterIT { - private final GenericContainer sampleAppContainer; - private final Volume sampleAppVolume; - private final String sampleApp; + private final GenericContainer sampleAppContainer; + private final Volume sampleAppVolume; + private final String sampleApp; - @Parameterized.Parameters(name = "{0}") - public static String[] sampleApps() { - return new String[]{ - "exporter-httpserver-sample", - "exporter-servlet-tomcat-sample", - "exporter-servlet-jetty-sample", - }; - } + @Parameterized.Parameters(name = "{0}") + public static String[] sampleApps() { + return new String[] { + "exporter-httpserver-sample", + "exporter-servlet-tomcat-sample", + "exporter-servlet-jetty-sample", + }; + } - public ExporterIT(String sampleApp) throws IOException, URISyntaxException { - this.sampleApp = sampleApp; - this.sampleAppVolume = Volume.create("it-exporter") - .copy("../../it-" + sampleApp + "/target/" + sampleApp + ".jar"); - this.sampleAppContainer = new GenericContainer<>("openjdk:17") - .withFileSystemBind(sampleAppVolume.getHostPath(), "/app", BindMode.READ_ONLY) - .withWorkingDirectory("/app") - .withLogConsumer(LogConsumer.withPrefix(sampleApp)) - .withExposedPorts(9400); - } + public ExporterIT(String sampleApp) throws IOException, URISyntaxException { + this.sampleApp = sampleApp; + this.sampleAppVolume = + Volume.create("it-exporter") + .copy("../../it-" + sampleApp + "/target/" + sampleApp + ".jar"); + this.sampleAppContainer = + new GenericContainer<>("openjdk:17") + .withFileSystemBind(sampleAppVolume.getHostPath(), "/app", BindMode.READ_ONLY) + .withWorkingDirectory("/app") + .withLogConsumer(LogConsumer.withPrefix(sampleApp)) + .withExposedPorts(9400); + } - @After - public void tearDown() throws IOException { - sampleAppContainer.stop(); - sampleAppVolume.remove(); - } + @After + public void tearDown() throws IOException { + sampleAppContainer.stop(); + sampleAppVolume.remove(); + } - @Test - public void testOpenMetricsTextFormat() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", "", "Accept", "application/openmetrics-text; version=1.0.0; charset=utf-8"); - Assert.assertEquals(200, response.status); - assertContentType("application/openmetrics-text; version=1.0.0; charset=utf-8", response.getHeader("Content-Type")); - Assert.assertNull(response.getHeader("Content-Encoding")); - Assert.assertNull(response.getHeader("Transfer-Encoding")); - Assert.assertEquals(Integer.toString(response.body.length), response.getHeader("Content-Length")); - String bodyString = new String(response.body); - Assert.assertTrue(bodyString.contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1")); - Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"inside\"} 23.0")); - Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"outside\"} 27.0")); - Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); - // OpenMetrics text format has a UNIT. - Assert.assertTrue(bodyString.contains("# UNIT uptime_seconds seconds")); - } + @Test + public void testOpenMetricsTextFormat() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = + scrape("GET", "", "Accept", "application/openmetrics-text; version=1.0.0; charset=utf-8"); + Assert.assertEquals(200, response.status); + assertContentType( + "application/openmetrics-text; version=1.0.0; charset=utf-8", + response.getHeader("Content-Type")); + Assert.assertNull(response.getHeader("Content-Encoding")); + Assert.assertNull(response.getHeader("Transfer-Encoding")); + Assert.assertEquals( + Integer.toString(response.body.length), response.getHeader("Content-Length")); + String bodyString = new String(response.body); + Assert.assertTrue( + bodyString.contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1")); + Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"inside\"} 23.0")); + Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"outside\"} 27.0")); + Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); + // OpenMetrics text format has a UNIT. + Assert.assertTrue(bodyString.contains("# UNIT uptime_seconds seconds")); + } - @Test - public void testPrometheusTextFormat() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", ""); - Assert.assertEquals(200, response.status); - assertContentType("text/plain; version=0.0.4; charset=utf-8", response.getHeader("Content-Type")); - Assert.assertNull(response.getHeader("Content-Encoding")); - Assert.assertNull(response.getHeader("Transfer-Encoding")); - Assert.assertEquals(Integer.toString(response.body.length), response.getHeader("Content-Length")); - String bodyString = new String(response.body); - Assert.assertTrue(bodyString.contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1")); - Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"inside\"} 23.0")); - Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"outside\"} 27.0")); - Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); - // Prometheus text format does not have a UNIT. - Assert.assertFalse(bodyString.contains("# UNIT uptime_seconds seconds")); - } + @Test + public void testPrometheusTextFormat() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = scrape("GET", ""); + Assert.assertEquals(200, response.status); + assertContentType( + "text/plain; version=0.0.4; charset=utf-8", response.getHeader("Content-Type")); + Assert.assertNull(response.getHeader("Content-Encoding")); + Assert.assertNull(response.getHeader("Transfer-Encoding")); + Assert.assertEquals( + Integer.toString(response.body.length), response.getHeader("Content-Length")); + String bodyString = new String(response.body); + Assert.assertTrue( + bodyString.contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1")); + Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"inside\"} 23.0")); + Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"outside\"} 27.0")); + Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); + // Prometheus text format does not have a UNIT. + Assert.assertFalse(bodyString.contains("# UNIT uptime_seconds seconds")); + } - @Test - public void testPrometheusProtobufFormat() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", "", "Accept", "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited"); - Assert.assertEquals(200, response.status); - assertContentType("application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited", response.getHeader("Content-Type")); - Assert.assertNull(response.getHeader("Content-Encoding")); - Assert.assertNull(response.getHeader("Transfer-Encoding")); - Assert.assertEquals(Integer.toString(response.body.length), response.getHeader("Content-Length")); - List metrics = new ArrayList<>(); - InputStream in = new ByteArrayInputStream(response.body); - while (in.available() > 0) { - metrics.add(Metrics.MetricFamily.parseDelimitedFrom(in)); - } - Assert.assertEquals(3, metrics.size()); - // metrics are sorted by name - Assert.assertEquals("integration_test_info", metrics.get(0).getName()); - Assert.assertEquals("temperature_celsius", metrics.get(1).getName()); - Assert.assertEquals("uptime_seconds_total", metrics.get(2).getName()); + @Test + public void testPrometheusProtobufFormat() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = + scrape( + "GET", + "", + "Accept", + "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited"); + Assert.assertEquals(200, response.status); + assertContentType( + "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited", + response.getHeader("Content-Type")); + Assert.assertNull(response.getHeader("Content-Encoding")); + Assert.assertNull(response.getHeader("Transfer-Encoding")); + Assert.assertEquals( + Integer.toString(response.body.length), response.getHeader("Content-Length")); + List metrics = new ArrayList<>(); + InputStream in = new ByteArrayInputStream(response.body); + while (in.available() > 0) { + metrics.add(Metrics.MetricFamily.parseDelimitedFrom(in)); } + Assert.assertEquals(3, metrics.size()); + // metrics are sorted by name + Assert.assertEquals("integration_test_info", metrics.get(0).getName()); + Assert.assertEquals("temperature_celsius", metrics.get(1).getName()); + Assert.assertEquals("uptime_seconds_total", metrics.get(2).getName()); + } - @Test - public void testCompression() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", "", - "Accept", "application/openmetrics-text; version=1.0.0; charset=utf-8", - "Accept-Encoding", "gzip"); - Assert.assertEquals(200, response.status); - Assert.assertEquals("gzip", response.getHeader("Content-Encoding")); - if (response.getHeader("Content-Length") != null) { - // The servlet container might set a content length as the body is very small. - Assert.assertEquals(Integer.toString(response.body.length), response.getHeader("Content-Length")); - Assert.assertNull(response.getHeader("Transfer-Encoding")); - } else { - // If no content length is set, transfer-encoding chunked must be used. - Assert.assertEquals("chunked", response.getHeader("Transfer-Encoding")); - } - assertContentType("application/openmetrics-text; version=1.0.0; charset=utf-8", response.getHeader("Content-Type")); - String body = new String(IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(response.body))), UTF_8); - Assert.assertTrue(body.contains("uptime_seconds_total 17.0")); + @Test + public void testCompression() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = + scrape( + "GET", + "", + "Accept", + "application/openmetrics-text; version=1.0.0; charset=utf-8", + "Accept-Encoding", + "gzip"); + Assert.assertEquals(200, response.status); + Assert.assertEquals("gzip", response.getHeader("Content-Encoding")); + if (response.getHeader("Content-Length") != null) { + // The servlet container might set a content length as the body is very small. + Assert.assertEquals( + Integer.toString(response.body.length), response.getHeader("Content-Length")); + Assert.assertNull(response.getHeader("Transfer-Encoding")); + } else { + // If no content length is set, transfer-encoding chunked must be used. + Assert.assertEquals("chunked", response.getHeader("Transfer-Encoding")); } + assertContentType( + "application/openmetrics-text; version=1.0.0; charset=utf-8", + response.getHeader("Content-Type")); + String body = + new String( + IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(response.body))), + UTF_8); + Assert.assertTrue(body.contains("uptime_seconds_total 17.0")); + } - @Test - public void testErrorHandling() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "error") - .start(); - Response response = scrape("GET", ""); - Assert.assertEquals(500, response.status); - Assert.assertTrue(new String(response.body, UTF_8).contains("Simulating an error.")); - } + @Test + public void testErrorHandling() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "error") + .start(); + Response response = scrape("GET", ""); + Assert.assertEquals(500, response.status); + Assert.assertTrue(new String(response.body, UTF_8).contains("Simulating an error.")); + } - @Test - public void testHeadRequest() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response fullResponse = scrape("GET", ""); - int size = fullResponse.body.length; - Assert.assertTrue(size > 0); - Response headResponse = scrape("HEAD", ""); - Assert.assertEquals(200, headResponse.status); - Assert.assertEquals(Integer.toString(size), headResponse.getHeader("Content-Length")); - Assert.assertEquals(0, headResponse.body.length); - } + @Test + public void testHeadRequest() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response fullResponse = scrape("GET", ""); + int size = fullResponse.body.length; + Assert.assertTrue(size > 0); + Response headResponse = scrape("HEAD", ""); + Assert.assertEquals(200, headResponse.status); + Assert.assertEquals(Integer.toString(size), headResponse.getHeader("Content-Length")); + Assert.assertEquals(0, headResponse.body.length); + } - @Test - public void testDebug() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", "debug=openmetrics"); - Assert.assertEquals(200, response.status); - assertContentType("text/plain; charset=utf-8", response.getHeader("Content-Type")); - String bodyString = new String(response.body, UTF_8); - Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); - Assert.assertTrue(bodyString.contains("# UNIT uptime_seconds seconds")); - } + @Test + public void testDebug() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = scrape("GET", "debug=openmetrics"); + Assert.assertEquals(200, response.status); + assertContentType("text/plain; charset=utf-8", response.getHeader("Content-Type")); + String bodyString = new String(response.body, UTF_8); + Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); + Assert.assertTrue(bodyString.contains("# UNIT uptime_seconds seconds")); + } - @Test - public void testNameFilter() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", nameParam("integration_test_info") + "&" + nameParam("uptime_seconds_total"), - "Accept", "application/openmetrics-text; version=1.0.0; charset=utf-8"); - Assert.assertEquals(200, response.status); - assertContentType("application/openmetrics-text; version=1.0.0; charset=utf-8", response.getHeader("Content-Type")); - String bodyString = new String(response.body, UTF_8); - Assert.assertTrue(bodyString.contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1")); - Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); - Assert.assertFalse(bodyString.contains("temperature_celsius")); - } + @Test + public void testNameFilter() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = + scrape( + "GET", + nameParam("integration_test_info") + "&" + nameParam("uptime_seconds_total"), + "Accept", + "application/openmetrics-text; version=1.0.0; charset=utf-8"); + Assert.assertEquals(200, response.status); + assertContentType( + "application/openmetrics-text; version=1.0.0; charset=utf-8", + response.getHeader("Content-Type")); + String bodyString = new String(response.body, UTF_8); + Assert.assertTrue( + bodyString.contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1")); + Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); + Assert.assertFalse(bodyString.contains("temperature_celsius")); + } - @Test - public void testEmptyResponseOpenMetrics() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", nameParam("none_existing"), - "Accept", "application/openmetrics-text; version=1.0.0; charset=utf-8"); - Assert.assertEquals(200, response.status); - assertContentType("application/openmetrics-text; version=1.0.0; charset=utf-8", response.getHeader("Content-Type")); - Assert.assertEquals(Integer.toString(response.body.length), response.getHeader("Content-Length")); - Assert.assertEquals("# EOF\n", new String(response.body, UTF_8)); - } + @Test + public void testEmptyResponseOpenMetrics() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = + scrape( + "GET", + nameParam("none_existing"), + "Accept", + "application/openmetrics-text; version=1.0.0; charset=utf-8"); + Assert.assertEquals(200, response.status); + assertContentType( + "application/openmetrics-text; version=1.0.0; charset=utf-8", + response.getHeader("Content-Type")); + Assert.assertEquals( + Integer.toString(response.body.length), response.getHeader("Content-Length")); + Assert.assertEquals("# EOF\n", new String(response.body, UTF_8)); + } - @Test - public void testEmptyResponseText() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", nameParam("none_existing")); - Assert.assertEquals(200, response.status); - assertContentType("text/plain; version=0.0.4; charset=utf-8", response.getHeader("Content-Type")); - if (response.getHeader("Content-Length") != null) { // HTTPServer does not send a zero content length, which is ok - Assert.assertEquals("0", response.getHeader("Content-Length")); - } - Assert.assertEquals(0, response.body.length); + @Test + public void testEmptyResponseText() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = scrape("GET", nameParam("none_existing")); + Assert.assertEquals(200, response.status); + assertContentType( + "text/plain; version=0.0.4; charset=utf-8", response.getHeader("Content-Type")); + if (response.getHeader("Content-Length") + != null) { // HTTPServer does not send a zero content length, which is ok + Assert.assertEquals("0", response.getHeader("Content-Length")); } + Assert.assertEquals(0, response.body.length); + } - @Test - public void testEmptyResponseProtobuf() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", nameParam("none_existing"), - "Accept", "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited"); - Assert.assertEquals(200, response.status); - assertContentType("application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited", response.getHeader("Content-Type")); - Assert.assertEquals(0, response.body.length); - } + @Test + public void testEmptyResponseProtobuf() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = + scrape( + "GET", + nameParam("none_existing"), + "Accept", + "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited"); + Assert.assertEquals(200, response.status); + assertContentType( + "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited", + response.getHeader("Content-Type")); + Assert.assertEquals(0, response.body.length); + } - @Test - public void testEmptyResponseGzipOpenMetrics() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", nameParam("none_existing"), - "Accept", "application/openmetrics-text; version=1.0.0; charset=utf-8", - "Accept-Encoding", "gzip"); - Assert.assertEquals(200, response.status); - Assert.assertEquals("gzip", response.getHeader("Content-Encoding")); - String body = new String(IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(response.body))), UTF_8); - Assert.assertEquals("# EOF\n", body); - } + @Test + public void testEmptyResponseGzipOpenMetrics() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = + scrape( + "GET", + nameParam("none_existing"), + "Accept", + "application/openmetrics-text; version=1.0.0; charset=utf-8", + "Accept-Encoding", + "gzip"); + Assert.assertEquals(200, response.status); + Assert.assertEquals("gzip", response.getHeader("Content-Encoding")); + String body = + new String( + IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(response.body))), + UTF_8); + Assert.assertEquals("# EOF\n", body); + } - @Test - public void testEmptyResponseGzipText() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", nameParam("none_existing"), - "Accept-Encoding", "gzip"); - Assert.assertEquals(200, response.status); - Assert.assertEquals("gzip", response.getHeader("Content-Encoding")); - String body = new String(IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(response.body))), UTF_8); - Assert.assertEquals(0, body.length()); - } + @Test + public void testEmptyResponseGzipText() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = scrape("GET", nameParam("none_existing"), "Accept-Encoding", "gzip"); + Assert.assertEquals(200, response.status); + Assert.assertEquals("gzip", response.getHeader("Content-Encoding")); + String body = + new String( + IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(response.body))), + UTF_8); + Assert.assertEquals(0, body.length()); + } - private String nameParam(String name) throws UnsupportedEncodingException { - return URLEncoder.encode("name[]", UTF_8.name()) + "=" + URLEncoder.encode(name, UTF_8.name()); - } + private String nameParam(String name) throws UnsupportedEncodingException { + return URLEncoder.encode("name[]", UTF_8.name()) + "=" + URLEncoder.encode(name, UTF_8.name()); + } - @Test - public void testDebugUnknown() throws IOException { - sampleAppContainer - .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") - .start(); - Response response = scrape("GET", "debug=unknown"); - Assert.assertEquals(500, response.status); - assertContentType("text/plain; charset=utf-8", response.getHeader("Content-Type")); - } + @Test + public void testDebugUnknown() throws IOException { + sampleAppContainer + .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") + .start(); + Response response = scrape("GET", "debug=unknown"); + Assert.assertEquals(500, response.status); + assertContentType("text/plain; charset=utf-8", response.getHeader("Content-Type")); + } - private void assertContentType(String expected, String actual) { - if (!expected.replace(" ", "").equals(actual)) { - Assert.assertEquals(expected, actual); - } + private void assertContentType(String expected, String actual) { + if (!expected.replace(" ", "").equals(actual)) { + Assert.assertEquals(expected, actual); } + } - private Response scrape(String method, String queryString, String... requestHeaders) throws IOException { - long timeoutMillis = TimeUnit.SECONDS.toMillis(5); - URL url = new URL("http://localhost:" + sampleAppContainer.getMappedPort(9400) + "/metrics?" + queryString); - HttpURLConnection con = (HttpURLConnection) url.openConnection(); - con.setRequestMethod(method); - for (int i = 0; i < requestHeaders.length; i += 2) { - con.setRequestProperty(requestHeaders[i], requestHeaders[i + 1]); - } - long start = System.currentTimeMillis(); - Exception exception = null; - while (System.currentTimeMillis() - start < timeoutMillis) { - try { - if (con.getResponseCode() == 200) { - return new Response(con.getResponseCode(), con.getHeaderFields(), IOUtils.toByteArray(con.getInputStream())); - } else { - return new Response(con.getResponseCode(), con.getHeaderFields(), IOUtils.toByteArray(con.getErrorStream())); - } - } catch (Exception e) { - exception = e; - try { - Thread.sleep(100); - } catch (InterruptedException ignored) { - } - } + private Response scrape(String method, String queryString, String... requestHeaders) + throws IOException { + long timeoutMillis = TimeUnit.SECONDS.toMillis(5); + URL url = + new URL( + "http://localhost:" + + sampleAppContainer.getMappedPort(9400) + + "/metrics?" + + queryString); + HttpURLConnection con = (HttpURLConnection) url.openConnection(); + con.setRequestMethod(method); + for (int i = 0; i < requestHeaders.length; i += 2) { + con.setRequestProperty(requestHeaders[i], requestHeaders[i + 1]); + } + long start = System.currentTimeMillis(); + Exception exception = null; + while (System.currentTimeMillis() - start < timeoutMillis) { + try { + if (con.getResponseCode() == 200) { + return new Response( + con.getResponseCode(), + con.getHeaderFields(), + IOUtils.toByteArray(con.getInputStream())); + } else { + return new Response( + con.getResponseCode(), + con.getHeaderFields(), + IOUtils.toByteArray(con.getErrorStream())); } - if (exception != null) { - exception.printStackTrace(); + } catch (Exception e) { + exception = e; + try { + Thread.sleep(100); + } catch (InterruptedException ignored) { } - Assert.fail("timeout while getting metrics from " + url); - return null; // will not happen + } + } + if (exception != null) { + exception.printStackTrace(); } + Assert.fail("timeout while getting metrics from " + url); + return null; // will not happen + } - private static class Response { - private final int status; - private final Map headers; - private final byte[] body; + private static class Response { + private final int status; + private final Map headers; + private final byte[] body; - private Response(int status, Map> headers, byte[] body) { - this.status = status; - this.headers = new HashMap<>(headers.size()); - this.body = body; - for (Map.Entry> entry : headers.entrySet()) { - if (entry.getKey() != null) { // HttpUrlConnection uses pseudo key "null" for the status line - this.headers.put(entry.getKey().toLowerCase(), entry.getValue().get(0)); - } - } + private Response(int status, Map> headers, byte[] body) { + this.status = status; + this.headers = new HashMap<>(headers.size()); + this.body = body; + for (Map.Entry> entry : headers.entrySet()) { + if (entry.getKey() + != null) { // HttpUrlConnection uses pseudo key "null" for the status line + this.headers.put(entry.getKey().toLowerCase(), entry.getValue().get(0)); } + } + } - private String getHeader(String name) { - // HTTP headers are case-insensitive - return headers.get(name.toLowerCase()); - } + private String getHeader(String name) { + // HTTP headers are case-insensitive + return headers.get(name.toLowerCase()); } + } } diff --git a/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java b/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java index 69ef63081..6376b03fb 100644 --- a/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java +++ b/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java @@ -1,131 +1,126 @@ package io.prometheus.metrics.it.pushgateway; +import static io.prometheus.metrics.exporter.pushgateway.Scheme.HTTPS; + import io.prometheus.metrics.core.metrics.Gauge; import io.prometheus.metrics.core.metrics.Histogram; import io.prometheus.metrics.exporter.pushgateway.Format; import io.prometheus.metrics.exporter.pushgateway.HttpConnectionFactory; import io.prometheus.metrics.exporter.pushgateway.PushGateway; import io.prometheus.metrics.model.snapshots.Unit; - -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; import java.io.IOException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; -import static io.prometheus.metrics.exporter.pushgateway.Scheme.HTTPS; - -/** - * Example application using the {@link PushGateway}. - */ +/** Example application using the {@link PushGateway}. */ public class PushGatewayTestApp { - public static void main(String[] args) throws IOException { - if (args.length != 1) { - System.err.println("Usage: java -jar pushgateway-test-app.jar "); - System.exit(-1); - } - switch (args[0]) { - case "simple": - runSimpleTest(); - break; - case "textFormat": - runTextFormatTest(); - break; - case "basicauth": - runBasicAuthTest(); - break; - case "ssl": - runSslTest(); - break; - default: - System.err.println(args[0] + ": Not implemented."); - System.exit(-1); - } + public static void main(String[] args) throws IOException { + if (args.length != 1) { + System.err.println("Usage: java -jar pushgateway-test-app.jar "); + System.exit(-1); } - - private static void runSimpleTest() throws IOException { - makeMetrics(); - PushGateway pg = PushGateway.builder().build(); - System.out.println("Pushing metrics..."); - pg.push(); - System.out.println("Push successful."); + switch (args[0]) { + case "simple": + runSimpleTest(); + break; + case "textFormat": + runTextFormatTest(); + break; + case "basicauth": + runBasicAuthTest(); + break; + case "ssl": + runSslTest(); + break; + default: + System.err.println(args[0] + ": Not implemented."); + System.exit(-1); } + } - private static void runTextFormatTest() throws IOException { - makeMetrics(); - PushGateway pg = PushGateway.builder().format(Format.PROMETHEUS_TEXT).build(); - System.out.println("Pushing metrics..."); - pg.push(); - System.out.println("Push successful."); - } + private static void runSimpleTest() throws IOException { + makeMetrics(); + PushGateway pg = PushGateway.builder().build(); + System.out.println("Pushing metrics..."); + pg.push(); + System.out.println("Push successful."); + } - private static void runBasicAuthTest() throws IOException { - makeMetrics(); - PushGateway pg = PushGateway.builder() - .basicAuth("my_user", "secret_password") - .build(); - System.out.println("Pushing metrics..."); - pg.push(); - System.out.println("Push successful."); - } + private static void runTextFormatTest() throws IOException { + makeMetrics(); + PushGateway pg = PushGateway.builder().format(Format.PROMETHEUS_TEXT).build(); + System.out.println("Pushing metrics..."); + pg.push(); + System.out.println("Push successful."); + } - private static void runSslTest() throws IOException { - makeMetrics(); - PushGateway pg = PushGateway.builder() - .scheme(HTTPS) - .connectionFactory(insecureConnectionFactory) - .build(); - System.out.println("Pushing metrics..."); - pg.push(); - System.out.println("Push successful."); - } + private static void runBasicAuthTest() throws IOException { + makeMetrics(); + PushGateway pg = PushGateway.builder().basicAuth("my_user", "secret_password").build(); + System.out.println("Pushing metrics..."); + pg.push(); + System.out.println("Push successful."); + } + + private static void runSslTest() throws IOException { + makeMetrics(); + PushGateway pg = + PushGateway.builder().scheme(HTTPS).connectionFactory(insecureConnectionFactory).build(); + System.out.println("Pushing metrics..."); + pg.push(); + System.out.println("Push successful."); + } - static TrustManager insecureTrustManager = new X509TrustManager() { + static TrustManager insecureTrustManager = + new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return null; + return null; } @Override - public void checkClientTrusted(X509Certificate[] chain, String authType) { - } + public void checkClientTrusted(X509Certificate[] chain, String authType) {} @Override - public void checkServerTrusted(X509Certificate[] chain, String authType) { - } - }; + public void checkServerTrusted(X509Certificate[] chain, String authType) {} + }; - static HttpConnectionFactory insecureConnectionFactory = url -> { + static HttpConnectionFactory insecureConnectionFactory = + url -> { try { - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, new TrustManager[]{insecureTrustManager}, null); - SSLContext.setDefault(sslContext); + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, new TrustManager[] {insecureTrustManager}, null); + SSLContext.setDefault(sslContext); - HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); - connection.setHostnameVerifier((hostname, session) -> true); - return connection; + HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); + connection.setHostnameVerifier((hostname, session) -> true); + return connection; } catch (NoSuchAlgorithmException | KeyManagementException e) { - throw new RuntimeException(e); + throw new RuntimeException(e); } - }; + }; - private static void makeMetrics() { - Histogram sizes = Histogram.builder() - .name("file_sizes_bytes") - .classicUpperBounds(256, 512, 1024, 2048) - .unit(Unit.BYTES) - .register(); - sizes.observe(513); - sizes.observe(814); - sizes.observe(1553); - Gauge duration = Gauge.builder() - .name("my_batch_job_duration_seconds") - .help("Duration of my batch job in seconds.") - .unit(Unit.SECONDS) - .register(); - duration.set(0.5); - } + private static void makeMetrics() { + Histogram sizes = + Histogram.builder() + .name("file_sizes_bytes") + .classicUpperBounds(256, 512, 1024, 2048) + .unit(Unit.BYTES) + .register(); + sizes.observe(513); + sizes.observe(814); + sizes.observe(1553); + Gauge duration = + Gauge.builder() + .name("my_batch_job_duration_seconds") + .help("Duration of my batch job in seconds.") + .unit(Unit.SECONDS) + .register(); + duration.set(0.5); + } } diff --git a/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java b/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java index 6b89a8c58..7e1198a55 100644 --- a/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java +++ b/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java @@ -6,6 +6,9 @@ import com.squareup.okhttp.*; import io.prometheus.client.it.common.LogConsumer; import io.prometheus.client.it.common.Volume; +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.concurrent.TimeUnit; import net.minidev.json.JSONArray; import org.junit.After; import org.junit.Assert; @@ -17,212 +20,247 @@ import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.utility.MountableFile; -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.concurrent.TimeUnit; - public class PushGatewayIT { - private GenericContainer sampleAppContainer; - private GenericContainer pushGatewayContainer; - private GenericContainer prometheusContainer; - private Volume sampleAppVolume; - - @Before - public void setUp() throws IOException, URISyntaxException { - Network network = Network.newNetwork(); - sampleAppVolume = Volume.create("it-pushgateway") - .copy("pushgateway-test-app.jar"); - pushGatewayContainer = new GenericContainer<>("prom/pushgateway:v1.8.0") - .withExposedPorts(9091) - .withNetwork(network) - .withNetworkAliases("pushgateway") - .withLogConsumer(LogConsumer.withPrefix("pushgateway")) - .waitingFor(Wait.forListeningPort()); - sampleAppContainer = new GenericContainer<>("openjdk:17") - .withFileSystemBind(sampleAppVolume.getHostPath(), "/app", BindMode.READ_ONLY) - .withNetwork(network) - .withWorkingDirectory("/app") - .dependsOn(pushGatewayContainer) - .withLogConsumer(LogConsumer.withPrefix("test-app")); - prometheusContainer = new GenericContainer<>("prom/prometheus:v2.51.2") - .withNetwork(network) - .dependsOn(pushGatewayContainer) - .withExposedPorts(9090) - .withLogConsumer(LogConsumer.withPrefix("prometheus")); - } + private GenericContainer sampleAppContainer; + private GenericContainer pushGatewayContainer; + private GenericContainer prometheusContainer; + private Volume sampleAppVolume; - @After - public void tearDown() throws IOException { - prometheusContainer.stop(); - pushGatewayContainer.stop(); - sampleAppContainer.stop(); - sampleAppVolume.remove(); - } + @Before + public void setUp() throws IOException, URISyntaxException { + Network network = Network.newNetwork(); + sampleAppVolume = Volume.create("it-pushgateway").copy("pushgateway-test-app.jar"); + pushGatewayContainer = + new GenericContainer<>("prom/pushgateway:v1.8.0") + .withExposedPorts(9091) + .withNetwork(network) + .withNetworkAliases("pushgateway") + .withLogConsumer(LogConsumer.withPrefix("pushgateway")) + .waitingFor(Wait.forListeningPort()); + sampleAppContainer = + new GenericContainer<>("openjdk:17") + .withFileSystemBind(sampleAppVolume.getHostPath(), "/app", BindMode.READ_ONLY) + .withNetwork(network) + .withWorkingDirectory("/app") + .dependsOn(pushGatewayContainer) + .withLogConsumer(LogConsumer.withPrefix("test-app")); + prometheusContainer = + new GenericContainer<>("prom/prometheus:v2.51.2") + .withNetwork(network) + .dependsOn(pushGatewayContainer) + .withExposedPorts(9090) + .withLogConsumer(LogConsumer.withPrefix("prometheus")); + } - final OkHttpClient client = new OkHttpClient(); - - @Test - public void testSimple() throws IOException, InterruptedException { - pushGatewayContainer - .start(); - sampleAppContainer - .withCommand("java", - "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091", - "-jar", - "/app/pushgateway-test-app.jar", - "simple" - ).start(); - prometheusContainer - .withCopyFileToContainer(MountableFile.forClasspathResource("/prometheus.yaml"), "/etc/prometheus/prometheus.yml") - .start(); - awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS); - assertMetrics(); - } + @After + public void tearDown() throws IOException { + prometheusContainer.stop(); + pushGatewayContainer.stop(); + sampleAppContainer.stop(); + sampleAppVolume.remove(); + } - @Test - public void testTextFormat() throws IOException, InterruptedException { - pushGatewayContainer - .start(); - sampleAppContainer - .withCommand("java", - "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091", - "-jar", - "/app/pushgateway-test-app.jar", - "textFormat" - ).start(); - prometheusContainer - .withCopyFileToContainer(MountableFile.forClasspathResource("/prometheus.yaml"), "/etc/prometheus/prometheus.yml") - .start(); - awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS); - assertMetrics(); - } + final OkHttpClient client = new OkHttpClient(); - @Test - public void testBasicAuth() throws IOException, InterruptedException { - pushGatewayContainer - .withCopyFileToContainer(MountableFile.forClasspathResource("/pushgateway-basicauth.yaml"), "/pushgateway/pushgateway-basicauth.yaml") - .withCommand("--web.config.file", "pushgateway-basicauth.yaml") - .start(); - sampleAppContainer - .withCommand("java", - "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091", - "-jar", - "/app/pushgateway-test-app.jar", - "basicauth" - ).start(); - prometheusContainer - .withCopyFileToContainer(MountableFile.forClasspathResource("/prometheus-basicauth.yaml"), "/etc/prometheus/prometheus.yml") - .start(); - awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS); - assertMetrics(); - } + @Test + public void testSimple() throws IOException, InterruptedException { + pushGatewayContainer.start(); + sampleAppContainer + .withCommand( + "java", + "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091", + "-jar", + "/app/pushgateway-test-app.jar", + "simple") + .start(); + prometheusContainer + .withCopyFileToContainer( + MountableFile.forClasspathResource("/prometheus.yaml"), + "/etc/prometheus/prometheus.yml") + .start(); + awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS); + assertMetrics(); + } - @Test - public void testSsl() throws InterruptedException, IOException { - pushGatewayContainer - .withCopyFileToContainer(MountableFile.forClasspathResource("/pushgateway-ssl.yaml"), "/pushgateway/pushgateway-ssl.yaml") - .withCommand("--web.config.file", "pushgateway-ssl.yaml") - .start(); - sampleAppContainer - .withCommand("java", - "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091", - "-jar", - "/app/pushgateway-test-app.jar", - "ssl" - ).start(); - prometheusContainer - .withCopyFileToContainer(MountableFile.forClasspathResource("/prometheus-ssl.yaml"), "/etc/prometheus/prometheus.yml") - .start(); - awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS); - assertMetrics(); - } + @Test + public void testTextFormat() throws IOException, InterruptedException { + pushGatewayContainer.start(); + sampleAppContainer + .withCommand( + "java", + "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091", + "-jar", + "/app/pushgateway-test-app.jar", + "textFormat") + .start(); + prometheusContainer + .withCopyFileToContainer( + MountableFile.forClasspathResource("/prometheus.yaml"), + "/etc/prometheus/prometheus.yml") + .start(); + awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS); + assertMetrics(); + } - @Test - public void testProtobuf() throws IOException, InterruptedException { - pushGatewayContainer - .start(); - sampleAppContainer - .withCommand("java", - "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091", - "-jar", - "/app/pushgateway-test-app.jar", - "simple" - ).start(); - prometheusContainer - .withCommand("--enable-feature=native-histograms", "--config.file", "/etc/prometheus/prometheus.yml") - .withCopyFileToContainer(MountableFile.forClasspathResource("/prometheus.yaml"), "/etc/prometheus/prometheus.yml") - .start(); - awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS); - assertNativeHistogram(); - } + @Test + public void testBasicAuth() throws IOException, InterruptedException { + pushGatewayContainer + .withCopyFileToContainer( + MountableFile.forClasspathResource("/pushgateway-basicauth.yaml"), + "/pushgateway/pushgateway-basicauth.yaml") + .withCommand("--web.config.file", "pushgateway-basicauth.yaml") + .start(); + sampleAppContainer + .withCommand( + "java", + "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091", + "-jar", + "/app/pushgateway-test-app.jar", + "basicauth") + .start(); + prometheusContainer + .withCopyFileToContainer( + MountableFile.forClasspathResource("/prometheus-basicauth.yaml"), + "/etc/prometheus/prometheus.yml") + .start(); + awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS); + assertMetrics(); + } - private void assertMetrics() throws IOException, InterruptedException { - double value = getValue("my_batch_job_duration_seconds", "job", "pushgateway-test-app"); - Assert.assertEquals(0.5, value, 0.0); - value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "512"); - Assert.assertEquals(0.0, value, 0.0); - value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "1024"); - Assert.assertEquals(2.0, value, 0.0); - value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "+Inf"); - Assert.assertEquals(3.0, value, 0.0); - } + @Test + public void testSsl() throws InterruptedException, IOException { + pushGatewayContainer + .withCopyFileToContainer( + MountableFile.forClasspathResource("/pushgateway-ssl.yaml"), + "/pushgateway/pushgateway-ssl.yaml") + .withCommand("--web.config.file", "pushgateway-ssl.yaml") + .start(); + sampleAppContainer + .withCommand( + "java", + "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091", + "-jar", + "/app/pushgateway-test-app.jar", + "ssl") + .start(); + prometheusContainer + .withCopyFileToContainer( + MountableFile.forClasspathResource("/prometheus-ssl.yaml"), + "/etc/prometheus/prometheus.yml") + .start(); + awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS); + assertMetrics(); + } - private double getValue(String name, String... labels) throws IOException, InterruptedException { - String scrapeResponseJson = scrape(name); - Criteria criteria = Criteria.where("metric.__name__").eq(name); - for (int i = 0; i < labels.length; i += 2) { - criteria = criteria.and("metric." + labels[i]).eq(labels[i + 1]); - } - JSONArray result = JsonPath.parse(scrapeResponseJson).read("$.data.result" + Filter.filter(criteria) + ".value[1]"); - Assert.assertEquals(1, result.size()); - return Double.valueOf(result.get(0).toString()); - } + @Test + public void testProtobuf() throws IOException, InterruptedException { + pushGatewayContainer.start(); + sampleAppContainer + .withCommand( + "java", + "-Dio.prometheus.exporter.pushgateway.address=pushgateway:9091", + "-jar", + "/app/pushgateway-test-app.jar", + "simple") + .start(); + prometheusContainer + .withCommand( + "--enable-feature=native-histograms", "--config.file", "/etc/prometheus/prometheus.yml") + .withCopyFileToContainer( + MountableFile.forClasspathResource("/prometheus.yaml"), + "/etc/prometheus/prometheus.yml") + .start(); + awaitTermination(sampleAppContainer, 10, TimeUnit.SECONDS); + assertNativeHistogram(); + } - private void assertNativeHistogram() throws IOException, InterruptedException { - double count = getNativeHistogramCount("file_sizes_bytes", "pushgateway-test-app"); - Assert.assertEquals(3, count, 0.0); - } + private void assertMetrics() throws IOException, InterruptedException { + double value = getValue("my_batch_job_duration_seconds", "job", "pushgateway-test-app"); + Assert.assertEquals(0.5, value, 0.0); + value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "512"); + Assert.assertEquals(0.0, value, 0.0); + value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "1024"); + Assert.assertEquals(2.0, value, 0.0); + value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "+Inf"); + Assert.assertEquals(3.0, value, 0.0); + } - private double getNativeHistogramCount(String name, String job) throws IOException, InterruptedException { - String scrapeResponseJson = scrape("histogram_count(" + name + ")"); - Criteria criteria = Criteria.where("metric.job").eq(job); - JSONArray result = JsonPath.parse(scrapeResponseJson).read("$.data.result" + Filter.filter(criteria) + ".value[1]"); - return Double.valueOf(result.get(0).toString()); + private double getValue(String name, String... labels) throws IOException, InterruptedException { + String scrapeResponseJson = scrape(name); + Criteria criteria = Criteria.where("metric.__name__").eq(name); + for (int i = 0; i < labels.length; i += 2) { + criteria = criteria.and("metric." + labels[i]).eq(labels[i + 1]); } + JSONArray result = + JsonPath.parse(scrapeResponseJson) + .read("$.data.result" + Filter.filter(criteria) + ".value[1]"); + Assert.assertEquals(1, result.size()); + return Double.valueOf(result.get(0).toString()); + } + + private void assertNativeHistogram() throws IOException, InterruptedException { + double count = getNativeHistogramCount("file_sizes_bytes", "pushgateway-test-app"); + Assert.assertEquals(3, count, 0.0); + } + + private double getNativeHistogramCount(String name, String job) + throws IOException, InterruptedException { + String scrapeResponseJson = scrape("histogram_count(" + name + ")"); + Criteria criteria = Criteria.where("metric.job").eq(job); + JSONArray result = + JsonPath.parse(scrapeResponseJson) + .read("$.data.result" + Filter.filter(criteria) + ".value[1]"); + return Double.valueOf(result.get(0).toString()); + } - private String scrape(String query) throws IOException, InterruptedException { - System.out.println("Querying http://" + prometheusContainer.getHost() + ":" + prometheusContainer.getMappedPort(9090)); - HttpUrl baseUrl = HttpUrl.parse("http://" + prometheusContainer.getHost() + ":" + prometheusContainer.getMappedPort(9090) + "/api/v1/query"); - HttpUrl url = baseUrl.newBuilder() - .addQueryParameter("query", query) - .build(); - long timeRemaining = TimeUnit.SECONDS.toMillis(15); - while (timeRemaining > 0) { - Request request = new Request.Builder().url(url).build(); - Call call = client.newCall(request); - Response response = call.execute(); - String body = response.body().string(); - if (!body.contains("\"result\":[]")) { - // Result when data is not available yet: - // {"status":"success","data":{"resultType":"vector","result":[]}} - return body; - } - Thread.sleep(250); - timeRemaining -= 250; - } - Assert.fail("timeout while scraping " + url); - return null; + private String scrape(String query) throws IOException, InterruptedException { + System.out.println( + "Querying http://" + + prometheusContainer.getHost() + + ":" + + prometheusContainer.getMappedPort(9090)); + HttpUrl baseUrl = + HttpUrl.parse( + "http://" + + prometheusContainer.getHost() + + ":" + + prometheusContainer.getMappedPort(9090) + + "/api/v1/query"); + HttpUrl url = baseUrl.newBuilder().addQueryParameter("query", query).build(); + long timeRemaining = TimeUnit.SECONDS.toMillis(15); + while (timeRemaining > 0) { + Request request = new Request.Builder().url(url).build(); + Call call = client.newCall(request); + Response response = call.execute(); + String body = response.body().string(); + if (!body.contains("\"result\":[]")) { + // Result when data is not available yet: + // {"status":"success","data":{"resultType":"vector","result":[]}} + return body; + } + Thread.sleep(250); + timeRemaining -= 250; } + Assert.fail("timeout while scraping " + url); + return null; + } - private void awaitTermination(GenericContainer container, long timeout, TimeUnit unit) throws InterruptedException { - long waitTimeMillis = 0; - while (container.isRunning()) { - if (waitTimeMillis > unit.toMillis(timeout)) { - Assert.fail(container.getContainerName() + " did not terminate after " + timeout + " " + unit + "."); - } - Thread.sleep(20); - waitTimeMillis += 20; - } + private void awaitTermination(GenericContainer container, long timeout, TimeUnit unit) + throws InterruptedException { + long waitTimeMillis = 0; + while (container.isRunning()) { + if (waitTimeMillis > unit.toMillis(timeout)) { + Assert.fail( + container.getContainerName() + + " did not terminate after " + + timeout + + " " + + unit + + "."); + } + Thread.sleep(20); + waitTimeMillis += 20; } + } } diff --git a/pom.xml b/pom.xml index 44eadc391..5ab8f42e2 100644 --- a/pom.xml +++ b/pom.xml @@ -169,7 +169,6 @@ com.diffplug.spotless spotless-maven-plugin - origin/main diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java index ff955bc50..f660725bf 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java @@ -2,113 +2,135 @@ import java.util.Map; -/** - * Properties starting with io.prometheus.exemplars - */ +/** Properties starting with io.prometheus.exemplars */ public class ExemplarsProperties { - private static final String MIN_RETENTION_PERIOD_SECONDS = "minRetentionPeriodSeconds"; - private static final String MAX_RETENTION_PERIOD_SECONDS = "maxRetentionPeriodSeconds"; - private static final String SAMPLE_INTERVAL_MILLISECONDS = "sampleIntervalMilliseconds"; - - private final Integer minRetentionPeriodSeconds; - private final Integer maxRetentionPeriodSeconds; - private final Integer sampleIntervalMilliseconds; - - private ExemplarsProperties( - Integer minRetentionPeriodSeconds, - Integer maxRetentionPeriodSeconds, - Integer sampleIntervalMilliseconds) { - this.minRetentionPeriodSeconds = minRetentionPeriodSeconds; - this.maxRetentionPeriodSeconds = maxRetentionPeriodSeconds; - this.sampleIntervalMilliseconds = sampleIntervalMilliseconds; + private static final String MIN_RETENTION_PERIOD_SECONDS = "minRetentionPeriodSeconds"; + private static final String MAX_RETENTION_PERIOD_SECONDS = "maxRetentionPeriodSeconds"; + private static final String SAMPLE_INTERVAL_MILLISECONDS = "sampleIntervalMilliseconds"; + + private final Integer minRetentionPeriodSeconds; + private final Integer maxRetentionPeriodSeconds; + private final Integer sampleIntervalMilliseconds; + + private ExemplarsProperties( + Integer minRetentionPeriodSeconds, + Integer maxRetentionPeriodSeconds, + Integer sampleIntervalMilliseconds) { + this.minRetentionPeriodSeconds = minRetentionPeriodSeconds; + this.maxRetentionPeriodSeconds = maxRetentionPeriodSeconds; + this.sampleIntervalMilliseconds = sampleIntervalMilliseconds; + } + + /** + * Minimum time how long Exemplars are kept before they may be replaced by new Exemplars. + * + *

    Default see {@code ExemplarSamplerConfig.DEFAULT_MIN_RETENTION_PERIOD_SECONDS} + */ + public Integer getMinRetentionPeriodSeconds() { + return minRetentionPeriodSeconds; + } + + /** + * Maximum time how long Exemplars are kept before they are evicted. + * + *

    Default see {@code ExemplarSamplerConfig.DEFAULT_MAX_RETENTION_PERIOD_SECONDS} + */ + public Integer getMaxRetentionPeriodSeconds() { + return maxRetentionPeriodSeconds; + } + + /** + * Time between attempts to sample new Exemplars. This is a performance improvement for + * high-frequency applications, because with the sample interval we make sure that the exemplar + * sampler is not called for every single request. + * + *

    Default see {@code ExemplarSamplerConfig.DEFAULT_SAMPLE_INTERVAL_MILLISECONDS} + */ + public Integer getSampleIntervalMilliseconds() { + return sampleIntervalMilliseconds; + } + + /** + * Note that this will remove entries from {@code properties}. This is because we want to know if + * there are unused properties remaining after all properties have been loaded. + */ + static ExemplarsProperties load(String prefix, Map properties) + throws PrometheusPropertiesException { + Integer minRetentionPeriodSeconds = + Util.loadInteger(prefix + "." + MIN_RETENTION_PERIOD_SECONDS, properties); + Integer maxRetentionPeriodSeconds = + Util.loadInteger(prefix + "." + MAX_RETENTION_PERIOD_SECONDS, properties); + Integer sampleIntervalMilliseconds = + Util.loadInteger(prefix + "." + SAMPLE_INTERVAL_MILLISECONDS, properties); + + Util.assertValue( + minRetentionPeriodSeconds, + t -> t > 0, + "Expecting value > 0.", + prefix, + MIN_RETENTION_PERIOD_SECONDS); + Util.assertValue( + minRetentionPeriodSeconds, + t -> t > 0, + "Expecting value > 0.", + prefix, + MAX_RETENTION_PERIOD_SECONDS); + Util.assertValue( + sampleIntervalMilliseconds, + t -> t > 0, + "Expecting value > 0.", + prefix, + SAMPLE_INTERVAL_MILLISECONDS); + + if (minRetentionPeriodSeconds != null && maxRetentionPeriodSeconds != null) { + if (minRetentionPeriodSeconds > maxRetentionPeriodSeconds) { + throw new PrometheusPropertiesException( + prefix + + "." + + MIN_RETENTION_PERIOD_SECONDS + + " must not be greater than " + + prefix + + "." + + MAX_RETENTION_PERIOD_SECONDS + + "."); + } } - /** - * Minimum time how long Exemplars are kept before they may be replaced by new Exemplars. - *

    - * Default see {@code ExemplarSamplerConfig.DEFAULT_MIN_RETENTION_PERIOD_SECONDS} - */ - public Integer getMinRetentionPeriodSeconds() { - return minRetentionPeriodSeconds; - } - - /** - * Maximum time how long Exemplars are kept before they are evicted. - *

    - * Default see {@code ExemplarSamplerConfig.DEFAULT_MAX_RETENTION_PERIOD_SECONDS} - */ - public Integer getMaxRetentionPeriodSeconds() { - return maxRetentionPeriodSeconds; - } + return new ExemplarsProperties( + minRetentionPeriodSeconds, maxRetentionPeriodSeconds, sampleIntervalMilliseconds); + } - /** - * Time between attempts to sample new Exemplars. This is a performance improvement for high-frequency - * applications, because with the sample interval we make sure that the exemplar sampler is not called - * for every single request. - *

    - * Default see {@code ExemplarSamplerConfig.DEFAULT_SAMPLE_INTERVAL_MILLISECONDS} - */ - public Integer getSampleIntervalMilliseconds() { - return sampleIntervalMilliseconds; - } + public static Builder builder() { + return new Builder(); + } - /** - * Note that this will remove entries from {@code properties}. - * This is because we want to know if there are unused properties remaining after all properties have been loaded. - */ - static ExemplarsProperties load(String prefix, Map properties) throws PrometheusPropertiesException { - Integer minRetentionPeriodSeconds = Util.loadInteger(prefix + "." + MIN_RETENTION_PERIOD_SECONDS, properties); - Integer maxRetentionPeriodSeconds = Util.loadInteger(prefix + "." + MAX_RETENTION_PERIOD_SECONDS, properties); - Integer sampleIntervalMilliseconds = Util.loadInteger(prefix + "." + SAMPLE_INTERVAL_MILLISECONDS, properties); - - Util.assertValue(minRetentionPeriodSeconds, t -> t > 0, "Expecting value > 0.", prefix, MIN_RETENTION_PERIOD_SECONDS); - Util.assertValue(minRetentionPeriodSeconds, t -> t > 0, "Expecting value > 0.", prefix, MAX_RETENTION_PERIOD_SECONDS); - Util.assertValue(sampleIntervalMilliseconds, t -> t > 0, "Expecting value > 0.", prefix, SAMPLE_INTERVAL_MILLISECONDS); - - if (minRetentionPeriodSeconds != null && maxRetentionPeriodSeconds != null) { - if (minRetentionPeriodSeconds > maxRetentionPeriodSeconds) { - throw new PrometheusPropertiesException(prefix + "." + MIN_RETENTION_PERIOD_SECONDS + " must not be greater than " + prefix + "." + MAX_RETENTION_PERIOD_SECONDS + "."); - } - } - - return new ExemplarsProperties( - minRetentionPeriodSeconds, - maxRetentionPeriodSeconds, - sampleIntervalMilliseconds - ); - } + public static class Builder { - public static Builder builder() { - return new Builder(); - } + private Integer minRetentionPeriodSeconds; + private Integer maxRetentionPeriodSeconds; + private Integer sampleIntervalMilliseconds; - public static class Builder { + private Builder() {} - private Integer minRetentionPeriodSeconds; - private Integer maxRetentionPeriodSeconds; - private Integer sampleIntervalMilliseconds; - - private Builder() { - } - - public Builder minRetentionPeriodSeconds(int minRetentionPeriodSeconds) { - this.minRetentionPeriodSeconds = minRetentionPeriodSeconds; - return this; - } + public Builder minRetentionPeriodSeconds(int minRetentionPeriodSeconds) { + this.minRetentionPeriodSeconds = minRetentionPeriodSeconds; + return this; + } - public Builder maxRetentionPeriodSeconds(int maxRetentionPeriodSeconds) { - this.maxRetentionPeriodSeconds = maxRetentionPeriodSeconds; - return this; - } + public Builder maxRetentionPeriodSeconds(int maxRetentionPeriodSeconds) { + this.maxRetentionPeriodSeconds = maxRetentionPeriodSeconds; + return this; + } - public Builder sampleIntervalMilliseconds(int sampleIntervalMilliseconds) { - this.sampleIntervalMilliseconds = sampleIntervalMilliseconds; - return this; - } + public Builder sampleIntervalMilliseconds(int sampleIntervalMilliseconds) { + this.sampleIntervalMilliseconds = sampleIntervalMilliseconds; + return this; + } - public ExemplarsProperties build() { - return new ExemplarsProperties(minRetentionPeriodSeconds, maxRetentionPeriodSeconds, sampleIntervalMilliseconds); - } + public ExemplarsProperties build() { + return new ExemplarsProperties( + minRetentionPeriodSeconds, maxRetentionPeriodSeconds, sampleIntervalMilliseconds); } + } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java index e9cc46767..4758a48fe 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java @@ -6,112 +6,124 @@ import java.util.List; import java.util.Map; -/** - * Properties starting with io.prometheus.exporter.filter - */ +/** Properties starting with io.prometheus.exporter.filter */ public class ExporterFilterProperties { - public static final String METRIC_NAME_MUST_BE_EQUAL_TO = "metricNameMustBeEqualTo"; - public static final String METRIC_NAME_MUST_NOT_BE_EQUAL_TO = "metricNameMustNotBeEqualTo"; - public static final String METRIC_NAME_MUST_START_WITH = "metricNameMustStartWith"; - public static final String METRIC_NAME_MUST_NOT_START_WITH = "metricNameMustNotStartWith"; - - private final List allowedNames; - private final List excludedNames; - private final List allowedPrefixes; - private final List excludedPrefixes; - - private ExporterFilterProperties(List allowedNames, List excludedNames, List allowedPrefixes, List excludedPrefixes) { - this(allowedNames, excludedNames, allowedPrefixes, excludedPrefixes, ""); - } - - private ExporterFilterProperties(List allowedNames, List excludedNames, List allowedPrefixes, List excludedPrefixes, String prefix) { - this.allowedNames = allowedNames == null ? null : Collections.unmodifiableList(new ArrayList<>(allowedNames)); - this.excludedNames = excludedNames == null ? null : Collections.unmodifiableList(new ArrayList<>(excludedNames)); - this.allowedPrefixes = allowedPrefixes == null ? null : Collections.unmodifiableList(new ArrayList<>(allowedPrefixes)); - this.excludedPrefixes = excludedPrefixes == null ? null : Collections.unmodifiableList(new ArrayList<>(excludedPrefixes)); - validate(prefix); - } - - public List getAllowedMetricNames() { - return allowedNames; - } - - public List getExcludedMetricNames() { - return excludedNames; - } - - public List getAllowedMetricNamePrefixes() { - return allowedPrefixes; - } - - public List getExcludedMetricNamePrefixes() { - return excludedPrefixes; + public static final String METRIC_NAME_MUST_BE_EQUAL_TO = "metricNameMustBeEqualTo"; + public static final String METRIC_NAME_MUST_NOT_BE_EQUAL_TO = "metricNameMustNotBeEqualTo"; + public static final String METRIC_NAME_MUST_START_WITH = "metricNameMustStartWith"; + public static final String METRIC_NAME_MUST_NOT_START_WITH = "metricNameMustNotStartWith"; + + private final List allowedNames; + private final List excludedNames; + private final List allowedPrefixes; + private final List excludedPrefixes; + + private ExporterFilterProperties( + List allowedNames, + List excludedNames, + List allowedPrefixes, + List excludedPrefixes) { + this(allowedNames, excludedNames, allowedPrefixes, excludedPrefixes, ""); + } + + private ExporterFilterProperties( + List allowedNames, + List excludedNames, + List allowedPrefixes, + List excludedPrefixes, + String prefix) { + this.allowedNames = + allowedNames == null ? null : Collections.unmodifiableList(new ArrayList<>(allowedNames)); + this.excludedNames = + excludedNames == null ? null : Collections.unmodifiableList(new ArrayList<>(excludedNames)); + this.allowedPrefixes = + allowedPrefixes == null + ? null + : Collections.unmodifiableList(new ArrayList<>(allowedPrefixes)); + this.excludedPrefixes = + excludedPrefixes == null + ? null + : Collections.unmodifiableList(new ArrayList<>(excludedPrefixes)); + validate(prefix); + } + + public List getAllowedMetricNames() { + return allowedNames; + } + + public List getExcludedMetricNames() { + return excludedNames; + } + + public List getAllowedMetricNamePrefixes() { + return allowedPrefixes; + } + + public List getExcludedMetricNamePrefixes() { + return excludedPrefixes; + } + + private void validate(String prefix) throws PrometheusPropertiesException {} + + /** + * Note that this will remove entries from {@code properties}. This is because we want to know if + * there are unused properties remaining after all properties have been loaded. + */ + static ExporterFilterProperties load(String prefix, Map properties) + throws PrometheusPropertiesException { + List allowedNames = + Util.loadStringList(prefix + "." + METRIC_NAME_MUST_BE_EQUAL_TO, properties); + List excludedNames = + Util.loadStringList(prefix + "." + METRIC_NAME_MUST_NOT_BE_EQUAL_TO, properties); + List allowedPrefixes = + Util.loadStringList(prefix + "." + METRIC_NAME_MUST_START_WITH, properties); + List excludedPrefixes = + Util.loadStringList(prefix + "." + METRIC_NAME_MUST_NOT_START_WITH, properties); + return new ExporterFilterProperties( + allowedNames, excludedNames, allowedPrefixes, excludedPrefixes, prefix); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + + private List allowedNames; + private List excludedNames; + private List allowedPrefixes; + private List excludedPrefixes; + + private Builder() {} + + /** Only allowed metric names will be exposed. */ + public Builder allowedNames(String... allowedNames) { + this.allowedNames = Arrays.asList(allowedNames); + return this; } - private void validate(String prefix) throws PrometheusPropertiesException { + /** Excluded metric names will not be exposed. */ + public Builder excludedNames(String... excludedNames) { + this.excludedNames = Arrays.asList(excludedNames); + return this; } - /** - * Note that this will remove entries from {@code properties}. - * This is because we want to know if there are unused properties remaining after all properties have been loaded. - */ - static ExporterFilterProperties load(String prefix, Map properties) throws PrometheusPropertiesException { - List allowedNames = Util.loadStringList(prefix + "." + METRIC_NAME_MUST_BE_EQUAL_TO, properties); - List excludedNames = Util.loadStringList(prefix + "." + METRIC_NAME_MUST_NOT_BE_EQUAL_TO, properties); - List allowedPrefixes = Util.loadStringList(prefix + "." + METRIC_NAME_MUST_START_WITH, properties); - List excludedPrefixes = Util.loadStringList(prefix + "." + METRIC_NAME_MUST_NOT_START_WITH, properties); - return new ExporterFilterProperties(allowedNames, excludedNames, allowedPrefixes, excludedPrefixes, prefix); + /** Only metrics with a name starting with an allowed prefix will be exposed. */ + public Builder allowedPrefixes(String... allowedPrefixes) { + this.allowedPrefixes = Arrays.asList(allowedPrefixes); + return this; } - public static Builder builder() { - return new Builder(); + /** Metrics with a name starting with an excluded prefix will not be exposed. */ + public Builder excludedPrefixes(String... excludedPrefixes) { + this.excludedPrefixes = Arrays.asList(excludedPrefixes); + return this; } - public static class Builder { - - private List allowedNames; - private List excludedNames; - private List allowedPrefixes; - private List excludedPrefixes; - - private Builder() { - } - - /** - * Only allowed metric names will be exposed. - */ - public Builder allowedNames(String... allowedNames) { - this.allowedNames = Arrays.asList(allowedNames); - return this; - } - - /** - * Excluded metric names will not be exposed. - */ - public Builder excludedNames(String... excludedNames) { - this.excludedNames = Arrays.asList(excludedNames); - return this; - } - - /** - * Only metrics with a name starting with an allowed prefix will be exposed. - */ - public Builder allowedPrefixes(String... allowedPrefixes) { - this.allowedPrefixes = Arrays.asList(allowedPrefixes); - return this; - } - - /** - * Metrics with a name starting with an excluded prefix will not be exposed. - */ - public Builder excludedPrefixes(String... excludedPrefixes) { - this.excludedPrefixes = Arrays.asList(excludedPrefixes); - return this; - } - - public ExporterFilterProperties build() { - return new ExporterFilterProperties(allowedNames, excludedNames, allowedPrefixes, excludedPrefixes); - } + public ExporterFilterProperties build() { + return new ExporterFilterProperties( + allowedNames, excludedNames, allowedPrefixes, excludedPrefixes); } + } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterHttpServerProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterHttpServerProperties.java index c458d69d1..fe048ac6b 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterHttpServerProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterHttpServerProperties.java @@ -2,49 +2,48 @@ import java.util.Map; -/** - * Properties starting with io.prometheus.exporter.httpServer - */ +/** Properties starting with io.prometheus.exporter.httpServer */ public class ExporterHttpServerProperties { - private static final String PORT = "port"; - private final Integer port; + private static final String PORT = "port"; + private final Integer port; - private ExporterHttpServerProperties(Integer port) { - this.port = port; - } + private ExporterHttpServerProperties(Integer port) { + this.port = port; + } - public Integer getPort() { - return port; - } + public Integer getPort() { + return port; + } - /** - * Note that this will remove entries from {@code properties}. - * This is because we want to know if there are unused properties remaining after all properties have been loaded. - */ - static ExporterHttpServerProperties load(String prefix, Map properties) throws PrometheusPropertiesException { - Integer port = Util.loadInteger(prefix + "." + PORT, properties); - Util.assertValue(port, t -> t > 0, "Expecting value > 0", prefix, PORT); - return new ExporterHttpServerProperties(port); - } + /** + * Note that this will remove entries from {@code properties}. This is because we want to know if + * there are unused properties remaining after all properties have been loaded. + */ + static ExporterHttpServerProperties load(String prefix, Map properties) + throws PrometheusPropertiesException { + Integer port = Util.loadInteger(prefix + "." + PORT, properties); + Util.assertValue(port, t -> t > 0, "Expecting value > 0", prefix, PORT); + return new ExporterHttpServerProperties(port); + } - public static Builder builder() { - return new Builder(); - } + public static Builder builder() { + return new Builder(); + } - public static class Builder { + public static class Builder { - private Integer port; + private Integer port; - private Builder() {} + private Builder() {} - public Builder port(int port) { - this.port = port; - return this; - } + public Builder port(int port) { + this.port = port; + return this; + } - public ExporterHttpServerProperties build() { - return new ExporterHttpServerProperties(port); - } + public ExporterHttpServerProperties build() { + return new ExporterHttpServerProperties(port); } + } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java index 77bcc21cb..b8498d6c5 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java @@ -6,188 +6,222 @@ // TODO: JavaDoc is currently only in OpenTelemetryExporter.Builder. Look there for reference. public class ExporterOpenTelemetryProperties { - // See https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure/README.md - private static String PROTOCOL = "protocol"; // otel.exporter.otlp.protocol - private static String ENDPOINT = "endpoint"; // otel.exporter.otlp.endpoint - private static String HEADERS = "headers"; // otel.exporter.otlp.headers - private static String INTERVAL_SECONDS = "intervalSeconds"; // otel.metric.export.interval - private static String TIMEOUT_SECONDS = "timeoutSeconds"; // otel.exporter.otlp.timeout - private static String SERVICE_NAME = "serviceName"; // otel.service.name - private static String SERVICE_NAMESPACE = "serviceNamespace"; - private static String SERVICE_INSTANCE_ID = "serviceInstanceId"; - private static String SERVICE_VERSION = "serviceVersion"; - private static String RESOURCE_ATTRIBUTES = "resourceAttributes"; // otel.resource.attributes - - private final String protocol; - private final String endpoint; - private final Map headers; - private final Integer intervalSeconds; - private final Integer timeoutSeconds; - private final String serviceName; - private final String serviceNamespace; - private final String serviceInstanceId; - private final String serviceVersion; - private final Map resourceAttributes; - - private ExporterOpenTelemetryProperties(String protocol, String endpoint, Map headers, Integer intervalSeconds, Integer timeoutSeconds, String serviceName, String serviceNamespace, String serviceInstanceId, String serviceVersion, Map resourceAttributes) { - this.protocol = protocol; - this.endpoint = endpoint; - this.headers = headers; - this.intervalSeconds = intervalSeconds; - this.timeoutSeconds = timeoutSeconds; - this.serviceName = serviceName; - this.serviceNamespace = serviceNamespace; - this.serviceInstanceId = serviceInstanceId; - this.serviceVersion = serviceVersion; - this.resourceAttributes = resourceAttributes; + // See + // https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure/README.md + private static String PROTOCOL = "protocol"; // otel.exporter.otlp.protocol + private static String ENDPOINT = "endpoint"; // otel.exporter.otlp.endpoint + private static String HEADERS = "headers"; // otel.exporter.otlp.headers + private static String INTERVAL_SECONDS = "intervalSeconds"; // otel.metric.export.interval + private static String TIMEOUT_SECONDS = "timeoutSeconds"; // otel.exporter.otlp.timeout + private static String SERVICE_NAME = "serviceName"; // otel.service.name + private static String SERVICE_NAMESPACE = "serviceNamespace"; + private static String SERVICE_INSTANCE_ID = "serviceInstanceId"; + private static String SERVICE_VERSION = "serviceVersion"; + private static String RESOURCE_ATTRIBUTES = "resourceAttributes"; // otel.resource.attributes + + private final String protocol; + private final String endpoint; + private final Map headers; + private final Integer intervalSeconds; + private final Integer timeoutSeconds; + private final String serviceName; + private final String serviceNamespace; + private final String serviceInstanceId; + private final String serviceVersion; + private final Map resourceAttributes; + + private ExporterOpenTelemetryProperties( + String protocol, + String endpoint, + Map headers, + Integer intervalSeconds, + Integer timeoutSeconds, + String serviceName, + String serviceNamespace, + String serviceInstanceId, + String serviceVersion, + Map resourceAttributes) { + this.protocol = protocol; + this.endpoint = endpoint; + this.headers = headers; + this.intervalSeconds = intervalSeconds; + this.timeoutSeconds = timeoutSeconds; + this.serviceName = serviceName; + this.serviceNamespace = serviceNamespace; + this.serviceInstanceId = serviceInstanceId; + this.serviceVersion = serviceVersion; + this.resourceAttributes = resourceAttributes; + } + + public String getProtocol() { + return protocol; + } + + public String getEndpoint() { + return endpoint; + } + + public Map getHeaders() { + return headers; + } + + public Integer getIntervalSeconds() { + return intervalSeconds; + } + + public Integer getTimeoutSeconds() { + return timeoutSeconds; + } + + public String getServiceName() { + return serviceName; + } + + public String getServiceNamespace() { + return serviceNamespace; + } + + public String getServiceInstanceId() { + return serviceInstanceId; + } + + public String getServiceVersion() { + return serviceVersion; + } + + public Map getResourceAttributes() { + return resourceAttributes; + } + + /** + * Note that this will remove entries from {@code properties}. This is because we want to know if + * there are unused properties remaining after all properties have been loaded. + */ + static ExporterOpenTelemetryProperties load(String prefix, Map properties) + throws PrometheusPropertiesException { + String protocol = Util.loadString(prefix + "." + PROTOCOL, properties); + String endpoint = Util.loadString(prefix + "." + ENDPOINT, properties); + Map headers = Util.loadMap(prefix + "." + HEADERS, properties); + Integer intervalSeconds = Util.loadInteger(prefix + "." + INTERVAL_SECONDS, properties); + Integer timeoutSeconds = Util.loadInteger(prefix + "." + TIMEOUT_SECONDS, properties); + String serviceName = Util.loadString(prefix + "." + SERVICE_NAME, properties); + String serviceNamespace = Util.loadString(prefix + "." + SERVICE_NAMESPACE, properties); + String serviceInstanceId = Util.loadString(prefix + "." + SERVICE_INSTANCE_ID, properties); + String serviceVersion = Util.loadString(prefix + "." + SERVICE_VERSION, properties); + Map resourceAttributes = + Util.loadMap(prefix + "." + RESOURCE_ATTRIBUTES, properties); + Util.assertValue(intervalSeconds, t -> t > 0, "Expecting value > 0", prefix, INTERVAL_SECONDS); + Util.assertValue(timeoutSeconds, t -> t > 0, "Expecting value > 0", prefix, TIMEOUT_SECONDS); + if (protocol != null && !protocol.equals("grpc") && !protocol.equals("http/protobuf")) { + throw new PrometheusPropertiesException( + protocol + + ": Unsupported OpenTelemetry exporter protocol. Expecting grpc or http/protobuf"); } - - public String getProtocol() { - return protocol; - } - - public String getEndpoint() { - return endpoint; - } - - public Map getHeaders() { - return headers; + return new ExporterOpenTelemetryProperties( + protocol, + endpoint, + headers, + intervalSeconds, + timeoutSeconds, + serviceName, + serviceNamespace, + serviceInstanceId, + serviceVersion, + resourceAttributes); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + + private String protocol; + private String endpoint; + private Map headers = new HashMap<>(); + private Integer intervalSeconds; + private Integer timeoutSeconds; + private String serviceName; + private String serviceNamespace; + private String serviceInstanceId; + private String serviceVersion; + private Map resourceAttributes = new HashMap<>(); + + private Builder() {} + + public Builder protocol(String protocol) { + if (!protocol.equals("grpc") && !protocol.equals("http/protobuf")) { + throw new IllegalArgumentException( + protocol + ": Unsupported protocol. Expecting grpc or http/protobuf"); + } + this.protocol = protocol; + return this; } - public Integer getIntervalSeconds() { - return intervalSeconds; + public Builder endpoint(String endpoint) { + this.endpoint = endpoint; + return this; } - public Integer getTimeoutSeconds() { - return timeoutSeconds; + /** Add a request header. Call multiple times to add multiple headers. */ + public Builder header(String name, String value) { + this.headers.put(name, value); + return this; } - public String getServiceName() { - return serviceName; + public Builder intervalSeconds(int intervalSeconds) { + if (intervalSeconds <= 0) { + throw new IllegalArgumentException(intervalSeconds + ": Expecting intervalSeconds > 0"); + } + this.intervalSeconds = intervalSeconds; + return this; } - public String getServiceNamespace() { - return serviceNamespace; + public Builder timeoutSeconds(int timeoutSeconds) { + if (timeoutSeconds <= 0) { + throw new IllegalArgumentException(timeoutSeconds + ": Expecting timeoutSeconds > 0"); + } + this.timeoutSeconds = timeoutSeconds; + return this; } - public String getServiceInstanceId() { - return serviceInstanceId; + public Builder serviceName(String serviceName) { + this.serviceName = serviceName; + return this; } - public String getServiceVersion() { - return serviceVersion; + public Builder serviceNamespace(String serviceNamespace) { + this.serviceNamespace = serviceNamespace; + return this; } - public Map getResourceAttributes() { - return resourceAttributes; + public Builder serviceInstanceId(String serviceInstanceId) { + this.serviceInstanceId = serviceInstanceId; + return this; } - /** - * Note that this will remove entries from {@code properties}. - * This is because we want to know if there are unused properties remaining after all properties have been loaded. - */ - static ExporterOpenTelemetryProperties load(String prefix, Map properties) throws PrometheusPropertiesException { - String protocol = Util.loadString(prefix + "." + PROTOCOL, properties); - String endpoint = Util.loadString(prefix + "." + ENDPOINT, properties); - Map headers = Util.loadMap(prefix + "." + HEADERS, properties); - Integer intervalSeconds = Util.loadInteger(prefix + "." + INTERVAL_SECONDS, properties); - Integer timeoutSeconds = Util.loadInteger(prefix + "." + TIMEOUT_SECONDS, properties); - String serviceName = Util.loadString(prefix + "." + SERVICE_NAME, properties); - String serviceNamespace = Util.loadString(prefix + "." + SERVICE_NAMESPACE, properties); - String serviceInstanceId = Util.loadString(prefix + "." + SERVICE_INSTANCE_ID, properties); - String serviceVersion = Util.loadString(prefix + "." + SERVICE_VERSION, properties); - Map resourceAttributes = Util.loadMap(prefix + "." + RESOURCE_ATTRIBUTES, properties); - Util.assertValue(intervalSeconds, t -> t > 0, "Expecting value > 0", prefix, INTERVAL_SECONDS); - Util.assertValue(timeoutSeconds, t -> t > 0, "Expecting value > 0", prefix, TIMEOUT_SECONDS); - if (protocol != null && !protocol.equals("grpc") && !protocol.equals("http/protobuf")) { - throw new PrometheusPropertiesException(protocol + ": Unsupported OpenTelemetry exporter protocol. Expecting grpc or http/protobuf"); - } - return new ExporterOpenTelemetryProperties(protocol, endpoint, headers, intervalSeconds, timeoutSeconds, serviceName, serviceNamespace, serviceInstanceId, serviceVersion, resourceAttributes); + public Builder serviceVersion(String serviceVersion) { + this.serviceVersion = serviceVersion; + return this; } - public static Builder builder() { - return new Builder(); + public Builder resourceAttribute(String name, String value) { + this.resourceAttributes.put(name, value); + return this; } - public static class Builder { - - private String protocol; - private String endpoint; - private Map headers = new HashMap<>(); - private Integer intervalSeconds; - private Integer timeoutSeconds; - private String serviceName; - private String serviceNamespace; - private String serviceInstanceId; - private String serviceVersion; - private Map resourceAttributes = new HashMap<>(); - - private Builder() {} - - public Builder protocol(String protocol) { - if (!protocol.equals("grpc") && !protocol.equals("http/protobuf")) { - throw new IllegalArgumentException(protocol + ": Unsupported protocol. Expecting grpc or http/protobuf"); - } - this.protocol = protocol; - return this; - } - - public Builder endpoint(String endpoint) { - this.endpoint = endpoint; - return this; - } - - /** - * Add a request header. Call multiple times to add multiple headers. - */ - public Builder header(String name, String value) { - this.headers.put(name, value); - return this; - } - - public Builder intervalSeconds(int intervalSeconds) { - if (intervalSeconds <= 0) { - throw new IllegalArgumentException(intervalSeconds + ": Expecting intervalSeconds > 0"); - } - this.intervalSeconds = intervalSeconds; - return this; - } - - public Builder timeoutSeconds(int timeoutSeconds) { - if (timeoutSeconds <= 0) { - throw new IllegalArgumentException(timeoutSeconds + ": Expecting timeoutSeconds > 0"); - } - this.timeoutSeconds = timeoutSeconds; - return this; - } - - public Builder serviceName(String serviceName) { - this.serviceName = serviceName; - return this; - } - - public Builder serviceNamespace(String serviceNamespace) { - this.serviceNamespace = serviceNamespace; - return this; - } - - public Builder serviceInstanceId(String serviceInstanceId) { - this.serviceInstanceId = serviceInstanceId; - return this; - } - - public Builder serviceVersion(String serviceVersion) { - this.serviceVersion = serviceVersion; - return this; - } - - public Builder resourceAttribute(String name, String value) { - this.resourceAttributes.put(name, value); - return this; - } - - public ExporterOpenTelemetryProperties build() { - return new ExporterOpenTelemetryProperties(protocol, endpoint, headers, intervalSeconds, timeoutSeconds, serviceName, serviceNamespace, serviceInstanceId, serviceVersion, resourceAttributes); - } + public ExporterOpenTelemetryProperties build() { + return new ExporterOpenTelemetryProperties( + protocol, + endpoint, + headers, + intervalSeconds, + timeoutSeconds, + serviceName, + serviceNamespace, + serviceInstanceId, + serviceVersion, + resourceAttributes); } + } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java index 9493b571c..dd0606e6d 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java @@ -2,77 +2,71 @@ import java.util.Map; -/** - * Properties starting with io.prometheus.exporter - */ +/** Properties starting with io.prometheus.exporter */ public class ExporterProperties { - private static final String INCLUDE_CREATED_TIMESTAMPS = "includeCreatedTimestamps"; - private static final String EXEMPLARS_ON_ALL_METRIC_TYPES = "exemplarsOnAllMetricTypes"; + private static final String INCLUDE_CREATED_TIMESTAMPS = "includeCreatedTimestamps"; + private static final String EXEMPLARS_ON_ALL_METRIC_TYPES = "exemplarsOnAllMetricTypes"; - private final Boolean includeCreatedTimestamps; - private final Boolean exemplarsOnAllMetricTypes; + private final Boolean includeCreatedTimestamps; + private final Boolean exemplarsOnAllMetricTypes; - private ExporterProperties(Boolean includeCreatedTimestamps, Boolean exemplarsOnAllMetricTypes) { - this.includeCreatedTimestamps = includeCreatedTimestamps; - this.exemplarsOnAllMetricTypes = exemplarsOnAllMetricTypes; - } + private ExporterProperties(Boolean includeCreatedTimestamps, Boolean exemplarsOnAllMetricTypes) { + this.includeCreatedTimestamps = includeCreatedTimestamps; + this.exemplarsOnAllMetricTypes = exemplarsOnAllMetricTypes; + } - /** - * Include the {@code _created} timestamps in text format? Default is {@code false}. - */ - public boolean getIncludeCreatedTimestamps() { - return includeCreatedTimestamps != null && includeCreatedTimestamps; - } + /** Include the {@code _created} timestamps in text format? Default is {@code false}. */ + public boolean getIncludeCreatedTimestamps() { + return includeCreatedTimestamps != null && includeCreatedTimestamps; + } - /** - * Allow Exemplars on all metric types in OpenMetrics format? - * Default is {@code false}, which means Exemplars will only be added for Counters and Histogram buckets. - */ - public boolean getExemplarsOnAllMetricTypes() { - return exemplarsOnAllMetricTypes != null && exemplarsOnAllMetricTypes; - } + /** + * Allow Exemplars on all metric types in OpenMetrics format? Default is {@code false}, which + * means Exemplars will only be added for Counters and Histogram buckets. + */ + public boolean getExemplarsOnAllMetricTypes() { + return exemplarsOnAllMetricTypes != null && exemplarsOnAllMetricTypes; + } - /** - * Note that this will remove entries from {@code properties}. - * This is because we want to know if there are unused properties remaining after all properties have been loaded. - */ - static ExporterProperties load(String prefix, Map properties) throws PrometheusPropertiesException { - Boolean includeCreatedTimestamps = Util.loadBoolean(prefix + "." + INCLUDE_CREATED_TIMESTAMPS, properties); - Boolean exemplarsOnAllMetricTypes = Util.loadBoolean(prefix + "." + EXEMPLARS_ON_ALL_METRIC_TYPES, properties); - return new ExporterProperties(includeCreatedTimestamps, exemplarsOnAllMetricTypes); - } + /** + * Note that this will remove entries from {@code properties}. This is because we want to know if + * there are unused properties remaining after all properties have been loaded. + */ + static ExporterProperties load(String prefix, Map properties) + throws PrometheusPropertiesException { + Boolean includeCreatedTimestamps = + Util.loadBoolean(prefix + "." + INCLUDE_CREATED_TIMESTAMPS, properties); + Boolean exemplarsOnAllMetricTypes = + Util.loadBoolean(prefix + "." + EXEMPLARS_ON_ALL_METRIC_TYPES, properties); + return new ExporterProperties(includeCreatedTimestamps, exemplarsOnAllMetricTypes); + } - public static Builder builder() { - return new Builder(); - } + public static Builder builder() { + return new Builder(); + } - public static class Builder { + public static class Builder { - private Boolean includeCreatedTimestamps; - private Boolean exemplarsOnAllMetricTypes; + private Boolean includeCreatedTimestamps; + private Boolean exemplarsOnAllMetricTypes; - private Builder() { - } + private Builder() {} - /** - * See {@link #getIncludeCreatedTimestamps()} - */ - public Builder includeCreatedTimestamps(boolean includeCreatedTimestamps) { - this.includeCreatedTimestamps = includeCreatedTimestamps; - return this; - } + /** See {@link #getIncludeCreatedTimestamps()} */ + public Builder includeCreatedTimestamps(boolean includeCreatedTimestamps) { + this.includeCreatedTimestamps = includeCreatedTimestamps; + return this; + } - /** - * See {@link #getExemplarsOnAllMetricTypes()}. - */ - public Builder exemplarsOnAllMetricTypes(boolean exemplarsOnAllMetricTypes) { - this.exemplarsOnAllMetricTypes = exemplarsOnAllMetricTypes; - return this; - } + /** See {@link #getExemplarsOnAllMetricTypes()}. */ + public Builder exemplarsOnAllMetricTypes(boolean exemplarsOnAllMetricTypes) { + this.exemplarsOnAllMetricTypes = exemplarsOnAllMetricTypes; + return this; + } - public ExporterProperties build() { - return new ExporterProperties(includeCreatedTimestamps, exemplarsOnAllMetricTypes); - } + public ExporterProperties build() { + return new ExporterProperties(includeCreatedTimestamps, exemplarsOnAllMetricTypes); } + } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java index f38a7f4af..4a794eba2 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java @@ -4,56 +4,55 @@ public class ExporterPushgatewayProperties { - private static final String ADDRESS = "address"; - private static final String JOB = "job"; - private static final String SCHEME = "scheme"; - private final String scheme; - private final String address; - private final String job; - - private ExporterPushgatewayProperties(String address, String job, String scheme) { - this.address = address; - this.job = job; - this.scheme = scheme; - } - - /** - * Address of the Pushgateway in the form {@code host:port}. - * Default is {@code localhost:9091} - */ - public String getAddress() { - return address; - } - - /** - * {@code job} label for metrics being pushed. - * Default is the name of the JAR file that is running. - */ - public String getJob() { - return job; - } - - /** - * Scheme to be used when pushing metrics to the pushgateway. - * Must be "http" or "https". Default is "http". - */ - public String getScheme() { - return scheme; - } - - /** - * Note that this will remove entries from {@code properties}. - * This is because we want to know if there are unused properties remaining after all properties have been loaded. - */ - static ExporterPushgatewayProperties load(String prefix, Map properties) throws PrometheusPropertiesException { - String address = Util.loadString(prefix + "." + ADDRESS, properties); - String job = Util.loadString(prefix + "." + JOB, properties); - String scheme = Util.loadString(prefix + "." + SCHEME, properties); - if (scheme != null) { - if (!scheme.equals("http") && !scheme.equals("https")) { - throw new PrometheusPropertiesException(prefix + "." + SCHEME + "=" + scheme + ": Illegal value. Expecting 'http' or 'https'."); - } - } - return new ExporterPushgatewayProperties(address, job, scheme); + private static final String ADDRESS = "address"; + private static final String JOB = "job"; + private static final String SCHEME = "scheme"; + private final String scheme; + private final String address; + private final String job; + + private ExporterPushgatewayProperties(String address, String job, String scheme) { + this.address = address; + this.job = job; + this.scheme = scheme; + } + + /** Address of the Pushgateway in the form {@code host:port}. Default is {@code localhost:9091} */ + public String getAddress() { + return address; + } + + /** + * {@code job} label for metrics being pushed. Default is the name of the JAR file that is + * running. + */ + public String getJob() { + return job; + } + + /** + * Scheme to be used when pushing metrics to the pushgateway. Must be "http" or "https". Default + * is "http". + */ + public String getScheme() { + return scheme; + } + + /** + * Note that this will remove entries from {@code properties}. This is because we want to know if + * there are unused properties remaining after all properties have been loaded. + */ + static ExporterPushgatewayProperties load(String prefix, Map properties) + throws PrometheusPropertiesException { + String address = Util.loadString(prefix + "." + ADDRESS, properties); + String job = Util.loadString(prefix + "." + JOB, properties); + String scheme = Util.loadString(prefix + "." + SCHEME, properties); + if (scheme != null) { + if (!scheme.equals("http") && !scheme.equals("https")) { + throw new PrometheusPropertiesException( + prefix + "." + SCHEME + "=" + scheme + ": Illegal value. Expecting 'http' or 'https'."); + } } + return new ExporterPushgatewayProperties(address, job, scheme); + } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/MetricsProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/MetricsProperties.java index 4574d0198..744822005 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/MetricsProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/MetricsProperties.java @@ -1,432 +1,455 @@ package io.prometheus.metrics.config; +import static java.util.Collections.unmodifiableList; + import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import static java.util.Collections.unmodifiableList; - -/** - * Properties starting with io.prometheus.metrics - */ +/** Properties starting with io.prometheus.metrics */ public class MetricsProperties { - private static final String EXEMPLARS_ENABLED = "exemplarsEnabled"; - private static final String HISTOGRAM_NATIVE_ONLY = "histogramNativeOnly"; - private static final String HISTOGRAM_CLASSIC_ONLY = "histogramClassicOnly"; - private static final String HISTOGRAM_CLASSIC_UPPER_BOUNDS = "histogramClassicUpperBounds"; - private static final String HISTOGRAM_NATIVE_INITIAL_SCHEMA = "histogramNativeInitialSchema"; - private static final String HISTOGRAM_NATIVE_MIN_ZERO_THRESHOLD = "histogramNativeMinZeroThreshold"; - private static final String HISTOGRAM_NATIVE_MAX_ZERO_THRESHOLD = "histogramNativeMaxZeroThreshold"; - private static final String HISTOGRAM_NATIVE_MAX_NUMBER_OF_BUCKETS = "histogramNativeMaxNumberOfBuckets"; // 0 means unlimited number of buckets - private static final String HISTOGRAM_NATIVE_RESET_DURATION_SECONDS = "histogramNativeResetDurationSeconds"; // 0 means no reset - private static final String SUMMARY_QUANTILES = "summaryQuantiles"; - private static final String SUMMARY_QUANTILE_ERRORS = "summaryQuantileErrors"; - private static final String SUMMARY_MAX_AGE_SECONDS = "summaryMaxAgeSeconds"; - private static final String SUMMARY_NUMBER_OF_AGE_BUCKETS = "summaryNumberOfAgeBuckets"; - - private final Boolean exemplarsEnabled; - private final Boolean histogramNativeOnly; - private final Boolean histogramClassicOnly; - private final List histogramClassicUpperBounds; - private final Integer histogramNativeInitialSchema; - private final Double histogramNativeMinZeroThreshold; - private final Double histogramNativeMaxZeroThreshold; - private final Integer histogramNativeMaxNumberOfBuckets; - private final Long histogramNativeResetDurationSeconds; - private final List summaryQuantiles; - private final List summaryQuantileErrors; - private final Long summaryMaxAgeSeconds; - private final Integer summaryNumberOfAgeBuckets; - - public MetricsProperties( - Boolean exemplarsEnabled, - Boolean histogramNativeOnly, - Boolean histogramClassicOnly, - List histogramClassicUpperBounds, - Integer histogramNativeInitialSchema, - Double histogramNativeMinZeroThreshold, - Double histogramNativeMaxZeroThreshold, - Integer histogramNativeMaxNumberOfBuckets, - Long histogramNativeResetDurationSeconds, - List summaryQuantiles, - List summaryQuantileErrors, - Long summaryMaxAgeSeconds, - Integer summaryNumberOfAgeBuckets) { - this(exemplarsEnabled, - histogramNativeOnly, - histogramClassicOnly, - histogramClassicUpperBounds, - histogramNativeInitialSchema, - histogramNativeMinZeroThreshold, - histogramNativeMaxZeroThreshold, - histogramNativeMaxNumberOfBuckets, - histogramNativeResetDurationSeconds, - summaryQuantiles, - summaryQuantileErrors, - summaryMaxAgeSeconds, - summaryNumberOfAgeBuckets, - ""); + private static final String EXEMPLARS_ENABLED = "exemplarsEnabled"; + private static final String HISTOGRAM_NATIVE_ONLY = "histogramNativeOnly"; + private static final String HISTOGRAM_CLASSIC_ONLY = "histogramClassicOnly"; + private static final String HISTOGRAM_CLASSIC_UPPER_BOUNDS = "histogramClassicUpperBounds"; + private static final String HISTOGRAM_NATIVE_INITIAL_SCHEMA = "histogramNativeInitialSchema"; + private static final String HISTOGRAM_NATIVE_MIN_ZERO_THRESHOLD = + "histogramNativeMinZeroThreshold"; + private static final String HISTOGRAM_NATIVE_MAX_ZERO_THRESHOLD = + "histogramNativeMaxZeroThreshold"; + private static final String HISTOGRAM_NATIVE_MAX_NUMBER_OF_BUCKETS = + "histogramNativeMaxNumberOfBuckets"; // 0 means unlimited number of buckets + private static final String HISTOGRAM_NATIVE_RESET_DURATION_SECONDS = + "histogramNativeResetDurationSeconds"; // 0 means no reset + private static final String SUMMARY_QUANTILES = "summaryQuantiles"; + private static final String SUMMARY_QUANTILE_ERRORS = "summaryQuantileErrors"; + private static final String SUMMARY_MAX_AGE_SECONDS = "summaryMaxAgeSeconds"; + private static final String SUMMARY_NUMBER_OF_AGE_BUCKETS = "summaryNumberOfAgeBuckets"; + + private final Boolean exemplarsEnabled; + private final Boolean histogramNativeOnly; + private final Boolean histogramClassicOnly; + private final List histogramClassicUpperBounds; + private final Integer histogramNativeInitialSchema; + private final Double histogramNativeMinZeroThreshold; + private final Double histogramNativeMaxZeroThreshold; + private final Integer histogramNativeMaxNumberOfBuckets; + private final Long histogramNativeResetDurationSeconds; + private final List summaryQuantiles; + private final List summaryQuantileErrors; + private final Long summaryMaxAgeSeconds; + private final Integer summaryNumberOfAgeBuckets; + + public MetricsProperties( + Boolean exemplarsEnabled, + Boolean histogramNativeOnly, + Boolean histogramClassicOnly, + List histogramClassicUpperBounds, + Integer histogramNativeInitialSchema, + Double histogramNativeMinZeroThreshold, + Double histogramNativeMaxZeroThreshold, + Integer histogramNativeMaxNumberOfBuckets, + Long histogramNativeResetDurationSeconds, + List summaryQuantiles, + List summaryQuantileErrors, + Long summaryMaxAgeSeconds, + Integer summaryNumberOfAgeBuckets) { + this( + exemplarsEnabled, + histogramNativeOnly, + histogramClassicOnly, + histogramClassicUpperBounds, + histogramNativeInitialSchema, + histogramNativeMinZeroThreshold, + histogramNativeMaxZeroThreshold, + histogramNativeMaxNumberOfBuckets, + histogramNativeResetDurationSeconds, + summaryQuantiles, + summaryQuantileErrors, + summaryMaxAgeSeconds, + summaryNumberOfAgeBuckets, + ""); + } + + private MetricsProperties( + Boolean exemplarsEnabled, + Boolean histogramNativeOnly, + Boolean histogramClassicOnly, + List histogramClassicUpperBounds, + Integer histogramNativeInitialSchema, + Double histogramNativeMinZeroThreshold, + Double histogramNativeMaxZeroThreshold, + Integer histogramNativeMaxNumberOfBuckets, + Long histogramNativeResetDurationSeconds, + List summaryQuantiles, + List summaryQuantileErrors, + Long summaryMaxAgeSeconds, + Integer summaryNumberOfAgeBuckets, + String configPropertyPrefix) { + this.exemplarsEnabled = exemplarsEnabled; + this.histogramNativeOnly = isHistogramNativeOnly(histogramClassicOnly, histogramNativeOnly); + this.histogramClassicOnly = isHistogramClassicOnly(histogramClassicOnly, histogramNativeOnly); + this.histogramClassicUpperBounds = + histogramClassicUpperBounds == null + ? null + : unmodifiableList(new ArrayList<>(histogramClassicUpperBounds)); + this.histogramNativeInitialSchema = histogramNativeInitialSchema; + this.histogramNativeMinZeroThreshold = histogramNativeMinZeroThreshold; + this.histogramNativeMaxZeroThreshold = histogramNativeMaxZeroThreshold; + this.histogramNativeMaxNumberOfBuckets = histogramNativeMaxNumberOfBuckets; + this.histogramNativeResetDurationSeconds = histogramNativeResetDurationSeconds; + this.summaryQuantiles = + summaryQuantiles == null ? null : unmodifiableList(new ArrayList<>(summaryQuantiles)); + this.summaryQuantileErrors = + summaryQuantileErrors == null + ? null + : unmodifiableList(new ArrayList<>(summaryQuantileErrors)); + this.summaryMaxAgeSeconds = summaryMaxAgeSeconds; + this.summaryNumberOfAgeBuckets = summaryNumberOfAgeBuckets; + validate(configPropertyPrefix); + } + + private Boolean isHistogramClassicOnly( + Boolean histogramClassicOnly, Boolean histogramNativeOnly) { + if (histogramClassicOnly == null && histogramNativeOnly == null) { + return null; } - - private MetricsProperties( - Boolean exemplarsEnabled, - Boolean histogramNativeOnly, - Boolean histogramClassicOnly, - List histogramClassicUpperBounds, - Integer histogramNativeInitialSchema, - Double histogramNativeMinZeroThreshold, - Double histogramNativeMaxZeroThreshold, - Integer histogramNativeMaxNumberOfBuckets, - Long histogramNativeResetDurationSeconds, - List summaryQuantiles, - List summaryQuantileErrors, - Long summaryMaxAgeSeconds, - Integer summaryNumberOfAgeBuckets, - String configPropertyPrefix) { - this.exemplarsEnabled = exemplarsEnabled; - this.histogramNativeOnly = isHistogramNativeOnly(histogramClassicOnly, histogramNativeOnly); - this.histogramClassicOnly = isHistogramClassicOnly(histogramClassicOnly, histogramNativeOnly); - this.histogramClassicUpperBounds = histogramClassicUpperBounds == null ? null : unmodifiableList(new ArrayList<>(histogramClassicUpperBounds)); - this.histogramNativeInitialSchema = histogramNativeInitialSchema; - this.histogramNativeMinZeroThreshold = histogramNativeMinZeroThreshold; - this.histogramNativeMaxZeroThreshold = histogramNativeMaxZeroThreshold; - this.histogramNativeMaxNumberOfBuckets = histogramNativeMaxNumberOfBuckets; - this.histogramNativeResetDurationSeconds = histogramNativeResetDurationSeconds; - this.summaryQuantiles = summaryQuantiles == null ? null : unmodifiableList(new ArrayList<>(summaryQuantiles)); - this.summaryQuantileErrors = summaryQuantileErrors == null ? null : unmodifiableList(new ArrayList<>(summaryQuantileErrors)); - this.summaryMaxAgeSeconds = summaryMaxAgeSeconds; - this.summaryNumberOfAgeBuckets = summaryNumberOfAgeBuckets; - validate(configPropertyPrefix); + if (histogramClassicOnly != null) { + return histogramClassicOnly; } + return !histogramNativeOnly; + } - - private Boolean isHistogramClassicOnly(Boolean histogramClassicOnly, Boolean histogramNativeOnly) { - if (histogramClassicOnly == null && histogramNativeOnly == null) { - return null; - } - if (histogramClassicOnly != null) { - return histogramClassicOnly; - } - return !histogramNativeOnly; + private Boolean isHistogramNativeOnly(Boolean histogramClassicOnly, Boolean histogramNativeOnly) { + if (histogramClassicOnly == null && histogramNativeOnly == null) { + return null; } - - private Boolean isHistogramNativeOnly(Boolean histogramClassicOnly, Boolean histogramNativeOnly) { - if (histogramClassicOnly == null && histogramNativeOnly == null) { - return null; - } - if (histogramNativeOnly != null) { - return histogramNativeOnly; - } - return !histogramClassicOnly; + if (histogramNativeOnly != null) { + return histogramNativeOnly; + } + return !histogramClassicOnly; + } + + private void validate(String prefix) throws PrometheusPropertiesException { + Util.assertValue( + histogramNativeInitialSchema, + s -> s >= -4 && s <= 8, + "Expecting number between -4 and +8.", + prefix, + HISTOGRAM_NATIVE_INITIAL_SCHEMA); + Util.assertValue( + histogramNativeMinZeroThreshold, + t -> t >= 0, + "Expecting value >= 0.", + prefix, + HISTOGRAM_NATIVE_MIN_ZERO_THRESHOLD); + Util.assertValue( + histogramNativeMaxZeroThreshold, + t -> t >= 0, + "Expecting value >= 0.", + prefix, + HISTOGRAM_NATIVE_MAX_ZERO_THRESHOLD); + Util.assertValue( + histogramNativeMaxNumberOfBuckets, + n -> n >= 0, + "Expecting value >= 0.", + prefix, + HISTOGRAM_NATIVE_MAX_NUMBER_OF_BUCKETS); + Util.assertValue( + histogramNativeResetDurationSeconds, + t -> t >= 0, + "Expecting value >= 0.", + prefix, + HISTOGRAM_NATIVE_RESET_DURATION_SECONDS); + Util.assertValue( + summaryMaxAgeSeconds, t -> t > 0, "Expecting value > 0", prefix, SUMMARY_MAX_AGE_SECONDS); + Util.assertValue( + summaryNumberOfAgeBuckets, + t -> t > 0, + "Expecting value > 0", + prefix, + SUMMARY_NUMBER_OF_AGE_BUCKETS); + + if (Boolean.TRUE.equals(histogramNativeOnly) && Boolean.TRUE.equals(histogramClassicOnly)) { + throw new PrometheusPropertiesException( + prefix + + "." + + HISTOGRAM_NATIVE_ONLY + + " and " + + prefix + + "." + + HISTOGRAM_CLASSIC_ONLY + + " cannot both be true"); } - private void validate(String prefix) throws PrometheusPropertiesException { - Util.assertValue(histogramNativeInitialSchema, s -> s >= -4 && s <= 8, "Expecting number between -4 and +8.", prefix, HISTOGRAM_NATIVE_INITIAL_SCHEMA); - Util.assertValue(histogramNativeMinZeroThreshold, t -> t >= 0, "Expecting value >= 0.", prefix, HISTOGRAM_NATIVE_MIN_ZERO_THRESHOLD); - Util.assertValue(histogramNativeMaxZeroThreshold, t -> t >= 0, "Expecting value >= 0.", prefix, HISTOGRAM_NATIVE_MAX_ZERO_THRESHOLD); - Util.assertValue(histogramNativeMaxNumberOfBuckets, n -> n >= 0, "Expecting value >= 0.", prefix, HISTOGRAM_NATIVE_MAX_NUMBER_OF_BUCKETS); - Util.assertValue(histogramNativeResetDurationSeconds, t -> t >= 0, "Expecting value >= 0.", prefix, HISTOGRAM_NATIVE_RESET_DURATION_SECONDS); - Util.assertValue(summaryMaxAgeSeconds, t -> t > 0, "Expecting value > 0", prefix, SUMMARY_MAX_AGE_SECONDS); - Util.assertValue(summaryNumberOfAgeBuckets, t -> t > 0, "Expecting value > 0", prefix, SUMMARY_NUMBER_OF_AGE_BUCKETS); - - if (Boolean.TRUE.equals(histogramNativeOnly) && Boolean.TRUE.equals(histogramClassicOnly)) { - throw new PrometheusPropertiesException(prefix + "." + HISTOGRAM_NATIVE_ONLY + " and " + prefix + "." + HISTOGRAM_CLASSIC_ONLY + " cannot both be true"); - } - - if (histogramNativeMinZeroThreshold != null && histogramNativeMaxZeroThreshold != null) { - if (histogramNativeMinZeroThreshold > histogramNativeMaxZeroThreshold) { - throw new PrometheusPropertiesException(prefix + "." + HISTOGRAM_NATIVE_MIN_ZERO_THRESHOLD + " cannot be greater than " + prefix + "." + HISTOGRAM_NATIVE_MAX_ZERO_THRESHOLD); - } - } + if (histogramNativeMinZeroThreshold != null && histogramNativeMaxZeroThreshold != null) { + if (histogramNativeMinZeroThreshold > histogramNativeMaxZeroThreshold) { + throw new PrometheusPropertiesException( + prefix + + "." + + HISTOGRAM_NATIVE_MIN_ZERO_THRESHOLD + + " cannot be greater than " + + prefix + + "." + + HISTOGRAM_NATIVE_MAX_ZERO_THRESHOLD); + } + } - if (summaryQuantiles != null) { - for (double quantile : summaryQuantiles) { - if (quantile < 0 || quantile > 1) { - throw new PrometheusPropertiesException(prefix + "." + SUMMARY_QUANTILES + ": Expecting 0.0 <= quantile <= 1.0"); - } - } + if (summaryQuantiles != null) { + for (double quantile : summaryQuantiles) { + if (quantile < 0 || quantile > 1) { + throw new PrometheusPropertiesException( + prefix + "." + SUMMARY_QUANTILES + ": Expecting 0.0 <= quantile <= 1.0"); } + } + } - if (summaryQuantileErrors != null) { - if (summaryQuantiles == null) { - throw new PrometheusPropertiesException(prefix + "." + SUMMARY_QUANTILE_ERRORS + ": Can't configure " + SUMMARY_QUANTILE_ERRORS + " without configuring " + SUMMARY_QUANTILES); - } - if (summaryQuantileErrors.size() != summaryQuantiles.size()) { - throw new PrometheusPropertiesException(prefix + "." + SUMMARY_QUANTILE_ERRORS + ": must have the same length as " + SUMMARY_QUANTILES); - } - for (double error : summaryQuantileErrors) { - if (error < 0 || error > 1) { - throw new PrometheusPropertiesException(prefix + "." + SUMMARY_QUANTILE_ERRORS + ": Expecting 0.0 <= error <= 1.0"); - } - } + if (summaryQuantileErrors != null) { + if (summaryQuantiles == null) { + throw new PrometheusPropertiesException( + prefix + + "." + + SUMMARY_QUANTILE_ERRORS + + ": Can't configure " + + SUMMARY_QUANTILE_ERRORS + + " without configuring " + + SUMMARY_QUANTILES); + } + if (summaryQuantileErrors.size() != summaryQuantiles.size()) { + throw new PrometheusPropertiesException( + prefix + + "." + + SUMMARY_QUANTILE_ERRORS + + ": must have the same length as " + + SUMMARY_QUANTILES); + } + for (double error : summaryQuantileErrors) { + if (error < 0 || error > 1) { + throw new PrometheusPropertiesException( + prefix + "." + SUMMARY_QUANTILE_ERRORS + ": Expecting 0.0 <= error <= 1.0"); } + } } - - /** - * This is the only configuration property that can be applied to all metric types. - * You can use it to turn Exemplar support off. Default is {@code true}. - */ - public Boolean getExemplarsEnabled() { - return exemplarsEnabled; + } + + /** + * This is the only configuration property that can be applied to all metric types. You can use it + * to turn Exemplar support off. Default is {@code true}. + */ + public Boolean getExemplarsEnabled() { + return exemplarsEnabled; + } + + /** See {@code Histogram.Builder.nativeOnly()} */ + public Boolean getHistogramNativeOnly() { + return histogramNativeOnly; + } + + /** See {@code Histogram.Builder.classicOnly()} */ + public Boolean getHistogramClassicOnly() { + return histogramClassicOnly; + } + + /** See {@code Histogram.Builder.classicBuckets()} */ + public List getHistogramClassicUpperBounds() { + return histogramClassicUpperBounds; + } + + /** See {@code Histogram.Builder.nativeInitialSchema()} */ + public Integer getHistogramNativeInitialSchema() { + return histogramNativeInitialSchema; + } + + /** See {@code Histogram.Builder.nativeMinZeroThreshold()} */ + public Double getHistogramNativeMinZeroThreshold() { + return histogramNativeMinZeroThreshold; + } + + /** See {@code Histogram.Builder.nativeMaxZeroThreshold()} */ + public Double getHistogramNativeMaxZeroThreshold() { + return histogramNativeMaxZeroThreshold; + } + + /** See {@code Histogram.Builder.nativeMaxNumberOfBuckets()} */ + public Integer getHistogramNativeMaxNumberOfBuckets() { + return histogramNativeMaxNumberOfBuckets; + } + + /** See {@code Histogram.Builder.nativeResetDuration()} */ + public Long getHistogramNativeResetDurationSeconds() { + return histogramNativeResetDurationSeconds; + } + + /** See {@code Summary.Builder.quantile()} */ + public List getSummaryQuantiles() { + return summaryQuantiles; + } + + /** + * See {@code Summary.Builder.quantile()} + * + *

    Returns {@code null} only if {@link #getSummaryQuantiles()} is also {@code null}. Returns an + * empty list if {@link #getSummaryQuantiles()} are specified without specifying errors. If the + * list is not empty, it has the same size as {@link #getSummaryQuantiles()}. + */ + public List getSummaryQuantileErrors() { + if (summaryQuantiles != null) { + if (summaryQuantileErrors == null) { + return Collections.emptyList(); + } } - - /** - * See {@code Histogram.Builder.nativeOnly()} - */ - public Boolean getHistogramNativeOnly() { - return histogramNativeOnly; + return summaryQuantileErrors; + } + + /** See {@code Summary.Builder.maxAgeSeconds()} */ + public Long getSummaryMaxAgeSeconds() { + return summaryMaxAgeSeconds; + } + + /** See {@code Summary.Builder.numberOfAgeBuckets()} */ + public Integer getSummaryNumberOfAgeBuckets() { + return summaryNumberOfAgeBuckets; + } + + /** + * Note that this will remove entries from {@code properties}. This is because we want to know if + * there are unused properties remaining after all properties have been loaded. + */ + static MetricsProperties load(String prefix, Map properties) + throws PrometheusPropertiesException { + return new MetricsProperties( + Util.loadBoolean(prefix + "." + EXEMPLARS_ENABLED, properties), + Util.loadBoolean(prefix + "." + HISTOGRAM_NATIVE_ONLY, properties), + Util.loadBoolean(prefix + "." + HISTOGRAM_CLASSIC_ONLY, properties), + Util.loadDoubleList(prefix + "." + HISTOGRAM_CLASSIC_UPPER_BOUNDS, properties), + Util.loadInteger(prefix + "." + HISTOGRAM_NATIVE_INITIAL_SCHEMA, properties), + Util.loadDouble(prefix + "." + HISTOGRAM_NATIVE_MIN_ZERO_THRESHOLD, properties), + Util.loadDouble(prefix + "." + HISTOGRAM_NATIVE_MAX_ZERO_THRESHOLD, properties), + Util.loadInteger(prefix + "." + HISTOGRAM_NATIVE_MAX_NUMBER_OF_BUCKETS, properties), + Util.loadLong(prefix + "." + HISTOGRAM_NATIVE_RESET_DURATION_SECONDS, properties), + Util.loadDoubleList(prefix + "." + SUMMARY_QUANTILES, properties), + Util.loadDoubleList(prefix + "." + SUMMARY_QUANTILE_ERRORS, properties), + Util.loadLong(prefix + "." + SUMMARY_MAX_AGE_SECONDS, properties), + Util.loadInteger(prefix + "." + SUMMARY_NUMBER_OF_AGE_BUCKETS, properties), + prefix); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private Boolean exemplarsEnabled; + private Boolean histogramNativeOnly; + private Boolean histogramClassicOnly; + private List histogramClassicUpperBounds; + private Integer histogramNativeInitialSchema; + private Double histogramNativeMinZeroThreshold; + private Double histogramNativeMaxZeroThreshold; + private Integer histogramNativeMaxNumberOfBuckets; + private Long histogramNativeResetDurationSeconds; + private List summaryQuantiles; + private List summaryQuantileErrors; + private Long summaryMaxAgeSeconds; + private Integer summaryNumberOfAgeBuckets; + + private Builder() {} + + public MetricsProperties build() { + return new MetricsProperties( + exemplarsEnabled, + histogramNativeOnly, + histogramClassicOnly, + histogramClassicUpperBounds, + histogramNativeInitialSchema, + histogramNativeMinZeroThreshold, + histogramNativeMaxZeroThreshold, + histogramNativeMaxNumberOfBuckets, + histogramNativeResetDurationSeconds, + summaryQuantiles, + summaryQuantileErrors, + summaryMaxAgeSeconds, + summaryNumberOfAgeBuckets); } - /** - * See {@code Histogram.Builder.classicOnly()} - */ - public Boolean getHistogramClassicOnly() { - return histogramClassicOnly; + /** See {@link MetricsProperties#getExemplarsEnabled()} */ + public Builder exemplarsEnabled(Boolean exemplarsEnabled) { + this.exemplarsEnabled = exemplarsEnabled; + return this; } - /** - * See {@code Histogram.Builder.classicBuckets()} - */ - public List getHistogramClassicUpperBounds() { - return histogramClassicUpperBounds; + /** See {@link MetricsProperties#getHistogramNativeOnly()} */ + public Builder histogramNativeOnly(Boolean histogramNativeOnly) { + this.histogramNativeOnly = histogramNativeOnly; + return this; } - /** - * See {@code Histogram.Builder.nativeInitialSchema()} - */ - public Integer getHistogramNativeInitialSchema() { - return histogramNativeInitialSchema; + /** See {@link MetricsProperties#getHistogramClassicOnly()} */ + public Builder histogramClassicOnly(Boolean histogramClassicOnly) { + this.histogramClassicOnly = histogramClassicOnly; + return this; } - /** - * See {@code Histogram.Builder.nativeMinZeroThreshold()} - */ - public Double getHistogramNativeMinZeroThreshold() { - return histogramNativeMinZeroThreshold; + /** See {@link MetricsProperties#getHistogramClassicUpperBounds()} */ + public Builder histogramClassicUpperBounds(double... histogramClassicUpperBounds) { + this.histogramClassicUpperBounds = Util.toList(histogramClassicUpperBounds); + return this; } - /** - * See {@code Histogram.Builder.nativeMaxZeroThreshold()} - */ - public Double getHistogramNativeMaxZeroThreshold() { - return histogramNativeMaxZeroThreshold; + /** See {@link MetricsProperties#getHistogramNativeInitialSchema()} */ + public Builder histogramNativeInitialSchema(Integer histogramNativeInitialSchema) { + this.histogramNativeInitialSchema = histogramNativeInitialSchema; + return this; } - /** - * See {@code Histogram.Builder.nativeMaxNumberOfBuckets()} - */ - public Integer getHistogramNativeMaxNumberOfBuckets() { - return histogramNativeMaxNumberOfBuckets; + /** See {@link MetricsProperties#getHistogramNativeMinZeroThreshold()} */ + public Builder histogramNativeMinZeroThreshold(Double histogramNativeMinZeroThreshold) { + this.histogramNativeMinZeroThreshold = histogramNativeMinZeroThreshold; + return this; } - /** - * See {@code Histogram.Builder.nativeResetDuration()} - */ - public Long getHistogramNativeResetDurationSeconds() { - return histogramNativeResetDurationSeconds; + /** See {@link MetricsProperties#getHistogramNativeMaxZeroThreshold()} */ + public Builder histogramNativeMaxZeroThreshold(Double histogramNativeMaxZeroThreshold) { + this.histogramNativeMaxZeroThreshold = histogramNativeMaxZeroThreshold; + return this; } - /** - * See {@code Summary.Builder.quantile()} - */ - public List getSummaryQuantiles() { - return summaryQuantiles; + /** See {@link MetricsProperties#getHistogramNativeMaxNumberOfBuckets()} */ + public Builder histogramNativeMaxNumberOfBuckets(Integer histogramNativeMaxNumberOfBuckets) { + this.histogramNativeMaxNumberOfBuckets = histogramNativeMaxNumberOfBuckets; + return this; } - /** - * See {@code Summary.Builder.quantile()} - *

    - * Returns {@code null} only if {@link #getSummaryQuantiles()} is also {@code null}. - * Returns an empty list if {@link #getSummaryQuantiles()} are specified without specifying errors. - * If the list is not empty, it has the same size as {@link #getSummaryQuantiles()}. - */ - public List getSummaryQuantileErrors() { - if (summaryQuantiles != null) { - if (summaryQuantileErrors == null) { - return Collections.emptyList(); - } - } - return summaryQuantileErrors; + /** See {@link MetricsProperties#getHistogramNativeResetDurationSeconds()} */ + public Builder histogramNativeResetDurationSeconds(Long histogramNativeResetDurationSeconds) { + this.histogramNativeResetDurationSeconds = histogramNativeResetDurationSeconds; + return this; } - /** - * See {@code Summary.Builder.maxAgeSeconds()} - */ - public Long getSummaryMaxAgeSeconds() { - return summaryMaxAgeSeconds; + /** See {@link MetricsProperties#getSummaryQuantiles()} */ + public Builder summaryQuantiles(double... summaryQuantiles) { + this.summaryQuantiles = Util.toList(summaryQuantiles); + return this; } - /** - * See {@code Summary.Builder.numberOfAgeBuckets()} - */ - public Integer getSummaryNumberOfAgeBuckets() { - return summaryNumberOfAgeBuckets; + /** See {@link MetricsProperties#getSummaryQuantileErrors()} */ + public Builder summaryQuantileErrors(double... summaryQuantileErrors) { + this.summaryQuantileErrors = Util.toList(summaryQuantileErrors); + return this; } - /** - * Note that this will remove entries from {@code properties}. - * This is because we want to know if there are unused properties remaining after all properties have been loaded. - */ - static MetricsProperties load(String prefix, Map properties) throws PrometheusPropertiesException { - return new MetricsProperties( - Util.loadBoolean(prefix + "." + EXEMPLARS_ENABLED, properties), - Util.loadBoolean(prefix + "." + HISTOGRAM_NATIVE_ONLY, properties), - Util.loadBoolean(prefix + "." + HISTOGRAM_CLASSIC_ONLY, properties), - Util.loadDoubleList(prefix + "." + HISTOGRAM_CLASSIC_UPPER_BOUNDS, properties), - Util.loadInteger(prefix + "." + HISTOGRAM_NATIVE_INITIAL_SCHEMA, properties), - Util.loadDouble(prefix + "." + HISTOGRAM_NATIVE_MIN_ZERO_THRESHOLD, properties), - Util.loadDouble(prefix + "." + HISTOGRAM_NATIVE_MAX_ZERO_THRESHOLD, properties), - Util.loadInteger(prefix + "." + HISTOGRAM_NATIVE_MAX_NUMBER_OF_BUCKETS, properties), - Util.loadLong(prefix + "." + HISTOGRAM_NATIVE_RESET_DURATION_SECONDS, properties), - Util.loadDoubleList(prefix + "." + SUMMARY_QUANTILES, properties), - Util.loadDoubleList(prefix + "." + SUMMARY_QUANTILE_ERRORS, properties), - Util.loadLong(prefix + "." + SUMMARY_MAX_AGE_SECONDS, properties), - Util.loadInteger(prefix + "." + SUMMARY_NUMBER_OF_AGE_BUCKETS, properties), - prefix); + /** See {@link MetricsProperties#getSummaryMaxAgeSeconds()} */ + public Builder summaryMaxAgeSeconds(Long summaryMaxAgeSeconds) { + this.summaryMaxAgeSeconds = summaryMaxAgeSeconds; + return this; } - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private Boolean exemplarsEnabled; - private Boolean histogramNativeOnly; - private Boolean histogramClassicOnly; - private List histogramClassicUpperBounds; - private Integer histogramNativeInitialSchema; - private Double histogramNativeMinZeroThreshold; - private Double histogramNativeMaxZeroThreshold; - private Integer histogramNativeMaxNumberOfBuckets; - private Long histogramNativeResetDurationSeconds; - private List summaryQuantiles; - private List summaryQuantileErrors; - private Long summaryMaxAgeSeconds; - private Integer summaryNumberOfAgeBuckets; - - private Builder() { - } - - public MetricsProperties build() { - return new MetricsProperties(exemplarsEnabled, - histogramNativeOnly, - histogramClassicOnly, - histogramClassicUpperBounds, - histogramNativeInitialSchema, - histogramNativeMinZeroThreshold, - histogramNativeMaxZeroThreshold, - histogramNativeMaxNumberOfBuckets, - histogramNativeResetDurationSeconds, - summaryQuantiles, - summaryQuantileErrors, - summaryMaxAgeSeconds, - summaryNumberOfAgeBuckets); - } - - /** - * See {@link MetricsProperties#getExemplarsEnabled()} - */ - public Builder exemplarsEnabled(Boolean exemplarsEnabled) { - this.exemplarsEnabled = exemplarsEnabled; - return this; - } - - /** - * See {@link MetricsProperties#getHistogramNativeOnly()} - */ - public Builder histogramNativeOnly(Boolean histogramNativeOnly) { - this.histogramNativeOnly = histogramNativeOnly; - return this; - } - - /** - * See {@link MetricsProperties#getHistogramClassicOnly()} - */ - public Builder histogramClassicOnly(Boolean histogramClassicOnly) { - this.histogramClassicOnly = histogramClassicOnly; - return this; - } - - /** - * See {@link MetricsProperties#getHistogramClassicUpperBounds()} - */ - public Builder histogramClassicUpperBounds(double... histogramClassicUpperBounds) { - this.histogramClassicUpperBounds = Util.toList(histogramClassicUpperBounds); - return this; - } - - /** - * See {@link MetricsProperties#getHistogramNativeInitialSchema()} - */ - public Builder histogramNativeInitialSchema(Integer histogramNativeInitialSchema) { - this.histogramNativeInitialSchema = histogramNativeInitialSchema; - return this; - } - - /** - * See {@link MetricsProperties#getHistogramNativeMinZeroThreshold()} - */ - public Builder histogramNativeMinZeroThreshold(Double histogramNativeMinZeroThreshold) { - this.histogramNativeMinZeroThreshold = histogramNativeMinZeroThreshold; - return this; - } - - /** - * See {@link MetricsProperties#getHistogramNativeMaxZeroThreshold()} - */ - public Builder histogramNativeMaxZeroThreshold(Double histogramNativeMaxZeroThreshold) { - this.histogramNativeMaxZeroThreshold = histogramNativeMaxZeroThreshold; - return this; - } - - /** - * See {@link MetricsProperties#getHistogramNativeMaxNumberOfBuckets()} - */ - public Builder histogramNativeMaxNumberOfBuckets(Integer histogramNativeMaxNumberOfBuckets) { - this.histogramNativeMaxNumberOfBuckets = histogramNativeMaxNumberOfBuckets; - return this; - } - - /** - * See {@link MetricsProperties#getHistogramNativeResetDurationSeconds()} - */ - public Builder histogramNativeResetDurationSeconds(Long histogramNativeResetDurationSeconds) { - this.histogramNativeResetDurationSeconds = histogramNativeResetDurationSeconds; - return this; - } - - /** - * See {@link MetricsProperties#getSummaryQuantiles()} - */ - public Builder summaryQuantiles(double... summaryQuantiles) { - this.summaryQuantiles = Util.toList(summaryQuantiles); - return this; - } - - /** - * See {@link MetricsProperties#getSummaryQuantileErrors()} - */ - public Builder summaryQuantileErrors(double... summaryQuantileErrors) { - this.summaryQuantileErrors = Util.toList(summaryQuantileErrors); - return this; - } - - /** - * See {@link MetricsProperties#getSummaryMaxAgeSeconds()} - */ - public Builder summaryMaxAgeSeconds(Long summaryMaxAgeSeconds) { - this.summaryMaxAgeSeconds = summaryMaxAgeSeconds; - return this; - } - - /** - * See {@link MetricsProperties#getSummaryNumberOfAgeBuckets()} - */ - public Builder summaryNumberOfAgeBuckets(Integer summaryNumberOfAgeBuckets) { - this.summaryNumberOfAgeBuckets = summaryNumberOfAgeBuckets; - return this; - } + /** See {@link MetricsProperties#getSummaryNumberOfAgeBuckets()} */ + public Builder summaryNumberOfAgeBuckets(Integer summaryNumberOfAgeBuckets) { + this.summaryNumberOfAgeBuckets = summaryNumberOfAgeBuckets; + return this; } + } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java index 2e26a4c7b..da31fe8cc 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java @@ -5,89 +5,94 @@ /** * The Prometheus Java client library can be configured at runtime (e.g. using a properties file). - *

    - * This class represents the runtime configuration. + * + *

    This class represents the runtime configuration. */ public class PrometheusProperties { - private static final PrometheusProperties instance = PrometheusPropertiesLoader.load(); + private static final PrometheusProperties instance = PrometheusPropertiesLoader.load(); - private final MetricsProperties defaultMetricsProperties; - private final Map metricProperties = new HashMap<>(); - private final ExemplarsProperties exemplarProperties; - private final ExporterProperties exporterProperties; - private final ExporterFilterProperties exporterFilterProperties; - private final ExporterHttpServerProperties exporterHttpServerProperties; - private final ExporterOpenTelemetryProperties exporterOpenTelemetryProperties; - private final ExporterPushgatewayProperties exporterPushgatewayProperties; + private final MetricsProperties defaultMetricsProperties; + private final Map metricProperties = new HashMap<>(); + private final ExemplarsProperties exemplarProperties; + private final ExporterProperties exporterProperties; + private final ExporterFilterProperties exporterFilterProperties; + private final ExporterHttpServerProperties exporterHttpServerProperties; + private final ExporterOpenTelemetryProperties exporterOpenTelemetryProperties; + private final ExporterPushgatewayProperties exporterPushgatewayProperties; - /** - * Get the properties instance. When called for the first time, {@code get()} loads the properties from the following locations: - *

      - *
    • {@code prometheus.properties} file found in the classpath.
    • - *
    • Properties file specified in the {@code PROMETHEUS_CONFIG} environment variable or the {@code prometheus.config} system property.
    • - *
    • Individual properties from system properties.
    • - *
    - */ - public static PrometheusProperties get() throws PrometheusPropertiesException { - return instance; - } + /** + * Get the properties instance. When called for the first time, {@code get()} loads the properties + * from the following locations: + * + *
      + *
    • {@code prometheus.properties} file found in the classpath. + *
    • Properties file specified in the {@code PROMETHEUS_CONFIG} environment variable or the + * {@code prometheus.config} system property. + *
    • Individual properties from system properties. + *
    + */ + public static PrometheusProperties get() throws PrometheusPropertiesException { + return instance; + } - public PrometheusProperties( - MetricsProperties defaultMetricsProperties, - Map metricProperties, - ExemplarsProperties exemplarProperties, - ExporterProperties exporterProperties, - ExporterFilterProperties exporterFilterProperties, - ExporterHttpServerProperties httpServerConfig, - ExporterPushgatewayProperties pushgatewayProperties, - ExporterOpenTelemetryProperties otelConfig) { - this.defaultMetricsProperties = defaultMetricsProperties; - this.metricProperties.putAll(metricProperties); - this.exemplarProperties = exemplarProperties; - this.exporterProperties = exporterProperties; - this.exporterFilterProperties = exporterFilterProperties; - this.exporterHttpServerProperties = httpServerConfig; - this.exporterPushgatewayProperties = pushgatewayProperties; - this.exporterOpenTelemetryProperties = otelConfig; - } + public PrometheusProperties( + MetricsProperties defaultMetricsProperties, + Map metricProperties, + ExemplarsProperties exemplarProperties, + ExporterProperties exporterProperties, + ExporterFilterProperties exporterFilterProperties, + ExporterHttpServerProperties httpServerConfig, + ExporterPushgatewayProperties pushgatewayProperties, + ExporterOpenTelemetryProperties otelConfig) { + this.defaultMetricsProperties = defaultMetricsProperties; + this.metricProperties.putAll(metricProperties); + this.exemplarProperties = exemplarProperties; + this.exporterProperties = exporterProperties; + this.exporterFilterProperties = exporterFilterProperties; + this.exporterHttpServerProperties = httpServerConfig; + this.exporterPushgatewayProperties = pushgatewayProperties; + this.exporterOpenTelemetryProperties = otelConfig; + } - /** - * The default metric properties apply for metrics where {@link #getMetricProperties(String)} is {@code null}. - */ - public MetricsProperties getDefaultMetricProperties() { - return defaultMetricsProperties; - } + /** + * The default metric properties apply for metrics where {@link #getMetricProperties(String)} is + * {@code null}. + */ + public MetricsProperties getDefaultMetricProperties() { + return defaultMetricsProperties; + } - /** - * Properties specific for one metric. Should be merged with {@link #getDefaultMetricProperties()}. - * May return {@code null} if no metric-specific properties are configured for a metric name. - */ - public MetricsProperties getMetricProperties(String metricName) { - return metricProperties.get(metricName.replace(".", "_")); - } + /** + * Properties specific for one metric. Should be merged with {@link + * #getDefaultMetricProperties()}. May return {@code null} if no metric-specific properties are + * configured for a metric name. + */ + public MetricsProperties getMetricProperties(String metricName) { + return metricProperties.get(metricName.replace(".", "_")); + } - public ExemplarsProperties getExemplarProperties() { - return exemplarProperties; - } + public ExemplarsProperties getExemplarProperties() { + return exemplarProperties; + } - public ExporterProperties getExporterProperties() { - return exporterProperties; - } + public ExporterProperties getExporterProperties() { + return exporterProperties; + } - public ExporterFilterProperties getExporterFilterProperties() { - return exporterFilterProperties; - } + public ExporterFilterProperties getExporterFilterProperties() { + return exporterFilterProperties; + } - public ExporterHttpServerProperties getExporterHttpServerProperties() { - return exporterHttpServerProperties; - } + public ExporterHttpServerProperties getExporterHttpServerProperties() { + return exporterHttpServerProperties; + } - public ExporterPushgatewayProperties getExporterPushgatewayProperties() { - return exporterPushgatewayProperties; - } + public ExporterPushgatewayProperties getExporterPushgatewayProperties() { + return exporterPushgatewayProperties; + } - public ExporterOpenTelemetryProperties getExporterOpenTelemetryProperties() { - return exporterOpenTelemetryProperties; - } + public ExporterOpenTelemetryProperties getExporterOpenTelemetryProperties() { + return exporterOpenTelemetryProperties; + } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesException.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesException.java index e41009ca2..5024cc45a 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesException.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesException.java @@ -2,11 +2,11 @@ public class PrometheusPropertiesException extends RuntimeException { - public PrometheusPropertiesException(String msg) { - super(msg); - } + public PrometheusPropertiesException(String msg) { + super(msg); + } - public PrometheusPropertiesException(String msg, Exception cause) { - super(msg, cause); - } + public PrometheusPropertiesException(String msg, Exception cause) { + super(msg, cause); + } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java index bb9b3c2cb..9d1fde4ab 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java @@ -14,101 +14,123 @@ /** * The Properties Loader is early stages. - *

    - * It would be great to implement a subset of - * Spring Boot's Externalized Configuration, - * like support for YAML, Properties, and env vars, or support for Spring's naming conventions for properties. + * + *

    It would be great to implement a subset of Spring + * Boot's Externalized Configuration, like support for YAML, Properties, and env vars, or + * support for Spring's naming conventions for properties. */ public class PrometheusPropertiesLoader { - /** - * See {@link PrometheusProperties#get()}. - */ - public static PrometheusProperties load() throws PrometheusPropertiesException { - return load(new Properties()); - } + /** See {@link PrometheusProperties#get()}. */ + public static PrometheusProperties load() throws PrometheusPropertiesException { + return load(new Properties()); + } - public static PrometheusProperties load(Map externalProperties) throws PrometheusPropertiesException { - Map properties = loadProperties(externalProperties); - Map metricsConfigs = loadMetricsConfigs(properties); - MetricsProperties defaultMetricsProperties = MetricsProperties.load("io.prometheus.metrics", properties); - ExemplarsProperties exemplarConfig = ExemplarsProperties.load("io.prometheus.exemplars", properties); - ExporterProperties exporterProperties = ExporterProperties.load("io.prometheus.exporter", properties); - ExporterFilterProperties exporterFilterProperties = ExporterFilterProperties.load("io.prometheus.exporter.filter", properties); - ExporterHttpServerProperties exporterHttpServerProperties = ExporterHttpServerProperties.load("io.prometheus.exporter.httpServer", properties); - ExporterPushgatewayProperties exporterPushgatewayProperties = ExporterPushgatewayProperties.load("io.prometheus.exporter.pushgateway", properties); - ExporterOpenTelemetryProperties exporterOpenTelemetryProperties = ExporterOpenTelemetryProperties.load("io.prometheus.exporter.opentelemetry", properties); - validateAllPropertiesProcessed(properties); - return new PrometheusProperties(defaultMetricsProperties, metricsConfigs, exemplarConfig, exporterProperties, exporterFilterProperties, exporterHttpServerProperties, exporterPushgatewayProperties, exporterOpenTelemetryProperties); - } + public static PrometheusProperties load(Map externalProperties) + throws PrometheusPropertiesException { + Map properties = loadProperties(externalProperties); + Map metricsConfigs = loadMetricsConfigs(properties); + MetricsProperties defaultMetricsProperties = + MetricsProperties.load("io.prometheus.metrics", properties); + ExemplarsProperties exemplarConfig = + ExemplarsProperties.load("io.prometheus.exemplars", properties); + ExporterProperties exporterProperties = + ExporterProperties.load("io.prometheus.exporter", properties); + ExporterFilterProperties exporterFilterProperties = + ExporterFilterProperties.load("io.prometheus.exporter.filter", properties); + ExporterHttpServerProperties exporterHttpServerProperties = + ExporterHttpServerProperties.load("io.prometheus.exporter.httpServer", properties); + ExporterPushgatewayProperties exporterPushgatewayProperties = + ExporterPushgatewayProperties.load("io.prometheus.exporter.pushgateway", properties); + ExporterOpenTelemetryProperties exporterOpenTelemetryProperties = + ExporterOpenTelemetryProperties.load("io.prometheus.exporter.opentelemetry", properties); + validateAllPropertiesProcessed(properties); + return new PrometheusProperties( + defaultMetricsProperties, + metricsConfigs, + exemplarConfig, + exporterProperties, + exporterFilterProperties, + exporterHttpServerProperties, + exporterPushgatewayProperties, + exporterOpenTelemetryProperties); + } - // This will remove entries from properties when they are processed. - private static Map loadMetricsConfigs(Map properties) { - Map result = new HashMap<>(); - // Note that the metric name in the properties file must be as exposed in the Prometheus exposition formats, - // i.e. all dots replaced with underscores. - Pattern pattern = Pattern.compile("io\\.prometheus\\.metrics\\.([^.]+)\\."); - // Create a copy of the keySet() for iterating. We cannot iterate directly over keySet() - // because entries are removed when MetricsConfig.load(...) is called. - Set propertyNames = new HashSet<>(); - for (Object key : properties.keySet()) { - propertyNames.add(key.toString()); - } - for (String propertyName : propertyNames) { - Matcher matcher = pattern.matcher(propertyName); - if (matcher.find()) { - String metricName = matcher.group(1).replace(".", "_"); - if (!result.containsKey(metricName)) { - result.put(metricName, MetricsProperties.load("io.prometheus.metrics." + metricName, properties)); - } - } - } - return result; + // This will remove entries from properties when they are processed. + private static Map loadMetricsConfigs(Map properties) { + Map result = new HashMap<>(); + // Note that the metric name in the properties file must be as exposed in the Prometheus + // exposition formats, + // i.e. all dots replaced with underscores. + Pattern pattern = Pattern.compile("io\\.prometheus\\.metrics\\.([^.]+)\\."); + // Create a copy of the keySet() for iterating. We cannot iterate directly over keySet() + // because entries are removed when MetricsConfig.load(...) is called. + Set propertyNames = new HashSet<>(); + for (Object key : properties.keySet()) { + propertyNames.add(key.toString()); } - - // If there are properties left starting with io.prometheus it's likely a typo, - // because we didn't use that property. - // Throw a config error to let the user know that this property doesn't exist. - private static void validateAllPropertiesProcessed(Map properties) { - for (Object key : properties.keySet()) { - if (key.toString().startsWith("io.prometheus")) { - throw new PrometheusPropertiesException(key + ": Unknown property"); - } + for (String propertyName : propertyNames) { + Matcher matcher = pattern.matcher(propertyName); + if (matcher.find()) { + String metricName = matcher.group(1).replace(".", "_"); + if (!result.containsKey(metricName)) { + result.put( + metricName, + MetricsProperties.load("io.prometheus.metrics." + metricName, properties)); } + } } + return result; + } - private static Map loadProperties(Map externalProperties) { - Map properties = new HashMap<>(); - properties.putAll(loadPropertiesFromClasspath()); - properties.putAll(loadPropertiesFromFile()); // overriding the entries from the classpath file - properties.putAll(System.getProperties()); // overriding the entries from the properties file - properties.putAll(externalProperties); // overriding all the entries above - // TODO: Add environment variables like EXEMPLARS_ENABLED. - return properties; + // If there are properties left starting with io.prometheus it's likely a typo, + // because we didn't use that property. + // Throw a config error to let the user know that this property doesn't exist. + private static void validateAllPropertiesProcessed(Map properties) { + for (Object key : properties.keySet()) { + if (key.toString().startsWith("io.prometheus")) { + throw new PrometheusPropertiesException(key + ": Unknown property"); + } } + } - private static Properties loadPropertiesFromClasspath() { - Properties properties = new Properties(); - try (InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("prometheus.properties")) { - properties.load(stream); - } catch (Exception ignored) { - } - return properties; + private static Map loadProperties(Map externalProperties) { + Map properties = new HashMap<>(); + properties.putAll(loadPropertiesFromClasspath()); + properties.putAll(loadPropertiesFromFile()); // overriding the entries from the classpath file + properties.putAll(System.getProperties()); // overriding the entries from the properties file + properties.putAll(externalProperties); // overriding all the entries above + // TODO: Add environment variables like EXEMPLARS_ENABLED. + return properties; + } + + private static Properties loadPropertiesFromClasspath() { + Properties properties = new Properties(); + try (InputStream stream = + Thread.currentThread() + .getContextClassLoader() + .getResourceAsStream("prometheus.properties")) { + properties.load(stream); + } catch (Exception ignored) { } + return properties; + } - private static Properties loadPropertiesFromFile() throws PrometheusPropertiesException { - Properties properties = new Properties(); - String path = System.getProperty("prometheus.config"); - if (System.getenv("PROMETHEUS_CONFIG") != null) { - path = System.getenv("PROMETHEUS_CONFIG"); - } - if (path != null) { - try (InputStream stream = Files.newInputStream(Paths.get(path))) { - properties.load(stream); - } catch (IOException e) { - throw new PrometheusPropertiesException("Failed to read Prometheus properties from " + path + ": " + e.getMessage(), e); - } - } - return properties; + private static Properties loadPropertiesFromFile() throws PrometheusPropertiesException { + Properties properties = new Properties(); + String path = System.getProperty("prometheus.config"); + if (System.getenv("PROMETHEUS_CONFIG") != null) { + path = System.getenv("PROMETHEUS_CONFIG"); + } + if (path != null) { + try (InputStream stream = Files.newInputStream(Paths.get(path))) { + properties.load(stream); + } catch (IOException e) { + throw new PrometheusPropertiesException( + "Failed to read Prometheus properties from " + path + ": " + e.getMessage(), e); + } } + return properties; + } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java index 5b3f97252..66d6b2d92 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java @@ -9,131 +9,145 @@ class Util { - private static String getProperty(String name, Map properties) { - Object object = properties.remove(name); - if (object != null) { - return object.toString(); - } - return null; + private static String getProperty(String name, Map properties) { + Object object = properties.remove(name); + if (object != null) { + return object.toString(); } + return null; + } - static Boolean loadBoolean(String name, Map properties) throws PrometheusPropertiesException { - String property = getProperty(name, properties); - if (property != null) { - if (!"true".equalsIgnoreCase(property) && !"false".equalsIgnoreCase(property)) { - throw new PrometheusPropertiesException(name + "=" + property + ": Expecting 'true' or 'false'"); - } - return Boolean.parseBoolean(property); - } - return null; + static Boolean loadBoolean(String name, Map properties) + throws PrometheusPropertiesException { + String property = getProperty(name, properties); + if (property != null) { + if (!"true".equalsIgnoreCase(property) && !"false".equalsIgnoreCase(property)) { + throw new PrometheusPropertiesException( + name + "=" + property + ": Expecting 'true' or 'false'"); + } + return Boolean.parseBoolean(property); } + return null; + } - static List toList(double... values) { - if (values == null) { - return null; - } - List result = new ArrayList<>(values.length); - for (double value : values) { - result.add(value); - } - return result; + static List toList(double... values) { + if (values == null) { + return null; } - - static String loadString(String name, Map properties) throws PrometheusPropertiesException { - return getProperty(name, properties); + List result = new ArrayList<>(values.length); + for (double value : values) { + result.add(value); } + return result; + } - static List loadStringList(String name, Map properties) throws PrometheusPropertiesException { - String property = getProperty(name, properties); - if (property != null) { - return Arrays.asList(property.split("\\s*,\\s*")); - } - return null; + static String loadString(String name, Map properties) + throws PrometheusPropertiesException { + return getProperty(name, properties); + } + + static List loadStringList(String name, Map properties) + throws PrometheusPropertiesException { + String property = getProperty(name, properties); + if (property != null) { + return Arrays.asList(property.split("\\s*,\\s*")); } + return null; + } - static List loadDoubleList(String name, Map properties) throws PrometheusPropertiesException { - String property = getProperty(name, properties); - if (property != null) { - String[] numbers = property.split("\\s*,\\s*"); - Double[] result = new Double[numbers.length]; - for (int i = 0; i < numbers.length; i++) { - try { - if ("+Inf".equals(numbers[i].trim())) { - result[i] = Double.POSITIVE_INFINITY; - } else { - result[i] = Double.parseDouble(numbers[i]); - } - } catch (NumberFormatException e) { - throw new PrometheusPropertiesException(name + "=" + property + ": Expecting comma separated list of double values"); - } - } - return Arrays.asList(result); + static List loadDoubleList(String name, Map properties) + throws PrometheusPropertiesException { + String property = getProperty(name, properties); + if (property != null) { + String[] numbers = property.split("\\s*,\\s*"); + Double[] result = new Double[numbers.length]; + for (int i = 0; i < numbers.length; i++) { + try { + if ("+Inf".equals(numbers[i].trim())) { + result[i] = Double.POSITIVE_INFINITY; + } else { + result[i] = Double.parseDouble(numbers[i]); + } + } catch (NumberFormatException e) { + throw new PrometheusPropertiesException( + name + "=" + property + ": Expecting comma separated list of double values"); } - return null; + } + return Arrays.asList(result); } + return null; + } - // Map is represented as "key1=value1,key2=value2" - static Map loadMap(String name, Map properties) throws PrometheusPropertiesException { - Map result = new HashMap<>(); - String property = getProperty(name, properties); - if (property != null) { - String[] pairs = property.split(","); - for (String pair : pairs) { - if (pair.contains("=")) { - String[] keyValue = pair.split("=", 1); - if (keyValue.length == 2) { - String key = keyValue[0].trim(); - String value = keyValue[1].trim(); - if (key.length() > 0 && value.length() > 0) { - result.putIfAbsent(key, value); - } - } - } + // Map is represented as "key1=value1,key2=value2" + static Map loadMap(String name, Map properties) + throws PrometheusPropertiesException { + Map result = new HashMap<>(); + String property = getProperty(name, properties); + if (property != null) { + String[] pairs = property.split(","); + for (String pair : pairs) { + if (pair.contains("=")) { + String[] keyValue = pair.split("=", 1); + if (keyValue.length == 2) { + String key = keyValue[0].trim(); + String value = keyValue[1].trim(); + if (key.length() > 0 && value.length() > 0) { + result.putIfAbsent(key, value); } + } } - return result; + } } + return result; + } - static Integer loadInteger(String name, Map properties) throws PrometheusPropertiesException { - String property = getProperty(name, properties); - if (property != null) { - try { - return Integer.parseInt(property); - } catch (NumberFormatException e) { - throw new PrometheusPropertiesException(name + "=" + property + ": Expecting integer value"); - } - } - return null; + static Integer loadInteger(String name, Map properties) + throws PrometheusPropertiesException { + String property = getProperty(name, properties); + if (property != null) { + try { + return Integer.parseInt(property); + } catch (NumberFormatException e) { + throw new PrometheusPropertiesException( + name + "=" + property + ": Expecting integer value"); + } } + return null; + } - static Double loadDouble(String name, Map properties) throws PrometheusPropertiesException { - String property = getProperty(name, properties); - if (property != null) { - try { - return Double.parseDouble(property); - } catch (NumberFormatException e) { - throw new PrometheusPropertiesException(name + "=" + property + ": Expecting double value"); - } - } - return null; + static Double loadDouble(String name, Map properties) + throws PrometheusPropertiesException { + String property = getProperty(name, properties); + if (property != null) { + try { + return Double.parseDouble(property); + } catch (NumberFormatException e) { + throw new PrometheusPropertiesException(name + "=" + property + ": Expecting double value"); + } } + return null; + } - static Long loadLong(String name, Map properties) throws PrometheusPropertiesException { - String property = getProperty(name, properties); - if (property != null) { - try { - return Long.parseLong(property); - } catch (NumberFormatException e) { - throw new PrometheusPropertiesException(name + "=" + property + ": Expecting long value"); - } - } - return null; + static Long loadLong(String name, Map properties) + throws PrometheusPropertiesException { + String property = getProperty(name, properties); + if (property != null) { + try { + return Long.parseLong(property); + } catch (NumberFormatException e) { + throw new PrometheusPropertiesException(name + "=" + property + ": Expecting long value"); + } } + return null; + } - static void assertValue(T number, Predicate predicate, String message, String prefix, String name) throws PrometheusPropertiesException { - if (number != null && !predicate.test(number)) { - String fullMessage = prefix == null ? name + ": " + message : prefix + "." + name + ": " + message; - throw new PrometheusPropertiesException(fullMessage); - } + static void assertValue( + T number, Predicate predicate, String message, String prefix, String name) + throws PrometheusPropertiesException { + if (number != null && !predicate.test(number)) { + String fullMessage = + prefix == null ? name + ": " + message : prefix + "." + name + ": " + message; + throw new PrometheusPropertiesException(fullMessage); } + } } diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java index 79c20702c..8d16eadb7 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java @@ -1,33 +1,46 @@ package io.prometheus.metrics.config; import java.util.Properties; - import org.junit.Assert; import org.junit.Test; -/** - * Tests for {@link PrometheusPropertiesLoader}. - */ +/** Tests for {@link PrometheusPropertiesLoader}. */ public class PrometheusPropertiesLoaderTests { - @Test - public void propertiesShouldBeLoadedFromPropertiesFile() { - PrometheusProperties prometheusProperties = PrometheusPropertiesLoader.load(); - Assert.assertEquals(11, prometheusProperties.getDefaultMetricProperties().getHistogramClassicUpperBounds().size()); - Assert.assertEquals(4, prometheusProperties.getMetricProperties("http_duration_seconds").getHistogramClassicUpperBounds().size()); - Assert.assertTrue(prometheusProperties.getExporterProperties().getExemplarsOnAllMetricTypes()); - } + @Test + public void propertiesShouldBeLoadedFromPropertiesFile() { + PrometheusProperties prometheusProperties = PrometheusPropertiesLoader.load(); + Assert.assertEquals( + 11, + prometheusProperties.getDefaultMetricProperties().getHistogramClassicUpperBounds().size()); + Assert.assertEquals( + 4, + prometheusProperties + .getMetricProperties("http_duration_seconds") + .getHistogramClassicUpperBounds() + .size()); + Assert.assertTrue(prometheusProperties.getExporterProperties().getExemplarsOnAllMetricTypes()); + } - @Test - public void externalPropertiesShouldOverridePropertiesFile() { - Properties properties = new Properties(); - properties.setProperty("io.prometheus.metrics.histogramClassicUpperBounds", ".005, .01"); - properties.setProperty("io.prometheus.metrics.http_duration_seconds.histogramClassicUpperBounds", ".005, .01, .015"); - properties.setProperty("io.prometheus.exporter.exemplarsOnAllMetricTypes", "false"); + @Test + public void externalPropertiesShouldOverridePropertiesFile() { + Properties properties = new Properties(); + properties.setProperty("io.prometheus.metrics.histogramClassicUpperBounds", ".005, .01"); + properties.setProperty( + "io.prometheus.metrics.http_duration_seconds.histogramClassicUpperBounds", + ".005, .01, .015"); + properties.setProperty("io.prometheus.exporter.exemplarsOnAllMetricTypes", "false"); - PrometheusProperties prometheusProperties = PrometheusPropertiesLoader.load(properties); - Assert.assertEquals(2, prometheusProperties.getDefaultMetricProperties().getHistogramClassicUpperBounds().size()); - Assert.assertEquals(3, prometheusProperties.getMetricProperties("http_duration_seconds").getHistogramClassicUpperBounds().size()); - Assert.assertFalse(prometheusProperties.getExporterProperties().getExemplarsOnAllMetricTypes()); - } + PrometheusProperties prometheusProperties = PrometheusPropertiesLoader.load(properties); + Assert.assertEquals( + 2, + prometheusProperties.getDefaultMetricProperties().getHistogramClassicUpperBounds().size()); + Assert.assertEquals( + 3, + prometheusProperties + .getMetricProperties("http_duration_seconds") + .getHistogramClassicUpperBounds() + .size()); + Assert.assertFalse(prometheusProperties.getExporterProperties().getExemplarsOnAllMetricTypes()); + } } diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java index 45fec1be0..f9ef25a7a 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java @@ -1,29 +1,37 @@ package io.prometheus.metrics.config; -import org.junit.Assert; -import org.junit.Test; - import java.io.IOException; import java.io.InputStream; import java.util.Properties; +import org.junit.Assert; +import org.junit.Test; public class PrometheusPropertiesTest { - @Test - public void testPrometheusConfig() { - PrometheusProperties result = PrometheusProperties.get(); - Assert.assertEquals(11, result.getDefaultMetricProperties().getHistogramClassicUpperBounds().size()); - Assert.assertEquals(4, result.getMetricProperties("http_duration_seconds").getHistogramClassicUpperBounds().size()); - } + @Test + public void testPrometheusConfig() { + PrometheusProperties result = PrometheusProperties.get(); + Assert.assertEquals( + 11, result.getDefaultMetricProperties().getHistogramClassicUpperBounds().size()); + Assert.assertEquals( + 4, + result + .getMetricProperties("http_duration_seconds") + .getHistogramClassicUpperBounds() + .size()); + } - @Test - public void testEmptyUpperBounds() throws IOException { - Properties properties = new Properties(); - try (InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("emptyUpperBounds.properties")) { - properties.load(stream); - } - Assert.assertEquals(1, properties.size()); - MetricsProperties.load("io.prometheus.metrics", properties); - Assert.assertEquals(0, properties.size()); + @Test + public void testEmptyUpperBounds() throws IOException { + Properties properties = new Properties(); + try (InputStream stream = + Thread.currentThread() + .getContextClassLoader() + .getResourceAsStream("emptyUpperBounds.properties")) { + properties.load(stream); } + Assert.assertEquals(1, properties.size()); + MetricsProperties.load("io.prometheus.metrics", properties); + Assert.assertEquals(0, properties.size()); + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/CounterDataPoint.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/CounterDataPoint.java index 51b45c62a..7055d7565 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/CounterDataPoint.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/CounterDataPoint.java @@ -3,9 +3,11 @@ import io.prometheus.metrics.model.snapshots.Labels; /** - * Represents a single counter data point, i.e. a single line for a counter metric in Prometheus text format. - *

    - * Example usage: + * Represents a single counter data point, i.e. a single line for a counter metric in Prometheus + * text format. + * + *

    Example usage: + * *

    {@code
      * Counter counter = Counter.builder()
      *     .name("tasks_total")
    @@ -15,84 +17,86 @@
      * CounterDataPoint pendingTasks = counter.labelValues("pending");
      * CounterDataPoint completedTasks = counter.labelValues("completed");
      * }
    - *

    - * Using {@code DataPoint} directly improves performance. If you increment a counter like this: + * + *

    Using {@code DataPoint} directly improves performance. If you increment a counter like this: + * *

    {@code
      * counter.labelValues("pending").inc();
      * }
    - * the label value {@code "pending"} needs to be looked up every single time. - * Using the {@code CounterDataPoint} like this: + * + * the label value {@code "pending"} needs to be looked up every single time. Using the {@code + * CounterDataPoint} like this: + * *
    {@code
      * CounterDataPoint pendingTasks = counter.labelValues("pending");
      * pendingTasks.inc();
      * }
    - * allows you to look up the label value only once, and then use the {@code CounterDataPoint} directly. - * This is a worthwhile performance improvement when instrumenting a performance-critical code path. - *

    - * If you have a counter without labels like this: + * + * allows you to look up the label value only once, and then use the {@code CounterDataPoint} + * directly. This is a worthwhile performance improvement when instrumenting a performance-critical + * code path. + * + *

    If you have a counter without labels like this: + * *

    {@code
      * Counter counterWithoutLabels = Counter.builder()
      *     .name("events_total")
      *     .register();
      * }
    + * * You can use it as a {@code CounterDataPoint} directly. So the following: + * *
    {@code
      * CounterDataPoint counterData = counterWithoutLabels.labelValues(); // empty label values
      * }
    + * * is equivalent to + * *
    {@code
      * CounterDataPoint counterData = counterWithoutLabels;
      * }
    */ public interface CounterDataPoint extends DataPoint { - /** - * Add one. - */ - default void inc() { - inc(1L); - } + /** Add one. */ + default void inc() { + inc(1L); + } - /** - * Add {@code amount}. Throws an {@link IllegalArgumentException} if {@code amount} is negative. - */ - default void inc(long amount) { - inc((double) amount); - } + /** + * Add {@code amount}. Throws an {@link IllegalArgumentException} if {@code amount} is negative. + */ + default void inc(long amount) { + inc((double) amount); + } - /** - * Add {@code amount}. Throws an {@link IllegalArgumentException} if {@code amount} is negative. - */ - void inc(double amount); + /** + * Add {@code amount}. Throws an {@link IllegalArgumentException} if {@code amount} is negative. + */ + void inc(double amount); - /** - * Add one, and create a custom exemplar with the given labels. - */ - default void incWithExemplar(Labels labels) { - incWithExemplar(1.0, labels); - } + /** Add one, and create a custom exemplar with the given labels. */ + default void incWithExemplar(Labels labels) { + incWithExemplar(1.0, labels); + } - /** - * Add {@code amount}, and create a custom exemplar with the given labels. - * Throws an {@link IllegalArgumentException} if {@code amount} is negative. - */ - default void incWithExemplar(long amount, Labels labels) { - inc((double) amount); - } + /** + * Add {@code amount}, and create a custom exemplar with the given labels. Throws an {@link + * IllegalArgumentException} if {@code amount} is negative. + */ + default void incWithExemplar(long amount, Labels labels) { + inc((double) amount); + } - /** - * Add {@code amount}, and create a custom exemplar with the given labels. - * Throws an {@link IllegalArgumentException} if {@code amount} is negative. - */ - void incWithExemplar(double amount, Labels labels); + /** + * Add {@code amount}, and create a custom exemplar with the given labels. Throws an {@link + * IllegalArgumentException} if {@code amount} is negative. + */ + void incWithExemplar(double amount, Labels labels); - /** - * Get the current value. - */ - double get(); + /** Get the current value. */ + double get(); - /** - * Get the current value as a {@code long}. Decimal places will be discarded. - */ - long getLongValue(); + /** Get the current value as a {@code long}. Decimal places will be discarded. */ + long getLongValue(); } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DataPoint.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DataPoint.java index 8dd277d81..5b6017ddf 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DataPoint.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DataPoint.java @@ -1,4 +1,3 @@ package io.prometheus.metrics.core.datapoints; -public interface DataPoint { -} +public interface DataPoint {} diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DistributionDataPoint.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DistributionDataPoint.java index f08ccae9c..57e7a3e86 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DistributionDataPoint.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DistributionDataPoint.java @@ -4,33 +4,29 @@ /** * Represents a single data point of a histogram or a summary metric. - *

    - * Single data point means identified label values like {@code {method="GET", path="/", status_code="200"}}, - * ignoring the {@code "le"} label for histograms or the {@code "quantile"} label for summaries. - *

    - * This interface is named DistributionDataPoint because both histograms and summaries are used to observe - * distributions, like latency distributions or distributions of request sizes. Therefore - * DistributionDataPoint is a good name for a common interface implemented by histogram data points - * and summary data points. - *

    - * See JavaDoc of {@link CounterDataPoint} on how using data points directly can improve performance. + * + *

    Single data point means identified label values like {@code {method="GET", path="/", + * status_code="200"}}, ignoring the {@code "le"} label for histograms or the {@code "quantile"} + * label for summaries. + * + *

    This interface is named DistributionDataPoint because both histograms and summaries are + * used to observe distributions, like latency distributions or distributions of request sizes. + * Therefore DistributionDataPoint is a good name for a common interface implemented by + * histogram data points and summary data points. + * + *

    See JavaDoc of {@link CounterDataPoint} on how using data points directly can improve + * performance. */ public interface DistributionDataPoint extends DataPoint, TimerApi { - /** - * Observe {@code value}. - */ - void observe(double value); + /** Observe {@code value}. */ + void observe(double value); - /** - * Observe {@code value}, and create a custom exemplar with the given labels. - */ - void observeWithExemplar(double value, Labels labels); + /** Observe {@code value}, and create a custom exemplar with the given labels. */ + void observeWithExemplar(double value, Labels labels); - /** - * {@inheritDoc} - */ - default Timer startTimer() { - return new Timer(this::observe); - } + /** {@inheritDoc} */ + default Timer startTimer() { + return new Timer(this::observe); + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java index c208d5414..003e3e5e8 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java @@ -3,83 +3,61 @@ import io.prometheus.metrics.model.snapshots.Labels; /** - * Represents a single gauge data point, i.e. a single line for a gauge metric in Prometheus text format. - *

    - * See JavaDoc of {@link CounterDataPoint} on how using data points directly can improve performance. + * Represents a single gauge data point, i.e. a single line for a gauge metric in Prometheus text + * format. + * + *

    See JavaDoc of {@link CounterDataPoint} on how using data points directly can improve + * performance. */ public interface GaugeDataPoint extends DataPoint, TimerApi { - /** - * Add one. - */ - default void inc() { - inc(1.0); - } + /** Add one. */ + default void inc() { + inc(1.0); + } - /** - * Add {@code amount}. - */ - void inc(double amount); + /** Add {@code amount}. */ + void inc(double amount); - /** - * Add one, and create a custom exemplar with the given labels. - */ - default void incWithExemplar(Labels labels) { - incWithExemplar(1.0, labels); - } + /** Add one, and create a custom exemplar with the given labels. */ + default void incWithExemplar(Labels labels) { + incWithExemplar(1.0, labels); + } - /** - * Add {@code amount}, and create a custom exemplar with the given labels. - */ - void incWithExemplar(double amount, Labels labels); + /** Add {@code amount}, and create a custom exemplar with the given labels. */ + void incWithExemplar(double amount, Labels labels); - /** - * Subtract one. - */ - default void dec() { - inc(-1.0); - } + /** Subtract one. */ + default void dec() { + inc(-1.0); + } - /** - * Subtract {@code amount}. - */ - default void dec(double amount) { - inc(-amount); - } + /** Subtract {@code amount}. */ + default void dec(double amount) { + inc(-amount); + } - /** - * Subtract one, and create a custom exemplar with the given labels. - */ - default void decWithExemplar(Labels labels) { - incWithExemplar(-1.0, labels); - } + /** Subtract one, and create a custom exemplar with the given labels. */ + default void decWithExemplar(Labels labels) { + incWithExemplar(-1.0, labels); + } - /** - * Subtract {@code amount}, and create a custom exemplar with the given labels. - */ - default void decWithExemplar(double amount, Labels labels) { - incWithExemplar(-amount, labels); - } + /** Subtract {@code amount}, and create a custom exemplar with the given labels. */ + default void decWithExemplar(double amount, Labels labels) { + incWithExemplar(-amount, labels); + } - /** - * Set the gauge to {@code value}. - */ - void set(double value); + /** Set the gauge to {@code value}. */ + void set(double value); - /** - * Get the current value. - */ - double get(); + /** Get the current value. */ + double get(); - /** - * Set the gauge to {@code value}, and create a custom exemplar with the given labels. - */ - void setWithExemplar(double value, Labels labels); + /** Set the gauge to {@code value}, and create a custom exemplar with the given labels. */ + void setWithExemplar(double value, Labels labels); - /** - * {@inheritDoc} - */ - default Timer startTimer() { - return new Timer(this::set); - } + /** {@inheritDoc} */ + default Timer startTimer() { + return new Timer(this::set); + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/StateSetDataPoint.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/StateSetDataPoint.java index 7dd8f68a4..61b458ba8 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/StateSetDataPoint.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/StateSetDataPoint.java @@ -2,32 +2,37 @@ /** * Represents a single StateSet data point. - *

    - * See JavaDoc of {@link CounterDataPoint} on how using data points directly can improve performance. + * + *

    See JavaDoc of {@link CounterDataPoint} on how using data points directly can improve + * performance. */ public interface StateSetDataPoint extends DataPoint { - /** - * {@code state} must be one of the states from when the {@code StateSet} was created with {@link io.prometheus.metrics.core.metrics.StateSet.Builder#states(String...)}. - */ - void setTrue(String state); + /** + * {@code state} must be one of the states from when the {@code StateSet} was created with {@link + * io.prometheus.metrics.core.metrics.StateSet.Builder#states(String...)}. + */ + void setTrue(String state); - /** - * {@code state} must be one of the states from when the {@code StateSet} was created with {@link io.prometheus.metrics.core.metrics.StateSet.Builder#states(String...)}. - */ - void setFalse(String state); + /** + * {@code state} must be one of the states from when the {@code StateSet} was created with {@link + * io.prometheus.metrics.core.metrics.StateSet.Builder#states(String...)}. + */ + void setFalse(String state); - /** - * {@code state} must be one of the states from when the {@code StateSet} was created with {@link io.prometheus.metrics.core.metrics.StateSet.Builder#states(Class)}. - */ - default void setTrue(Enum state) { - setTrue(state.toString()); - } + /** + * {@code state} must be one of the states from when the {@code StateSet} was created with {@link + * io.prometheus.metrics.core.metrics.StateSet.Builder#states(Class)}. + */ + default void setTrue(Enum state) { + setTrue(state.toString()); + } - /** - * {@code state} must be one of the states from when the {@code StateSet} was created with {@link io.prometheus.metrics.core.metrics.StateSet.Builder#states(Class)}. - */ - default void setFalse(Enum state) { - setFalse(state.toString()); - } + /** + * {@code state} must be one of the states from when the {@code StateSet} was created with {@link + * io.prometheus.metrics.core.metrics.StateSet.Builder#states(Class)}. + */ + default void setFalse(Enum state) { + setFalse(state.toString()); + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/Timer.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/Timer.java index fd6461869..d860bfa08 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/Timer.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/Timer.java @@ -1,40 +1,37 @@ package io.prometheus.metrics.core.datapoints; import io.prometheus.metrics.model.snapshots.Unit; - import java.io.Closeable; import java.util.function.DoubleConsumer; -/** - * Helper class for observing durations. - */ +/** Helper class for observing durations. */ public class Timer implements Closeable { - private final DoubleConsumer observeFunction; - private final long startTimeNanos = System.nanoTime(); + private final DoubleConsumer observeFunction; + private final long startTimeNanos = System.nanoTime(); - /** - * Constructor is package private. Use the {@link TimerApi} provided by the implementation of the {@link DataPoint}. - */ - Timer(DoubleConsumer observeFunction) { - this.observeFunction = observeFunction; - } + /** + * Constructor is package private. Use the {@link TimerApi} provided by the implementation of the + * {@link DataPoint}. + */ + Timer(DoubleConsumer observeFunction) { + this.observeFunction = observeFunction; + } - /** - * Records the observed duration in seconds since this {@code Timer} instance was created. - * @return the observed duration in seconds. - */ - public double observeDuration() { - double elapsed = Unit.nanosToSeconds(System.nanoTime() - startTimeNanos); - observeFunction.accept(elapsed); - return elapsed; - } + /** + * Records the observed duration in seconds since this {@code Timer} instance was created. + * + * @return the observed duration in seconds. + */ + public double observeDuration() { + double elapsed = Unit.nanosToSeconds(System.nanoTime() - startTimeNanos); + observeFunction.accept(elapsed); + return elapsed; + } - /** - * Same as {@link #observeDuration()}. - */ - @Override - public void close() { - observeDuration(); - } + /** Same as {@link #observeDuration()}. */ + @Override + public void close() { + observeDuration(); + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/TimerApi.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/TimerApi.java index 27245bbcb..d4266c04c 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/TimerApi.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/TimerApi.java @@ -5,70 +5,75 @@ /** * Convenience API for timing durations. - *

    - * Durations are recorded in seconds. The Prometheus instrumentation guidelines say: - * "Metrics must use base units (e.g. seconds, bytes) and leave converting them to something more readable to graphing tools". + * + *

    Durations are recorded in seconds. The Prometheus instrumentation guidelines say: "Metrics + * must use base units (e.g. seconds, bytes) and leave converting them to something more readable to + * graphing tools". */ public interface TimerApi { - /** - * Start a {@code Timer}. Example: - *

    {@code
    -     * Histogram histogram = Histogram.builder()
    -     *         .name("http_request_duration_seconds")
    -     *         .help("HTTP request service time in seconds")
    -     *         .unit(SECONDS)
    -     *         .labelNames("method", "path")
    -     *         .register();
    -     *
    -     * try (Timer timer = histogram.labelValues("GET", "/").startTimer()) {
    -     *     // duration of this code block will be observed.
    -     * }
    -     * }
    - * Durations are recorded in seconds. The Prometheus instrumentation guidelines say: - * "Metrics must use base units (e.g. seconds, bytes) and leave converting them to something more readable to graphing tools". - */ - Timer startTimer(); + /** + * Start a {@code Timer}. Example: + * + *
    {@code
    +   * Histogram histogram = Histogram.builder()
    +   *         .name("http_request_duration_seconds")
    +   *         .help("HTTP request service time in seconds")
    +   *         .unit(SECONDS)
    +   *         .labelNames("method", "path")
    +   *         .register();
    +   *
    +   * try (Timer timer = histogram.labelValues("GET", "/").startTimer()) {
    +   *     // duration of this code block will be observed.
    +   * }
    +   * }
    + * + * Durations are recorded in seconds. The Prometheus instrumentation guidelines say: "Metrics + * must use base units (e.g. seconds, bytes) and leave converting them to something more readable + * to graphing tools". + */ + Timer startTimer(); - /** - * Observe the duration of the {@code func} call. Example: - *
    {@code
    -     * Histogram histogram = Histogram.builder()
    -     *         .name("request_duration_seconds")
    -     *         .help("HTTP request service time in seconds")
    -     *         .unit(SECONDS)
    -     *         .labelNames("method", "path")
    -     *         .register();
    -     *
    -     * histogram2.labelValues("GET", "/").time(() -> {
    -     *     // duration of this code block will be observed.
    -     * });
    -     * }
    - *

    - * Durations are recorded in seconds. The Prometheus instrumentation guidelines say: - * "Metrics must use base units (e.g. seconds, bytes) and leave converting them to something more readable to graphing tools". - */ - default void time(Runnable func) { - try (Timer timer = startTimer()) { - func.run(); - } + /** + * Observe the duration of the {@code func} call. Example: + * + *

    {@code
    +   * Histogram histogram = Histogram.builder()
    +   *         .name("request_duration_seconds")
    +   *         .help("HTTP request service time in seconds")
    +   *         .unit(SECONDS)
    +   *         .labelNames("method", "path")
    +   *         .register();
    +   *
    +   * histogram2.labelValues("GET", "/").time(() -> {
    +   *     // duration of this code block will be observed.
    +   * });
    +   * }
    + * + *

    Durations are recorded in seconds. The Prometheus instrumentation guidelines say: "Metrics + * must use base units (e.g. seconds, bytes) and leave converting them to something more readable + * to graphing tools". + */ + default void time(Runnable func) { + try (Timer timer = startTimer()) { + func.run(); } + } - /** - * Like {@link #time(Runnable)}, but returns the return value of {@code func}. - */ - default T time(Supplier func) { - try (Timer timer = startTimer()) { - return func.get(); - } + /** Like {@link #time(Runnable)}, but returns the return value of {@code func}. */ + default T time(Supplier func) { + try (Timer timer = startTimer()) { + return func.get(); } + } - /** - * Like {@link #time(Supplier)}, but {@code func} may throw a checked {@code Exception}. - */ - default T timeChecked(Callable func) throws Exception { - try (Timer timer = startTimer()) { - return func.call(); - } + /** Like {@link #time(Supplier)}, but {@code func} may throw a checked {@code Exception}. */ + default T timeChecked(Callable func) throws Exception { + try (Timer timer = startTimer()) { + return func.call(); } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java index 7c46c244d..b606d5239 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java @@ -1,11 +1,10 @@ package io.prometheus.metrics.core.exemplars; -import io.prometheus.metrics.tracer.common.SpanContext; +import io.prometheus.metrics.core.util.Scheduler; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.Exemplars; import io.prometheus.metrics.model.snapshots.Labels; -import io.prometheus.metrics.core.util.Scheduler; - +import io.prometheus.metrics.tracer.common.SpanContext; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -14,330 +13,346 @@ /** * The ExemplarSampler selects Spans as exemplars. - *

    - * There are two types of Exemplars: Regular exemplars are sampled implicitly if a supported tracing - * library is detected. Custom exemplars are provided explicitly in code, for example if a developer - * wants to make sure an Exemplar is created for a specific code path. - *

    - * Spans will be marked as being an Exemplar by calling {@link SpanContext#markCurrentSpanAsExemplar()}. - * The tracer implementation should set a Span attribute to mark the current Span as an Exemplar. - * This attribute can be used by a trace sampling algorithm to make sure traces with Exemplars are sampled. - *

    - * The ExemplarSample is rate-limited, so only a small fraction of Spans will be marked as Exemplars in - * an application with a large number of requests. - *

    - * See {@link ExemplarSamplerConfig} for configuration options. + * + *

    There are two types of Exemplars: Regular exemplars are sampled implicitly if a supported + * tracing library is detected. Custom exemplars are provided explicitly in code, for example if a + * developer wants to make sure an Exemplar is created for a specific code path. + * + *

    Spans will be marked as being an Exemplar by calling {@link + * SpanContext#markCurrentSpanAsExemplar()}. The tracer implementation should set a Span attribute + * to mark the current Span as an Exemplar. This attribute can be used by a trace sampling algorithm + * to make sure traces with Exemplars are sampled. + * + *

    The ExemplarSample is rate-limited, so only a small fraction of Spans will be marked as + * Exemplars in an application with a large number of requests. + * + *

    See {@link ExemplarSamplerConfig} for configuration options. */ public class ExemplarSampler { - private final ExemplarSamplerConfig config; - private final Exemplar[] exemplars; - private final Exemplar[] customExemplars; // Separate from exemplars, because we don't want custom exemplars - // to be overwritten by automatic exemplar sampling. exemplars.lengt == customExemplars.length - private final AtomicBoolean acceptingNewExemplars = new AtomicBoolean(true); - private final AtomicBoolean acceptingNewCustomExemplars = new AtomicBoolean(true); - private final SpanContext spanContext; // may be null, in that case SpanContextSupplier.getSpanContext() is used. + private final ExemplarSamplerConfig config; + private final Exemplar[] exemplars; + private final Exemplar[] + customExemplars; // Separate from exemplars, because we don't want custom exemplars + // to be overwritten by automatic exemplar sampling. exemplars.lengt == customExemplars.length + private final AtomicBoolean acceptingNewExemplars = new AtomicBoolean(true); + private final AtomicBoolean acceptingNewCustomExemplars = new AtomicBoolean(true); + private final SpanContext + spanContext; // may be null, in that case SpanContextSupplier.getSpanContext() is used. - public ExemplarSampler(ExemplarSamplerConfig config) { - this(config, null); - } + public ExemplarSampler(ExemplarSamplerConfig config) { + this(config, null); + } - /** - * Constructor with an additional {code spanContext} argument. - * This is useful for testing, but may also be useful in some production scenarios. - * If {@code spanContext != null} that spanContext is used and - * {@link io.prometheus.metrics.tracer.initializer.SpanContextSupplier SpanContextSupplier} is not used. - * If {@code spanContext == null} - * {@link io.prometheus.metrics.tracer.initializer.SpanContextSupplier#getSpanContext() SpanContextSupplier.getSpanContext()} - * is called to find a span context. - */ - public ExemplarSampler(ExemplarSamplerConfig config, SpanContext spanContext) { - this.config = config; - this.exemplars = new Exemplar[config.getNumberOfExemplars()]; - this.customExemplars = new Exemplar[exemplars.length]; - this.spanContext = spanContext; - } + /** + * Constructor with an additional {code spanContext} argument. This is useful for testing, but may + * also be useful in some production scenarios. If {@code spanContext != null} that spanContext is + * used and {@link io.prometheus.metrics.tracer.initializer.SpanContextSupplier + * SpanContextSupplier} is not used. If {@code spanContext == null} {@link + * io.prometheus.metrics.tracer.initializer.SpanContextSupplier#getSpanContext() + * SpanContextSupplier.getSpanContext()} is called to find a span context. + */ + public ExemplarSampler(ExemplarSamplerConfig config, SpanContext spanContext) { + this.config = config; + this.exemplars = new Exemplar[config.getNumberOfExemplars()]; + this.customExemplars = new Exemplar[exemplars.length]; + this.spanContext = spanContext; + } - public Exemplars collect() { - // this may run in parallel with observe() - long now = System.currentTimeMillis(); - List result = new ArrayList<>(exemplars.length); - for (int i = 0; i < customExemplars.length; i++) { - Exemplar exemplar = customExemplars[i]; - if (exemplar != null) { - if (now - exemplar.getTimestampMillis() > config.getMaxRetentionPeriodMillis()) { - customExemplars[i] = null; - } else { - result.add(exemplar); - } - } + public Exemplars collect() { + // this may run in parallel with observe() + long now = System.currentTimeMillis(); + List result = new ArrayList<>(exemplars.length); + for (int i = 0; i < customExemplars.length; i++) { + Exemplar exemplar = customExemplars[i]; + if (exemplar != null) { + if (now - exemplar.getTimestampMillis() > config.getMaxRetentionPeriodMillis()) { + customExemplars[i] = null; + } else { + result.add(exemplar); } - for (int i = 0; i < exemplars.length && result.size() < exemplars.length; i++) { - Exemplar exemplar = exemplars[i]; - if (exemplar != null) { - if (now - exemplar.getTimestampMillis() > config.getMaxRetentionPeriodMillis()) { - exemplars[i] = null; - } else { - result.add(exemplar); - } - } + } + } + for (int i = 0; i < exemplars.length && result.size() < exemplars.length; i++) { + Exemplar exemplar = exemplars[i]; + if (exemplar != null) { + if (now - exemplar.getTimestampMillis() > config.getMaxRetentionPeriodMillis()) { + exemplars[i] = null; + } else { + result.add(exemplar); } - return Exemplars.of(result); + } } + return Exemplars.of(result); + } - public void reset() { - for (int i = 0; i < exemplars.length; i++) { - exemplars[i] = null; - customExemplars[i] = null; - } + public void reset() { + for (int i = 0; i < exemplars.length; i++) { + exemplars[i] = null; + customExemplars[i] = null; } + } - public void observe(double value) { - if (!acceptingNewExemplars.get()) { - return; // This is the hot path in a high-throughput application and should be as efficient as possible. - } - rateLimitedObserve(acceptingNewExemplars, value, exemplars, () -> doObserve(value)); + public void observe(double value) { + if (!acceptingNewExemplars.get()) { + return; // This is the hot path in a high-throughput application and should be as efficient as + // possible. } + rateLimitedObserve(acceptingNewExemplars, value, exemplars, () -> doObserve(value)); + } - public void observeWithExemplar(double value, Labels labels) { - if (!acceptingNewCustomExemplars.get()) { - return; // This is the hot path in a high-throughput application and should be as efficient as possible. - } - rateLimitedObserve(acceptingNewCustomExemplars, value, customExemplars, () -> doObserveWithExemplar(value, labels)); + public void observeWithExemplar(double value, Labels labels) { + if (!acceptingNewCustomExemplars.get()) { + return; // This is the hot path in a high-throughput application and should be as efficient as + // possible. } + rateLimitedObserve( + acceptingNewCustomExemplars, + value, + customExemplars, + () -> doObserveWithExemplar(value, labels)); + } - private long doObserve(double value) { - if (exemplars.length == 1) { - return doObserveSingleExemplar(value); - } else if (config.getHistogramClassicUpperBounds() != null) { - return doObserveWithUpperBounds(value); - } else { - return doObserveWithoutUpperBounds(value); - } + private long doObserve(double value) { + if (exemplars.length == 1) { + return doObserveSingleExemplar(value); + } else if (config.getHistogramClassicUpperBounds() != null) { + return doObserveWithUpperBounds(value); + } else { + return doObserveWithoutUpperBounds(value); } + } - private long doObserveSingleExemplar(double value) { - long now = System.currentTimeMillis(); - Exemplar current = exemplars[0]; - if (current == null || now - current.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { - return updateExemplar(0, value, now); - } - return 0; + private long doObserveSingleExemplar(double value) { + long now = System.currentTimeMillis(); + Exemplar current = exemplars[0]; + if (current == null + || now - current.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { + return updateExemplar(0, value, now); } + return 0; + } - private long doObserveWithUpperBounds(double value) { - long now = System.currentTimeMillis(); - double[] upperBounds = config.getHistogramClassicUpperBounds(); - for (int i = 0; i < upperBounds.length; i++) { - if (value <= upperBounds[i]) { - Exemplar previous = exemplars[i]; - if (previous == null || now - previous.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { - return updateExemplar(i, value, now); - } else { - return 0; - } - } + private long doObserveWithUpperBounds(double value) { + long now = System.currentTimeMillis(); + double[] upperBounds = config.getHistogramClassicUpperBounds(); + for (int i = 0; i < upperBounds.length; i++) { + if (value <= upperBounds[i]) { + Exemplar previous = exemplars[i]; + if (previous == null + || now - previous.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { + return updateExemplar(i, value, now); + } else { + return 0; } - return 0; // will never happen, as upperBounds contains +Inf + } } + return 0; // will never happen, as upperBounds contains +Inf + } - private long doObserveWithoutUpperBounds(double value) { - final long now = System.currentTimeMillis(); - Exemplar smallest = null; - int smallestIndex = -1; - Exemplar largest = null; - int largestIndex = -1; - int nullIndex = -1; - for (int i = exemplars.length - 1; i >= 0; i--) { - Exemplar exemplar = exemplars[i]; - if (exemplar == null) { - nullIndex = i; - } else if (now - exemplar.getTimestampMillis() > config.getMaxRetentionPeriodMillis()) { - exemplars[i] = null; - nullIndex = i; - } else { - if (smallest == null || exemplar.getValue() < smallest.getValue()) { - smallest = exemplar; - smallestIndex = i; - } - if (largest == null || exemplar.getValue() > largest.getValue()) { - largest = exemplar; - largestIndex = i; - } - } - } - if (nullIndex >= 0) { - return updateExemplar(nullIndex, value, now); - } - if (now - smallest.getTimestampMillis() > config.getMinRetentionPeriodMillis() && value < smallest.getValue()) { - return updateExemplar(smallestIndex, value, now); - } - if (now - largest.getTimestampMillis() > config.getMinRetentionPeriodMillis() && value > largest.getValue()) { - return updateExemplar(largestIndex, value, now); - } - long oldestTimestamp = 0; - int oldestIndex = -1; - for (int i = 0; i < exemplars.length; i++) { - Exemplar exemplar = exemplars[i]; - if (exemplar != null && exemplar != smallest && exemplar != largest) { - if (oldestTimestamp == 0 || exemplar.getTimestampMillis() < oldestTimestamp) { - oldestTimestamp = exemplar.getTimestampMillis(); - oldestIndex = i; - } - } + private long doObserveWithoutUpperBounds(double value) { + final long now = System.currentTimeMillis(); + Exemplar smallest = null; + int smallestIndex = -1; + Exemplar largest = null; + int largestIndex = -1; + int nullIndex = -1; + for (int i = exemplars.length - 1; i >= 0; i--) { + Exemplar exemplar = exemplars[i]; + if (exemplar == null) { + nullIndex = i; + } else if (now - exemplar.getTimestampMillis() > config.getMaxRetentionPeriodMillis()) { + exemplars[i] = null; + nullIndex = i; + } else { + if (smallest == null || exemplar.getValue() < smallest.getValue()) { + smallest = exemplar; + smallestIndex = i; } - if (oldestIndex != -1 && now - oldestTimestamp > config.getMinRetentionPeriodMillis()) { - return updateExemplar(oldestIndex, value, now); + if (largest == null || exemplar.getValue() > largest.getValue()) { + largest = exemplar; + largestIndex = i; } - return 0; + } } - - // Returns the timestamp of the newly added Exemplar (which is System.currentTimeMillis()) - // or 0 if no Exemplar was added. - private long doObserveWithExemplar(double amount, Labels labels) { - if (customExemplars.length == 1) { - return doObserveSingleExemplar(amount, labels); - } else if (config.getHistogramClassicUpperBounds() != null) { - return doObserveWithExemplarWithUpperBounds(amount, labels); - } else { - return doObserveWithExemplarWithoutUpperBounds(amount, labels); + if (nullIndex >= 0) { + return updateExemplar(nullIndex, value, now); + } + if (now - smallest.getTimestampMillis() > config.getMinRetentionPeriodMillis() + && value < smallest.getValue()) { + return updateExemplar(smallestIndex, value, now); + } + if (now - largest.getTimestampMillis() > config.getMinRetentionPeriodMillis() + && value > largest.getValue()) { + return updateExemplar(largestIndex, value, now); + } + long oldestTimestamp = 0; + int oldestIndex = -1; + for (int i = 0; i < exemplars.length; i++) { + Exemplar exemplar = exemplars[i]; + if (exemplar != null && exemplar != smallest && exemplar != largest) { + if (oldestTimestamp == 0 || exemplar.getTimestampMillis() < oldestTimestamp) { + oldestTimestamp = exemplar.getTimestampMillis(); + oldestIndex = i; } + } } + if (oldestIndex != -1 && now - oldestTimestamp > config.getMinRetentionPeriodMillis()) { + return updateExemplar(oldestIndex, value, now); + } + return 0; + } - private long doObserveSingleExemplar(double amount, Labels labels) { - long now = System.currentTimeMillis(); - Exemplar current = customExemplars[0]; - if (current == null || now - current.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { - return updateCustomExemplar(0, amount, labels, now); - } - return 0; + // Returns the timestamp of the newly added Exemplar (which is System.currentTimeMillis()) + // or 0 if no Exemplar was added. + private long doObserveWithExemplar(double amount, Labels labels) { + if (customExemplars.length == 1) { + return doObserveSingleExemplar(amount, labels); + } else if (config.getHistogramClassicUpperBounds() != null) { + return doObserveWithExemplarWithUpperBounds(amount, labels); + } else { + return doObserveWithExemplarWithoutUpperBounds(amount, labels); } + } - private long doObserveWithExemplarWithUpperBounds(double value, Labels labels) { - long now = System.currentTimeMillis(); - double[] upperBounds = config.getHistogramClassicUpperBounds(); - for (int i = 0; i < upperBounds.length; i++) { - if (value <= upperBounds[i]) { - Exemplar previous = customExemplars[i]; - if (previous == null || now - previous.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { - return updateCustomExemplar(i, value, labels, now); - } else { - return 0; - } - } - } - return 0; // will never happen, as upperBounds contains +Inf + private long doObserveSingleExemplar(double amount, Labels labels) { + long now = System.currentTimeMillis(); + Exemplar current = customExemplars[0]; + if (current == null + || now - current.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { + return updateCustomExemplar(0, amount, labels, now); } + return 0; + } - private long doObserveWithExemplarWithoutUpperBounds(double amount, Labels labels) { - final long now = System.currentTimeMillis(); - int nullPos = -1; - int oldestPos = -1; - Exemplar oldest = null; - for (int i = customExemplars.length - 1; i >= 0; i--) { - Exemplar exemplar = customExemplars[i]; - if (exemplar == null) { - nullPos = i; - } else if (now - exemplar.getTimestampMillis() > config.getMaxRetentionPeriodMillis()) { - customExemplars[i] = null; - nullPos = i; - } else { - if (oldest == null || exemplar.getTimestampMillis() < oldest.getTimestampMillis()) { - oldest = exemplar; - oldestPos = i; - } - } - } - if (nullPos != -1) { - return updateCustomExemplar(nullPos, amount, labels, now); - } else if (now - oldest.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { - return updateCustomExemplar(oldestPos, amount, labels, now); + private long doObserveWithExemplarWithUpperBounds(double value, Labels labels) { + long now = System.currentTimeMillis(); + double[] upperBounds = config.getHistogramClassicUpperBounds(); + for (int i = 0; i < upperBounds.length; i++) { + if (value <= upperBounds[i]) { + Exemplar previous = customExemplars[i]; + if (previous == null + || now - previous.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { + return updateCustomExemplar(i, value, labels, now); } else { - return 0; + return 0; } + } } + return 0; // will never happen, as upperBounds contains +Inf + } - /** - * Observing requires a system call to {@link System#currentTimeMillis()}, - * and it requires iterating over the existing exemplars to check if one of the existing - * exemplars can be replaced. - *

    - * To avoid performance issues, we rate limit observing exemplars to - * {@link ExemplarSamplerConfig#getSampleIntervalMillis()} milliseconds. - */ - private void rateLimitedObserve(AtomicBoolean accepting, double value, Exemplar[] exemplars, LongSupplier observeFunc) { - if (Double.isNaN(value)) { - return; - } - if (!accepting.compareAndSet(true, false)) { - return; + private long doObserveWithExemplarWithoutUpperBounds(double amount, Labels labels) { + final long now = System.currentTimeMillis(); + int nullPos = -1; + int oldestPos = -1; + Exemplar oldest = null; + for (int i = customExemplars.length - 1; i >= 0; i--) { + Exemplar exemplar = customExemplars[i]; + if (exemplar == null) { + nullPos = i; + } else if (now - exemplar.getTimestampMillis() > config.getMaxRetentionPeriodMillis()) { + customExemplars[i] = null; + nullPos = i; + } else { + if (oldest == null || exemplar.getTimestampMillis() < oldest.getTimestampMillis()) { + oldest = exemplar; + oldestPos = i; } - // observeFunc returns the current timestamp or 0 if no Exemplar was added. - long now = observeFunc.getAsLong(); - long sleepTime = now == 0 ? config.getSampleIntervalMillis() : durationUntilNextExemplarExpires(now); - Scheduler.schedule(() -> accepting.compareAndSet(false, true), sleepTime, TimeUnit.MILLISECONDS); + } } + if (nullPos != -1) { + return updateCustomExemplar(nullPos, amount, labels, now); + } else if (now - oldest.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { + return updateCustomExemplar(oldestPos, amount, labels, now); + } else { + return 0; + } + } - private long durationUntilNextExemplarExpires(long now) { - long oldestTimestamp = now; - for (Exemplar exemplar : exemplars) { - if (exemplar == null) { - return config.getSampleIntervalMillis(); - } else if (exemplar.getTimestampMillis() < oldestTimestamp) { - oldestTimestamp = exemplar.getTimestampMillis(); - } - } - long oldestAge = now - oldestTimestamp; - if (oldestAge < config.getMinRetentionPeriodMillis()) { - return config.getMinRetentionPeriodMillis() - oldestAge; - } + /** + * Observing requires a system call to {@link System#currentTimeMillis()}, and it requires + * iterating over the existing exemplars to check if one of the existing exemplars can be + * replaced. + * + *

    To avoid performance issues, we rate limit observing exemplars to {@link + * ExemplarSamplerConfig#getSampleIntervalMillis()} milliseconds. + */ + private void rateLimitedObserve( + AtomicBoolean accepting, double value, Exemplar[] exemplars, LongSupplier observeFunc) { + if (Double.isNaN(value)) { + return; + } + if (!accepting.compareAndSet(true, false)) { + return; + } + // observeFunc returns the current timestamp or 0 if no Exemplar was added. + long now = observeFunc.getAsLong(); + long sleepTime = + now == 0 ? config.getSampleIntervalMillis() : durationUntilNextExemplarExpires(now); + Scheduler.schedule( + () -> accepting.compareAndSet(false, true), sleepTime, TimeUnit.MILLISECONDS); + } + + private long durationUntilNextExemplarExpires(long now) { + long oldestTimestamp = now; + for (Exemplar exemplar : exemplars) { + if (exemplar == null) { return config.getSampleIntervalMillis(); + } else if (exemplar.getTimestampMillis() < oldestTimestamp) { + oldestTimestamp = exemplar.getTimestampMillis(); + } + } + long oldestAge = now - oldestTimestamp; + if (oldestAge < config.getMinRetentionPeriodMillis()) { + return config.getMinRetentionPeriodMillis() - oldestAge; } + return config.getSampleIntervalMillis(); + } - private long updateCustomExemplar(int index, double value, Labels labels, long now) { - if (!labels.contains(Exemplar.TRACE_ID) && !labels.contains(Exemplar.SPAN_ID)) { - labels = labels.merge(doSampleExemplar()); - } - customExemplars[index] = Exemplar.builder() - .value(value) - .labels(labels) - .timestampMillis(now) - .build(); - return now; + private long updateCustomExemplar(int index, double value, Labels labels, long now) { + if (!labels.contains(Exemplar.TRACE_ID) && !labels.contains(Exemplar.SPAN_ID)) { + labels = labels.merge(doSampleExemplar()); } + customExemplars[index] = + Exemplar.builder().value(value).labels(labels).timestampMillis(now).build(); + return now; + } - private long updateExemplar(int index, double value, long now) { - Labels traceLabels = doSampleExemplar(); - if (!traceLabels.isEmpty()) { - exemplars[index] = Exemplar.builder() - .value(value) - .labels(traceLabels) - .timestampMillis(now) - .build(); - return now; - } else { - return 0; - } + private long updateExemplar(int index, double value, long now) { + Labels traceLabels = doSampleExemplar(); + if (!traceLabels.isEmpty()) { + exemplars[index] = + Exemplar.builder().value(value).labels(traceLabels).timestampMillis(now).build(); + return now; + } else { + return 0; } + } - private Labels doSampleExemplar() { - // Using the qualified name so that Micrometer can exclude the dependency on prometheus-metrics-tracer-initializer - // as they provide their own implementation of SpanContextSupplier. - // If we had an import statement for SpanContextSupplier the dependency would be needed in any case. - SpanContext spanContext = this.spanContext != null ? this.spanContext : io.prometheus.metrics.tracer.initializer.SpanContextSupplier.getSpanContext(); - try { - if (spanContext != null) { - if (spanContext.isCurrentSpanSampled()) { - String spanId = spanContext.getCurrentSpanId(); - String traceId = spanContext.getCurrentTraceId(); - if (spanId != null && traceId != null) { - spanContext.markCurrentSpanAsExemplar(); - return Labels.of(Exemplar.TRACE_ID, traceId, Exemplar.SPAN_ID, spanId); - } - } - } - } catch (NoClassDefFoundError ignored) { + private Labels doSampleExemplar() { + // Using the qualified name so that Micrometer can exclude the dependency on + // prometheus-metrics-tracer-initializer + // as they provide their own implementation of SpanContextSupplier. + // If we had an import statement for SpanContextSupplier the dependency would be needed in any + // case. + SpanContext spanContext = + this.spanContext != null + ? this.spanContext + : io.prometheus.metrics.tracer.initializer.SpanContextSupplier.getSpanContext(); + try { + if (spanContext != null) { + if (spanContext.isCurrentSpanSampled()) { + String spanId = spanContext.getCurrentSpanId(); + String traceId = spanContext.getCurrentTraceId(); + if (spanId != null && traceId != null) { + spanContext.markCurrentSpanAsExemplar(); + return Labels.of(Exemplar.TRACE_ID, traceId, Exemplar.SPAN_ID, spanId); + } } - return Labels.EMPTY; + } + } catch (NoClassDefFoundError ignored) { } + return Labels.EMPTY; + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerConfig.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerConfig.java index 9712f29df..7acfbec22 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerConfig.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerConfig.java @@ -2,134 +2,143 @@ import io.prometheus.metrics.config.ExemplarsProperties; import io.prometheus.metrics.config.PrometheusProperties; - import java.util.concurrent.TimeUnit; public class ExemplarSamplerConfig { - /** - * See {@link ExemplarsProperties#getMinRetentionPeriodSeconds()} - */ - public static final int DEFAULT_MIN_RETENTION_PERIOD_SECONDS = 7; - - /** - * See {@link ExemplarsProperties#getMaxRetentionPeriodSeconds()} - */ - public static final int DEFAULT_MAX_RETENTION_PERIOD_SECONDS = 70; - - /** - * See {@link ExemplarsProperties#getSampleIntervalMilliseconds()} - */ - private static final int DEFAULT_SAMPLE_INTERVAL_MILLISECONDS = 90; - - private final long minRetentionPeriodMillis; - private final long maxRetentionPeriodMillis; - private final long sampleIntervalMillis; - private final double[] histogramClassicUpperBounds; // null unless it's a classic histogram - private final int numberOfExemplars; // if histogramClassicUpperBounds != null, then numberOfExemplars == histogramClassicUpperBounds.length - - /** - * Constructor for all metric types except classic histograms. - * - * @param properties See {@link PrometheusProperties#getExemplarProperties()}. - * @param numberOfExemplars Counters have 1 Exemplar, native histograms and summaries have 4 Exemplars by default. - * For classic histogram use {@link #ExemplarSamplerConfig(ExemplarsProperties, double[])}. - */ - public ExemplarSamplerConfig(ExemplarsProperties properties, int numberOfExemplars) { - this(properties, numberOfExemplars, null); - } - - /** - * Constructor for classic histogram metrics. - * - * @param properties See {@link PrometheusProperties#getExemplarProperties()}. - * @param histogramClassicUpperBounds the ExemplarSampler will provide one Exemplar per histogram bucket. - * Must be sorted, and must include the +Inf bucket. - */ - public ExemplarSamplerConfig(ExemplarsProperties properties, double[] histogramClassicUpperBounds) { - this(properties, histogramClassicUpperBounds.length, histogramClassicUpperBounds); + /** See {@link ExemplarsProperties#getMinRetentionPeriodSeconds()} */ + public static final int DEFAULT_MIN_RETENTION_PERIOD_SECONDS = 7; + + /** See {@link ExemplarsProperties#getMaxRetentionPeriodSeconds()} */ + public static final int DEFAULT_MAX_RETENTION_PERIOD_SECONDS = 70; + + /** See {@link ExemplarsProperties#getSampleIntervalMilliseconds()} */ + private static final int DEFAULT_SAMPLE_INTERVAL_MILLISECONDS = 90; + + private final long minRetentionPeriodMillis; + private final long maxRetentionPeriodMillis; + private final long sampleIntervalMillis; + private final double[] histogramClassicUpperBounds; // null unless it's a classic histogram + private final int + numberOfExemplars; // if histogramClassicUpperBounds != null, then numberOfExemplars == + + // histogramClassicUpperBounds.length + + /** + * Constructor for all metric types except classic histograms. + * + * @param properties See {@link PrometheusProperties#getExemplarProperties()}. + * @param numberOfExemplars Counters have 1 Exemplar, native histograms and summaries have 4 + * Exemplars by default. For classic histogram use {@link + * #ExemplarSamplerConfig(ExemplarsProperties, double[])}. + */ + public ExemplarSamplerConfig(ExemplarsProperties properties, int numberOfExemplars) { + this(properties, numberOfExemplars, null); + } + + /** + * Constructor for classic histogram metrics. + * + * @param properties See {@link PrometheusProperties#getExemplarProperties()}. + * @param histogramClassicUpperBounds the ExemplarSampler will provide one Exemplar per histogram + * bucket. Must be sorted, and must include the +Inf bucket. + */ + public ExemplarSamplerConfig( + ExemplarsProperties properties, double[] histogramClassicUpperBounds) { + this(properties, histogramClassicUpperBounds.length, histogramClassicUpperBounds); + } + + private ExemplarSamplerConfig( + ExemplarsProperties properties, int numberOfExemplars, double[] histogramClassicUpperBounds) { + this( + TimeUnit.SECONDS.toMillis( + getOrDefault( + properties.getMinRetentionPeriodSeconds(), DEFAULT_MIN_RETENTION_PERIOD_SECONDS)), + TimeUnit.SECONDS.toMillis( + getOrDefault( + properties.getMaxRetentionPeriodSeconds(), DEFAULT_MAX_RETENTION_PERIOD_SECONDS)), + getOrDefault( + properties.getSampleIntervalMilliseconds(), DEFAULT_SAMPLE_INTERVAL_MILLISECONDS), + numberOfExemplars, + histogramClassicUpperBounds); + } + + ExemplarSamplerConfig( + long minRetentionPeriodMillis, + long maxRetentionPeriodMillis, + long sampleIntervalMillis, + int numberOfExemplars, + double[] histogramClassicUpperBounds) { + this.minRetentionPeriodMillis = minRetentionPeriodMillis; + this.maxRetentionPeriodMillis = maxRetentionPeriodMillis; + this.sampleIntervalMillis = sampleIntervalMillis; + this.numberOfExemplars = numberOfExemplars; + this.histogramClassicUpperBounds = histogramClassicUpperBounds; + validate(); + } + + private void validate() { + if (minRetentionPeriodMillis <= 0) { + throw new IllegalArgumentException( + minRetentionPeriodMillis + ": minRetentionPeriod must be > 0."); } - - private ExemplarSamplerConfig(ExemplarsProperties properties, int numberOfExemplars, double[] histogramClassicUpperBounds) { - this( - TimeUnit.SECONDS.toMillis(getOrDefault(properties.getMinRetentionPeriodSeconds(), DEFAULT_MIN_RETENTION_PERIOD_SECONDS)), - TimeUnit.SECONDS.toMillis(getOrDefault(properties.getMaxRetentionPeriodSeconds(), DEFAULT_MAX_RETENTION_PERIOD_SECONDS)), - getOrDefault(properties.getSampleIntervalMilliseconds(), DEFAULT_SAMPLE_INTERVAL_MILLISECONDS), - numberOfExemplars, - histogramClassicUpperBounds); - } - - ExemplarSamplerConfig(long minRetentionPeriodMillis, long maxRetentionPeriodMillis, long sampleIntervalMillis, int numberOfExemplars, double[] histogramClassicUpperBounds) { - this.minRetentionPeriodMillis = minRetentionPeriodMillis; - this.maxRetentionPeriodMillis = maxRetentionPeriodMillis; - this.sampleIntervalMillis = sampleIntervalMillis; - this.numberOfExemplars = numberOfExemplars; - this.histogramClassicUpperBounds = histogramClassicUpperBounds; - validate(); + if (maxRetentionPeriodMillis <= 0) { + throw new IllegalArgumentException( + maxRetentionPeriodMillis + ": maxRetentionPeriod must be > 0."); } - - private void validate() { - if (minRetentionPeriodMillis <= 0) { - throw new IllegalArgumentException(minRetentionPeriodMillis + ": minRetentionPeriod must be > 0."); - } - if (maxRetentionPeriodMillis <= 0) { - throw new IllegalArgumentException(maxRetentionPeriodMillis + ": maxRetentionPeriod must be > 0."); - } - if (histogramClassicUpperBounds != null) { - if (histogramClassicUpperBounds.length == 0 || histogramClassicUpperBounds[histogramClassicUpperBounds.length - 1] != Double.POSITIVE_INFINITY) { - throw new IllegalArgumentException("histogramClassicUpperBounds must contain the +Inf bucket."); - } - if (histogramClassicUpperBounds.length != numberOfExemplars) { - throw new IllegalArgumentException("histogramClassicUpperBounds.length must be equal to numberOfExemplars."); - } - double bound = histogramClassicUpperBounds[0]; - for (int i = 1; i < histogramClassicUpperBounds.length; i++) { - if (bound >= histogramClassicUpperBounds[i]) { - throw new IllegalArgumentException("histogramClassicUpperBounds must be sorted and must not contain duplicates."); - } - } - } - if (numberOfExemplars <= 0) { - throw new IllegalArgumentException(numberOfExemplars + ": numberOfExemplars must be > 0."); + if (histogramClassicUpperBounds != null) { + if (histogramClassicUpperBounds.length == 0 + || histogramClassicUpperBounds[histogramClassicUpperBounds.length - 1] + != Double.POSITIVE_INFINITY) { + throw new IllegalArgumentException( + "histogramClassicUpperBounds must contain the +Inf bucket."); + } + if (histogramClassicUpperBounds.length != numberOfExemplars) { + throw new IllegalArgumentException( + "histogramClassicUpperBounds.length must be equal to numberOfExemplars."); + } + double bound = histogramClassicUpperBounds[0]; + for (int i = 1; i < histogramClassicUpperBounds.length; i++) { + if (bound >= histogramClassicUpperBounds[i]) { + throw new IllegalArgumentException( + "histogramClassicUpperBounds must be sorted and must not contain duplicates."); } + } } - - private static T getOrDefault(T result, T defaultValue) { - return result != null ? result : defaultValue; - } - - /** - * May be {@code null}. - */ - public double[] getHistogramClassicUpperBounds() { - return histogramClassicUpperBounds; - } - - /** - * See {@link ExemplarsProperties#getMinRetentionPeriodSeconds()} - */ - public long getMinRetentionPeriodMillis() { - return minRetentionPeriodMillis; - } - - /** - * See {@link ExemplarsProperties#getMaxRetentionPeriodSeconds()} - */ - public long getMaxRetentionPeriodMillis() { - return maxRetentionPeriodMillis; - } - - /** - * See {@link ExemplarsProperties#getSampleIntervalMilliseconds()} - */ - public long getSampleIntervalMillis() { - return sampleIntervalMillis; - } - - /** - * Defaults: Counters have one Exemplar, native histograms and summaries have 4 Exemplars, classic histograms have one Exemplar per bucket. - */ - public int getNumberOfExemplars() { - return numberOfExemplars; + if (numberOfExemplars <= 0) { + throw new IllegalArgumentException(numberOfExemplars + ": numberOfExemplars must be > 0."); } + } + + private static T getOrDefault(T result, T defaultValue) { + return result != null ? result : defaultValue; + } + + /** May be {@code null}. */ + public double[] getHistogramClassicUpperBounds() { + return histogramClassicUpperBounds; + } + + /** See {@link ExemplarsProperties#getMinRetentionPeriodSeconds()} */ + public long getMinRetentionPeriodMillis() { + return minRetentionPeriodMillis; + } + + /** See {@link ExemplarsProperties#getMaxRetentionPeriodSeconds()} */ + public long getMaxRetentionPeriodMillis() { + return maxRetentionPeriodMillis; + } + + /** See {@link ExemplarsProperties#getSampleIntervalMilliseconds()} */ + public long getSampleIntervalMillis() { + return sampleIntervalMillis; + } + + /** + * Defaults: Counters have one Exemplar, native histograms and summaries have 4 Exemplars, classic + * histograms have one Exemplar per bucket. + */ + public int getNumberOfExemplars() { + return numberOfExemplars; + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java index 390a2bc2b..113a85d55 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java @@ -1,7 +1,6 @@ package io.prometheus.metrics.core.metrics; import io.prometheus.metrics.model.snapshots.DataPointSnapshot; - import java.util.Arrays; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; @@ -10,75 +9,74 @@ /** * Metrics support concurrent write and scrape operations. - *

    - * This is implemented by switching to a Buffer when the scrape starts, - * and applying the values from the buffer after the scrape ends. + * + *

    This is implemented by switching to a Buffer when the scrape starts, and applying the values + * from the buffer after the scrape ends. */ class Buffer { - private static final long signBit = 1L << 63; - private final AtomicLong observationCount = new AtomicLong(0); - private double[] observationBuffer = new double[0]; - private int bufferPos = 0; - private boolean reset = false; - private final Object appendLock = new Object(); - private final Object runLock = new Object(); + private static final long signBit = 1L << 63; + private final AtomicLong observationCount = new AtomicLong(0); + private double[] observationBuffer = new double[0]; + private int bufferPos = 0; + private boolean reset = false; + private final Object appendLock = new Object(); + private final Object runLock = new Object(); - boolean append(double value) { - long count = observationCount.incrementAndGet(); - if ((count & signBit) == 0) { - return false; // sign bit not set -> buffer not active. - } else { - doAppend(value); - return true; - } + boolean append(double value) { + long count = observationCount.incrementAndGet(); + if ((count & signBit) == 0) { + return false; // sign bit not set -> buffer not active. + } else { + doAppend(value); + return true; } + } - private void doAppend(double amount) { - synchronized (appendLock) { - if (bufferPos >= observationBuffer.length) { - observationBuffer = Arrays.copyOf(observationBuffer, observationBuffer.length + 128); - } - observationBuffer[bufferPos] = amount; - bufferPos++; - } + private void doAppend(double amount) { + synchronized (appendLock) { + if (bufferPos >= observationBuffer.length) { + observationBuffer = Arrays.copyOf(observationBuffer, observationBuffer.length + 128); + } + observationBuffer[bufferPos] = amount; + bufferPos++; } + } - /** - * Must be called by the runnable in the run() method. - */ - void reset() { - reset = true; - } + /** Must be called by the runnable in the run() method. */ + void reset() { + reset = true; + } - T run(Function complete, Supplier runnable, Consumer observeFunction) { - double[] buffer; - int bufferSize; - T result; - synchronized (runLock) { - Long count = observationCount.getAndAdd(signBit); - while (!complete.apply(count)) { - Thread.yield(); - } - result = runnable.get(); - int expectedBufferSize; - if (reset) { - expectedBufferSize = (int) ((observationCount.getAndSet(0) & ~signBit) - count); - reset = false; - } else { - expectedBufferSize = (int) (observationCount.addAndGet(signBit) - count); - } - while (bufferPos != expectedBufferSize) { - Thread.yield(); - } - buffer = observationBuffer; - bufferSize = bufferPos; - observationBuffer = new double[0]; - bufferPos = 0; - } - for (int i = 0; i < bufferSize; i++) { - observeFunction.accept(buffer[i]); - } - return result; + T run( + Function complete, Supplier runnable, Consumer observeFunction) { + double[] buffer; + int bufferSize; + T result; + synchronized (runLock) { + Long count = observationCount.getAndAdd(signBit); + while (!complete.apply(count)) { + Thread.yield(); + } + result = runnable.get(); + int expectedBufferSize; + if (reset) { + expectedBufferSize = (int) ((observationCount.getAndSet(0) & ~signBit) - count); + reset = false; + } else { + expectedBufferSize = (int) (observationCount.addAndGet(signBit) - count); + } + while (bufferPos != expectedBufferSize) { + Thread.yield(); + } + buffer = observationBuffer; + bufferSize = bufferPos; + observationBuffer = new double[0]; + bufferPos = 0; + } + for (int i = 0; i < bufferSize; i++) { + observeFunction.accept(buffer[i]); } + return result; + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java index 22662c62e..c86f17c21 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java @@ -6,20 +6,20 @@ // However, it has been heavily refactored in the meantime. /* - Copyright 2012 Andrew Wang (andrew@umbrant.com) +Copyright 2012 Andrew Wang (andrew@umbrant.com) - 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 +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 +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. - */ +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. +*/ import java.util.Arrays; import java.util.Iterator; @@ -27,270 +27,248 @@ import java.util.ListIterator; /** - * Algorithm solving the "Targeted Quantile Problem" as described in - * "Effective Computation of Biased Quantiles over Data Streams" - * by Cormode, Korn, Muthukrishnan, and Srivastava. - * + * Algorithm solving the "Targeted Quantile Problem" as described in "Effective Computation of + * Biased Quantiles over Data Streams" by Cormode, Korn, Muthukrishnan, and Srivastava. */ final class CKMSQuantiles { - final Quantile[] quantiles; + final Quantile[] quantiles; - /** - * Total number of observations (not including those that are still in the buffer). - */ - int n = 0; + /** Total number of observations (not including those that are still in the buffer). */ + int n = 0; - /** - * List of sampled observations, ordered by Sample.value. - */ - final LinkedList samples = new LinkedList(); - - /** - * Compress is called every compressInterval inserts. - * Note that the buffer is flushed whenever get() is called, so we - * cannot just wait until the buffer is full before we call compress. - */ - private final int compressInterval = 128; - private int insertsSinceLastCompress = 0; + /** List of sampled observations, ordered by Sample.value. */ + final LinkedList samples = new LinkedList(); - /** - * Note that the buffer size could as well be less than the compressInterval. - * However, the buffer size should not be greater than the compressInterval, - * because the compressInterval is not respected in flush(), so if you want - * to compress more often than calling flush() that won't work. - */ - private final double[] buffer = new double[compressInterval]; - private int bufferPos = 0; + /** + * Compress is called every compressInterval inserts. Note that the buffer is flushed whenever + * get() is called, so we cannot just wait until the buffer is full before we call compress. + */ + private final int compressInterval = 128; - public CKMSQuantiles(Quantile... quantiles) { - if (quantiles.length == 0) { - throw new IllegalArgumentException("quantiles cannot be empty"); - } - this.quantiles = quantiles; - } + private int insertsSinceLastCompress = 0; - /** - * Add an observed value - */ - public void insert(double value) { - buffer[bufferPos++] = value; + /** + * Note that the buffer size could as well be less than the compressInterval. However, the buffer + * size should not be greater than the compressInterval, because the compressInterval is not + * respected in flush(), so if you want to compress more often than calling flush() that won't + * work. + */ + private final double[] buffer = new double[compressInterval]; - if (bufferPos == buffer.length) { - flush(); - } + private int bufferPos = 0; - if (++insertsSinceLastCompress == compressInterval) { - compress(); - insertsSinceLastCompress = 0; - } + public CKMSQuantiles(Quantile... quantiles) { + if (quantiles.length == 0) { + throw new IllegalArgumentException("quantiles cannot be empty"); } + this.quantiles = quantiles; + } - private void flush() { - Arrays.sort(buffer, 0, bufferPos); - insertBatch(buffer, bufferPos); - bufferPos = 0; - } + /** Add an observed value */ + public void insert(double value) { + buffer[bufferPos++] = value; - /** - * Inserts the elements from index 0 to index toIndex from the sortedBuffer. - */ - void insertBatch(double[] sortedBuffer, int toIndex) { - if (toIndex == 0) { - return; - } - ListIterator iterator = samples.listIterator(); - int i = 0; // position in buffer - int r = 0; // sum of g's left of the current sample - while (iterator.hasNext() && i < toIndex) { - Sample item = iterator.next(); - while (i < toIndex) { - if (sortedBuffer[i] > item.value) { - break; - } - insertBefore(iterator, sortedBuffer[i], r); - r++; // new item with g=1 was inserted before, so increment r - i++; - n++; - } - r += item.g; - } - while (i < toIndex) { - samples.add(new Sample(sortedBuffer[i], 0)); - i++; - n++; - } + if (bufferPos == buffer.length) { + flush(); } - private void insertBefore(ListIterator iterator, double value, int r) { - if (!iterator.hasPrevious()) { - samples.addFirst(new Sample(value, 0)); - } else { - iterator.previous(); - iterator.add(new Sample(value, f(r) - 1)); - iterator.next(); + if (++insertsSinceLastCompress == compressInterval) { + compress(); + insertsSinceLastCompress = 0; + } + } + + private void flush() { + Arrays.sort(buffer, 0, bufferPos); + insertBatch(buffer, bufferPos); + bufferPos = 0; + } + + /** Inserts the elements from index 0 to index toIndex from the sortedBuffer. */ + void insertBatch(double[] sortedBuffer, int toIndex) { + if (toIndex == 0) { + return; + } + ListIterator iterator = samples.listIterator(); + int i = 0; // position in buffer + int r = 0; // sum of g's left of the current sample + while (iterator.hasNext() && i < toIndex) { + Sample item = iterator.next(); + while (i < toIndex) { + if (sortedBuffer[i] > item.value) { + break; } + insertBefore(iterator, sortedBuffer[i], r); + r++; // new item with g=1 was inserted before, so increment r + i++; + n++; + } + r += item.g; } + while (i < toIndex) { + samples.add(new Sample(sortedBuffer[i], 0)); + i++; + n++; + } + } + + private void insertBefore(ListIterator iterator, double value, int r) { + if (!iterator.hasPrevious()) { + samples.addFirst(new Sample(value, 0)); + } else { + iterator.previous(); + iterator.add(new Sample(value, f(r) - 1)); + iterator.next(); + } + } - /** - * Get the estimated value at the specified quantile. - */ - public double get(double q) { - flush(); - - if (samples.size() == 0) { - return Double.NaN; - } + /** Get the estimated value at the specified quantile. */ + public double get(double q) { + flush(); - if (q == 0.0) { - return samples.getFirst().value; - } + if (samples.size() == 0) { + return Double.NaN; + } - if (q == 1.0) { - return samples.getLast().value; - } + if (q == 0.0) { + return samples.getFirst().value; + } - int r = 0; // sum of g's left of the current sample - int desiredRank = (int) Math.ceil(q * n); - int upperBound = desiredRank + f(desiredRank) / 2; - - ListIterator iterator = samples.listIterator(); - while (iterator.hasNext()) { - Sample sample = iterator.next(); - if (r + sample.g + sample.delta > upperBound) { - iterator.previous(); // roll back the item.next() above - if (iterator.hasPrevious()) { - Sample result = iterator.previous(); - return result.value; - } else { - return sample.value; - } - } - r += sample.g; - } - return samples.getLast().value; + if (q == 1.0) { + return samples.getLast().value; } - /** - * Error function, as in definition 5 of the paper. - */ - int f(int r) { - int minResult = Integer.MAX_VALUE; - for (Quantile q : quantiles) { - if (q.quantile == 0 || q.quantile == 1) { - continue; - } - int result; - // We had a numerical error here with the following example: - // quantile = 0.95, epsilon = 0.01, (n-r) = 30. - // The expected result of (2*0.01*30)/(1-0.95) is 12. The actual result is 11.99999999999999. - // To avoid running into these types of error we add 0.00000000001 before rounding down. - if (r >= q.quantile * n) { - result = (int) (q.v * r + 0.00000000001); - } else { - result = (int) (q.u * (n - r) + 0.00000000001); - } - if (result < minResult) { - minResult = result; - } + int r = 0; // sum of g's left of the current sample + int desiredRank = (int) Math.ceil(q * n); + int upperBound = desiredRank + f(desiredRank) / 2; + + ListIterator iterator = samples.listIterator(); + while (iterator.hasNext()) { + Sample sample = iterator.next(); + if (r + sample.g + sample.delta > upperBound) { + iterator.previous(); // roll back the item.next() above + if (iterator.hasPrevious()) { + Sample result = iterator.previous(); + return result.value; + } else { + return sample.value; } - return Math.max(minResult, 1); + } + r += sample.g; } + return samples.getLast().value; + } + + /** Error function, as in definition 5 of the paper. */ + int f(int r) { + int minResult = Integer.MAX_VALUE; + for (Quantile q : quantiles) { + if (q.quantile == 0 || q.quantile == 1) { + continue; + } + int result; + // We had a numerical error here with the following example: + // quantile = 0.95, epsilon = 0.01, (n-r) = 30. + // The expected result of (2*0.01*30)/(1-0.95) is 12. The actual result is 11.99999999999999. + // To avoid running into these types of error we add 0.00000000001 before rounding down. + if (r >= q.quantile * n) { + result = (int) (q.v * r + 0.00000000001); + } else { + result = (int) (q.u * (n - r) + 0.00000000001); + } + if (result < minResult) { + minResult = result; + } + } + return Math.max(minResult, 1); + } - /** - * Merge pairs of consecutive samples if this doesn't violate the error function. - */ - void compress() { - if (samples.size() < 3) { - return; - } - Iterator descendingIterator = samples.descendingIterator(); - int r = n; // n is equal to the sum of the g's of all samples - - Sample right; - Sample left = descendingIterator.next(); - r -= left.g; - - while (descendingIterator.hasNext()) { - right = left; - left = descendingIterator.next(); - r = r - left.g; - if (left == samples.getFirst()) { - // The min sample must never be merged. - break; - } - if (left.g + right.g + right.delta < f(r)) { - right.g += left.g; - descendingIterator.remove(); - left = right; - } - } + /** Merge pairs of consecutive samples if this doesn't violate the error function. */ + void compress() { + if (samples.size() < 3) { + return; } + Iterator descendingIterator = samples.descendingIterator(); + int r = n; // n is equal to the sum of the g's of all samples + + Sample right; + Sample left = descendingIterator.next(); + r -= left.g; + + while (descendingIterator.hasNext()) { + right = left; + left = descendingIterator.next(); + r = r - left.g; + if (left == samples.getFirst()) { + // The min sample must never be merged. + break; + } + if (left.g + right.g + right.delta < f(r)) { + right.g += left.g; + descendingIterator.remove(); + left = right; + } + } + } - static class Sample { + static class Sample { - /** - * Observed value. - */ - final double value; + /** Observed value. */ + final double value; - /** - * Difference between the lowest possible rank of this sample and its predecessor. - * This always starts with 1, but will be updated when compress() merges Samples. - */ - int g = 1; + /** + * Difference between the lowest possible rank of this sample and its predecessor. This always + * starts with 1, but will be updated when compress() merges Samples. + */ + int g = 1; - /** - * Difference between the greatest possible rank of this sample and the lowest possible rank of this sample. - */ - final int delta; + /** + * Difference between the greatest possible rank of this sample and the lowest possible rank of + * this sample. + */ + final int delta; - Sample(double value, int delta) { - this.value = value; - this.delta = delta; - } + Sample(double value, int delta) { + this.value = value; + this.delta = delta; + } - @Override - public String toString() { - return String.format("Sample{val=%.3f, g=%d, delta=%d}", value, g, delta); - } + @Override + public String toString() { + return String.format("Sample{val=%.3f, g=%d, delta=%d}", value, g, delta); } + } - static class Quantile { + static class Quantile { - /** - * Quantile. Must be between 0 and 1. - */ - final double quantile; + /** Quantile. Must be between 0 and 1. */ + final double quantile; - /** - * Allowed error. Must be between 0 and 1. - */ - final double epsilon; + /** Allowed error. Must be between 0 and 1. */ + final double epsilon; - /** - * Helper used in the error function f(), see definition 5 in the paper. - */ - final double u; + /** Helper used in the error function f(), see definition 5 in the paper. */ + final double u; - /** - * Helper used in the error function f(), see definition 5 in the paper. - */ - final double v; + /** Helper used in the error function f(), see definition 5 in the paper. */ + final double v; - Quantile(double quantile, double epsilon) { - if (quantile < 0.0 || quantile > 1.0) throw new IllegalArgumentException("Quantile must be between 0 and 1"); - if (epsilon < 0.0 || epsilon > 1.0) throw new IllegalArgumentException("Epsilon must be between 0 and 1"); + Quantile(double quantile, double epsilon) { + if (quantile < 0.0 || quantile > 1.0) + throw new IllegalArgumentException("Quantile must be between 0 and 1"); + if (epsilon < 0.0 || epsilon > 1.0) + throw new IllegalArgumentException("Epsilon must be between 0 and 1"); - this.quantile = quantile; - this.epsilon = epsilon; - u = 2.0 * epsilon / (1.0 - quantile); // if quantile == 1 this will be Double.NaN - v = 2.0 * epsilon / quantile; // if quantile == 0 this will be Double.NaN - } + this.quantile = quantile; + this.epsilon = epsilon; + u = 2.0 * epsilon / (1.0 - quantile); // if quantile == 1 this will be Double.NaN + v = 2.0 * epsilon / quantile; // if quantile == 0 this will be Double.NaN + } - @Override - public String toString() { - return String.format("Quantile{q=%.3f, epsilon=%.3f}", quantile, epsilon); - } + @Override + public String toString() { + return String.format("Quantile{q=%.3f, epsilon=%.3f}", quantile, epsilon); } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CallbackMetric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CallbackMetric.java index 2d9eb0b54..cf25e6527 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CallbackMetric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CallbackMetric.java @@ -2,41 +2,52 @@ import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.snapshots.Labels; - import java.util.List; /** * There are two kinds of metrics: {@code StatefulMetric} and {@code CallbackMetric}. - *

    - * See JavaDoc on {@link StatefulMetric} for more info. + * + *

    See JavaDoc on {@link StatefulMetric} for more info. */ abstract class CallbackMetric extends MetricWithFixedMetadata { - protected CallbackMetric(Builder builder) { - super(builder); - } + protected CallbackMetric(Builder builder) { + super(builder); + } - protected Labels makeLabels(String... labelValues) { - if (labelNames.length == 0) { - if (labelValues != null && labelValues.length > 0) { - throw new IllegalArgumentException("Cannot pass label values to a " + this.getClass().getSimpleName() + " that was created without label names."); - } - return constLabels; - } else { - if (labelValues == null) { - throw new IllegalArgumentException(this.getClass().getSimpleName() + " was created with label names, but the callback was called without label values."); - } - if (labelValues.length != labelNames.length) { - throw new IllegalArgumentException(this.getClass().getSimpleName() + " was created with " + labelNames.length + " label names, but the callback was called with " + labelValues.length + " label values."); - } - return constLabels.merge(Labels.of(labelNames, labelValues)); - } + protected Labels makeLabels(String... labelValues) { + if (labelNames.length == 0) { + if (labelValues != null && labelValues.length > 0) { + throw new IllegalArgumentException( + "Cannot pass label values to a " + + this.getClass().getSimpleName() + + " that was created without label names."); + } + return constLabels; + } else { + if (labelValues == null) { + throw new IllegalArgumentException( + this.getClass().getSimpleName() + + " was created with label names, but the callback was called without label values."); + } + if (labelValues.length != labelNames.length) { + throw new IllegalArgumentException( + this.getClass().getSimpleName() + + " was created with " + + labelNames.length + + " label names, but the callback was called with " + + labelValues.length + + " label values."); + } + return constLabels.merge(Labels.of(labelNames, labelValues)); } + } - static abstract class Builder, M extends CallbackMetric> extends MetricWithFixedMetadata.Builder { + abstract static class Builder, M extends CallbackMetric> + extends MetricWithFixedMetadata.Builder { - protected Builder(List illegalLabelNames, PrometheusProperties properties) { - super(illegalLabelNames, properties); - } + protected Builder(List illegalLabelNames, PrometheusProperties properties) { + super(illegalLabelNames, properties); } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java index c5a55ca78..5e435f695 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java @@ -8,7 +8,6 @@ import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.Labels; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -17,8 +16,9 @@ /** * Counter metric. - *

    - * Example usage: + * + *

    Example usage: + * *

    {@code
      * Counter requestCount = Counter.builder()
      *     .name("requests_total")
    @@ -29,251 +29,234 @@
      * requestCount.labelValues("/hello-world", "500").inc();
      * }
    */ -public class Counter extends StatefulMetric implements CounterDataPoint { - - private final boolean exemplarsEnabled; - private final ExemplarSamplerConfig exemplarSamplerConfig; - - private Counter(Builder builder, PrometheusProperties prometheusProperties) { - super(builder); - MetricsProperties[] properties = getMetricProperties(builder, prometheusProperties); - exemplarsEnabled = getConfigProperty(properties, MetricsProperties::getExemplarsEnabled); - if (exemplarsEnabled) { - exemplarSamplerConfig = new ExemplarSamplerConfig(prometheusProperties.getExemplarProperties(), 1); - } else { - exemplarSamplerConfig = null; - } +public class Counter extends StatefulMetric + implements CounterDataPoint { + + private final boolean exemplarsEnabled; + private final ExemplarSamplerConfig exemplarSamplerConfig; + + private Counter(Builder builder, PrometheusProperties prometheusProperties) { + super(builder); + MetricsProperties[] properties = getMetricProperties(builder, prometheusProperties); + exemplarsEnabled = getConfigProperty(properties, MetricsProperties::getExemplarsEnabled); + if (exemplarsEnabled) { + exemplarSamplerConfig = + new ExemplarSamplerConfig(prometheusProperties.getExemplarProperties(), 1); + } else { + exemplarSamplerConfig = null; } - - /** - * {@inheritDoc} - */ - @Override - public void inc(long amount) { - getNoLabels().inc(amount); + } + + /** {@inheritDoc} */ + @Override + public void inc(long amount) { + getNoLabels().inc(amount); + } + + /** {@inheritDoc} */ + @Override + public void inc(double amount) { + getNoLabels().inc(amount); + } + + /** {@inheritDoc} */ + @Override + public void incWithExemplar(long amount, Labels labels) { + getNoLabels().incWithExemplar(amount, labels); + } + + /** {@inheritDoc} */ + @Override + public void incWithExemplar(double amount, Labels labels) { + getNoLabels().incWithExemplar(amount, labels); + } + + /** {@inheritDoc} */ + public double get() { + return getNoLabels().get(); + } + + /** {@inheritDoc} */ + public long getLongValue() { + return getNoLabels().getLongValue(); + } + + /** {@inheritDoc} */ + @Override + public CounterSnapshot collect() { + return (CounterSnapshot) super.collect(); + } + + @Override + protected boolean isExemplarsEnabled() { + return exemplarsEnabled; + } + + @Override + protected DataPoint newDataPoint() { + if (isExemplarsEnabled()) { + return new DataPoint(new ExemplarSampler(exemplarSamplerConfig)); + } else { + return new DataPoint(null); } + } - /** - * {@inheritDoc} - */ - @Override - public void inc(double amount) { - getNoLabels().inc(amount); + @Override + protected CounterSnapshot collect(List labels, List metricData) { + List data = new ArrayList<>(labels.size()); + for (int i = 0; i < labels.size(); i++) { + data.add(metricData.get(i).collect(labels.get(i))); } + return new CounterSnapshot(getMetadata(), data); + } - /** - * {@inheritDoc} - */ - @Override - public void incWithExemplar(long amount, Labels labels) { - getNoLabels().incWithExemplar(amount, labels); + static String stripTotalSuffix(String name) { + if (name != null && (name.endsWith("_total") || name.endsWith(".total"))) { + name = name.substring(0, name.length() - 6); } + return name; + } - /** - * {@inheritDoc} - */ - @Override - public void incWithExemplar(double amount, Labels labels) { - getNoLabels().incWithExemplar(amount, labels); + class DataPoint implements CounterDataPoint { + + private final DoubleAdder doubleValue = new DoubleAdder(); + // LongAdder is 20% faster than DoubleAdder. So let's use the LongAdder for long observations, + // and DoubleAdder for double observations. If the user doesn't observe any double at all, + // we will be using the LongAdder and get the best performance. + private final LongAdder longValue = new LongAdder(); + private final long createdTimeMillis = System.currentTimeMillis(); + private final ExemplarSampler exemplarSampler; // null if isExemplarsEnabled() is false + + private DataPoint(ExemplarSampler exemplarSampler) { + this.exemplarSampler = exemplarSampler; } - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ public double get() { - return getNoLabels().get(); + return longValue.sum() + doubleValue.sum(); } - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ public long getLongValue() { - return getNoLabels().getLongValue(); + return longValue.sum() + (long) doubleValue.sum(); } - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ @Override - public CounterSnapshot collect() { - return (CounterSnapshot) super.collect(); + public void inc(long amount) { + validateAndAdd(amount); + if (isExemplarsEnabled()) { + exemplarSampler.observe(amount); + } } + /** {@inheritDoc} */ @Override - protected boolean isExemplarsEnabled() { - return exemplarsEnabled; + public void inc(double amount) { + validateAndAdd(amount); + if (isExemplarsEnabled()) { + exemplarSampler.observe(amount); + } } + /** {@inheritDoc} */ @Override - protected DataPoint newDataPoint() { - if (isExemplarsEnabled()) { - return new DataPoint(new ExemplarSampler(exemplarSamplerConfig)); - } else { - return new DataPoint(null); - } + public void incWithExemplar(long amount, Labels labels) { + validateAndAdd(amount); + if (isExemplarsEnabled()) { + exemplarSampler.observeWithExemplar(amount, labels); + } } + /** {@inheritDoc} */ @Override - protected CounterSnapshot collect(List labels, List metricData) { - List data = new ArrayList<>(labels.size()); - for (int i = 0; i < labels.size(); i++) { - data.add(metricData.get(i).collect(labels.get(i))); - } - return new CounterSnapshot(getMetadata(), data); + public void incWithExemplar(double amount, Labels labels) { + validateAndAdd(amount); + if (isExemplarsEnabled()) { + exemplarSampler.observeWithExemplar(amount, labels); + } } - static String stripTotalSuffix(String name) { - if (name != null && (name.endsWith("_total") || name.endsWith(".total"))) { - name = name.substring(0, name.length() - 6); - } - return name; + private void validateAndAdd(long amount) { + if (amount < 0) { + throw new IllegalArgumentException( + "Negative increment " + amount + " is illegal for Counter metrics."); + } + longValue.add(amount); } - class DataPoint implements CounterDataPoint { - - private final DoubleAdder doubleValue = new DoubleAdder(); - // LongAdder is 20% faster than DoubleAdder. So let's use the LongAdder for long observations, - // and DoubleAdder for double observations. If the user doesn't observe any double at all, - // we will be using the LongAdder and get the best performance. - private final LongAdder longValue = new LongAdder(); - private final long createdTimeMillis = System.currentTimeMillis(); - private final ExemplarSampler exemplarSampler; // null if isExemplarsEnabled() is false - - private DataPoint(ExemplarSampler exemplarSampler) { - this.exemplarSampler = exemplarSampler; - } - - /** - * {@inheritDoc} - */ - public double get() { - return longValue.sum() + doubleValue.sum(); - } - - /** - * {@inheritDoc} - */ - public long getLongValue() { - return longValue.sum() + (long) doubleValue.sum(); - } - - /** - * {@inheritDoc} - */ - @Override - public void inc(long amount) { - validateAndAdd(amount); - if (isExemplarsEnabled()) { - exemplarSampler.observe(amount); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void inc(double amount) { - validateAndAdd(amount); - if (isExemplarsEnabled()) { - exemplarSampler.observe(amount); - } - } + private void validateAndAdd(double amount) { + if (amount < 0) { + throw new IllegalArgumentException( + "Negative increment " + amount + " is illegal for Counter metrics."); + } + doubleValue.add(amount); + } - /** - * {@inheritDoc} - */ - @Override - public void incWithExemplar(long amount, Labels labels) { - validateAndAdd(amount); - if (isExemplarsEnabled()) { - exemplarSampler.observeWithExemplar(amount, labels); - } + private CounterSnapshot.CounterDataPointSnapshot collect(Labels labels) { + // Read the exemplar first. Otherwise, there is a race condition where you might + // see an Exemplar for a value that's not counted yet. + // If there are multiple Exemplars (by default it's just one), use the newest. + Exemplar latestExemplar = null; + if (exemplarSampler != null) { + for (Exemplar exemplar : exemplarSampler.collect()) { + if (latestExemplar == null + || exemplar.getTimestampMillis() > latestExemplar.getTimestampMillis()) { + latestExemplar = exemplar; + } } + } + return new CounterSnapshot.CounterDataPointSnapshot( + get(), labels, latestExemplar, createdTimeMillis); + } + } - /** - * {@inheritDoc} - */ - @Override - public void incWithExemplar(double amount, Labels labels) { - validateAndAdd(amount); - if (isExemplarsEnabled()) { - exemplarSampler.observeWithExemplar(amount, labels); - } - } + public static Builder builder() { + return new Builder(PrometheusProperties.get()); + } - private void validateAndAdd(long amount) { - if (amount < 0) { - throw new IllegalArgumentException("Negative increment " + amount + " is illegal for Counter metrics."); - } - longValue.add(amount); - } + public static Builder builder(PrometheusProperties config) { + return new Builder(config); + } - private void validateAndAdd(double amount) { - if (amount < 0) { - throw new IllegalArgumentException("Negative increment " + amount + " is illegal for Counter metrics."); - } - doubleValue.add(amount); - } + public static class Builder extends StatefulMetric.Builder { - private CounterSnapshot.CounterDataPointSnapshot collect(Labels labels) { - // Read the exemplar first. Otherwise, there is a race condition where you might - // see an Exemplar for a value that's not counted yet. - // If there are multiple Exemplars (by default it's just one), use the newest. - Exemplar latestExemplar = null; - if (exemplarSampler != null) { - for (Exemplar exemplar : exemplarSampler.collect()) { - if (latestExemplar == null || exemplar.getTimestampMillis() > latestExemplar.getTimestampMillis()) { - latestExemplar = exemplar; - } - } - } - return new CounterSnapshot.CounterDataPointSnapshot(get(), labels, latestExemplar, createdTimeMillis); - } + private Builder(PrometheusProperties properties) { + super(Collections.emptyList(), properties); } - public static Builder builder() { - return new Builder(PrometheusProperties.get()); + /** + * The {@code _total} suffix will automatically be appended if it's missing. + * + *
    {@code
    +     * Counter c1 = Counter.builder()
    +     *     .name("events_total")
    +     *     .build();
    +     * Counter c2 = Counter.builder()
    +     *     .name("events")
    +     *     .build();
    +     * }
    + * + * In the example above both {@code c1} and {@code c2} would be named {@code "events_total"} in + * Prometheus. + * + *

    Throws an {@link IllegalArgumentException} if {@link + * io.prometheus.metrics.model.snapshots.PrometheusNaming#isValidMetricName(String) + * MetricMetadata.isValidMetricName(name)} is {@code false}. + */ + @Override + public Builder name(String name) { + return super.name(stripTotalSuffix(name)); } - public static Builder builder(PrometheusProperties config) { - return new Builder(config); + @Override + public Counter build() { + return new Counter(this, properties); } - public static class Builder extends StatefulMetric.Builder { - - private Builder(PrometheusProperties properties) { - super(Collections.emptyList(), properties); - } - - /** - * The {@code _total} suffix will automatically be appended if it's missing. - *

    {@code
    -         * Counter c1 = Counter.builder()
    -         *     .name("events_total")
    -         *     .build();
    -         * Counter c2 = Counter.builder()
    -         *     .name("events")
    -         *     .build();
    -         * }
    - * In the example above both {@code c1} and {@code c2} would be named {@code "events_total"} in Prometheus. - *

    - * Throws an {@link IllegalArgumentException} if - * {@link io.prometheus.metrics.model.snapshots.PrometheusNaming#isValidMetricName(String) MetricMetadata.isValidMetricName(name)} - * is {@code false}. - */ - @Override - public Builder name(String name) { - return super.name(stripTotalSuffix(name)); - } - - @Override - public Counter build() { - return new Counter(this, properties); - } - - @Override - protected Builder self() { - return this; - } + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CounterWithCallback.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CounterWithCallback.java index 76ce68f23..5dc533d58 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CounterWithCallback.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CounterWithCallback.java @@ -2,7 +2,6 @@ import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.snapshots.CounterSnapshot; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -10,6 +9,7 @@ /** * Example: + * *

    {@code
      * ClassLoadingMXBean classLoadingMXBean = ManagementFactory.getClassLoadingMXBean();
      *
    @@ -22,80 +22,87 @@
      */
     public class CounterWithCallback extends CallbackMetric {
     
    -    @FunctionalInterface
    -    public interface Callback {
    -        void call(double value, String... labelValues);
    -    }
    +  @FunctionalInterface
    +  public interface Callback {
    +    void call(double value, String... labelValues);
    +  }
     
    -    private final Consumer callback;
    +  private final Consumer callback;
     
    -    private CounterWithCallback(Builder builder) {
    -        super(builder);
    -        this.callback = builder.callback;
    -        if (callback == null) {
    -            throw new IllegalArgumentException("callback cannot be null");
    -        }
    +  private CounterWithCallback(Builder builder) {
    +    super(builder);
    +    this.callback = builder.callback;
    +    if (callback == null) {
    +      throw new IllegalArgumentException("callback cannot be null");
         }
    -
    -    @Override
    -    public CounterSnapshot collect() {
    -        List dataPoints = new ArrayList<>();
    -        callback.accept((value, labelValues) -> {
    -            dataPoints.add(new CounterSnapshot.CounterDataPointSnapshot(value, makeLabels(labelValues), null, 0L));
    +  }
    +
    +  @Override
    +  public CounterSnapshot collect() {
    +    List dataPoints = new ArrayList<>();
    +    callback.accept(
    +        (value, labelValues) -> {
    +          dataPoints.add(
    +              new CounterSnapshot.CounterDataPointSnapshot(
    +                  value, makeLabels(labelValues), null, 0L));
             });
    -        return new CounterSnapshot(getMetadata(), dataPoints);
    -    }
    +    return new CounterSnapshot(getMetadata(), dataPoints);
    +  }
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    -    }
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
     
    -    public static Builder builder(PrometheusProperties properties) {
    -        return new Builder(properties);
    -    }
    +  public static Builder builder(PrometheusProperties properties) {
    +    return new Builder(properties);
    +  }
     
    -    public static class Builder extends CallbackMetric.Builder {
    +  public static class Builder
    +      extends CallbackMetric.Builder {
     
    -        private Consumer callback;
    +    private Consumer callback;
     
    -        public Builder callback(Consumer callback) {
    -            this.callback = callback;
    -            return self();
    -        }
    +    public Builder callback(Consumer callback) {
    +      this.callback = callback;
    +      return self();
    +    }
     
    -        private Builder(PrometheusProperties properties) {
    -            super(Collections.emptyList(), properties);
    -        }
    +    private Builder(PrometheusProperties properties) {
    +      super(Collections.emptyList(), properties);
    +    }
     
    -        /**
    -         * The {@code _total} suffix will automatically be appended if it's missing.
    -         * 
    {@code
    -         * CounterWithCallback c1 = CounterWithCallback.builder()
    -         *     .name("events_total")
    -         *     .build();
    -         * CounterWithCallback c2 = CounterWithCallback.builder()
    -         *     .name("events")
    -         *     .build();
    -         * }
    - * In the example above both {@code c1} and {@code c2} would be named {@code "events_total"} in Prometheus. - *

    - * Throws an {@link IllegalArgumentException} if - * {@link io.prometheus.metrics.model.snapshots.PrometheusNaming#isValidMetricName(String) MetricMetadata.isValidMetricName(name)} - * is {@code false}. - */ - @Override - public Builder name(String name) { - return super.name(Counter.stripTotalSuffix(name)); - } + /** + * The {@code _total} suffix will automatically be appended if it's missing. + * + *

    {@code
    +     * CounterWithCallback c1 = CounterWithCallback.builder()
    +     *     .name("events_total")
    +     *     .build();
    +     * CounterWithCallback c2 = CounterWithCallback.builder()
    +     *     .name("events")
    +     *     .build();
    +     * }
    + * + * In the example above both {@code c1} and {@code c2} would be named {@code "events_total"} in + * Prometheus. + * + *

    Throws an {@link IllegalArgumentException} if {@link + * io.prometheus.metrics.model.snapshots.PrometheusNaming#isValidMetricName(String) + * MetricMetadata.isValidMetricName(name)} is {@code false}. + */ + @Override + public Builder name(String name) { + return super.name(Counter.stripTotalSuffix(name)); + } - @Override - public CounterWithCallback build() { - return new CounterWithCallback(this); - } + @Override + public CounterWithCallback build() { + return new CounterWithCallback(this); + } - @Override - protected Builder self() { - return this; - } + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java index 1c46435f6..a3f7e290d 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java @@ -8,7 +8,6 @@ import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.Labels; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -16,8 +15,9 @@ /** * Gauge metric. - *

    - * Example usage: + * + *

    Example usage: + * *

    {@code
      * Gauge currentActiveUsers = Gauge.builder()
      *     .name("current_active_users")
    @@ -36,194 +36,176 @@
      * }
      * }
    */ -public class Gauge extends StatefulMetric implements GaugeDataPoint { - - private final boolean exemplarsEnabled; - private final ExemplarSamplerConfig exemplarSamplerConfig; - - private Gauge(Builder builder, PrometheusProperties prometheusProperties) { - super(builder); - MetricsProperties[] properties = getMetricProperties(builder, prometheusProperties); - exemplarsEnabled = getConfigProperty(properties, MetricsProperties::getExemplarsEnabled); - if (exemplarsEnabled) { - exemplarSamplerConfig = new ExemplarSamplerConfig(prometheusProperties.getExemplarProperties(), 1); - } else { - exemplarSamplerConfig = null; - } +public class Gauge extends StatefulMetric + implements GaugeDataPoint { + + private final boolean exemplarsEnabled; + private final ExemplarSamplerConfig exemplarSamplerConfig; + + private Gauge(Builder builder, PrometheusProperties prometheusProperties) { + super(builder); + MetricsProperties[] properties = getMetricProperties(builder, prometheusProperties); + exemplarsEnabled = getConfigProperty(properties, MetricsProperties::getExemplarsEnabled); + if (exemplarsEnabled) { + exemplarSamplerConfig = + new ExemplarSamplerConfig(prometheusProperties.getExemplarProperties(), 1); + } else { + exemplarSamplerConfig = null; } - - /** - * {@inheritDoc} - */ - @Override - public void inc(double amount) { - getNoLabels().inc(amount); + } + + /** {@inheritDoc} */ + @Override + public void inc(double amount) { + getNoLabels().inc(amount); + } + + /** {@inheritDoc} */ + @Override + public double get() { + return getNoLabels().get(); + } + + /** {@inheritDoc} */ + @Override + public void incWithExemplar(double amount, Labels labels) { + getNoLabels().incWithExemplar(amount, labels); + } + + /** {@inheritDoc} */ + @Override + public void set(double value) { + getNoLabels().set(value); + } + + /** {@inheritDoc} */ + @Override + public void setWithExemplar(double value, Labels labels) { + getNoLabels().setWithExemplar(value, labels); + } + + /** {@inheritDoc} */ + @Override + public GaugeSnapshot collect() { + return (GaugeSnapshot) super.collect(); + } + + @Override + protected GaugeSnapshot collect(List labels, List metricData) { + List dataPointSnapshots = new ArrayList<>(labels.size()); + for (int i = 0; i < labels.size(); i++) { + dataPointSnapshots.add(metricData.get(i).collect(labels.get(i))); } - - /** - * {@inheritDoc} - */ - @Override - public double get() { - return getNoLabels().get(); + return new GaugeSnapshot(getMetadata(), dataPointSnapshots); + } + + @Override + protected DataPoint newDataPoint() { + if (isExemplarsEnabled()) { + return new DataPoint(new ExemplarSampler(exemplarSamplerConfig)); + } else { + return new DataPoint(null); } + } - /** - * {@inheritDoc} - */ - @Override - public void incWithExemplar(double amount, Labels labels) { - getNoLabels().incWithExemplar(amount, labels); - } + @Override + protected boolean isExemplarsEnabled() { + return exemplarsEnabled; + } - /** - * {@inheritDoc} - */ - @Override - public void set(double value) { - getNoLabels().set(value); + class DataPoint implements GaugeDataPoint { + + private final ExemplarSampler exemplarSampler; // null if isExemplarsEnabled() is false + + private DataPoint(ExemplarSampler exemplarSampler) { + this.exemplarSampler = exemplarSampler; } - /** - * {@inheritDoc} - */ + private final AtomicLong value = new AtomicLong(Double.doubleToRawLongBits(0)); + + /** {@inheritDoc} */ @Override - public void setWithExemplar(double value, Labels labels) { - getNoLabels().setWithExemplar(value, labels); + public void inc(double amount) { + long next = + value.updateAndGet(l -> Double.doubleToRawLongBits(Double.longBitsToDouble(l) + amount)); + if (isExemplarsEnabled()) { + exemplarSampler.observe(Double.longBitsToDouble(next)); + } } - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ @Override - public GaugeSnapshot collect() { - return (GaugeSnapshot) super.collect(); + public void incWithExemplar(double amount, Labels labels) { + long next = + value.updateAndGet(l -> Double.doubleToRawLongBits(Double.longBitsToDouble(l) + amount)); + if (isExemplarsEnabled()) { + exemplarSampler.observeWithExemplar(Double.longBitsToDouble(next), labels); + } } + /** {@inheritDoc} */ @Override - protected GaugeSnapshot collect(List labels, List metricData) { - List dataPointSnapshots = new ArrayList<>(labels.size()); - for (int i = 0; i < labels.size(); i++) { - dataPointSnapshots.add(metricData.get(i).collect(labels.get(i))); - } - return new GaugeSnapshot(getMetadata(), dataPointSnapshots); + public void set(double value) { + this.value.set(Double.doubleToRawLongBits(value)); + if (isExemplarsEnabled()) { + exemplarSampler.observe(value); + } } + /** {@inheritDoc} */ @Override - protected DataPoint newDataPoint() { - if (isExemplarsEnabled()) { - return new DataPoint(new ExemplarSampler(exemplarSamplerConfig)); - } else { - return new DataPoint(null); - } + public double get() { + return Double.longBitsToDouble(value.get()); } + /** {@inheritDoc} */ @Override - protected boolean isExemplarsEnabled() { - return exemplarsEnabled; + public void setWithExemplar(double value, Labels labels) { + this.value.set(Double.doubleToRawLongBits(value)); + if (isExemplarsEnabled()) { + exemplarSampler.observeWithExemplar(value, labels); + } } - class DataPoint implements GaugeDataPoint { - - private final ExemplarSampler exemplarSampler; // null if isExemplarsEnabled() is false - - private DataPoint(ExemplarSampler exemplarSampler) { - this.exemplarSampler = exemplarSampler; - } - - private final AtomicLong value = new AtomicLong(Double.doubleToRawLongBits(0)); - - /** - * {@inheritDoc} - */ - @Override - public void inc(double amount) { - long next = value.updateAndGet(l -> Double.doubleToRawLongBits(Double.longBitsToDouble(l) + amount)); - if (isExemplarsEnabled()) { - exemplarSampler.observe(Double.longBitsToDouble(next)); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void incWithExemplar(double amount, Labels labels) { - long next = value.updateAndGet(l -> Double.doubleToRawLongBits(Double.longBitsToDouble(l) + amount)); - if (isExemplarsEnabled()) { - exemplarSampler.observeWithExemplar(Double.longBitsToDouble(next), labels); - } + private GaugeSnapshot.GaugeDataPointSnapshot collect(Labels labels) { + // Read the exemplar first. Otherwise, there is a race condition where you might + // see an Exemplar for a value that's not represented in getValue() yet. + // If there are multiple Exemplars (by default it's just one), use the oldest + // so that we don't violate min age. + Exemplar oldest = null; + if (isExemplarsEnabled()) { + for (Exemplar exemplar : exemplarSampler.collect()) { + if (oldest == null || exemplar.getTimestampMillis() < oldest.getTimestampMillis()) { + oldest = exemplar; + } } + } + return new GaugeSnapshot.GaugeDataPointSnapshot(get(), labels, oldest); + } + } - /** - * {@inheritDoc} - */ - @Override - public void set(double value) { - this.value.set(Double.doubleToRawLongBits(value)); - if (isExemplarsEnabled()) { - exemplarSampler.observe(value); - } - } + public static Builder builder() { + return new Builder(PrometheusProperties.get()); + } - /** - * {@inheritDoc} - */ - @Override - public double get() { - return Double.longBitsToDouble(value.get()); - } + public static Builder builder(PrometheusProperties config) { + return new Builder(config); + } - /** - * {@inheritDoc} - */ - @Override - public void setWithExemplar(double value, Labels labels) { - this.value.set(Double.doubleToRawLongBits(value)); - if (isExemplarsEnabled()) { - exemplarSampler.observeWithExemplar(value, labels); - } - } + public static class Builder extends StatefulMetric.Builder { - private GaugeSnapshot.GaugeDataPointSnapshot collect(Labels labels) { - // Read the exemplar first. Otherwise, there is a race condition where you might - // see an Exemplar for a value that's not represented in getValue() yet. - // If there are multiple Exemplars (by default it's just one), use the oldest - // so that we don't violate min age. - Exemplar oldest = null; - if (isExemplarsEnabled()) { - for (Exemplar exemplar : exemplarSampler.collect()) { - if (oldest == null || exemplar.getTimestampMillis() < oldest.getTimestampMillis()) { - oldest = exemplar; - } - } - } - return new GaugeSnapshot.GaugeDataPointSnapshot(get(), labels, oldest); - } - } - - public static Builder builder() { - return new Builder(PrometheusProperties.get()); + private Builder(PrometheusProperties config) { + super(Collections.emptyList(), config); } - public static Builder builder(PrometheusProperties config) { - return new Builder(config); + @Override + public Gauge build() { + return new Gauge(this, properties); } - public static class Builder extends StatefulMetric.Builder { - - private Builder(PrometheusProperties config) { - super(Collections.emptyList(), config); - } - - @Override - public Gauge build() { - return new Gauge(this, properties); - } - - @Override - protected Builder self() { - return this; - } + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/GaugeWithCallback.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/GaugeWithCallback.java index a88a9acca..8b2d7a0ba 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/GaugeWithCallback.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/GaugeWithCallback.java @@ -2,7 +2,6 @@ import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -10,6 +9,7 @@ /** * Example: + * *
    {@code
      * MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
      *
    @@ -27,59 +27,62 @@
      */
     public class GaugeWithCallback extends CallbackMetric {
     
    -    @FunctionalInterface
    -    public interface Callback {
    -        void call(double value, String... labelValues);
    -    }
    +  @FunctionalInterface
    +  public interface Callback {
    +    void call(double value, String... labelValues);
    +  }
     
    -    private final Consumer callback;
    +  private final Consumer callback;
     
    -    private GaugeWithCallback(Builder builder) {
    -        super(builder);
    -        this.callback = builder.callback;
    -        if (callback == null) {
    -            throw new IllegalArgumentException("callback cannot be null");
    -        }
    +  private GaugeWithCallback(Builder builder) {
    +    super(builder);
    +    this.callback = builder.callback;
    +    if (callback == null) {
    +      throw new IllegalArgumentException("callback cannot be null");
         }
    +  }
     
    -    @Override
    -    public GaugeSnapshot collect() {
    -        List dataPoints = new ArrayList<>();
    -        callback.accept((value, labelValues) -> {
    -            dataPoints.add(new GaugeSnapshot.GaugeDataPointSnapshot(value, makeLabels(labelValues), null, 0L));
    +  @Override
    +  public GaugeSnapshot collect() {
    +    List dataPoints = new ArrayList<>();
    +    callback.accept(
    +        (value, labelValues) -> {
    +          dataPoints.add(
    +              new GaugeSnapshot.GaugeDataPointSnapshot(value, makeLabels(labelValues), null, 0L));
             });
    -        return new GaugeSnapshot(getMetadata(), dataPoints);
    -    }
    +    return new GaugeSnapshot(getMetadata(), dataPoints);
    +  }
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    -    }
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
     
    -    public static Builder builder(PrometheusProperties properties) {
    -        return new Builder(properties);
    -    }
    +  public static Builder builder(PrometheusProperties properties) {
    +    return new Builder(properties);
    +  }
     
    -    public static class Builder extends CallbackMetric.Builder {
    +  public static class Builder
    +      extends CallbackMetric.Builder {
     
    -        private Consumer callback;
    +    private Consumer callback;
     
    -        public Builder callback(Consumer callback) {
    -            this.callback = callback;
    -            return self();
    -        }
    +    public Builder callback(Consumer callback) {
    +      this.callback = callback;
    +      return self();
    +    }
     
    -        private Builder(PrometheusProperties properties) {
    -            super(Collections.emptyList(), properties);
    -        }
    +    private Builder(PrometheusProperties properties) {
    +      super(Collections.emptyList(), properties);
    +    }
     
    -        @Override
    -        public GaugeWithCallback build() {
    -            return new GaugeWithCallback(this);
    -        }
    +    @Override
    +    public GaugeWithCallback build() {
    +      return new GaugeWithCallback(this);
    +    }
     
    -        @Override
    -        protected Builder self() {
    -            return this;
    -        }
    +    @Override
    +    protected Builder self() {
    +      return this;
         }
    +  }
     }
    diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java
    index 0cad6376c..494f7fded 100644
    --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java
    +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java
    @@ -3,16 +3,15 @@
     import io.prometheus.metrics.config.ExemplarsProperties;
     import io.prometheus.metrics.config.MetricsProperties;
     import io.prometheus.metrics.config.PrometheusProperties;
    +import io.prometheus.metrics.core.datapoints.DistributionDataPoint;
     import io.prometheus.metrics.core.exemplars.ExemplarSampler;
     import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfig;
    +import io.prometheus.metrics.core.util.Scheduler;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
     import io.prometheus.metrics.model.snapshots.Exemplars;
     import io.prometheus.metrics.model.snapshots.HistogramSnapshot;
     import io.prometheus.metrics.model.snapshots.Labels;
     import io.prometheus.metrics.model.snapshots.NativeHistogramBuckets;
    -import io.prometheus.metrics.core.datapoints.DistributionDataPoint;
    -import io.prometheus.metrics.core.util.Scheduler;
    -
     import java.math.BigDecimal;
     import java.util.ArrayList;
     import java.util.Collections;
    @@ -28,6 +27,7 @@
     
     /**
      * Histogram metric. Example usage:
    + *
      * 
    {@code
      * Histogram histogram = Histogram.builder()
      *         .name("http_request_duration_seconds")
    @@ -40,888 +40,921 @@
      * // do something
      * histogram.labelValues("GET", "/", "200").observe(Unit.nanosToSeconds(System.nanoTime() - start));
      * }
    + * * Prometheus supports two internal representations of histograms: + * *
      - *
    1. Classic Histograms have a fixed number of buckets with fixed bucket boundaries.
    2. - *
    3. Native Histograms have an infinite number of buckets with a dynamic resolution. - * Prometheus native histograms are the same as OpenTelemetry's exponential histograms.
    4. + *
    5. Classic Histograms have a fixed number of buckets with fixed bucket boundaries. + *
    6. Native Histograms have an infinite number of buckets with a dynamic resolution. + * Prometheus native histograms are the same as OpenTelemetry's exponential histograms. *
    - * By default, a histogram maintains both representations, i.e. the example above will maintain a classic - * histogram representation with Prometheus' default bucket boundaries as well as native histogram representation. - * Which representation is used depends on the exposition format, i.e. which content type the Prometheus server - * accepts when scraping. Exposition format "Text" exposes the classic histogram, exposition format "Protobuf" - * exposes both representations. This is great for migrating from classic histograms to native histograms. - *

    - * If you want the classic representation only, use {@link Histogram.Builder#classicOnly}. - * If you want the native representation only, use {@link Histogram.Builder#nativeOnly}. + * + * By default, a histogram maintains both representations, i.e. the example above will maintain a + * classic histogram representation with Prometheus' default bucket boundaries as well as native + * histogram representation. Which representation is used depends on the exposition format, i.e. + * which content type the Prometheus server accepts when scraping. Exposition format "Text" exposes + * the classic histogram, exposition format "Protobuf" exposes both representations. This is great + * for migrating from classic histograms to native histograms. + * + *

    If you want the classic representation only, use {@link Histogram.Builder#classicOnly}. If you + * want the native representation only, use {@link Histogram.Builder#nativeOnly}. */ -public class Histogram extends StatefulMetric implements DistributionDataPoint { - - // nativeSchema == CLASSIC_HISTOGRAM indicates that this is a classic histogram only. - private final int CLASSIC_HISTOGRAM = Integer.MIN_VALUE; - - // NATIVE_BOUNDS is used to look up the native bucket index depending on the current schema. - private static final double[][] NATIVE_BOUNDS; - - private final boolean exemplarsEnabled; - private final ExemplarSamplerConfig exemplarSamplerConfig; - - // Upper bounds for the classic histogram buckets. Contains at least +Inf. - // An empty array indicates that this is a native histogram only. - private final double[] classicUpperBounds; - - // The schema defines the resolution of the native histogram. - // Schema is Prometheus terminology, in OpenTelemetry it's named "scale". - // The formula for the bucket boundaries at position "index" is: - // - // base := base = (2^(2^-scale)) - // lowerBound := base^(index-1) - // upperBound := base^(index) - // - // Note that this is off-by-one compared to OpenTelemetry. - // - // Example: With schema 0 the bucket boundaries are ... 1/16, 1/8, 1/4, 1/2, 1, 2, 4, 8, 16, ... - // Each increment in schema doubles the number of buckets. - // - // The initialNativeSchema is the schema we start with. The histogram will automatically scale down - // if the number of native histogram buckets exceeds nativeMaxBuckets. - private final int nativeInitialSchema; // integer in [-4, 8] - - // Native histogram buckets get smaller and smaller the closer they get to zero. - // To avoid wasting a lot of buckets for observations fluctuating around zero, we consider all - // values in [-zeroThreshold, +zeroThreshold] to be equal to zero. - // - // The zeroThreshold is initialized with minZeroThreshold, and will grow up to maxZeroThreshold if - // the number of native histogram buckets exceeds nativeMaxBuckets. - private final double nativeMinZeroThreshold; - private final double nativeMaxZeroThreshold; - - // When the number of native histogram buckets becomes larger than nativeMaxBuckets, - // an attempt is made to reduce the number of buckets: - // (1) Reset if the last reset is longer than the reset duration ago - // (2) Increase the zero bucket width if it's smaller than nativeMaxZeroThreshold - // (3) Decrease the nativeSchema, i.e. merge pairs of neighboring buckets into one - private final int nativeMaxBuckets; - - // If the number of native histogram buckets exceeds nativeMaxBuckets, - // the histogram may reset (all values set to zero) after nativeResetDurationSeconds is expired. - private final long nativeResetDurationSeconds; // 0 indicates no reset - - private Histogram(Histogram.Builder builder, PrometheusProperties prometheusProperties) { - super(builder); - MetricsProperties[] properties = getMetricProperties(builder, prometheusProperties); - exemplarsEnabled = getConfigProperty(properties, MetricsProperties::getExemplarsEnabled); - nativeInitialSchema = getConfigProperty(properties, props -> { - if (Boolean.TRUE.equals(props.getHistogramClassicOnly())) { +public class Histogram extends StatefulMetric + implements DistributionDataPoint { + + // nativeSchema == CLASSIC_HISTOGRAM indicates that this is a classic histogram only. + private final int CLASSIC_HISTOGRAM = Integer.MIN_VALUE; + + // NATIVE_BOUNDS is used to look up the native bucket index depending on the current schema. + private static final double[][] NATIVE_BOUNDS; + + private final boolean exemplarsEnabled; + private final ExemplarSamplerConfig exemplarSamplerConfig; + + // Upper bounds for the classic histogram buckets. Contains at least +Inf. + // An empty array indicates that this is a native histogram only. + private final double[] classicUpperBounds; + + // The schema defines the resolution of the native histogram. + // Schema is Prometheus terminology, in OpenTelemetry it's named "scale". + // The formula for the bucket boundaries at position "index" is: + // + // base := base = (2^(2^-scale)) + // lowerBound := base^(index-1) + // upperBound := base^(index) + // + // Note that this is off-by-one compared to OpenTelemetry. + // + // Example: With schema 0 the bucket boundaries are ... 1/16, 1/8, 1/4, 1/2, 1, 2, 4, 8, 16, ... + // Each increment in schema doubles the number of buckets. + // + // The initialNativeSchema is the schema we start with. The histogram will automatically scale + // down + // if the number of native histogram buckets exceeds nativeMaxBuckets. + private final int nativeInitialSchema; // integer in [-4, 8] + + // Native histogram buckets get smaller and smaller the closer they get to zero. + // To avoid wasting a lot of buckets for observations fluctuating around zero, we consider all + // values in [-zeroThreshold, +zeroThreshold] to be equal to zero. + // + // The zeroThreshold is initialized with minZeroThreshold, and will grow up to maxZeroThreshold if + // the number of native histogram buckets exceeds nativeMaxBuckets. + private final double nativeMinZeroThreshold; + private final double nativeMaxZeroThreshold; + + // When the number of native histogram buckets becomes larger than nativeMaxBuckets, + // an attempt is made to reduce the number of buckets: + // (1) Reset if the last reset is longer than the reset duration ago + // (2) Increase the zero bucket width if it's smaller than nativeMaxZeroThreshold + // (3) Decrease the nativeSchema, i.e. merge pairs of neighboring buckets into one + private final int nativeMaxBuckets; + + // If the number of native histogram buckets exceeds nativeMaxBuckets, + // the histogram may reset (all values set to zero) after nativeResetDurationSeconds is expired. + private final long nativeResetDurationSeconds; // 0 indicates no reset + + private Histogram(Histogram.Builder builder, PrometheusProperties prometheusProperties) { + super(builder); + MetricsProperties[] properties = getMetricProperties(builder, prometheusProperties); + exemplarsEnabled = getConfigProperty(properties, MetricsProperties::getExemplarsEnabled); + nativeInitialSchema = + getConfigProperty( + properties, + props -> { + if (Boolean.TRUE.equals(props.getHistogramClassicOnly())) { return CLASSIC_HISTOGRAM; - } else { + } else { return props.getHistogramNativeInitialSchema(); - } - }); - classicUpperBounds = getConfigProperty(properties, props -> { - if (Boolean.TRUE.equals(props.getHistogramNativeOnly())) { - return new double[]{}; - } else if (props.getHistogramClassicUpperBounds() != null) { - SortedSet upperBounds = new TreeSet<>(props.getHistogramClassicUpperBounds()); + } + }); + classicUpperBounds = + getConfigProperty( + properties, + props -> { + if (Boolean.TRUE.equals(props.getHistogramNativeOnly())) { + return new double[] {}; + } else if (props.getHistogramClassicUpperBounds() != null) { + SortedSet upperBounds = + new TreeSet<>(props.getHistogramClassicUpperBounds()); upperBounds.add(Double.POSITIVE_INFINITY); double[] result = new double[upperBounds.size()]; int i = 0; for (double upperBound : upperBounds) { - result[i++] = upperBound; + result[i++] = upperBound; } return result; - } else { + } else { return null; - } - }); - double max = getConfigProperty(properties, MetricsProperties::getHistogramNativeMaxZeroThreshold); - double min = getConfigProperty(properties, MetricsProperties::getHistogramNativeMinZeroThreshold); - nativeMaxZeroThreshold = max == builder.DEFAULT_NATIVE_MAX_ZERO_THRESHOLD && min > max ? min : max; - nativeMinZeroThreshold = Math.min(min, nativeMaxZeroThreshold); - nativeMaxBuckets = getConfigProperty(properties, MetricsProperties::getHistogramNativeMaxNumberOfBuckets); - nativeResetDurationSeconds = getConfigProperty(properties, MetricsProperties::getHistogramNativeResetDurationSeconds); - ExemplarsProperties exemplarsProperties = prometheusProperties.getExemplarProperties(); - exemplarSamplerConfig = classicUpperBounds.length == 0 ? - new ExemplarSamplerConfig(exemplarsProperties, 4) : - new ExemplarSamplerConfig(exemplarsProperties, classicUpperBounds); + } + }); + double max = + getConfigProperty(properties, MetricsProperties::getHistogramNativeMaxZeroThreshold); + double min = + getConfigProperty(properties, MetricsProperties::getHistogramNativeMinZeroThreshold); + nativeMaxZeroThreshold = + max == builder.DEFAULT_NATIVE_MAX_ZERO_THRESHOLD && min > max ? min : max; + nativeMinZeroThreshold = Math.min(min, nativeMaxZeroThreshold); + nativeMaxBuckets = + getConfigProperty(properties, MetricsProperties::getHistogramNativeMaxNumberOfBuckets); + nativeResetDurationSeconds = + getConfigProperty(properties, MetricsProperties::getHistogramNativeResetDurationSeconds); + ExemplarsProperties exemplarsProperties = prometheusProperties.getExemplarProperties(); + exemplarSamplerConfig = + classicUpperBounds.length == 0 + ? new ExemplarSamplerConfig(exemplarsProperties, 4) + : new ExemplarSamplerConfig(exemplarsProperties, classicUpperBounds); + } + + /** {@inheritDoc} */ + @Override + public void observe(double amount) { + getNoLabels().observe(amount); + } + + /** {@inheritDoc} */ + @Override + public void observeWithExemplar(double amount, Labels labels) { + getNoLabels().observeWithExemplar(amount, labels); + } + + @Override + protected boolean isExemplarsEnabled() { + return exemplarsEnabled; + } + + public class DataPoint implements DistributionDataPoint { + private final LongAdder[] classicBuckets; + private final ConcurrentHashMap nativeBucketsForPositiveValues = + new ConcurrentHashMap<>(); + private final ConcurrentHashMap nativeBucketsForNegativeValues = + new ConcurrentHashMap<>(); + private final LongAdder nativeZeroCount = new LongAdder(); + private final LongAdder count = new LongAdder(); + private final DoubleAdder sum = new DoubleAdder(); + private volatile int nativeSchema = + nativeInitialSchema; // integer in [-4, 8] or CLASSIC_HISTOGRAM + private volatile double nativeZeroThreshold = Histogram.this.nativeMinZeroThreshold; + private volatile long createdTimeMillis = System.currentTimeMillis(); + private final Buffer buffer = new Buffer(); + private volatile boolean resetDurationExpired = false; + private final ExemplarSampler exemplarSampler; + + private DataPoint() { + if (exemplarsEnabled) { + exemplarSampler = new ExemplarSampler(exemplarSamplerConfig); + } else { + exemplarSampler = null; + } + classicBuckets = new LongAdder[classicUpperBounds.length]; + for (int i = 0; i < classicUpperBounds.length; i++) { + classicBuckets[i] = new LongAdder(); + } + maybeScheduleNextReset(); } - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ @Override - public void observe(double amount) { - getNoLabels().observe(amount); + public void observe(double value) { + if (Double.isNaN(value)) { + // See https://github.com/prometheus/client_golang/issues/1275 on ignoring NaN observations. + return; + } + if (!buffer.append(value)) { + doObserve(value, false); + } + if (isExemplarsEnabled()) { + exemplarSampler.observe(value); + } } - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ @Override - public void observeWithExemplar(double amount, Labels labels) { - getNoLabels().observeWithExemplar(amount, labels); + public void observeWithExemplar(double value, Labels labels) { + if (Double.isNaN(value)) { + // See https://github.com/prometheus/client_golang/issues/1275 on ignoring NaN observations. + return; + } + if (!buffer.append(value)) { + doObserve(value, false); + } + if (isExemplarsEnabled()) { + exemplarSampler.observeWithExemplar(value, labels); + } } - @Override - protected boolean isExemplarsEnabled() { - return exemplarsEnabled; - } - - public class DataPoint implements DistributionDataPoint { - private final LongAdder[] classicBuckets; - private final ConcurrentHashMap nativeBucketsForPositiveValues = new ConcurrentHashMap<>(); - private final ConcurrentHashMap nativeBucketsForNegativeValues = new ConcurrentHashMap<>(); - private final LongAdder nativeZeroCount = new LongAdder(); - private final LongAdder count = new LongAdder(); - private final DoubleAdder sum = new DoubleAdder(); - private volatile int nativeSchema = nativeInitialSchema; // integer in [-4, 8] or CLASSIC_HISTOGRAM - private volatile double nativeZeroThreshold = Histogram.this.nativeMinZeroThreshold; - private volatile long createdTimeMillis = System.currentTimeMillis(); - private final Buffer buffer = new Buffer(); - private volatile boolean resetDurationExpired = false; - private final ExemplarSampler exemplarSampler; - - private DataPoint() { - if (exemplarsEnabled) { - exemplarSampler = new ExemplarSampler(exemplarSamplerConfig); - } else { - exemplarSampler = null; - } - classicBuckets = new LongAdder[classicUpperBounds.length]; - for (int i = 0; i < classicUpperBounds.length; i++) { - classicBuckets[i] = new LongAdder(); - } - maybeScheduleNextReset(); - } - - /** - * {@inheritDoc} - */ - @Override - public void observe(double value) { - if (Double.isNaN(value)) { - // See https://github.com/prometheus/client_golang/issues/1275 on ignoring NaN observations. - return; - } - if (!buffer.append(value)) { - doObserve(value, false); - } - if (isExemplarsEnabled()) { - exemplarSampler.observe(value); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void observeWithExemplar(double value, Labels labels) { - if (Double.isNaN(value)) { - // See https://github.com/prometheus/client_golang/issues/1275 on ignoring NaN observations. - return; - } - if (!buffer.append(value)) { - doObserve(value, false); - } - if (isExemplarsEnabled()) { - exemplarSampler.observeWithExemplar(value, labels); - } - } - - private void doObserve(double value, boolean fromBuffer) { - // classicUpperBounds is an empty array if this is a native histogram only. - for (int i = 0; i < classicUpperBounds.length; ++i) { - // The last bucket is +Inf, so we always increment. - if (value <= classicUpperBounds[i]) { - classicBuckets[i].add(1); - break; - } - } - boolean nativeBucketCreated = false; - if (Histogram.this.nativeInitialSchema != CLASSIC_HISTOGRAM) { - if (value > nativeZeroThreshold) { - nativeBucketCreated = addToNativeBucket(value, nativeBucketsForPositiveValues); - } else if (value < -nativeZeroThreshold) { - nativeBucketCreated = addToNativeBucket(-value, nativeBucketsForNegativeValues); - } else { - nativeZeroCount.add(1); - } - } - sum.add(value); - count.increment(); // must be the last step, because count is used to signal that the operation is complete. - if (!fromBuffer) { - // maybeResetOrScaleDown will switch to the buffer, - // which won't work if we are currently still processing observations from the buffer. - // The reason is that before switching to the buffer we wait for all pending observations to be counted. - // If we do this while still applying observations from the buffer, the pending observations from - // the buffer will never be counted, and the buffer.run() method will wait forever. - maybeResetOrScaleDown(value, nativeBucketCreated); - } - } - - private HistogramSnapshot.HistogramDataPointSnapshot collect(Labels labels) { - Exemplars exemplars = exemplarSampler != null ? exemplarSampler.collect() : Exemplars.EMPTY; - return buffer.run( - expectedCount -> count.sum() == expectedCount, - () -> { - if (classicUpperBounds.length == 0) { - // native only - return new HistogramSnapshot.HistogramDataPointSnapshot( - nativeSchema, - nativeZeroCount.sum(), - nativeZeroThreshold, - toBucketList(nativeBucketsForPositiveValues), - toBucketList(nativeBucketsForNegativeValues), - sum.sum(), - labels, - exemplars, - createdTimeMillis); - } else if (Histogram.this.nativeInitialSchema == CLASSIC_HISTOGRAM) { - // classic only - return new HistogramSnapshot.HistogramDataPointSnapshot( - ClassicHistogramBuckets.of(classicUpperBounds, classicBuckets), - sum.sum(), - labels, - exemplars, - createdTimeMillis); - } else { - // hybrid: classic and native - return new HistogramSnapshot.HistogramDataPointSnapshot( - ClassicHistogramBuckets.of(classicUpperBounds, classicBuckets), - nativeSchema, - nativeZeroCount.sum(), - nativeZeroThreshold, - toBucketList(nativeBucketsForPositiveValues), - toBucketList(nativeBucketsForNegativeValues), - sum.sum(), - labels, - exemplars, - createdTimeMillis); - } - }, - v -> doObserve(v, true) - ); - } + private void doObserve(double value, boolean fromBuffer) { + // classicUpperBounds is an empty array if this is a native histogram only. + for (int i = 0; i < classicUpperBounds.length; ++i) { + // The last bucket is +Inf, so we always increment. + if (value <= classicUpperBounds[i]) { + classicBuckets[i].add(1); + break; + } + } + boolean nativeBucketCreated = false; + if (Histogram.this.nativeInitialSchema != CLASSIC_HISTOGRAM) { + if (value > nativeZeroThreshold) { + nativeBucketCreated = addToNativeBucket(value, nativeBucketsForPositiveValues); + } else if (value < -nativeZeroThreshold) { + nativeBucketCreated = addToNativeBucket(-value, nativeBucketsForNegativeValues); + } else { + nativeZeroCount.add(1); + } + } + sum.add(value); + count + .increment(); // must be the last step, because count is used to signal that the operation + // is complete. + if (!fromBuffer) { + // maybeResetOrScaleDown will switch to the buffer, + // which won't work if we are currently still processing observations from the buffer. + // The reason is that before switching to the buffer we wait for all pending observations to + // be counted. + // If we do this while still applying observations from the buffer, the pending observations + // from + // the buffer will never be counted, and the buffer.run() method will wait forever. + maybeResetOrScaleDown(value, nativeBucketCreated); + } + } - private boolean addToNativeBucket(double value, ConcurrentHashMap buckets) { - boolean newBucketCreated = false; - int bucketIndex; - if (Double.isInfinite(value)) { - bucketIndex = findBucketIndex(Double.MAX_VALUE) + 1; + private HistogramSnapshot.HistogramDataPointSnapshot collect(Labels labels) { + Exemplars exemplars = exemplarSampler != null ? exemplarSampler.collect() : Exemplars.EMPTY; + return buffer.run( + expectedCount -> count.sum() == expectedCount, + () -> { + if (classicUpperBounds.length == 0) { + // native only + return new HistogramSnapshot.HistogramDataPointSnapshot( + nativeSchema, + nativeZeroCount.sum(), + nativeZeroThreshold, + toBucketList(nativeBucketsForPositiveValues), + toBucketList(nativeBucketsForNegativeValues), + sum.sum(), + labels, + exemplars, + createdTimeMillis); + } else if (Histogram.this.nativeInitialSchema == CLASSIC_HISTOGRAM) { + // classic only + return new HistogramSnapshot.HistogramDataPointSnapshot( + ClassicHistogramBuckets.of(classicUpperBounds, classicBuckets), + sum.sum(), + labels, + exemplars, + createdTimeMillis); } else { - bucketIndex = findBucketIndex(value); - } - LongAdder bucketCount = buckets.get(bucketIndex); - if (bucketCount == null) { - LongAdder newBucketCount = new LongAdder(); - LongAdder existingBucketCount = buckets.putIfAbsent(bucketIndex, newBucketCount); - if (existingBucketCount == null) { - newBucketCreated = true; - bucketCount = newBucketCount; - } else { - bucketCount = existingBucketCount; - } - } - bucketCount.increment(); - return newBucketCreated; - } + // hybrid: classic and native + return new HistogramSnapshot.HistogramDataPointSnapshot( + ClassicHistogramBuckets.of(classicUpperBounds, classicBuckets), + nativeSchema, + nativeZeroCount.sum(), + nativeZeroThreshold, + toBucketList(nativeBucketsForPositiveValues), + toBucketList(nativeBucketsForNegativeValues), + sum.sum(), + labels, + exemplars, + createdTimeMillis); + } + }, + v -> doObserve(v, true)); + } - private int findBucketIndex(double value) { - // Preconditions: - // Double.isNan(value) is false; - // Double.isInfinite(value) is false; - // value > 0 - // --- - // The following is a naive implementation of C's frexp() function. - // Performance can be improved by using the internal Bit representation of floating point numbers. - // More info on the Bit representation of floating point numbers: - // https://stackoverflow.com/questions/8341395/what-is-a-subnormal-floating-point-number - // Result: value == frac * 2^exp where frac in [0.5, 1). - double frac = value; - int exp = 0; - while (frac < 0.5) { - frac *= 2.0; - exp--; - } - while (frac >= 1.0) { - frac /= 2.0; - exp++; - } - // end of frexp() + private boolean addToNativeBucket(double value, ConcurrentHashMap buckets) { + boolean newBucketCreated = false; + int bucketIndex; + if (Double.isInfinite(value)) { + bucketIndex = findBucketIndex(Double.MAX_VALUE) + 1; + } else { + bucketIndex = findBucketIndex(value); + } + LongAdder bucketCount = buckets.get(bucketIndex); + if (bucketCount == null) { + LongAdder newBucketCount = new LongAdder(); + LongAdder existingBucketCount = buckets.putIfAbsent(bucketIndex, newBucketCount); + if (existingBucketCount == null) { + newBucketCreated = true; + bucketCount = newBucketCount; + } else { + bucketCount = existingBucketCount; + } + } + bucketCount.increment(); + return newBucketCreated; + } - if (nativeSchema >= 1) { - return findIndex(NATIVE_BOUNDS[nativeSchema - 1], frac) + (exp - 1) * NATIVE_BOUNDS[nativeSchema - 1].length; - } else { - int bucketIndex = exp; - if (frac == 0.5) { - bucketIndex--; - } - int offset = (1 << -nativeSchema) - 1; - bucketIndex = (bucketIndex + offset) >> -nativeSchema; - return bucketIndex; - } - } + private int findBucketIndex(double value) { + // Preconditions: + // Double.isNan(value) is false; + // Double.isInfinite(value) is false; + // value > 0 + // --- + // The following is a naive implementation of C's frexp() function. + // Performance can be improved by using the internal Bit representation of floating point + // numbers. + // More info on the Bit representation of floating point numbers: + // https://stackoverflow.com/questions/8341395/what-is-a-subnormal-floating-point-number + // Result: value == frac * 2^exp where frac in [0.5, 1). + double frac = value; + int exp = 0; + while (frac < 0.5) { + frac *= 2.0; + exp--; + } + while (frac >= 1.0) { + frac /= 2.0; + exp++; + } + // end of frexp() + + if (nativeSchema >= 1) { + return findIndex(NATIVE_BOUNDS[nativeSchema - 1], frac) + + (exp - 1) * NATIVE_BOUNDS[nativeSchema - 1].length; + } else { + int bucketIndex = exp; + if (frac == 0.5) { + bucketIndex--; + } + int offset = (1 << -nativeSchema) - 1; + bucketIndex = (bucketIndex + offset) >> -nativeSchema; + return bucketIndex; + } + } - private int findIndex(double[] bounds, double frac) { - // The following is the equivalent of golang's sort.SearchFloat64s(bounds, frac) - // See https://pkg.go.dev/sort#SearchFloat64s - int first = 0; - int last = bounds.length - 1; - while (first <= last) { - int mid = (first + last) / 2; - if (bounds[mid] == frac) { - return mid; - } else if (bounds[mid] < frac) { - first = mid + 1; - } else { - last = mid - 1; - } - } - return last + 1; - } + private int findIndex(double[] bounds, double frac) { + // The following is the equivalent of golang's sort.SearchFloat64s(bounds, frac) + // See https://pkg.go.dev/sort#SearchFloat64s + int first = 0; + int last = bounds.length - 1; + while (first <= last) { + int mid = (first + last) / 2; + if (bounds[mid] == frac) { + return mid; + } else if (bounds[mid] < frac) { + first = mid + 1; + } else { + last = mid - 1; + } + } + return last + 1; + } - /** - * Makes sure that the number of native buckets does not exceed nativeMaxBuckets. - *

      - *
    • If the histogram has already been scaled down (nativeSchema < initialSchema) - * reset after resetIntervalExpired to get back to the original schema.
    • - *
    • If a new bucket was created and we now exceed nativeMaxBuckets - * run maybeScaleDown() to scale down
    • - *
    - */ - private void maybeResetOrScaleDown(double value, boolean nativeBucketCreated) { - AtomicBoolean wasReset = new AtomicBoolean(false); - if (resetDurationExpired && nativeSchema < nativeInitialSchema) { - // If nativeSchema < initialNativeSchema the histogram has been scaled down. - // So if resetDurationExpired we will reset it to restore the original native schema. - buffer.run(expectedCount -> count.sum() == expectedCount, - () -> { - if (maybeReset()) { - wasReset.set(true); - } - return null; - }, - v -> doObserve(v, true)); - } else if (nativeBucketCreated) { - // If a new bucket was created we need to check if nativeMaxBuckets is exceeded - // and scale down if so. - maybeScaleDown(wasReset); - } - if (wasReset.get()) { - // We just discarded the newly observed value. Observe it again. - if (!buffer.append(value)) { - doObserve(value, true); - } - } - } + /** + * Makes sure that the number of native buckets does not exceed nativeMaxBuckets. + * + *
      + *
    • If the histogram has already been scaled down (nativeSchema < initialSchema) reset + * after resetIntervalExpired to get back to the original schema. + *
    • If a new bucket was created and we now exceed nativeMaxBuckets run maybeScaleDown() to + * scale down + *
    + */ + private void maybeResetOrScaleDown(double value, boolean nativeBucketCreated) { + AtomicBoolean wasReset = new AtomicBoolean(false); + if (resetDurationExpired && nativeSchema < nativeInitialSchema) { + // If nativeSchema < initialNativeSchema the histogram has been scaled down. + // So if resetDurationExpired we will reset it to restore the original native schema. + buffer.run( + expectedCount -> count.sum() == expectedCount, + () -> { + if (maybeReset()) { + wasReset.set(true); + } + return null; + }, + v -> doObserve(v, true)); + } else if (nativeBucketCreated) { + // If a new bucket was created we need to check if nativeMaxBuckets is exceeded + // and scale down if so. + maybeScaleDown(wasReset); + } + if (wasReset.get()) { + // We just discarded the newly observed value. Observe it again. + if (!buffer.append(value)) { + doObserve(value, true); + } + } + } - private void maybeScaleDown(AtomicBoolean wasReset) { - if (nativeMaxBuckets == 0 || nativeSchema == -4) { - return; - } - int numberOfBuckets = nativeBucketsForPositiveValues.size() + nativeBucketsForNegativeValues.size(); - if (numberOfBuckets <= nativeMaxBuckets) { - return; - } - buffer.run( - expectedCount -> count.sum() == expectedCount, - () -> { - // Now we are in the synchronized block while new observations go into the buffer. - // Check again if we need to limit the bucket size, because another thread might - // have limited it in the meantime. - int nBuckets = nativeBucketsForPositiveValues.size() + nativeBucketsForNegativeValues.size(); - if (nBuckets <= nativeMaxBuckets || nativeSchema == -4) { - return null; - } - if (maybeReset()) { - wasReset.set(true); - return null; - } - if (maybeWidenZeroBucket()) { - return null; - } - doubleBucketWidth(); - return null; - }, - v -> doObserve(v, true) - ); - } + private void maybeScaleDown(AtomicBoolean wasReset) { + if (nativeMaxBuckets == 0 || nativeSchema == -4) { + return; + } + int numberOfBuckets = + nativeBucketsForPositiveValues.size() + nativeBucketsForNegativeValues.size(); + if (numberOfBuckets <= nativeMaxBuckets) { + return; + } + buffer.run( + expectedCount -> count.sum() == expectedCount, + () -> { + // Now we are in the synchronized block while new observations go into the buffer. + // Check again if we need to limit the bucket size, because another thread might + // have limited it in the meantime. + int nBuckets = + nativeBucketsForPositiveValues.size() + nativeBucketsForNegativeValues.size(); + if (nBuckets <= nativeMaxBuckets || nativeSchema == -4) { + return null; + } + if (maybeReset()) { + wasReset.set(true); + return null; + } + if (maybeWidenZeroBucket()) { + return null; + } + doubleBucketWidth(); + return null; + }, + v -> doObserve(v, true)); + } - // maybeReset is called in the synchronized block while new observations go into the buffer. - private boolean maybeReset() { - if (!resetDurationExpired) { - return false; - } - resetDurationExpired = false; - buffer.reset(); - nativeBucketsForPositiveValues.clear(); - nativeBucketsForNegativeValues.clear(); - nativeZeroCount.reset(); - count.reset(); - sum.reset(); - for (int i = 0; i < classicBuckets.length; i++) { - classicBuckets[i].reset(); - } - nativeZeroThreshold = nativeMinZeroThreshold; - nativeSchema = Histogram.this.nativeInitialSchema; - createdTimeMillis = System.currentTimeMillis(); - if (exemplarSampler != null) { - exemplarSampler.reset(); - } - maybeScheduleNextReset(); - return true; - } + // maybeReset is called in the synchronized block while new observations go into the buffer. + private boolean maybeReset() { + if (!resetDurationExpired) { + return false; + } + resetDurationExpired = false; + buffer.reset(); + nativeBucketsForPositiveValues.clear(); + nativeBucketsForNegativeValues.clear(); + nativeZeroCount.reset(); + count.reset(); + sum.reset(); + for (int i = 0; i < classicBuckets.length; i++) { + classicBuckets[i].reset(); + } + nativeZeroThreshold = nativeMinZeroThreshold; + nativeSchema = Histogram.this.nativeInitialSchema; + createdTimeMillis = System.currentTimeMillis(); + if (exemplarSampler != null) { + exemplarSampler.reset(); + } + maybeScheduleNextReset(); + return true; + } - // maybeWidenZeroBucket is called in the synchronized block while new observations go into the buffer. - private boolean maybeWidenZeroBucket() { - if (nativeZeroThreshold >= nativeMaxZeroThreshold) { - return false; - } - int smallestIndex = findSmallestIndex(nativeBucketsForPositiveValues); - int smallestNegativeIndex = findSmallestIndex(nativeBucketsForNegativeValues); - if (smallestNegativeIndex < smallestIndex) { - smallestIndex = smallestNegativeIndex; - } - if (smallestIndex == Integer.MAX_VALUE) { - return false; - } - double newZeroThreshold = nativeBucketIndexToUpperBound(nativeSchema, smallestIndex); - if (newZeroThreshold > nativeMaxZeroThreshold) { - return false; - } - mergeWithZeroBucket(smallestIndex, nativeBucketsForPositiveValues); - mergeWithZeroBucket(smallestIndex, nativeBucketsForNegativeValues); - nativeZeroThreshold = newZeroThreshold; - return true; - } + // maybeWidenZeroBucket is called in the synchronized block while new observations go into the + // buffer. + private boolean maybeWidenZeroBucket() { + if (nativeZeroThreshold >= nativeMaxZeroThreshold) { + return false; + } + int smallestIndex = findSmallestIndex(nativeBucketsForPositiveValues); + int smallestNegativeIndex = findSmallestIndex(nativeBucketsForNegativeValues); + if (smallestNegativeIndex < smallestIndex) { + smallestIndex = smallestNegativeIndex; + } + if (smallestIndex == Integer.MAX_VALUE) { + return false; + } + double newZeroThreshold = nativeBucketIndexToUpperBound(nativeSchema, smallestIndex); + if (newZeroThreshold > nativeMaxZeroThreshold) { + return false; + } + mergeWithZeroBucket(smallestIndex, nativeBucketsForPositiveValues); + mergeWithZeroBucket(smallestIndex, nativeBucketsForNegativeValues); + nativeZeroThreshold = newZeroThreshold; + return true; + } - private void mergeWithZeroBucket(int index, Map buckets) { - LongAdder count = buckets.remove(index); - if (count != null) { - nativeZeroCount.add(count.sum()); - } - } + private void mergeWithZeroBucket(int index, Map buckets) { + LongAdder count = buckets.remove(index); + if (count != null) { + nativeZeroCount.add(count.sum()); + } + } - private double nativeBucketIndexToUpperBound(int schema, int index) { - double result = calcUpperBound(schema, index); - if (Double.isInfinite(result)) { - // The last bucket boundary should always be MAX_VALUE, so that the +Inf bucket counts only - // actual +Inf observations. - // However, MAX_VALUE is not a natural bucket boundary, so we introduce MAX_VALUE - // as an artificial boundary before +Inf. - double previousBucketBoundary = calcUpperBound(schema, index - 1); - if (Double.isFinite(previousBucketBoundary) && previousBucketBoundary < Double.MAX_VALUE) { - return Double.MAX_VALUE; - } - } - return result; - } + private double nativeBucketIndexToUpperBound(int schema, int index) { + double result = calcUpperBound(schema, index); + if (Double.isInfinite(result)) { + // The last bucket boundary should always be MAX_VALUE, so that the +Inf bucket counts only + // actual +Inf observations. + // However, MAX_VALUE is not a natural bucket boundary, so we introduce MAX_VALUE + // as an artificial boundary before +Inf. + double previousBucketBoundary = calcUpperBound(schema, index - 1); + if (Double.isFinite(previousBucketBoundary) && previousBucketBoundary < Double.MAX_VALUE) { + return Double.MAX_VALUE; + } + } + return result; + } - private double calcUpperBound(int schema, int index) { - // The actual formula is: - // --- - // base := 2^(2^-schema); - // upperBound := base^index; - // --- - // The following implementation reduces the numerical error for index > 0. - // It's not very efficient. We should refactor and use an algorithm as in client_golang's getLe() - double factor = 1.0; - while (index > 0) { - if (index % 2 == 0) { - index /= 2; - schema -= 1; - } else { - index -= 1; - factor *= Math.pow(2, Math.pow(2, -schema)); - } - } - return factor * Math.pow(2, index * Math.pow(2, -schema)); - } + private double calcUpperBound(int schema, int index) { + // The actual formula is: + // --- + // base := 2^(2^-schema); + // upperBound := base^index; + // --- + // The following implementation reduces the numerical error for index > 0. + // It's not very efficient. We should refactor and use an algorithm as in client_golang's + // getLe() + double factor = 1.0; + while (index > 0) { + if (index % 2 == 0) { + index /= 2; + schema -= 1; + } else { + index -= 1; + factor *= Math.pow(2, Math.pow(2, -schema)); + } + } + return factor * Math.pow(2, index * Math.pow(2, -schema)); + } - private int findSmallestIndex(Map nativeBuckets) { - int result = Integer.MAX_VALUE; - for (int key : nativeBuckets.keySet()) { - if (key < result) { - result = key; - } - } - return result; + private int findSmallestIndex(Map nativeBuckets) { + int result = Integer.MAX_VALUE; + for (int key : nativeBuckets.keySet()) { + if (key < result) { + result = key; } + } + return result; + } - // doubleBucketWidth is called in the synchronized block while new observations go into the buffer. - private void doubleBucketWidth() { - doubleBucketWidth(nativeBucketsForPositiveValues); - doubleBucketWidth(nativeBucketsForNegativeValues); - nativeSchema--; - } + // doubleBucketWidth is called in the synchronized block while new observations go into the + // buffer. + private void doubleBucketWidth() { + doubleBucketWidth(nativeBucketsForPositiveValues); + doubleBucketWidth(nativeBucketsForNegativeValues); + nativeSchema--; + } - private void doubleBucketWidth(Map buckets) { - int[] keys = new int[buckets.size()]; - long[] values = new long[keys.length]; - int i = 0; - for (Map.Entry entry : buckets.entrySet()) { - keys[i] = entry.getKey(); - values[i] = entry.getValue().sum(); - i++; - } - buckets.clear(); - for (i = 0; i < keys.length; i++) { - int index = (keys[i] + 1) / 2; - LongAdder count = buckets.get(index); - if (count == null) { - count = new LongAdder(); - buckets.put(index, count); - } - count.add(values[i]); - } - } + private void doubleBucketWidth(Map buckets) { + int[] keys = new int[buckets.size()]; + long[] values = new long[keys.length]; + int i = 0; + for (Map.Entry entry : buckets.entrySet()) { + keys[i] = entry.getKey(); + values[i] = entry.getValue().sum(); + i++; + } + buckets.clear(); + for (i = 0; i < keys.length; i++) { + int index = (keys[i] + 1) / 2; + LongAdder count = buckets.get(index); + if (count == null) { + count = new LongAdder(); + buckets.put(index, count); + } + count.add(values[i]); + } + } - private NativeHistogramBuckets toBucketList(ConcurrentHashMap map) { - int[] bucketIndexes = new int[map.size()]; - long[] counts = new long[map.size()]; - int i = 0; - for (Map.Entry entry : map.entrySet()) { - bucketIndexes[i] = entry.getKey(); - counts[i] = entry.getValue().sum(); - i++; - } - return NativeHistogramBuckets.of(bucketIndexes, counts); - } + private NativeHistogramBuckets toBucketList(ConcurrentHashMap map) { + int[] bucketIndexes = new int[map.size()]; + long[] counts = new long[map.size()]; + int i = 0; + for (Map.Entry entry : map.entrySet()) { + bucketIndexes[i] = entry.getKey(); + counts[i] = entry.getValue().sum(); + i++; + } + return NativeHistogramBuckets.of(bucketIndexes, counts); + } - private void maybeScheduleNextReset() { - if (nativeResetDurationSeconds > 0) { - Scheduler.schedule(() -> resetDurationExpired = true, nativeResetDurationSeconds, TimeUnit.SECONDS); - } - } + private void maybeScheduleNextReset() { + if (nativeResetDurationSeconds > 0) { + Scheduler.schedule( + () -> resetDurationExpired = true, nativeResetDurationSeconds, TimeUnit.SECONDS); + } } + } + + /** {@inheritDoc} */ + @Override + public HistogramSnapshot collect() { + return (HistogramSnapshot) super.collect(); + } + + @Override + protected HistogramSnapshot collect(List labels, List metricData) { + List data = new ArrayList<>(labels.size()); + for (int i = 0; i < labels.size(); i++) { + data.add(metricData.get(i).collect(labels.get(i))); + } + return new HistogramSnapshot(getMetadata(), data); + } + + @Override + protected DataPoint newDataPoint() { + return new DataPoint(); + } + + static { + // See bounds in client_golang's histogram implementation. + NATIVE_BOUNDS = new double[8][]; + for (int schema = 1; schema <= 8; schema++) { + NATIVE_BOUNDS[schema - 1] = new double[1 << schema]; + NATIVE_BOUNDS[schema - 1][0] = 0.5; + // https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto#L501 + double base = Math.pow(2, Math.pow(2, -schema)); + for (int i = 1; i < NATIVE_BOUNDS[schema - 1].length; i++) { + if (i % 2 == 0 && schema > 1) { + // Use previously calculated value for increased precision, see comment in client_golang's + // implementation. + NATIVE_BOUNDS[schema - 1][i] = NATIVE_BOUNDS[schema - 2][i / 2]; + } else { + NATIVE_BOUNDS[schema - 1][i] = NATIVE_BOUNDS[schema - 1][i - 1] * base; + } + } + } + } + + public static Builder builder() { + return new Builder(PrometheusProperties.get()); + } + + public static Builder builder(PrometheusProperties config) { + return new Builder(config); + } + + public static class Builder extends StatefulMetric.Builder { + + public static final double[] DEFAULT_CLASSIC_UPPER_BOUNDS = + new double[] {.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10}; + private final double DEFAULT_NATIVE_MIN_ZERO_THRESHOLD = Math.pow(2.0, -128); + private final double DEFAULT_NATIVE_MAX_ZERO_THRESHOLD = Math.pow(2.0, -128); + private final int DEFAULT_NATIVE_INITIAL_SCHEMA = 5; + private final int DEFAULT_NATIVE_MAX_NUMBER_OF_BUCKETS = 160; + private final long DEFAULT_NATIVE_RESET_DURATION_SECONDS = 0; // 0 means no reset + + private Boolean nativeOnly; + private Boolean classicOnly; + private double[] classicUpperBounds; + private Integer nativeInitialSchema; + private Double nativeMaxZeroThreshold; + private Double nativeMinZeroThreshold; + private Integer nativeMaxNumberOfBuckets; + private Long nativeResetDurationSeconds; - /** - * {@inheritDoc} - */ @Override - public HistogramSnapshot collect() { - return (HistogramSnapshot) super.collect(); + public Histogram build() { + return new Histogram(this, properties); } @Override - protected HistogramSnapshot collect(List labels, List metricData) { - List data = new ArrayList<>(labels.size()); - for (int i = 0; i < labels.size(); i++) { - data.add(metricData.get(i).collect(labels.get(i))); - } - return new HistogramSnapshot(getMetadata(), data); + protected MetricsProperties toProperties() { + return MetricsProperties.builder() + .exemplarsEnabled(exemplarsEnabled) + .histogramNativeOnly(nativeOnly) + .histogramClassicOnly(classicOnly) + .histogramClassicUpperBounds(classicUpperBounds) + .histogramNativeInitialSchema(nativeInitialSchema) + .histogramNativeMinZeroThreshold(nativeMinZeroThreshold) + .histogramNativeMaxZeroThreshold(nativeMaxZeroThreshold) + .histogramNativeMaxNumberOfBuckets(nativeMaxNumberOfBuckets) + .histogramNativeResetDurationSeconds(nativeResetDurationSeconds) + .build(); } + /** Default properties for histogram metrics. */ @Override - protected DataPoint newDataPoint() { - return new DataPoint(); - } - - static { - // See bounds in client_golang's histogram implementation. - NATIVE_BOUNDS = new double[8][]; - for (int schema = 1; schema <= 8; schema++) { - NATIVE_BOUNDS[schema - 1] = new double[1 << schema]; - NATIVE_BOUNDS[schema - 1][0] = 0.5; - // https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto#L501 - double base = Math.pow(2, Math.pow(2, -schema)); - for (int i = 1; i < NATIVE_BOUNDS[schema - 1].length; i++) { - if (i % 2 == 0 && schema > 1) { - // Use previously calculated value for increased precision, see comment in client_golang's implementation. - NATIVE_BOUNDS[schema - 1][i] = NATIVE_BOUNDS[schema - 2][i / 2]; - } else { - NATIVE_BOUNDS[schema - 1][i] = NATIVE_BOUNDS[schema - 1][i - 1] * base; - } - } - } + public MetricsProperties getDefaultProperties() { + return MetricsProperties.builder() + .exemplarsEnabled(true) + .histogramNativeOnly(false) + .histogramClassicOnly(false) + .histogramClassicUpperBounds(DEFAULT_CLASSIC_UPPER_BOUNDS) + .histogramNativeInitialSchema(DEFAULT_NATIVE_INITIAL_SCHEMA) + .histogramNativeMinZeroThreshold(DEFAULT_NATIVE_MIN_ZERO_THRESHOLD) + .histogramNativeMaxZeroThreshold(DEFAULT_NATIVE_MAX_ZERO_THRESHOLD) + .histogramNativeMaxNumberOfBuckets(DEFAULT_NATIVE_MAX_NUMBER_OF_BUCKETS) + .histogramNativeResetDurationSeconds(DEFAULT_NATIVE_RESET_DURATION_SECONDS) + .build(); } - public static Builder builder() { - return new Builder(PrometheusProperties.get()); + private Builder(PrometheusProperties config) { + super(Collections.singletonList("le"), config); } - public static Builder builder(PrometheusProperties config) { - return new Builder(config); + /** + * Use the native histogram representation only, i.e. don't maintain classic histogram buckets. + * See {@link Histogram} for more info. + */ + public Builder nativeOnly() { + if (Boolean.TRUE.equals(classicOnly)) { + throw new IllegalArgumentException("Cannot call nativeOnly() after calling classicOnly()."); + } + nativeOnly = true; + return this; } - public static class Builder extends StatefulMetric.Builder { - - public static final double[] DEFAULT_CLASSIC_UPPER_BOUNDS = new double[]{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10}; - private final double DEFAULT_NATIVE_MIN_ZERO_THRESHOLD = Math.pow(2.0, -128); - private final double DEFAULT_NATIVE_MAX_ZERO_THRESHOLD = Math.pow(2.0, -128); - private final int DEFAULT_NATIVE_INITIAL_SCHEMA = 5; - private final int DEFAULT_NATIVE_MAX_NUMBER_OF_BUCKETS = 160; - private final long DEFAULT_NATIVE_RESET_DURATION_SECONDS = 0; // 0 means no reset - - private Boolean nativeOnly; - private Boolean classicOnly; - private double[] classicUpperBounds; - private Integer nativeInitialSchema; - private Double nativeMaxZeroThreshold; - private Double nativeMinZeroThreshold; - private Integer nativeMaxNumberOfBuckets; - private Long nativeResetDurationSeconds; - - @Override - public Histogram build() { - return new Histogram(this, properties); - } - - @Override - protected MetricsProperties toProperties() { - return MetricsProperties.builder() - .exemplarsEnabled(exemplarsEnabled) - .histogramNativeOnly(nativeOnly) - .histogramClassicOnly(classicOnly) - .histogramClassicUpperBounds(classicUpperBounds) - .histogramNativeInitialSchema(nativeInitialSchema) - .histogramNativeMinZeroThreshold(nativeMinZeroThreshold) - .histogramNativeMaxZeroThreshold(nativeMaxZeroThreshold) - .histogramNativeMaxNumberOfBuckets(nativeMaxNumberOfBuckets) - .histogramNativeResetDurationSeconds(nativeResetDurationSeconds) - .build(); - } - - /** - * Default properties for histogram metrics. - */ - @Override - public MetricsProperties getDefaultProperties() { - return MetricsProperties.builder() - .exemplarsEnabled(true) - .histogramNativeOnly(false) - .histogramClassicOnly(false) - .histogramClassicUpperBounds(DEFAULT_CLASSIC_UPPER_BOUNDS) - .histogramNativeInitialSchema(DEFAULT_NATIVE_INITIAL_SCHEMA) - .histogramNativeMinZeroThreshold(DEFAULT_NATIVE_MIN_ZERO_THRESHOLD) - .histogramNativeMaxZeroThreshold(DEFAULT_NATIVE_MAX_ZERO_THRESHOLD) - .histogramNativeMaxNumberOfBuckets(DEFAULT_NATIVE_MAX_NUMBER_OF_BUCKETS) - .histogramNativeResetDurationSeconds(DEFAULT_NATIVE_RESET_DURATION_SECONDS) - .build(); - } - - private Builder(PrometheusProperties config) { - super(Collections.singletonList("le"), config); - } - - /** - * Use the native histogram representation only, i.e. don't maintain classic histogram buckets. - * See {@link Histogram} for more info. - */ - public Builder nativeOnly() { - if (Boolean.TRUE.equals(classicOnly)) { - throw new IllegalArgumentException("Cannot call nativeOnly() after calling classicOnly()."); - } - nativeOnly = true; - return this; - } - - /** - * Use the classic histogram representation only, i.e. don't maintain native histogram buckets. - * See {@link Histogram} for more info. - */ - public Builder classicOnly() { - if (Boolean.TRUE.equals(nativeOnly)) { - throw new IllegalArgumentException("Cannot call classicOnly() after calling nativeOnly()."); - } - classicOnly = true; - return this; - } - + /** + * Use the classic histogram representation only, i.e. don't maintain native histogram buckets. + * See {@link Histogram} for more info. + */ + public Builder classicOnly() { + if (Boolean.TRUE.equals(nativeOnly)) { + throw new IllegalArgumentException("Cannot call classicOnly() after calling nativeOnly()."); + } + classicOnly = true; + return this; + } - /** - * Set the upper bounds for the classic histogram buckets. - * Default is {@link Builder#DEFAULT_CLASSIC_UPPER_BOUNDS}. - * If the +Inf bucket is missing it will be added. - * If upperBounds contains duplicates the duplicates will be removed. - */ - public Builder classicUpperBounds(double... upperBounds) { - this.classicUpperBounds = upperBounds; - for (double bound : upperBounds) { - if (Double.isNaN(bound)) { - throw new IllegalArgumentException("Cannot use NaN as upper bound for a histogram"); - } - } - return this; - } + /** + * Set the upper bounds for the classic histogram buckets. Default is {@link + * Builder#DEFAULT_CLASSIC_UPPER_BOUNDS}. If the +Inf bucket is missing it will be added. If + * upperBounds contains duplicates the duplicates will be removed. + */ + public Builder classicUpperBounds(double... upperBounds) { + this.classicUpperBounds = upperBounds; + for (double bound : upperBounds) { + if (Double.isNaN(bound)) { + throw new IllegalArgumentException("Cannot use NaN as upper bound for a histogram"); + } + } + return this; + } - /** - * Create classic histogram buckets with linear bucket boundaries. - *

    - * Example: {@code withClassicLinearBuckets(1.0, 0.5, 10)} creates bucket boundaries - * {@code [[1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5]}. - * - * @param start is the first bucket boundary - * @param width is the width of each bucket - * @param count is the total number of buckets, including start - */ - public Builder classicLinearUpperBounds(double start, double width, int count) { - this.classicUpperBounds = new double[count]; - // Use BigDecimal to avoid weird bucket boundaries like 0.7000000000000001. - BigDecimal s = new BigDecimal(Double.toString(start)); - BigDecimal w = new BigDecimal(Double.toString(width)); - for (int i = 0; i < count; i++) { - classicUpperBounds[i] = s.add(w.multiply(new BigDecimal(i))).doubleValue(); - } - return this; - } + /** + * Create classic histogram buckets with linear bucket boundaries. + * + *

    Example: {@code withClassicLinearBuckets(1.0, 0.5, 10)} creates bucket boundaries {@code + * [[1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5]}. + * + * @param start is the first bucket boundary + * @param width is the width of each bucket + * @param count is the total number of buckets, including start + */ + public Builder classicLinearUpperBounds(double start, double width, int count) { + this.classicUpperBounds = new double[count]; + // Use BigDecimal to avoid weird bucket boundaries like 0.7000000000000001. + BigDecimal s = new BigDecimal(Double.toString(start)); + BigDecimal w = new BigDecimal(Double.toString(width)); + for (int i = 0; i < count; i++) { + classicUpperBounds[i] = s.add(w.multiply(new BigDecimal(i))).doubleValue(); + } + return this; + } - /** - * Create classic histogram bucxkets with exponential boundaries. - *

    - * Example: {@code withClassicExponentialBuckets(1.0, 2.0, 10)} creates bucket bounaries - * {@code [1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0]} - * - * @param start is the first bucket boundary - * @param factor growth factor - * @param count total number of buckets, including start - */ - public Builder classicExponentialUpperBounds(double start, double factor, int count) { - classicUpperBounds = new double[count]; - for (int i = 0; i < count; i++) { - classicUpperBounds[i] = start * Math.pow(factor, i); - } - return this; - } + /** + * Create classic histogram bucxkets with exponential boundaries. + * + *

    Example: {@code withClassicExponentialBuckets(1.0, 2.0, 10)} creates bucket bounaries + * {@code [1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0]} + * + * @param start is the first bucket boundary + * @param factor growth factor + * @param count total number of buckets, including start + */ + public Builder classicExponentialUpperBounds(double start, double factor, int count) { + classicUpperBounds = new double[count]; + for (int i = 0; i < count; i++) { + classicUpperBounds[i] = start * Math.pow(factor, i); + } + return this; + } - /** - * The schema is a number in [-4, 8] defining the resolution of the native histogram. - * Default is {@link Builder#DEFAULT_NATIVE_INITIAL_SCHEMA}. - *

    - * The higher the schema, the finer the resolution. - * Schema is Prometheus terminology. In OpenTelemetry it's called "scale". - *

    - * Note that the schema for a histogram may be automatically decreased at runtime if the number - * of native histogram buckets exceeds {@link #nativeMaxNumberOfBuckets(int)}. - *

    - * The following table shows: - *

      - *
    • factor: The growth factor for bucket boundaries, i.e. next bucket boundary = growth factor * previous bucket boundary. - *
    • max quantile error: The maximum error for quantiles calculated using the Prometheus histogram_quantile() function, relative to the observed value, assuming harmonic mean. - *
    - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
    max quantile errors for different growth factors
    schemafactormax quantile error
    -465.53699%
    -325699%
    -21688%
    -1460%
    0233%
    11.4142...17%
    21.1892...9%
    31.1090...4%
    41.0442...2%
    51.0218...1%
    61.0108...0.5%
    71.0054...0.3%
    81.0027...0.1%
    - */ - public Builder nativeInitialSchema(int nativeSchema) { - if (nativeSchema < -4 || nativeSchema > 8) { - throw new IllegalArgumentException("Unsupported native histogram schema " + nativeSchema + ": expecting -4 <= schema <= 8."); - } - this.nativeInitialSchema = nativeSchema; - return this; - } + /** + * The schema is a number in [-4, 8] defining the resolution of the native histogram. Default is + * {@link Builder#DEFAULT_NATIVE_INITIAL_SCHEMA}. + * + *

    The higher the schema, the finer the resolution. Schema is Prometheus terminology. In + * OpenTelemetry it's called "scale". + * + *

    Note that the schema for a histogram may be automatically decreased at runtime if the + * number of native histogram buckets exceeds {@link #nativeMaxNumberOfBuckets(int)}. + * + *

    The following table shows: + * + *

      + *
    • factor: The growth factor for bucket boundaries, i.e. next bucket boundary = growth + * factor * previous bucket boundary. + *
    • max quantile error: The maximum error for quantiles calculated using the Prometheus + * histogram_quantile() function, relative to the observed value, assuming harmonic mean. + *
    + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    max quantile errors for different growth factors
    schemafactormax quantile error
    -465.53699%
    -325699%
    -21688%
    -1460%
    0233%
    11.4142...17%
    21.1892...9%
    31.1090...4%
    41.0442...2%
    51.0218...1%
    61.0108...0.5%
    71.0054...0.3%
    81.0027...0.1%
    + */ + public Builder nativeInitialSchema(int nativeSchema) { + if (nativeSchema < -4 || nativeSchema > 8) { + throw new IllegalArgumentException( + "Unsupported native histogram schema " + + nativeSchema + + ": expecting -4 <= schema <= 8."); + } + this.nativeInitialSchema = nativeSchema; + return this; + } - /** - * Native histogram buckets get smaller and smaller the closer they get to zero. - * To avoid wasting a lot of buckets for observations fluctuating around zero, we consider all - * values in [-zeroThreshold, +zeroThreshold] to be equal to zero. - *

    - * The zeroThreshold is initialized with minZeroThreshold, and will grow up to maxZeroThreshold if - * the number of native histogram buckets exceeds nativeMaxBuckets. - *

    - * Default is {@link Builder#DEFAULT_NATIVE_MAX_NUMBER_OF_BUCKETS}. - */ - public Builder nativeMaxZeroThreshold(double nativeMaxZeroThreshold) { - if (nativeMaxZeroThreshold < 0) { - throw new IllegalArgumentException("Illegal native max zero threshold " + nativeMaxZeroThreshold + ": must be >= 0"); - } - this.nativeMaxZeroThreshold = nativeMaxZeroThreshold; - return this; - } + /** + * Native histogram buckets get smaller and smaller the closer they get to zero. To avoid + * wasting a lot of buckets for observations fluctuating around zero, we consider all values in + * [-zeroThreshold, +zeroThreshold] to be equal to zero. + * + *

    The zeroThreshold is initialized with minZeroThreshold, and will grow up to + * maxZeroThreshold if the number of native histogram buckets exceeds nativeMaxBuckets. + * + *

    Default is {@link Builder#DEFAULT_NATIVE_MAX_NUMBER_OF_BUCKETS}. + */ + public Builder nativeMaxZeroThreshold(double nativeMaxZeroThreshold) { + if (nativeMaxZeroThreshold < 0) { + throw new IllegalArgumentException( + "Illegal native max zero threshold " + nativeMaxZeroThreshold + ": must be >= 0"); + } + this.nativeMaxZeroThreshold = nativeMaxZeroThreshold; + return this; + } - /** - * Native histogram buckets get smaller and smaller the closer they get to zero. - * To avoid wasting a lot of buckets for observations fluctuating around zero, we consider all - * values in [-zeroThreshold, +zeroThreshold] to be equal to zero. - *

    - * The zeroThreshold is initialized with minZeroThreshold, and will grow up to maxZeroThreshold if - * the number of native histogram buckets exceeds nativeMaxBuckets. - *

    - * Default is {@link Builder#DEFAULT_NATIVE_MIN_ZERO_THRESHOLD}. - */ - public Builder nativeMinZeroThreshold(double nativeMinZeroThreshold) { - if (nativeMinZeroThreshold < 0) { - throw new IllegalArgumentException("Illegal native min zero threshold " + nativeMinZeroThreshold + ": must be >= 0"); - } - this.nativeMinZeroThreshold = nativeMinZeroThreshold; - return this; - } + /** + * Native histogram buckets get smaller and smaller the closer they get to zero. To avoid + * wasting a lot of buckets for observations fluctuating around zero, we consider all values in + * [-zeroThreshold, +zeroThreshold] to be equal to zero. + * + *

    The zeroThreshold is initialized with minZeroThreshold, and will grow up to + * maxZeroThreshold if the number of native histogram buckets exceeds nativeMaxBuckets. + * + *

    Default is {@link Builder#DEFAULT_NATIVE_MIN_ZERO_THRESHOLD}. + */ + public Builder nativeMinZeroThreshold(double nativeMinZeroThreshold) { + if (nativeMinZeroThreshold < 0) { + throw new IllegalArgumentException( + "Illegal native min zero threshold " + nativeMinZeroThreshold + ": must be >= 0"); + } + this.nativeMinZeroThreshold = nativeMinZeroThreshold; + return this; + } - /** - * Limit the number of native buckets. - *

    - * If the number of native buckets exceeds the maximum, the {@link #nativeInitialSchema(int)} is decreased, - * i.e. the resolution of the histogram is decreased to reduce the number of buckets. - *

    - * Default is {@link Builder#DEFAULT_NATIVE_MAX_NUMBER_OF_BUCKETS}. - */ - public Builder nativeMaxNumberOfBuckets(int nativeMaxBuckets) { - this.nativeMaxNumberOfBuckets = nativeMaxBuckets; - return this; - } + /** + * Limit the number of native buckets. + * + *

    If the number of native buckets exceeds the maximum, the {@link #nativeInitialSchema(int)} + * is decreased, i.e. the resolution of the histogram is decreased to reduce the number of + * buckets. + * + *

    Default is {@link Builder#DEFAULT_NATIVE_MAX_NUMBER_OF_BUCKETS}. + */ + public Builder nativeMaxNumberOfBuckets(int nativeMaxBuckets) { + this.nativeMaxNumberOfBuckets = nativeMaxBuckets; + return this; + } - /** - * If the histogram needed to be scaled down because {@link #nativeMaxNumberOfBuckets(int)} was exceeded, - * reset the histogram after a certain time interval to go back to the original {@link #nativeInitialSchema(int)}. - *

    - * Reset means all values are set to zero. A good value might be 24h or 7d. - *

    - * Default is no reset. - */ - public Builder nativeResetDuration(long duration, TimeUnit unit) { - // TODO: reset interval isn't tested yet - if (duration <= 0) { - throw new IllegalArgumentException(duration + ": value > 0 expected"); - } - nativeResetDurationSeconds = unit.toSeconds(duration); - return this; - } + /** + * If the histogram needed to be scaled down because {@link #nativeMaxNumberOfBuckets(int)} was + * exceeded, reset the histogram after a certain time interval to go back to the original {@link + * #nativeInitialSchema(int)}. + * + *

    Reset means all values are set to zero. A good value might be 24h or 7d. + * + *

    Default is no reset. + */ + public Builder nativeResetDuration(long duration, TimeUnit unit) { + // TODO: reset interval isn't tested yet + if (duration <= 0) { + throw new IllegalArgumentException(duration + ": value > 0 expected"); + } + nativeResetDurationSeconds = unit.toSeconds(duration); + return this; + } - @Override - protected Builder self() { - return this; - } + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Info.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Info.java index 373e7a98b..49f8a1eb5 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Info.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Info.java @@ -4,7 +4,6 @@ import io.prometheus.metrics.model.snapshots.InfoSnapshot; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.Unit; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -13,6 +12,7 @@ /** * Info metric. Example: + * *

    {@code
      * Info info = Info.builder()
      *         .name("java_runtime_info")
    @@ -30,124 +30,143 @@
      */
     public class Info extends MetricWithFixedMetadata {
     
    -    private final Set labels = new CopyOnWriteArraySet<>();
    -
    -    private Info(Builder builder) {
    -        super(builder);
    +  private final Set labels = new CopyOnWriteArraySet<>();
    +
    +  private Info(Builder builder) {
    +    super(builder);
    +  }
    +
    +  /**
    +   * Set the info label values. This will replace any previous values, i.e. the info metric will
    +   * only have one data point after calling setLabelValues(). This is good for a metric like {@code
    +   * target_info} where you want only one single data point.
    +   */
    +  public void setLabelValues(String... labelValues) {
    +    if (labelValues.length != labelNames.length) {
    +      throw new IllegalArgumentException(
    +          getClass().getSimpleName()
    +              + " "
    +              + getMetadata().getName()
    +              + " was created with "
    +              + labelNames.length
    +              + " label names, but you called setLabelValues() with "
    +              + labelValues.length
    +              + " label values.");
         }
    -
    -    /**
    -     * Set the info label values. This will replace any previous values,
    -     * i.e. the info metric will only have one data point after calling setLabelValues().
    -     * This is good for a metric like {@code target_info} where you want only one single data point.
    -     */
    -    public void setLabelValues(String... labelValues) {
    -        if (labelValues.length != labelNames.length) {
    -            throw new IllegalArgumentException(getClass().getSimpleName() + " " + getMetadata().getName() + " was created with " + labelNames.length + " label names, but you called setLabelValues() with " + labelValues.length + " label values.");
    -        }
    -        Labels newLabels = Labels.of(labelNames, labelValues);
    -        labels.add(newLabels);
    -        labels.retainAll(Collections.singletonList(newLabels));
    +    Labels newLabels = Labels.of(labelNames, labelValues);
    +    labels.add(newLabels);
    +    labels.retainAll(Collections.singletonList(newLabels));
    +  }
    +
    +  /** Create an info data point with the given label values. */
    +  public void addLabelValues(String... labelValues) {
    +    if (labelValues.length != labelNames.length) {
    +      throw new IllegalArgumentException(
    +          getClass().getSimpleName()
    +              + " "
    +              + getMetadata().getName()
    +              + " was created with "
    +              + labelNames.length
    +              + " label names, but you called addLabelValues() with "
    +              + labelValues.length
    +              + " label values.");
    +    }
    +    labels.add(Labels.of(labelNames, labelValues));
    +  }
    +
    +  /** Remove the data point with the specified label values. */
    +  public void remove(String... labelValues) {
    +    if (labelValues.length != labelNames.length) {
    +      throw new IllegalArgumentException(
    +          getClass().getSimpleName()
    +              + " "
    +              + getMetadata().getName()
    +              + " was created with "
    +              + labelNames.length
    +              + " label names, but you called remove() with "
    +              + labelValues.length
    +              + " label values.");
         }
    +    Labels toBeRemoved = Labels.of(labelNames, labelValues);
    +    labels.remove(toBeRemoved);
    +  }
    +
    +  /** {@inheritDoc} */
    +  @Override
    +  public InfoSnapshot collect() {
    +    List data = new ArrayList<>(labels.size());
    +    if (labelNames.length == 0) {
    +      data.add(new InfoSnapshot.InfoDataPointSnapshot(constLabels));
    +    } else {
    +      for (Labels label : labels) {
    +        data.add(new InfoSnapshot.InfoDataPointSnapshot(label.merge(constLabels)));
    +      }
    +    }
    +    return new InfoSnapshot(getMetadata(), data);
    +  }
     
    -    /**
    -     * Create an info data point with the given label values.
    -     */
    -    public void addLabelValues(String... labelValues) {
    -        if (labelValues.length != labelNames.length) {
    -            throw new IllegalArgumentException(getClass().getSimpleName() + " " + getMetadata().getName() + " was created with " + labelNames.length + " label names, but you called addLabelValues() with " + labelValues.length + " label values.");
    -        }
    -        labels.add(Labels.of(labelNames, labelValues));
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
    +
    +  public static Builder builder(PrometheusProperties config) {
    +    return new Builder(config);
    +  }
    +
    +  public static class Builder extends MetricWithFixedMetadata.Builder {
    +
    +    private Builder(PrometheusProperties config) {
    +      super(Collections.emptyList(), config);
         }
     
         /**
    -     * Remove the data point with the specified label values.
    +     * The {@code _info} suffix will automatically be appended if it's missing.
    +     *
    +     * 
    {@code
    +     * Info info1 = Info.builder()
    +     *     .name("runtime_info")
    +     *     .build();
    +     * Info info2 = Info.builder()
    +     *     .name("runtime")
    +     *     .build();
    +     * }
    + * + * In the example above both {@code info1} and {@code info2} will be named {@code + * "runtime_info"} in Prometheus. + * + *

    Throws an {@link IllegalArgumentException} if {@link + * io.prometheus.metrics.model.snapshots.PrometheusNaming#isValidMetricName(String) + * MetricMetadata.isValidMetricName(name)} is {@code false}. */ - public void remove(String... labelValues) { - if (labelValues.length != labelNames.length) { - throw new IllegalArgumentException(getClass().getSimpleName() + " " + getMetadata().getName() + " was created with " + labelNames.length + " label names, but you called remove() with " + labelValues.length + " label values."); - } - Labels toBeRemoved = Labels.of(labelNames, labelValues); - labels.remove(toBeRemoved); + @Override + public Builder name(String name) { + return super.name(stripInfoSuffix(name)); } - /** - * {@inheritDoc} - */ + /** Throws an {@link UnsupportedOperationException} because Info metrics cannot have a unit. */ @Override - public InfoSnapshot collect() { - List data = new ArrayList<>(labels.size()); - if (labelNames.length == 0) { - data.add(new InfoSnapshot.InfoDataPointSnapshot(constLabels)); - } else { - for (Labels label : labels) { - data.add(new InfoSnapshot.InfoDataPointSnapshot(label.merge(constLabels))); - } - } - return new InfoSnapshot(getMetadata(), data); + public Builder unit(Unit unit) { + if (unit != null) { + throw new UnsupportedOperationException("Info metrics cannot have a unit."); + } + return this; } - public static Builder builder() { - return new Builder(PrometheusProperties.get()); + private static String stripInfoSuffix(String name) { + if (name != null && (name.endsWith("_info") || name.endsWith(".info"))) { + name = name.substring(0, name.length() - 5); + } + return name; } - public static Builder builder(PrometheusProperties config) { - return new Builder(config); + @Override + public Info build() { + return new Info(this); } - public static class Builder extends MetricWithFixedMetadata.Builder { - - private Builder(PrometheusProperties config) { - super(Collections.emptyList(), config); - } - - /** - * The {@code _info} suffix will automatically be appended if it's missing. - *

    {@code
    -         * Info info1 = Info.builder()
    -         *     .name("runtime_info")
    -         *     .build();
    -         * Info info2 = Info.builder()
    -         *     .name("runtime")
    -         *     .build();
    -         * }
    - * In the example above both {@code info1} and {@code info2} will be named {@code "runtime_info"} in Prometheus. - *

    - * Throws an {@link IllegalArgumentException} if - * {@link io.prometheus.metrics.model.snapshots.PrometheusNaming#isValidMetricName(String) MetricMetadata.isValidMetricName(name)} - * is {@code false}. - */ - @Override - public Builder name(String name) { - return super.name(stripInfoSuffix(name)); - } - - /** - * Throws an {@link UnsupportedOperationException} because Info metrics cannot have a unit. - */ - @Override - public Builder unit(Unit unit) { - if (unit != null) { - throw new UnsupportedOperationException("Info metrics cannot have a unit."); - } - return this; - } - - private static String stripInfoSuffix(String name) { - if (name != null && (name.endsWith("_info") || name.endsWith(".info"))) { - name = name.substring(0, name.length() - 5); - } - return name; - } - - @Override - public Info build() { - return new Info(this); - } - - @Override - protected Builder self() { - return this; - } + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Metric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Metric.java index b7db83208..d3c00eca0 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Metric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Metric.java @@ -6,63 +6,61 @@ import io.prometheus.metrics.model.snapshots.Label; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshot; - import java.util.ArrayList; import java.util.List; -/** - * Common base class for all metrics. - */ +/** Common base class for all metrics. */ public abstract class Metric implements Collector { - protected final Labels constLabels; + protected final Labels constLabels; - protected Metric(Builder builder) { - this.constLabels = builder.constLabels; - } + protected Metric(Builder builder) { + this.constLabels = builder.constLabels; + } - @Override - public abstract MetricSnapshot collect(); + @Override + public abstract MetricSnapshot collect(); - protected static abstract class Builder, M extends Metric> { + protected abstract static class Builder, M extends Metric> { - protected final List illegalLabelNames; - protected final PrometheusProperties properties; - protected Labels constLabels = Labels.EMPTY; + protected final List illegalLabelNames; + protected final PrometheusProperties properties; + protected Labels constLabels = Labels.EMPTY; - protected Builder(List illegalLabelNames, PrometheusProperties properties) { - this.illegalLabelNames = new ArrayList<>(illegalLabelNames); - this.properties = properties; - } + protected Builder(List illegalLabelNames, PrometheusProperties properties) { + this.illegalLabelNames = new ArrayList<>(illegalLabelNames); + this.properties = properties; + } - // ConstLabels are only used rarely. In particular, do not use them to - // attach the same labels to all your metrics. Those use cases are - // better covered by target labels set by the scraping Prometheus - // server, or by one specific metric (e.g. a build_info or a - // machine_role metric). See also - // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels - public B constLabels(Labels constLabels) { - for (Label label : constLabels) { // NPE if constLabels is null - if (illegalLabelNames.contains(label.getName())) { - throw new IllegalArgumentException(label.getName() + ": illegal label name for this metric type"); - } - } - this.constLabels = constLabels; - return self(); + // ConstLabels are only used rarely. In particular, do not use them to + // attach the same labels to all your metrics. Those use cases are + // better covered by target labels set by the scraping Prometheus + // server, or by one specific metric (e.g. a build_info or a + // machine_role metric). See also + // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels + public B constLabels(Labels constLabels) { + for (Label label : constLabels) { // NPE if constLabels is null + if (illegalLabelNames.contains(label.getName())) { + throw new IllegalArgumentException( + label.getName() + ": illegal label name for this metric type"); } + } + this.constLabels = constLabels; + return self(); + } - public M register() { - return register(PrometheusRegistry.defaultRegistry); - } + public M register() { + return register(PrometheusRegistry.defaultRegistry); + } - public M register(PrometheusRegistry registry) { - M metric = build(); - registry.register(metric); - return metric; - } + public M register(PrometheusRegistry registry) { + M metric = build(); + registry.register(metric); + return metric; + } - public abstract M build(); + public abstract M build(); - protected abstract B self(); - } + protected abstract B self(); + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java index 5b96ea303..c121d0c56 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java @@ -5,103 +5,105 @@ import io.prometheus.metrics.model.snapshots.MetricMetadata; import io.prometheus.metrics.model.snapshots.PrometheusNaming; import io.prometheus.metrics.model.snapshots.Unit; - import java.util.Arrays; import java.util.List; /** * Almost all metrics have fixed metadata, i.e. the metric name is known when the metric is created. - *

    - * An exception would be a metric that is a bridge to a 3rd party metric library, where the metric name - * has to be retrieved from the 3rd party metric library at scrape time. + * + *

    An exception would be a metric that is a bridge to a 3rd party metric library, where the + * metric name has to be retrieved from the 3rd party metric library at scrape time. */ public abstract class MetricWithFixedMetadata extends Metric { - private final MetricMetadata metadata; - protected final String[] labelNames; - - protected MetricWithFixedMetadata(Builder builder) { - super(builder); - this.metadata = new MetricMetadata(makeName(builder.name, builder.unit), builder.help, builder.unit); - this.labelNames = Arrays.copyOf(builder.labelNames, builder.labelNames.length); + private final MetricMetadata metadata; + protected final String[] labelNames; + + protected MetricWithFixedMetadata(Builder builder) { + super(builder); + this.metadata = + new MetricMetadata(makeName(builder.name, builder.unit), builder.help, builder.unit); + this.labelNames = Arrays.copyOf(builder.labelNames, builder.labelNames.length); + } + + protected MetricMetadata getMetadata() { + return metadata; + } + + private String makeName(String name, Unit unit) { + if (unit != null) { + if (!name.endsWith("_" + unit) && !name.endsWith("." + unit)) { + name += "_" + unit; + } } + return name; + } - protected MetricMetadata getMetadata() { - return metadata; - } + @Override + public String getPrometheusName() { + return metadata.getPrometheusName(); + } - private String makeName(String name, Unit unit) { - if (unit != null) { - if (!name.endsWith("_" + unit) && !name.endsWith("." + unit)) { - name += "_" + unit; - } - } - return name; - } + public abstract static class Builder, M extends MetricWithFixedMetadata> + extends Metric.Builder { - @Override - public String getPrometheusName() { - return metadata.getPrometheusName(); - } + protected String name; + private Unit unit; + private String help; + private String[] labelNames = new String[0]; - public static abstract class Builder, M extends MetricWithFixedMetadata> extends Metric.Builder { + protected Builder(List illegalLabelNames, PrometheusProperties properties) { + super(illegalLabelNames, properties); + } - protected String name; - private Unit unit; - private String help; - private String[] labelNames = new String[0]; + public B name(String name) { + if (!PrometheusNaming.isValidMetricName(name)) { + throw new IllegalArgumentException("'" + name + "': Illegal metric name."); + } + this.name = name; + return self(); + } - protected Builder(List illegalLabelNames, PrometheusProperties properties) { - super(illegalLabelNames, properties); - } + public B unit(Unit unit) { + this.unit = unit; + return self(); + } - public B name(String name) { - if (!PrometheusNaming.isValidMetricName(name)) { - throw new IllegalArgumentException("'" + name + "': Illegal metric name."); - } - this.name = name; - return self(); - } + public B help(String help) { + this.help = help; + return self(); + } - public B unit(Unit unit) { - this.unit = unit; - return self(); + public B labelNames(String... labelNames) { + for (String labelName : labelNames) { + if (!PrometheusNaming.isValidLabelName(labelName)) { + throw new IllegalArgumentException(labelName + ": illegal label name"); } - - public B help(String help) { - this.help = help; - return self(); + if (illegalLabelNames.contains(labelName)) { + throw new IllegalArgumentException( + labelName + ": illegal label name for this metric type"); } - - public B labelNames(String... labelNames) { - for (String labelName : labelNames) { - if (!PrometheusNaming.isValidLabelName(labelName)) { - throw new IllegalArgumentException(labelName + ": illegal label name"); - } - if (illegalLabelNames.contains(labelName)) { - throw new IllegalArgumentException(labelName + ": illegal label name for this metric type"); - } - if (constLabels.contains(labelName)) { - throw new IllegalArgumentException(labelName + ": duplicate label name"); - } - } - this.labelNames = labelNames; - return self(); + if (constLabels.contains(labelName)) { + throw new IllegalArgumentException(labelName + ": duplicate label name"); } + } + this.labelNames = labelNames; + return self(); + } - public B constLabels(Labels constLabels) { - for (String labelName : labelNames) { - if (constLabels.contains(labelName)) { // Labels.contains() treats dots like underscores - throw new IllegalArgumentException(labelName + ": duplicate label name"); - } - } - return super.constLabels(constLabels); + public B constLabels(Labels constLabels) { + for (String labelName : labelNames) { + if (constLabels.contains(labelName)) { // Labels.contains() treats dots like underscores + throw new IllegalArgumentException(labelName + ": duplicate label name"); } + } + return super.constLabels(constLabels); + } - @Override - public abstract M build(); + @Override + public abstract M build(); - @Override - protected abstract B self(); - } + @Override + protected abstract B self(); + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java index e4e86acdd..93fa20d0e 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java @@ -8,72 +8,77 @@ /** * Maintains a ring buffer of T to implement a sliding time window. - *

    - * This is used to maintain a sliding window of {@link CKMSQuantiles} for {@link Summary} metrics. - *

    - * It is implemented in a generic way so that 3rd party libraries can use it for implementing sliding windows. - *

    - * TODO: The current implementation is {@code synchronized}. There is likely room for optimization. + * + *

    This is used to maintain a sliding window of {@link CKMSQuantiles} for {@link Summary} + * metrics. + * + *

    It is implemented in a generic way so that 3rd party libraries can use it for implementing + * sliding windows. + * + *

    TODO: The current implementation is {@code synchronized}. There is likely room for + * optimization. */ public class SlidingWindow { - private final Supplier constructor; - private final ObjDoubleConsumer observeFunction; - private final T[] ringBuffer; - private int currentBucket; - private long lastRotateTimestampMillis; - private final long durationBetweenRotatesMillis; - LongSupplier currentTimeMillis = System::currentTimeMillis; // to be replaced in unit tests + private final Supplier constructor; + private final ObjDoubleConsumer observeFunction; + private final T[] ringBuffer; + private int currentBucket; + private long lastRotateTimestampMillis; + private final long durationBetweenRotatesMillis; + LongSupplier currentTimeMillis = System::currentTimeMillis; // to be replaced in unit tests - /** - * Example: If the {@code maxAgeSeconds} is 60 and {@code ageBuckets} is 3, then 3 instances of {@code T} - * are maintained and the sliding window moves to the next instance of T every 20 seconds. - * - * @param clazz type of T - * @param constructor for creating a new instance of T as the old one gets evicted - * @param observeFunction for observing a value (e.g. calling {@code t.observe(value)} - * @param maxAgeSeconds after this amount of time an instance of T gets evicted. - * @param ageBuckets number of age buckets. - */ - public SlidingWindow(Class clazz, Supplier constructor, ObjDoubleConsumer observeFunction, long maxAgeSeconds, int ageBuckets) { - this.constructor = constructor; - this.observeFunction = observeFunction; - this.ringBuffer = (T[]) Array.newInstance(clazz, ageBuckets); - for (int i = 0; i < ringBuffer.length; i++) { - this.ringBuffer[i] = constructor.get(); - } - this.currentBucket = 0; - this.lastRotateTimestampMillis = currentTimeMillis.getAsLong(); - this.durationBetweenRotatesMillis = TimeUnit.SECONDS.toMillis(maxAgeSeconds) / ageBuckets; + /** + * Example: If the {@code maxAgeSeconds} is 60 and {@code ageBuckets} is 3, then 3 instances of + * {@code T} are maintained and the sliding window moves to the next instance of T every 20 + * seconds. + * + * @param clazz type of T + * @param constructor for creating a new instance of T as the old one gets evicted + * @param observeFunction for observing a value (e.g. calling {@code t.observe(value)} + * @param maxAgeSeconds after this amount of time an instance of T gets evicted. + * @param ageBuckets number of age buckets. + */ + public SlidingWindow( + Class clazz, + Supplier constructor, + ObjDoubleConsumer observeFunction, + long maxAgeSeconds, + int ageBuckets) { + this.constructor = constructor; + this.observeFunction = observeFunction; + this.ringBuffer = (T[]) Array.newInstance(clazz, ageBuckets); + for (int i = 0; i < ringBuffer.length; i++) { + this.ringBuffer[i] = constructor.get(); } + this.currentBucket = 0; + this.lastRotateTimestampMillis = currentTimeMillis.getAsLong(); + this.durationBetweenRotatesMillis = TimeUnit.SECONDS.toMillis(maxAgeSeconds) / ageBuckets; + } - /** - * Get the currently active instance of {@code T}. - */ - public synchronized T current() { - return rotate(); - } + /** Get the currently active instance of {@code T}. */ + public synchronized T current() { + return rotate(); + } - /** - * Observe a value. - */ - public synchronized void observe(double value) { - rotate(); - for (T t : ringBuffer) { - observeFunction.accept(t, value); - } + /** Observe a value. */ + public synchronized void observe(double value) { + rotate(); + for (T t : ringBuffer) { + observeFunction.accept(t, value); } + } - private T rotate() { - long timeSinceLastRotateMillis = currentTimeMillis.getAsLong() - lastRotateTimestampMillis; - while (timeSinceLastRotateMillis > durationBetweenRotatesMillis) { - ringBuffer[currentBucket] = constructor.get(); - if (++currentBucket >= ringBuffer.length) { - currentBucket = 0; - } - timeSinceLastRotateMillis -= durationBetweenRotatesMillis; - lastRotateTimestampMillis += durationBetweenRotatesMillis; - } - return ringBuffer[currentBucket]; + private T rotate() { + long timeSinceLastRotateMillis = currentTimeMillis.getAsLong() - lastRotateTimestampMillis; + while (timeSinceLastRotateMillis > durationBetweenRotatesMillis) { + ringBuffer[currentBucket] = constructor.get(); + if (++currentBucket >= ringBuffer.length) { + currentBucket = 0; + } + timeSinceLastRotateMillis -= durationBetweenRotatesMillis; + lastRotateTimestampMillis += durationBetweenRotatesMillis; } + return ringBuffer[currentBucket]; + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StateSet.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StateSet.java index 532cfa506..e4d9eff88 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StateSet.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StateSet.java @@ -1,20 +1,20 @@ package io.prometheus.metrics.core.metrics; +import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; + import io.prometheus.metrics.config.MetricsProperties; import io.prometheus.metrics.config.PrometheusProperties; +import io.prometheus.metrics.core.datapoints.StateSetDataPoint; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.StateSetSnapshot; -import io.prometheus.metrics.core.datapoints.StateSetDataPoint; - import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Stream; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; - /** * StateSet metric. Example: + * *

    {@code
      * public enum Feature {
      *
    @@ -46,151 +46,141 @@
      *     stateSet.labelValues("dev").setTrue(FEATURE_2);
      * }
      * }
    - * The example above shows how to use a StateSet with an enum. - * You don't have to use enum, you can use regular strings as well. + * + * The example above shows how to use a StateSet with an enum. You don't have to use enum, you can + * use regular strings as well. */ -public class StateSet extends StatefulMetric implements StateSetDataPoint { - - private final boolean exemplarsEnabled; - private final String[] names; - - private StateSet(Builder builder, PrometheusProperties prometheusProperties) { - super(builder); - MetricsProperties[] properties = getMetricProperties(builder, prometheusProperties); - exemplarsEnabled = getConfigProperty(properties, MetricsProperties::getExemplarsEnabled); - this.names = builder.names; // builder.names is already a validated copy - for (String name : names) { - if (this.getMetadata().getPrometheusName().equals(prometheusName(name))) { - throw new IllegalArgumentException("Label name " + name + " is illegal (can't use the metric name as label name in state set metrics)"); - } - } +public class StateSet extends StatefulMetric + implements StateSetDataPoint { + + private final boolean exemplarsEnabled; + private final String[] names; + + private StateSet(Builder builder, PrometheusProperties prometheusProperties) { + super(builder); + MetricsProperties[] properties = getMetricProperties(builder, prometheusProperties); + exemplarsEnabled = getConfigProperty(properties, MetricsProperties::getExemplarsEnabled); + this.names = builder.names; // builder.names is already a validated copy + for (String name : names) { + if (this.getMetadata().getPrometheusName().equals(prometheusName(name))) { + throw new IllegalArgumentException( + "Label name " + + name + + " is illegal (can't use the metric name as label name in state set metrics)"); + } } - - /** - * {@inheritDoc} - */ - @Override - public StateSetSnapshot collect() { - return (StateSetSnapshot) super.collect(); + } + + /** {@inheritDoc} */ + @Override + public StateSetSnapshot collect() { + return (StateSetSnapshot) super.collect(); + } + + /** {@inheritDoc} */ + @Override + public void setTrue(String state) { + getNoLabels().setTrue(state); + } + + /** {@inheritDoc} */ + @Override + public void setFalse(String state) { + getNoLabels().setFalse(state); + } + + @Override + protected StateSetSnapshot collect(List labels, List metricDataList) { + List data = new ArrayList<>(labels.size()); + for (int i = 0; i < labels.size(); i++) { + data.add( + new StateSetSnapshot.StateSetDataPointSnapshot( + names, metricDataList.get(i).values, labels.get(i))); } + return new StateSetSnapshot(getMetadata(), data); + } + + @Override + protected DataPoint newDataPoint() { + return new DataPoint(); + } + + @Override + protected boolean isExemplarsEnabled() { + return exemplarsEnabled; + } + + class DataPoint implements StateSetDataPoint { + + private final boolean[] values = new boolean[names.length]; - /** - * {@inheritDoc} - */ + private DataPoint() {} + + /** {@inheritDoc} */ @Override public void setTrue(String state) { - getNoLabels().setTrue(state); + set(state, true); } - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ @Override public void setFalse(String state) { - getNoLabels().setFalse(state); + set(state, false); } - @Override - protected StateSetSnapshot collect(List labels, List metricDataList) { - List data = new ArrayList<>(labels.size()); - for (int i = 0; i < labels.size(); i++) { - data.add(new StateSetSnapshot.StateSetDataPointSnapshot(names, metricDataList.get(i).values, labels.get(i))); + private void set(String name, boolean value) { + for (int i = 0; i < names.length; i++) { + if (names[i].equals(name)) { + values[i] = value; + return; } - return new StateSetSnapshot(getMetadata(), data); - } - - @Override - protected DataPoint newDataPoint() { - return new DataPoint(); + } + throw new IllegalArgumentException(name + ": unknown state"); } + } - @Override - protected boolean isExemplarsEnabled() { - return exemplarsEnabled; - } - - class DataPoint implements StateSetDataPoint { + public static Builder builder() { + return new Builder(PrometheusProperties.get()); + } - private final boolean[] values = new boolean[names.length]; + public static Builder builder(PrometheusProperties config) { + return new Builder(config); + } - private DataPoint() { - } + public static class Builder extends StatefulMetric.Builder { - /** - * {@inheritDoc} - */ - @Override - public void setTrue(String state) { - set(state, true); - } + private String[] names; - /** - * {@inheritDoc} - */ - @Override - public void setFalse(String state) { - set(state, false); - } - - private void set(String name, boolean value) { - for (int i = 0; i < names.length; i++) { - if (names[i].equals(name)) { - values[i] = value; - return; - } - } - throw new IllegalArgumentException(name + ": unknown state"); - } + private Builder(PrometheusProperties config) { + super(Collections.emptyList(), config); } - public static Builder builder() { - return new Builder(PrometheusProperties.get()); + /** Declare the states that should be represented by this StateSet. */ + public Builder states(Class> enumClass) { + return states( + Stream.of(enumClass.getEnumConstants()).map(Enum::toString).toArray(String[]::new)); } - public static Builder builder(PrometheusProperties config) { - return new Builder(config); + /** Declare the states that should be represented by this StateSet. */ + public Builder states(String... stateNames) { + if (stateNames.length == 0) { + throw new IllegalArgumentException("states cannot be empty"); + } + this.names = Stream.of(stateNames).distinct().sorted().toArray(String[]::new); + return this; } - public static class Builder extends StatefulMetric.Builder { - - private String[] names; - - private Builder(PrometheusProperties config) { - super(Collections.emptyList(), config); - } - - /** - * Declare the states that should be represented by this StateSet. - */ - public Builder states(Class> enumClass) { - return states(Stream.of(enumClass.getEnumConstants()).map(Enum::toString).toArray(String[]::new)); - } - - /** - * Declare the states that should be represented by this StateSet. - */ - public Builder states(String... stateNames) { - if (stateNames.length == 0) { - throw new IllegalArgumentException("states cannot be empty"); - } - this.names = Stream.of(stateNames) - .distinct() - .sorted() - .toArray(String[]::new); - return this; - } - - @Override - public StateSet build() { - if (names == null) { - throw new IllegalStateException("State names are required when building a StateSet."); - } - return new StateSet(this, properties); - } + @Override + public StateSet build() { + if (names == null) { + throw new IllegalStateException("State names are required when building a StateSet."); + } + return new StateSet(this, properties); + } - @Override - protected Builder self() { - return this; - } + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java index 44f6cc57a..188a0c15f 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java @@ -1,11 +1,13 @@ package io.prometheus.metrics.core.metrics; +import static java.lang.Boolean.FALSE; +import static java.lang.Boolean.TRUE; + import io.prometheus.metrics.config.MetricsProperties; import io.prometheus.metrics.config.PrometheusProperties; +import io.prometheus.metrics.core.datapoints.DataPoint; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshot; -import io.prometheus.metrics.core.datapoints.DataPoint; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -13,191 +15,191 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; -import static java.lang.Boolean.FALSE; -import static java.lang.Boolean.TRUE; - /** * There are two kinds of metrics: + * *
      - *
    • A {@code StatefulMetric} actively maintains its current values, e.g. a stateful counter actively stores its current count.
    • - *
    • A {@code CallbackMetric} gets its values on demand when it is collected, e.g. a callback gauge representing the current heap size.
    • + *
    • A {@code StatefulMetric} actively maintains its current values, e.g. a stateful counter + * actively stores its current count. + *
    • A {@code CallbackMetric} gets its values on demand when it is collected, e.g. a callback + * gauge representing the current heap size. *
    - * The OpenTelemetry terminology for stateful is synchronous and the OpenTelemetry terminology for callback is asynchronous. - * We are using our own terminology here because in Java synchronous and asynchronous usually refers to multi-threading, - * but this has nothing to do with multi-threading. + * + * The OpenTelemetry terminology for stateful is synchronous and the OpenTelemetry + * terminology for callback is asynchronous. We are using our own terminology here + * because in Java synchronous and asynchronous usually refers to multi-threading, but + * this has nothing to do with multi-threading. */ abstract class StatefulMetric extends MetricWithFixedMetadata { - /** - * Map label values to data points. - */ - private final ConcurrentHashMap, T> data = new ConcurrentHashMap<>(); + /** Map label values to data points. */ + private final ConcurrentHashMap, T> data = new ConcurrentHashMap<>(); - /** - * Shortcut for data.get(Collections.emptyList()) - */ - private volatile T noLabels; + /** Shortcut for data.get(Collections.emptyList()) */ + private volatile T noLabels; - protected StatefulMetric(Builder builder) { - super(builder); - } + protected StatefulMetric(Builder builder) { + super(builder); + } - /** - * labels and metricData have the same size. labels.get(i) are the labels for metricData.get(i). - */ - protected abstract MetricSnapshot collect(List labels, List metricData); - - public MetricSnapshot collect() { - if (labelNames.length == 0 && data.size() == 0) { - // This is a metric without labels that has not been used yet. Initialize the data on the fly. - labelValues(); - } - List labels = new ArrayList<>(data.size()); - List metricData = new ArrayList<>(data.size()); - for (Map.Entry, T> entry : data.entrySet()) { - String[] labelValues = entry.getKey().toArray(new String[labelNames.length]); - labels.add(constLabels.merge(labelNames, labelValues)); - metricData.add(entry.getValue()); - } - return collect(labels, metricData); - } + /** + * labels and metricData have the same size. labels.get(i) are the labels for metricData.get(i). + */ + protected abstract MetricSnapshot collect(List labels, List metricData); - /** - * Initialize label values. - *

    - * Example: Imagine you have a counter for payments as follows - *

    -     * payment_transactions_total{payment_type="credit card"} 7.0
    -     * payment_transactions_total{payment_type="paypal"} 3.0
    -     * 
    - * Now, the data points for the {@code payment_type} label values get initialized when they are - * first used, i.e. the first time you call - *
    {@code
    -     * counter.labelValues("paypal").inc();
    -     * }
    - * the data point with label {@code payment_type="paypal"} will go from non-existent to having value {@code 1.0}. - *

    - * In some cases this is confusing, and you want to have data points initialized on application start - * with an initial value of {@code 0.0}: - *

    -     * payment_transactions_total{payment_type="credit card"} 0.0
    -     * payment_transactions_total{payment_type="paypal"} 0.0
    -     * 
    - * {@code initLabelValues(...)} can be used to initialize label value, so that the data points - * show up in the exposition format with an initial value of zero. - */ - public void initLabelValues(String... labelValues) { - labelValues(labelValues); + public MetricSnapshot collect() { + if (labelNames.length == 0 && data.size() == 0) { + // This is a metric without labels that has not been used yet. Initialize the data on the fly. + labelValues(); } - - public D labelValues(String... labelValues) { - if (labelValues.length != labelNames.length) { - if (labelValues.length == 0) { - throw new IllegalArgumentException(getClass().getSimpleName() + " " + getMetadata().getName() + " was created with label names, so you must call labelValues(...) when using it."); - } else { - throw new IllegalArgumentException("Expected " + labelNames.length + " label values, but got " + labelValues.length + "."); - } - } - return data.computeIfAbsent(Arrays.asList(labelValues), l -> newDataPoint()); + List labels = new ArrayList<>(data.size()); + List metricData = new ArrayList<>(data.size()); + for (Map.Entry, T> entry : data.entrySet()) { + String[] labelValues = entry.getKey().toArray(new String[labelNames.length]); + labels.add(constLabels.merge(labelNames, labelValues)); + metricData.add(entry.getValue()); } - - /** - * Remove the data point with the given label values. - * See https://prometheus.io/docs/instrumenting/writing_clientlibs/#labels. - */ - public void remove(String... labelValues) { - data.remove(Arrays.asList(labelValues)); + return collect(labels, metricData); + } + + /** + * Initialize label values. + * + *

    Example: Imagine you have a counter for payments as follows + * + *

    +   * payment_transactions_total{payment_type="credit card"} 7.0
    +   * payment_transactions_total{payment_type="paypal"} 3.0
    +   * 
    + * + * Now, the data points for the {@code payment_type} label values get initialized when they are + * first used, i.e. the first time you call + * + *
    {@code
    +   * counter.labelValues("paypal").inc();
    +   * }
    + * + * the data point with label {@code payment_type="paypal"} will go from non-existent to having + * value {@code 1.0}. + * + *

    In some cases this is confusing, and you want to have data points initialized on application + * start with an initial value of {@code 0.0}: + * + *

    +   * payment_transactions_total{payment_type="credit card"} 0.0
    +   * payment_transactions_total{payment_type="paypal"} 0.0
    +   * 
    + * + * {@code initLabelValues(...)} can be used to initialize label value, so that the data points + * show up in the exposition format with an initial value of zero. + */ + public void initLabelValues(String... labelValues) { + labelValues(labelValues); + } + + public D labelValues(String... labelValues) { + if (labelValues.length != labelNames.length) { + if (labelValues.length == 0) { + throw new IllegalArgumentException( + getClass().getSimpleName() + + " " + + getMetadata().getName() + + " was created with label names, so you must call labelValues(...) when using it."); + } else { + throw new IllegalArgumentException( + "Expected " + labelNames.length + " label values, but got " + labelValues.length + "."); + } } - - /** - * Reset the metric (remove all data points). - */ - public void clear() { - data.clear(); - noLabels = null; + return data.computeIfAbsent(Arrays.asList(labelValues), l -> newDataPoint()); + } + + /** + * Remove the data point with the given label values. See https://prometheus.io/docs/instrumenting/writing_clientlibs/#labels. + */ + public void remove(String... labelValues) { + data.remove(Arrays.asList(labelValues)); + } + + /** Reset the metric (remove all data points). */ + public void clear() { + data.clear(); + noLabels = null; + } + + protected abstract T newDataPoint(); + + protected T getNoLabels() { + if (noLabels == null) { + // Note that this will throw an IllegalArgumentException if labelNames is not empty. + noLabels = (T) labelValues(); + } + return noLabels; + } + + protected MetricsProperties[] getMetricProperties( + Builder builder, PrometheusProperties prometheusProperties) { + String metricName = getMetadata().getName(); + if (prometheusProperties.getMetricProperties(metricName) != null) { + return new MetricsProperties[] { + prometheusProperties.getMetricProperties(metricName), // highest precedence + builder.toProperties(), // second-highest precedence + prometheusProperties.getDefaultMetricProperties(), // third-highest precedence + builder.getDefaultProperties() // fallback + }; + } else { + return new MetricsProperties[] { + builder.toProperties(), // highest precedence + prometheusProperties.getDefaultMetricProperties(), // second-highest precedence + builder.getDefaultProperties() // fallback + }; } + } + + protected T getConfigProperty( + MetricsProperties[] properties, Function getter) { + T result; + for (MetricsProperties props : properties) { + result = getter.apply(props); + if (result != null) { + return result; + } + } + throw new IllegalStateException( + "Missing default config. This is a bug in the Prometheus metrics core library."); + } + + protected abstract boolean isExemplarsEnabled(); + + abstract static class Builder, M extends StatefulMetric> + extends MetricWithFixedMetadata.Builder { - protected abstract T newDataPoint(); + protected Boolean exemplarsEnabled; + + protected Builder(List illegalLabelNames, PrometheusProperties config) { + super(illegalLabelNames, config); + } - protected T getNoLabels() { - if (noLabels == null) { - // Note that this will throw an IllegalArgumentException if labelNames is not empty. - noLabels = (T) labelValues(); - } - return noLabels; + /** Allow Exemplars for this metric. */ + public B withExemplars() { + this.exemplarsEnabled = TRUE; + return self(); } - protected MetricsProperties[] getMetricProperties(Builder builder, PrometheusProperties prometheusProperties) { - String metricName = getMetadata().getName(); - if (prometheusProperties.getMetricProperties(metricName) != null) { - return new MetricsProperties[]{ - prometheusProperties.getMetricProperties(metricName), // highest precedence - builder.toProperties(), // second-highest precedence - prometheusProperties.getDefaultMetricProperties(), // third-highest precedence - builder.getDefaultProperties() // fallback - }; - } else { - return new MetricsProperties[]{ - builder.toProperties(), // highest precedence - prometheusProperties.getDefaultMetricProperties(), // second-highest precedence - builder.getDefaultProperties() // fallback - }; - } + /** Turn off Exemplars for this metric. */ + public B withoutExemplars() { + this.exemplarsEnabled = FALSE; + return self(); } - protected T getConfigProperty(MetricsProperties[] properties, Function getter) { - T result; - for (MetricsProperties props : properties) { - result = getter.apply(props); - if (result != null) { - return result; - } - } - throw new IllegalStateException("Missing default config. This is a bug in the Prometheus metrics core library."); + /** Override if there are more properties than just exemplars enabled. */ + protected MetricsProperties toProperties() { + return MetricsProperties.builder().exemplarsEnabled(exemplarsEnabled).build(); } - protected abstract boolean isExemplarsEnabled(); - - static abstract class Builder, M extends StatefulMetric> extends MetricWithFixedMetadata.Builder { - - protected Boolean exemplarsEnabled; - - protected Builder(List illegalLabelNames, PrometheusProperties config) { - super(illegalLabelNames, config); - } - - /** - * Allow Exemplars for this metric. - */ - public B withExemplars() { - this.exemplarsEnabled = TRUE; - return self(); - } - - /** - * Turn off Exemplars for this metric. - */ - public B withoutExemplars() { - this.exemplarsEnabled = FALSE; - return self(); - } - - /** - * Override if there are more properties than just exemplars enabled. - */ - protected MetricsProperties toProperties() { - return MetricsProperties.builder() - .exemplarsEnabled(exemplarsEnabled) - .build(); - } - - /** - * Override if there are more properties than just exemplars enabled. - */ - public MetricsProperties getDefaultProperties() { - return MetricsProperties.builder() - .exemplarsEnabled(true) - .build(); - } + /** Override if there are more properties than just exemplars enabled. */ + public MetricsProperties getDefaultProperties() { + return MetricsProperties.builder().exemplarsEnabled(true).build(); } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Summary.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Summary.java index 090922686..126626799 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Summary.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Summary.java @@ -2,6 +2,7 @@ import io.prometheus.metrics.config.MetricsProperties; import io.prometheus.metrics.config.PrometheusProperties; +import io.prometheus.metrics.core.datapoints.DistributionDataPoint; import io.prometheus.metrics.core.exemplars.ExemplarSampler; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfig; import io.prometheus.metrics.model.snapshots.Exemplars; @@ -9,8 +10,6 @@ import io.prometheus.metrics.model.snapshots.Quantile; import io.prometheus.metrics.model.snapshots.Quantiles; import io.prometheus.metrics.model.snapshots.SummarySnapshot; -import io.prometheus.metrics.core.datapoints.DistributionDataPoint; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -20,6 +19,7 @@ /** * Summary metric. Example: + * *
    {@code
      * Summary summary = Summary.builder()
      *         .name("http_request_duration_seconds_hi")
    @@ -35,323 +35,330 @@
      * // process a request, duration will be observed
      * summary.labelValues("GET", "/", "200").observe(Unit.nanosToSeconds(System.nanoTime() - start));
      * }
    + * * See {@link Summary.Builder} for configuration options. */ -public class Summary extends StatefulMetric implements DistributionDataPoint { - - private final List quantiles; // May be empty, but cannot be null. - private final long maxAgeSeconds; - private final int ageBuckets; - private final boolean exemplarsEnabled; - private final ExemplarSamplerConfig exemplarSamplerConfig; - - private Summary(Builder builder, PrometheusProperties prometheusProperties) { - super(builder); - MetricsProperties[] properties = getMetricProperties(builder, prometheusProperties); - this.exemplarsEnabled = getConfigProperty(properties, MetricsProperties::getExemplarsEnabled); - this.quantiles = Collections.unmodifiableList(makeQuantiles(properties)); - this.maxAgeSeconds = getConfigProperty(properties, MetricsProperties::getSummaryMaxAgeSeconds); - this.ageBuckets = getConfigProperty(properties, MetricsProperties::getSummaryNumberOfAgeBuckets); - this.exemplarSamplerConfig = new ExemplarSamplerConfig(prometheusProperties.getExemplarProperties(), 4); - } - - private List makeQuantiles(MetricsProperties[] properties) { - List result = new ArrayList<>(); - List quantiles = getConfigProperty(properties, MetricsProperties::getSummaryQuantiles); - List quantileErrors = getConfigProperty(properties, MetricsProperties::getSummaryQuantileErrors); - if (quantiles != null) { - for (int i = 0; i < quantiles.size(); i++) { - if (quantileErrors.size() > 0) { - result.add(new CKMSQuantiles.Quantile(quantiles.get(i), quantileErrors.get(i))); - } else { - result.add(new CKMSQuantiles.Quantile(quantiles.get(i), Builder.defaultError(quantiles.get(i)))); - } - } +public class Summary extends StatefulMetric + implements DistributionDataPoint { + + private final List quantiles; // May be empty, but cannot be null. + private final long maxAgeSeconds; + private final int ageBuckets; + private final boolean exemplarsEnabled; + private final ExemplarSamplerConfig exemplarSamplerConfig; + + private Summary(Builder builder, PrometheusProperties prometheusProperties) { + super(builder); + MetricsProperties[] properties = getMetricProperties(builder, prometheusProperties); + this.exemplarsEnabled = getConfigProperty(properties, MetricsProperties::getExemplarsEnabled); + this.quantiles = Collections.unmodifiableList(makeQuantiles(properties)); + this.maxAgeSeconds = getConfigProperty(properties, MetricsProperties::getSummaryMaxAgeSeconds); + this.ageBuckets = + getConfigProperty(properties, MetricsProperties::getSummaryNumberOfAgeBuckets); + this.exemplarSamplerConfig = + new ExemplarSamplerConfig(prometheusProperties.getExemplarProperties(), 4); + } + + private List makeQuantiles(MetricsProperties[] properties) { + List result = new ArrayList<>(); + List quantiles = getConfigProperty(properties, MetricsProperties::getSummaryQuantiles); + List quantileErrors = + getConfigProperty(properties, MetricsProperties::getSummaryQuantileErrors); + if (quantiles != null) { + for (int i = 0; i < quantiles.size(); i++) { + if (quantileErrors.size() > 0) { + result.add(new CKMSQuantiles.Quantile(quantiles.get(i), quantileErrors.get(i))); + } else { + result.add( + new CKMSQuantiles.Quantile(quantiles.get(i), Builder.defaultError(quantiles.get(i)))); } - return result; + } } - - @Override - protected boolean isExemplarsEnabled() { - return exemplarsEnabled; + return result; + } + + @Override + protected boolean isExemplarsEnabled() { + return exemplarsEnabled; + } + + /** {@inheritDoc} */ + @Override + public void observe(double amount) { + getNoLabels().observe(amount); + } + + /** {@inheritDoc} */ + @Override + public void observeWithExemplar(double amount, Labels labels) { + getNoLabels().observeWithExemplar(amount, labels); + } + + /** {@inheritDoc} */ + @Override + public SummarySnapshot collect() { + return (SummarySnapshot) super.collect(); + } + + @Override + protected SummarySnapshot collect(List labels, List metricData) { + List data = new ArrayList<>(labels.size()); + for (int i = 0; i < labels.size(); i++) { + data.add(metricData.get(i).collect(labels.get(i))); + } + return new SummarySnapshot(getMetadata(), data); + } + + @Override + protected DataPoint newDataPoint() { + return new DataPoint(); + } + + public class DataPoint implements DistributionDataPoint { + + private final LongAdder count = new LongAdder(); + private final DoubleAdder sum = new DoubleAdder(); + private final SlidingWindow quantileValues; + private final Buffer buffer = new Buffer(); + private final ExemplarSampler exemplarSampler; + + private final long createdTimeMillis = System.currentTimeMillis(); + + private DataPoint() { + if (quantiles.size() > 0) { + CKMSQuantiles.Quantile[] quantilesArray = quantiles.toArray(new CKMSQuantiles.Quantile[0]); + quantileValues = + new SlidingWindow<>( + CKMSQuantiles.class, + () -> new CKMSQuantiles(quantilesArray), + CKMSQuantiles::insert, + maxAgeSeconds, + ageBuckets); + } else { + quantileValues = null; + } + if (exemplarsEnabled) { + exemplarSampler = new ExemplarSampler(exemplarSamplerConfig); + } else { + exemplarSampler = null; + } } - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ @Override - public void observe(double amount) { - getNoLabels().observe(amount); + public void observe(double value) { + if (Double.isNaN(value)) { + return; + } + if (!buffer.append(value)) { + doObserve(value); + } + if (isExemplarsEnabled()) { + exemplarSampler.observe(value); + } } - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ @Override - public void observeWithExemplar(double amount, Labels labels) { - getNoLabels().observeWithExemplar(amount, labels); + public void observeWithExemplar(double value, Labels labels) { + if (Double.isNaN(value)) { + return; + } + if (!buffer.append(value)) { + doObserve(value); + } + if (isExemplarsEnabled()) { + exemplarSampler.observeWithExemplar(value, labels); + } } - /** - * {@inheritDoc} - */ - @Override - public SummarySnapshot collect() { - return (SummarySnapshot) super.collect(); + private void doObserve(double amount) { + sum.add(amount); + if (quantileValues != null) { + quantileValues.observe(amount); + } + // count must be incremented last, because in collect() the count + // indicates the number of completed observations. + count.increment(); } - @Override - protected SummarySnapshot collect(List labels, List metricData) { - List data = new ArrayList<>(labels.size()); - for (int i = 0; i < labels.size(); i++) { - data.add(metricData.get(i).collect(labels.get(i))); - } - return new SummarySnapshot(getMetadata(), data); + private SummarySnapshot.SummaryDataPointSnapshot collect(Labels labels) { + return buffer.run( + expectedCount -> count.sum() == expectedCount, + // TODO Exemplars (are hard-coded as empty in the line below) + () -> + new SummarySnapshot.SummaryDataPointSnapshot( + count.sum(), + sum.sum(), + makeQuantiles(), + labels, + Exemplars.EMPTY, + createdTimeMillis), + this::doObserve); } - @Override - protected DataPoint newDataPoint() { - return new DataPoint(); + private List getQuantiles() { + return quantiles; } + private Quantiles makeQuantiles() { + Quantile[] quantiles = new Quantile[getQuantiles().size()]; + for (int i = 0; i < getQuantiles().size(); i++) { + CKMSQuantiles.Quantile quantile = getQuantiles().get(i); + quantiles[i] = + new Quantile(quantile.quantile, quantileValues.current().get(quantile.quantile)); + } + return Quantiles.of(quantiles); + } + } - public class DataPoint implements DistributionDataPoint { - - private final LongAdder count = new LongAdder(); - private final DoubleAdder sum = new DoubleAdder(); - private final SlidingWindow quantileValues; - private final Buffer buffer = new Buffer(); - private final ExemplarSampler exemplarSampler; - - private final long createdTimeMillis = System.currentTimeMillis(); - - private DataPoint() { - if (quantiles.size() > 0) { - CKMSQuantiles.Quantile[] quantilesArray = quantiles.toArray(new CKMSQuantiles.Quantile[0]); - quantileValues = new SlidingWindow<>(CKMSQuantiles.class, () -> new CKMSQuantiles(quantilesArray), CKMSQuantiles::insert, maxAgeSeconds, ageBuckets); - } else { - quantileValues = null; - } - if (exemplarsEnabled) { - exemplarSampler = new ExemplarSampler(exemplarSamplerConfig); - } else { - exemplarSampler = null; - } - } + public static Summary.Builder builder() { + return new Builder(PrometheusProperties.get()); + } - /** - * {@inheritDoc} - */ - @Override - public void observe(double value) { - if (Double.isNaN(value)) { - return; - } - if (!buffer.append(value)) { - doObserve(value); - } - if (isExemplarsEnabled()) { - exemplarSampler.observe(value); - } - } + public static Summary.Builder builder(PrometheusProperties config) { + return new Builder(config); + } - /** - * {@inheritDoc} - */ - @Override - public void observeWithExemplar(double value, Labels labels) { - if (Double.isNaN(value)) { - return; - } - if (!buffer.append(value)) { - doObserve(value); - } - if (isExemplarsEnabled()) { - exemplarSampler.observeWithExemplar(value, labels); - } - } + public static class Builder extends StatefulMetric.Builder { - private void doObserve(double amount) { - sum.add(amount); - if (quantileValues != null) { - quantileValues.observe(amount); - } - // count must be incremented last, because in collect() the count - // indicates the number of completed observations. - count.increment(); - } + /** 5 minutes. See {@link #maxAgeSeconds(long)}. */ + public static final long DEFAULT_MAX_AGE_SECONDS = TimeUnit.MINUTES.toSeconds(5); - private SummarySnapshot.SummaryDataPointSnapshot collect(Labels labels) { - return buffer.run( - expectedCount -> count.sum() == expectedCount, - // TODO Exemplars (are hard-coded as empty in the line below) - () -> new SummarySnapshot.SummaryDataPointSnapshot(count.sum(), sum.sum(), makeQuantiles(), labels, Exemplars.EMPTY, createdTimeMillis), - this::doObserve - ); - } + /** 5. See {@link #numberOfAgeBuckets(int)} */ + public static final int DEFAULT_NUMBER_OF_AGE_BUCKETS = 5; - private List getQuantiles() { - return quantiles; - } + private final List quantiles = new ArrayList<>(); + private Long maxAgeSeconds; + private Integer ageBuckets; - private Quantiles makeQuantiles() { - Quantile[] quantiles = new Quantile[getQuantiles().size()]; - for (int i = 0; i < getQuantiles().size(); i++) { - CKMSQuantiles.Quantile quantile = getQuantiles().get(i); - quantiles[i] = new Quantile(quantile.quantile, quantileValues.current().get(quantile.quantile)); - } - return Quantiles.of(quantiles); - } + private Builder(PrometheusProperties properties) { + super(Collections.singletonList("quantile"), properties); } - public static Summary.Builder builder() { - return new Builder(PrometheusProperties.get()); + private static double defaultError(double quantile) { + if (quantile <= 0.01 || quantile >= 0.99) { + return 0.001; + } else if (quantile <= 0.02 || quantile >= 0.98) { + return 0.005; + } else { + return 0.01; + } } - public static Summary.Builder builder(PrometheusProperties config) { - return new Builder(config); + /** + * Add a quantile. See {@link #quantile(double, double)}. + * + *

    Default errors are: + * + *

      + *
    • error = 0.001 if quantile <= 0.01 or quantile >= 0.99 + *
    • error = 0.005 if quantile <= 0.02 or quantile >= 0.98 + *
    • error = 0.01 else. + *
    + */ + public Builder quantile(double quantile) { + return quantile(quantile, defaultError(quantile)); } - public static class Builder extends StatefulMetric.Builder { - - /** - * 5 minutes. See {@link #maxAgeSeconds(long)}. - */ - public static final long DEFAULT_MAX_AGE_SECONDS = TimeUnit.MINUTES.toSeconds(5); - - /** - * 5. See {@link #numberOfAgeBuckets(int)} - */ - public static final int DEFAULT_NUMBER_OF_AGE_BUCKETS = 5; - private final List quantiles = new ArrayList<>(); - private Long maxAgeSeconds; - private Integer ageBuckets; - - private Builder(PrometheusProperties properties) { - super(Collections.singletonList("quantile"), properties); - } - - private static double defaultError(double quantile) { - if (quantile <= 0.01 || quantile >= 0.99) { - return 0.001; - } else if (quantile <= 0.02 || quantile >= 0.98) { - return 0.005; - } else { - return 0.01; - } - } - - /** - * Add a quantile. See {@link #quantile(double, double)}. - *

    - * Default errors are: - *

      - *
    • error = 0.001 if quantile <= 0.01 or quantile >= 0.99
    • - *
    • error = 0.005 if quantile <= 0.02 or quantile >= 0.98
    • - *
    • error = 0.01 else. - *
    - */ - public Builder quantile(double quantile) { - return quantile(quantile, defaultError(quantile)); - } - - /** - * Add a quantile. Call multiple times to add multiple quantiles. - *

    - * Example: The following will track the 0.95 quantile: - *

    {@code
    -         * .quantile(0.95, 0.001)
    -         * }
    - * The second argument is the acceptable error margin, i.e. with the code above the quantile - * will not be exactly the 0.95 quantile but something between 0.949 and 0.951. - *

    - * There are two special cases: - *

      - *
    • {@code .quantile(0.0, 0.0)} gives you the minimum observed value
    • - *
    • {@code .quantile(1.0, 0.0)} gives you the maximum observed value
    • - *
    - */ - public Builder quantile(double quantile, double error) { - if (quantile < 0.0 || quantile > 1.0) { - throw new IllegalArgumentException("Quantile " + quantile + " invalid: Expected number between 0.0 and 1.0."); - } - if (error < 0.0 || error > 1.0) { - throw new IllegalArgumentException("Error " + error + " invalid: Expected number between 0.0 and 1.0."); - } - quantiles.add(new CKMSQuantiles.Quantile(quantile, error)); - return this; - } + /** + * Add a quantile. Call multiple times to add multiple quantiles. + * + *

    Example: The following will track the 0.95 quantile: + * + *

    {@code
    +     * .quantile(0.95, 0.001)
    +     * }
    + * + * The second argument is the acceptable error margin, i.e. with the code above the quantile + * will not be exactly the 0.95 quantile but something between 0.949 and 0.951. + * + *

    There are two special cases: + * + *

      + *
    • {@code .quantile(0.0, 0.0)} gives you the minimum observed value + *
    • {@code .quantile(1.0, 0.0)} gives you the maximum observed value + *
    + */ + public Builder quantile(double quantile, double error) { + if (quantile < 0.0 || quantile > 1.0) { + throw new IllegalArgumentException( + "Quantile " + quantile + " invalid: Expected number between 0.0 and 1.0."); + } + if (error < 0.0 || error > 1.0) { + throw new IllegalArgumentException( + "Error " + error + " invalid: Expected number between 0.0 and 1.0."); + } + quantiles.add(new CKMSQuantiles.Quantile(quantile, error)); + return this; + } - /** - * The quantiles are relative to a moving time window. - * {@code maxAgeSeconds} is the size of that time window. - * Default is {@link #DEFAULT_MAX_AGE_SECONDS}. - */ - public Builder maxAgeSeconds(long maxAgeSeconds) { - if (maxAgeSeconds <= 0) { - throw new IllegalArgumentException("maxAgeSeconds cannot be " + maxAgeSeconds); - } - this.maxAgeSeconds = maxAgeSeconds; - return this; - } + /** + * The quantiles are relative to a moving time window. {@code maxAgeSeconds} is the size of that + * time window. Default is {@link #DEFAULT_MAX_AGE_SECONDS}. + */ + public Builder maxAgeSeconds(long maxAgeSeconds) { + if (maxAgeSeconds <= 0) { + throw new IllegalArgumentException("maxAgeSeconds cannot be " + maxAgeSeconds); + } + this.maxAgeSeconds = maxAgeSeconds; + return this; + } - /** - * The quantiles are relative to a moving time window. - * The {@code numberOfAgeBuckets} defines how smoothly the time window moves forward. - * For example, if the time window is 5 minutes and has 5 age buckets, - * then it is moving forward every minute by one minute. - * Default is {@link #DEFAULT_NUMBER_OF_AGE_BUCKETS}. - */ - public Builder numberOfAgeBuckets(int ageBuckets) { - if (ageBuckets <= 0) { - throw new IllegalArgumentException("ageBuckets cannot be " + ageBuckets); - } - this.ageBuckets = ageBuckets; - return this; - } + /** + * The quantiles are relative to a moving time window. The {@code numberOfAgeBuckets} defines + * how smoothly the time window moves forward. For example, if the time window is 5 minutes and + * has 5 age buckets, then it is moving forward every minute by one minute. Default is {@link + * #DEFAULT_NUMBER_OF_AGE_BUCKETS}. + */ + public Builder numberOfAgeBuckets(int ageBuckets) { + if (ageBuckets <= 0) { + throw new IllegalArgumentException("ageBuckets cannot be " + ageBuckets); + } + this.ageBuckets = ageBuckets; + return this; + } - @Override - protected MetricsProperties toProperties() { - double[] quantiles = null; - double[] quantileErrors = null; - if (!this.quantiles.isEmpty()) { - quantiles = new double[this.quantiles.size()]; - quantileErrors = new double[this.quantiles.size()]; - for (int i = 0; i < this.quantiles.size(); i++) { - quantiles[i] = this.quantiles.get(i).quantile; - quantileErrors[i] = this.quantiles.get(i).epsilon; - } - } - return MetricsProperties.builder() - .exemplarsEnabled(exemplarsEnabled) - .summaryQuantiles(quantiles) - .summaryQuantileErrors(quantileErrors) - .summaryNumberOfAgeBuckets(ageBuckets) - .summaryMaxAgeSeconds(maxAgeSeconds) - .build(); + @Override + protected MetricsProperties toProperties() { + double[] quantiles = null; + double[] quantileErrors = null; + if (!this.quantiles.isEmpty()) { + quantiles = new double[this.quantiles.size()]; + quantileErrors = new double[this.quantiles.size()]; + for (int i = 0; i < this.quantiles.size(); i++) { + quantiles[i] = this.quantiles.get(i).quantile; + quantileErrors[i] = this.quantiles.get(i).epsilon; } + } + return MetricsProperties.builder() + .exemplarsEnabled(exemplarsEnabled) + .summaryQuantiles(quantiles) + .summaryQuantileErrors(quantileErrors) + .summaryNumberOfAgeBuckets(ageBuckets) + .summaryMaxAgeSeconds(maxAgeSeconds) + .build(); + } - /** - * Default properties for summary metrics. - */ - @Override - public MetricsProperties getDefaultProperties() { - return MetricsProperties.builder() - .exemplarsEnabled(true) - .summaryQuantiles() - .summaryNumberOfAgeBuckets(DEFAULT_NUMBER_OF_AGE_BUCKETS) - .summaryMaxAgeSeconds(DEFAULT_MAX_AGE_SECONDS) - .build(); - } + /** Default properties for summary metrics. */ + @Override + public MetricsProperties getDefaultProperties() { + return MetricsProperties.builder() + .exemplarsEnabled(true) + .summaryQuantiles() + .summaryNumberOfAgeBuckets(DEFAULT_NUMBER_OF_AGE_BUCKETS) + .summaryMaxAgeSeconds(DEFAULT_MAX_AGE_SECONDS) + .build(); + } - @Override - public Summary build() { - return new Summary(this, properties); - } + @Override + public Summary build() { + return new Summary(this, properties); + } - @Override - protected Builder self() { - return this; - } + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SummaryWithCallback.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SummaryWithCallback.java index c55211636..dbe61b2ce 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SummaryWithCallback.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SummaryWithCallback.java @@ -4,7 +4,6 @@ import io.prometheus.metrics.model.snapshots.Exemplars; import io.prometheus.metrics.model.snapshots.Quantiles; import io.prometheus.metrics.model.snapshots.SummarySnapshot; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -12,6 +11,7 @@ /** * Example: + * *
    {@code
      * double MILLISECONDS_PER_SECOND = 1E3;
      *
    @@ -35,59 +35,63 @@
      */
     public class SummaryWithCallback extends CallbackMetric {
     
    -    @FunctionalInterface
    -    public interface Callback {
    -        void call(long count, double sum, Quantiles quantiles, String... labelValues);
    -    }
    +  @FunctionalInterface
    +  public interface Callback {
    +    void call(long count, double sum, Quantiles quantiles, String... labelValues);
    +  }
     
    -    private final Consumer callback;
    +  private final Consumer callback;
     
    -    private SummaryWithCallback(Builder builder) {
    -        super(builder);
    -        this.callback = builder.callback;
    -        if (callback == null) {
    -            throw new IllegalArgumentException("callback cannot be null");
    -        }
    +  private SummaryWithCallback(Builder builder) {
    +    super(builder);
    +    this.callback = builder.callback;
    +    if (callback == null) {
    +      throw new IllegalArgumentException("callback cannot be null");
         }
    +  }
     
    -    @Override
    -    public SummarySnapshot collect() {
    -        List dataPoints = new ArrayList<>();
    -        callback.accept((count, sum, quantiles, labelValues) -> {
    -            dataPoints.add(new SummarySnapshot.SummaryDataPointSnapshot(count, sum, quantiles, makeLabels(labelValues), Exemplars.EMPTY, 0L));
    +  @Override
    +  public SummarySnapshot collect() {
    +    List dataPoints = new ArrayList<>();
    +    callback.accept(
    +        (count, sum, quantiles, labelValues) -> {
    +          dataPoints.add(
    +              new SummarySnapshot.SummaryDataPointSnapshot(
    +                  count, sum, quantiles, makeLabels(labelValues), Exemplars.EMPTY, 0L));
             });
    -        return new SummarySnapshot(getMetadata(), dataPoints);
    -    }
    +    return new SummarySnapshot(getMetadata(), dataPoints);
    +  }
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    -    }
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
     
    -    public static Builder builder(PrometheusProperties properties) {
    -        return new Builder(properties);
    -    }
    +  public static Builder builder(PrometheusProperties properties) {
    +    return new Builder(properties);
    +  }
     
    -    public static class Builder extends CallbackMetric.Builder {
    +  public static class Builder
    +      extends CallbackMetric.Builder {
     
    -        private Consumer callback;
    +    private Consumer callback;
     
    -        public Builder callback(Consumer callback) {
    -            this.callback = callback;
    -            return self();
    -        }
    +    public Builder callback(Consumer callback) {
    +      this.callback = callback;
    +      return self();
    +    }
     
    -        private Builder(PrometheusProperties properties) {
    -            super(Collections.singletonList("quantile"), properties);
    -        }
    +    private Builder(PrometheusProperties properties) {
    +      super(Collections.singletonList("quantile"), properties);
    +    }
     
    -        @Override
    -        public SummaryWithCallback build() {
    -            return new SummaryWithCallback(this);
    -        }
    +    @Override
    +    public SummaryWithCallback build() {
    +      return new SummaryWithCallback(this);
    +    }
     
    -        @Override
    -        protected Builder self() {
    -            return this;
    -        }
    +    @Override
    +    protected Builder self() {
    +      return this;
         }
    +  }
     }
    diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java
    index 22780819e..6af7fa54a 100644
    --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java
    +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java
    @@ -8,30 +8,30 @@
     import java.util.concurrent.TimeUnit;
     
     /**
    - * Used for scheduling maintenance tasks like purging outdated Exemplars or resetting native histograms.
    + * Used for scheduling maintenance tasks like purging outdated Exemplars or resetting native
    + * histograms.
      */
     public class Scheduler {
     
    -    private static class DaemonThreadFactory implements ThreadFactory {
    -        public Thread newThread(Runnable runnable) {
    -            Thread thread = new Thread(runnable);
    -            thread.setDaemon(true);
    -            return thread;
    -        }
    +  private static class DaemonThreadFactory implements ThreadFactory {
    +    public Thread newThread(Runnable runnable) {
    +      Thread thread = new Thread(runnable);
    +      thread.setDaemon(true);
    +      return thread;
         }
    +  }
     
    -    private static final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(new DaemonThreadFactory());
    +  private static final ScheduledExecutorService executor =
    +      Executors.newSingleThreadScheduledExecutor(new DaemonThreadFactory());
     
    -    public static ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) {
    -        return executor.schedule(command, delay, unit);
    -    }
    +  public static ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) {
    +    return executor.schedule(command, delay, unit);
    +  }
     
    -    /**
    -     * For unit test. Wait until the executor Thread is running.
    -     */
    -    public static void awaitInitialization() throws InterruptedException {
    -        CountDownLatch latch = new CountDownLatch(1);
    -        Scheduler.schedule(latch::countDown, 0, TimeUnit.MILLISECONDS);
    -        latch.await();
    -    }
    +  /** For unit test. Wait until the executor Thread is running. */
    +  public static void awaitInitialization() throws InterruptedException {
    +    CountDownLatch latch = new CountDownLatch(1);
    +    Scheduler.schedule(latch::countDown, 0, TimeUnit.MILLISECONDS);
    +    latch.await();
    +  }
     }
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java
    index 4ae0cd0bb..8c015f591 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java
    @@ -2,5 +2,5 @@
     
     public class TimerApiTest {
     
    -    // TODO: Port this from the simpleclient SimpleTimerTest
    +  // TODO: Port this from the simpleclient SimpleTimerTest
     }
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerConfigTestUtil.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerConfigTestUtil.java
    index c20482e44..e22e9d6c6 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerConfigTestUtil.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerConfigTestUtil.java
    @@ -1,30 +1,32 @@
     package io.prometheus.metrics.core.exemplars;
     
    -import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfig;
    -
     import java.lang.reflect.Field;
     
     public class ExemplarSamplerConfigTestUtil {
     
    -    private static ExemplarSamplerConfig getConfig(Object metric, String fieldName) throws NoSuchFieldException, IllegalAccessException {
    -        Field configField = metric.getClass().getDeclaredField(fieldName);
    -        configField.setAccessible(true);
    -        return (ExemplarSamplerConfig) configField.get(metric);
    -    }
    +  private static ExemplarSamplerConfig getConfig(Object metric, String fieldName)
    +      throws NoSuchFieldException, IllegalAccessException {
    +    Field configField = metric.getClass().getDeclaredField(fieldName);
    +    configField.setAccessible(true);
    +    return (ExemplarSamplerConfig) configField.get(metric);
    +  }
     
    -    private static void setRetentionPeriod(ExemplarSamplerConfig config, String name, long value) throws IllegalAccessException, NoSuchFieldException {
    -        Field field = config.getClass().getDeclaredField(name);
    -        field.setAccessible(true);
    -        field.set(config, value);
    -    }
    +  private static void setRetentionPeriod(ExemplarSamplerConfig config, String name, long value)
    +      throws IllegalAccessException, NoSuchFieldException {
    +    Field field = config.getClass().getDeclaredField(name);
    +    field.setAccessible(true);
    +    field.set(config, value);
    +  }
     
    -    public static void setMinRetentionPeriodMillis(Object metric, long value) throws NoSuchFieldException, IllegalAccessException {
    -        ExemplarSamplerConfig config = getConfig(metric, "exemplarSamplerConfig");
    -        setRetentionPeriod(config, "minRetentionPeriodMillis", value);
    -    }
    +  public static void setMinRetentionPeriodMillis(Object metric, long value)
    +      throws NoSuchFieldException, IllegalAccessException {
    +    ExemplarSamplerConfig config = getConfig(metric, "exemplarSamplerConfig");
    +    setRetentionPeriod(config, "minRetentionPeriodMillis", value);
    +  }
     
    -    public static void setSampleIntervalMillis(Object metric, long value) throws NoSuchFieldException, IllegalAccessException {
    -        ExemplarSamplerConfig config = getConfig(metric, "exemplarSamplerConfig");
    -        setRetentionPeriod(config, "sampleIntervalMillis", value);
    -    }
    +  public static void setSampleIntervalMillis(Object metric, long value)
    +      throws NoSuchFieldException, IllegalAccessException {
    +    ExemplarSamplerConfig config = getConfig(metric, "exemplarSamplerConfig");
    +    setRetentionPeriod(config, "sampleIntervalMillis", value);
    +  }
     }
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java
    index 1af5da42b..9d51ae17b 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java
    @@ -1,10 +1,10 @@
     package io.prometheus.metrics.core.exemplars;
     
    -import io.prometheus.metrics.tracer.initializer.SpanContextSupplier;
    +import io.prometheus.metrics.core.util.Scheduler;
     import io.prometheus.metrics.model.snapshots.Exemplar;
     import io.prometheus.metrics.model.snapshots.Exemplars;
     import io.prometheus.metrics.model.snapshots.Label;
    -import io.prometheus.metrics.core.util.Scheduler;
    +import io.prometheus.metrics.tracer.initializer.SpanContextSupplier;
     import org.junit.After;
     import org.junit.Assert;
     import org.junit.Before;
    @@ -12,214 +12,215 @@
     
     public class ExemplarSamplerTest {
     
    -    private final int tick = 10; // Time step in milliseconds. Make this larger if the test is flaky.
    -    private final int sampleInterval = 10 * tick; // do not change this
    -    private final int minAge = 50 * tick; // do not change this
    -    private final int maxAge = 200 * tick; // do not change this
    -
    -    private ExemplarSamplerConfig makeConfig(double... buckets) {
    -        return new ExemplarSamplerConfig(
    -                minAge,
    -                maxAge,
    -                sampleInterval,
    -                buckets.length == 0 ? 4 : buckets.length, // number of exemplars
    -                buckets.length == 0 ? null : buckets
    -        );
    +  private final int tick = 10; // Time step in milliseconds. Make this larger if the test is flaky.
    +  private final int sampleInterval = 10 * tick; // do not change this
    +  private final int minAge = 50 * tick; // do not change this
    +  private final int maxAge = 200 * tick; // do not change this
    +
    +  private ExemplarSamplerConfig makeConfig(double... buckets) {
    +    return new ExemplarSamplerConfig(
    +        minAge,
    +        maxAge,
    +        sampleInterval,
    +        buckets.length == 0 ? 4 : buckets.length, // number of exemplars
    +        buckets.length == 0 ? null : buckets);
    +  }
    +
    +  private static class SpanContext implements io.prometheus.metrics.tracer.common.SpanContext {
    +
    +    int callCount = 0;
    +    boolean isSampled = true;
    +    boolean isExemplar = false;
    +
    +    @Override
    +    public String getCurrentTraceId() {
    +      return "" + (callCount++);
         }
     
    -
    -    private static class SpanContext implements io.prometheus.metrics.tracer.common.SpanContext {
    -
    -        int callCount = 0;
    -        boolean isSampled = true;
    -        boolean isExemplar = false;
    -
    -        @Override
    -        public String getCurrentTraceId() {
    -            return "" + (callCount++);
    -        }
    -
    -        @Override
    -        public String getCurrentSpanId() {
    -            return "" + callCount;
    -        }
    -
    -        @Override
    -        public boolean isCurrentSpanSampled() {
    -            return isSampled;
    -        }
    -
    -        @Override
    -        public void markCurrentSpanAsExemplar() {
    -            isExemplar = true;
    -        }
    +    @Override
    +    public String getCurrentSpanId() {
    +      return "" + callCount;
         }
     
    -    @Test
    -    public void testCustomExemplarsBuckets() throws Exception {
    -        // TODO
    +    @Override
    +    public boolean isCurrentSpanSampled() {
    +      return isSampled;
         }
     
    -    private io.prometheus.metrics.tracer.common.SpanContext origContext;
    -
    -    @Before
    -    public void setUp() {
    -        origContext = SpanContextSupplier.getSpanContext();
    +    @Override
    +    public void markCurrentSpanAsExemplar() {
    +      isExemplar = true;
         }
    -
    -    @After
    -    public void tearDown() {
    -        SpanContextSupplier.setSpanContext(origContext);
    -    }
    -
    -    @Test
    -    public void testIsSampled() throws Exception {
    -        SpanContext context = new SpanContext();
    -        context.isSampled = false;
    -        ExemplarSampler sampler = new ExemplarSampler(makeConfig(), context);
    -        Thread.sleep(tick); // t = 1 tick
    -        sampler.observe(0.3); // no sampled, because isSampled() returns false
    -        assertExemplars(sampler); // empty
    -    }
    -
    -    @Test
    -    public void testDefaultConfigHasFourExemplars() throws Exception {
    -        ExemplarSampler sampler = new ExemplarSampler(makeConfig(), new SpanContext());
    -        Thread.sleep(tick); // t = 1 tick
    -        sampler.observe(0.3);
    -        Thread.sleep(sampleInterval + tick); // t = 12 tick
    -        sampler.observe(0.8);
    -        Thread.sleep(sampleInterval + tick); // t = 23 tick
    -        sampler.observe(0.4);
    -        Thread.sleep(sampleInterval + tick); // t = 34 tick
    -        sampler.observe(0.6);
    -        Thread.sleep(sampleInterval + tick); // t = 45 tick
    -        sampler.observe(0.2); // not observed, we got 4 Exemplars already and non reached min age
    -        assertExemplars(sampler, 0.3, 0.8, 0.4, 0.6);
    -        print(sampler.collect());
    -    }
    -
    -    @Test
    -    public void testEmptyBuckets() throws Exception {
    -        ExemplarSampler sampler = new ExemplarSampler(makeConfig(Double.POSITIVE_INFINITY), new SpanContext());
    -        Thread.sleep(tick); // t = 1 tick
    -        sampler.observe(0.8); // observed in the +Inf bucket
    -        Thread.sleep(sampleInterval + tick); // t = 12 tick
    -        sampler.observe(0.5); // not observed, because +Inf is the only bucket
    -        assertExemplars(sampler, 0.8);
    -        print(sampler.collect());
    -    }
    -
    -    @Test
    -    public void testDefaultExemplarsBuckets() throws Exception {
    -        ExemplarSampler sampler = new ExemplarSampler(makeConfig(0.2, 0.4, 0.6, 0.8, 1.0, Double.POSITIVE_INFINITY), new SpanContext());
    -        Scheduler.awaitInitialization();
    -        Thread.sleep(tick); // t = 1 tick
    -        sampler.observe(0.3);
    -        sampler.observe(0.5); // not observed, previous observation is less than sample interval ms ago
    -        assertExemplars(sampler, 0.3);
    -        Thread.sleep(sampleInterval + tick); // t = 12 ticks
    -        sampler.observe(0.5); // observed
    -        assertExemplars(sampler, 0.3, 0.5);
    -        Thread.sleep(sampleInterval + tick); // t = 23 ticks
    -        sampler.observe(0.4); // not observed, because 0.3 hasn't reached min age yet
    -        assertExemplars(sampler, 0.3, 0.5);
    -        Thread.sleep(sampleInterval + tick); // t = 34 ticks
    -        sampler.observe(1.1); // observed
    -        assertExemplars(sampler, 0.3, 0.5, 1.1);
    -        Thread.sleep(20 * tick); // t = 54 ticks
    -        assertExemplars(sampler, 0.3, 0.5, 1.1);
    -        sampler.observe(0.4); // observed
    -        assertExemplars(sampler, 0.4, 0.5, 1.1);
    -        Thread.sleep(159 * tick); // t = 213 ticks
    -        assertExemplars(sampler, 0.4, 1.1); // 0.5 evicted because it has reached max age
    -        print(sampler.collect());
    -    }
    -
    -    @Test
    -    public void testCustomExemplarsNoBuckets() throws Exception {
    -        // TODO
    -    }
    -
    -    @Test
    -    public void testDefaultExemplarsNoBuckets() throws Exception {
    -        ExemplarSampler sampler = new ExemplarSampler(makeConfig(), new SpanContext());
    -        Scheduler.awaitInitialization();
    -        Thread.sleep(tick);           // t = 1 tick
    -        sampler.observe(1);    // observed
    -        assertExemplars(sampler, 1);
    -        sampler.observe(2);    // not observed, previous observation is less than sample interval ms ago
    -        Thread.sleep(sampleInterval + tick); // t = 12 ticks
    -        sampler.observe(3);    // observed
    -        assertExemplars(sampler, 1, 3);
    -        Thread.sleep(2 * tick);    // t = 14 ticks
    -        sampler.observe(4);    // not observed, previous observation is less than sample interval ms ago
    -        Thread.sleep(sampleInterval + tick); // t = 25 ticks
    -        sampler.observe(5);    // observed
    -        assertExemplars(sampler, 1, 3, 5);
    -        Thread.sleep(sampleInterval + tick); // t = 36 ticks
    -        sampler.observe(6);    // observed
    -        assertExemplars(sampler, 1, 3, 5, 6);
    -        Thread.sleep(sampleInterval + tick);  // t = 47 ticks
    -        sampler.observe(7);    // not observed, because no Exemplar has reached the minimum age yet
    -        Thread.sleep(5 * tick); // t = 52 ticks
    -        sampler.observe(2); // not observed. 1 is older than min age, but kept because it's the minimum
    -        assertExemplars(sampler, 1, 3, 5, 6);
    -        Thread.sleep(sampleInterval + tick); // t = 63 ticks
    -        sampler.observe(2); // observed
    -        assertExemplars(sampler, 1, 2, 5, 6);
    -        Thread.sleep(27 * tick); // t = 90 ticks
    -        sampler.observe(7); // observed, replaces 6 because 7 > 6 even though 5 is older
    -        assertExemplars(sampler, 1, 2, 5, 7);
    -        sampler.observe(8); // not observed, sample interval not done
    -        assertExemplars(sampler, 1, 2, 5, 7);
    -        Thread.sleep(sampleInterval + tick); // t = 101 ticks
    -        sampler.observe(8); // observed
    -        assertExemplars(sampler, 1, 2, 8, 7);
    -        Thread.sleep(101 * tick); // t = 202 ticks
    -        sampler.observe(5); // observed, replaces 1 because 1 reached the max age
    -        assertExemplars(sampler, 5, 2, 8, 7);
    -        print(sampler.collect());
    -    }
    -
    -    private void assertExemplars(ExemplarSampler sampler, double... values) {
    -        Exemplars exemplars = sampler.collect();
    -        Assert.assertEquals(values.length, exemplars.size());
    -        for (double value : values) {
    -            boolean found = false;
    -            for (Exemplar exemplar : exemplars) {
    -                if (exemplar.getValue() == value) {
    -                    found = true;
    -                    break;
    -                }
    -            }
    -            Assert.assertTrue(value + " not found", found);
    +  }
    +
    +  @Test
    +  public void testCustomExemplarsBuckets() throws Exception {
    +    // TODO
    +  }
    +
    +  private io.prometheus.metrics.tracer.common.SpanContext origContext;
    +
    +  @Before
    +  public void setUp() {
    +    origContext = SpanContextSupplier.getSpanContext();
    +  }
    +
    +  @After
    +  public void tearDown() {
    +    SpanContextSupplier.setSpanContext(origContext);
    +  }
    +
    +  @Test
    +  public void testIsSampled() throws Exception {
    +    SpanContext context = new SpanContext();
    +    context.isSampled = false;
    +    ExemplarSampler sampler = new ExemplarSampler(makeConfig(), context);
    +    Thread.sleep(tick); // t = 1 tick
    +    sampler.observe(0.3); // no sampled, because isSampled() returns false
    +    assertExemplars(sampler); // empty
    +  }
    +
    +  @Test
    +  public void testDefaultConfigHasFourExemplars() throws Exception {
    +    ExemplarSampler sampler = new ExemplarSampler(makeConfig(), new SpanContext());
    +    Thread.sleep(tick); // t = 1 tick
    +    sampler.observe(0.3);
    +    Thread.sleep(sampleInterval + tick); // t = 12 tick
    +    sampler.observe(0.8);
    +    Thread.sleep(sampleInterval + tick); // t = 23 tick
    +    sampler.observe(0.4);
    +    Thread.sleep(sampleInterval + tick); // t = 34 tick
    +    sampler.observe(0.6);
    +    Thread.sleep(sampleInterval + tick); // t = 45 tick
    +    sampler.observe(0.2); // not observed, we got 4 Exemplars already and non reached min age
    +    assertExemplars(sampler, 0.3, 0.8, 0.4, 0.6);
    +    print(sampler.collect());
    +  }
    +
    +  @Test
    +  public void testEmptyBuckets() throws Exception {
    +    ExemplarSampler sampler =
    +        new ExemplarSampler(makeConfig(Double.POSITIVE_INFINITY), new SpanContext());
    +    Thread.sleep(tick); // t = 1 tick
    +    sampler.observe(0.8); // observed in the +Inf bucket
    +    Thread.sleep(sampleInterval + tick); // t = 12 tick
    +    sampler.observe(0.5); // not observed, because +Inf is the only bucket
    +    assertExemplars(sampler, 0.8);
    +    print(sampler.collect());
    +  }
    +
    +  @Test
    +  public void testDefaultExemplarsBuckets() throws Exception {
    +    ExemplarSampler sampler =
    +        new ExemplarSampler(
    +            makeConfig(0.2, 0.4, 0.6, 0.8, 1.0, Double.POSITIVE_INFINITY), new SpanContext());
    +    Scheduler.awaitInitialization();
    +    Thread.sleep(tick); // t = 1 tick
    +    sampler.observe(0.3);
    +    sampler.observe(0.5); // not observed, previous observation is less than sample interval ms ago
    +    assertExemplars(sampler, 0.3);
    +    Thread.sleep(sampleInterval + tick); // t = 12 ticks
    +    sampler.observe(0.5); // observed
    +    assertExemplars(sampler, 0.3, 0.5);
    +    Thread.sleep(sampleInterval + tick); // t = 23 ticks
    +    sampler.observe(0.4); // not observed, because 0.3 hasn't reached min age yet
    +    assertExemplars(sampler, 0.3, 0.5);
    +    Thread.sleep(sampleInterval + tick); // t = 34 ticks
    +    sampler.observe(1.1); // observed
    +    assertExemplars(sampler, 0.3, 0.5, 1.1);
    +    Thread.sleep(20 * tick); // t = 54 ticks
    +    assertExemplars(sampler, 0.3, 0.5, 1.1);
    +    sampler.observe(0.4); // observed
    +    assertExemplars(sampler, 0.4, 0.5, 1.1);
    +    Thread.sleep(159 * tick); // t = 213 ticks
    +    assertExemplars(sampler, 0.4, 1.1); // 0.5 evicted because it has reached max age
    +    print(sampler.collect());
    +  }
    +
    +  @Test
    +  public void testCustomExemplarsNoBuckets() throws Exception {
    +    // TODO
    +  }
    +
    +  @Test
    +  public void testDefaultExemplarsNoBuckets() throws Exception {
    +    ExemplarSampler sampler = new ExemplarSampler(makeConfig(), new SpanContext());
    +    Scheduler.awaitInitialization();
    +    Thread.sleep(tick); // t = 1 tick
    +    sampler.observe(1); // observed
    +    assertExemplars(sampler, 1);
    +    sampler.observe(2); // not observed, previous observation is less than sample interval ms ago
    +    Thread.sleep(sampleInterval + tick); // t = 12 ticks
    +    sampler.observe(3); // observed
    +    assertExemplars(sampler, 1, 3);
    +    Thread.sleep(2 * tick); // t = 14 ticks
    +    sampler.observe(4); // not observed, previous observation is less than sample interval ms ago
    +    Thread.sleep(sampleInterval + tick); // t = 25 ticks
    +    sampler.observe(5); // observed
    +    assertExemplars(sampler, 1, 3, 5);
    +    Thread.sleep(sampleInterval + tick); // t = 36 ticks
    +    sampler.observe(6); // observed
    +    assertExemplars(sampler, 1, 3, 5, 6);
    +    Thread.sleep(sampleInterval + tick); // t = 47 ticks
    +    sampler.observe(7); // not observed, because no Exemplar has reached the minimum age yet
    +    Thread.sleep(5 * tick); // t = 52 ticks
    +    sampler.observe(2); // not observed. 1 is older than min age, but kept because it's the minimum
    +    assertExemplars(sampler, 1, 3, 5, 6);
    +    Thread.sleep(sampleInterval + tick); // t = 63 ticks
    +    sampler.observe(2); // observed
    +    assertExemplars(sampler, 1, 2, 5, 6);
    +    Thread.sleep(27 * tick); // t = 90 ticks
    +    sampler.observe(7); // observed, replaces 6 because 7 > 6 even though 5 is older
    +    assertExemplars(sampler, 1, 2, 5, 7);
    +    sampler.observe(8); // not observed, sample interval not done
    +    assertExemplars(sampler, 1, 2, 5, 7);
    +    Thread.sleep(sampleInterval + tick); // t = 101 ticks
    +    sampler.observe(8); // observed
    +    assertExemplars(sampler, 1, 2, 8, 7);
    +    Thread.sleep(101 * tick); // t = 202 ticks
    +    sampler.observe(5); // observed, replaces 1 because 1 reached the max age
    +    assertExemplars(sampler, 5, 2, 8, 7);
    +    print(sampler.collect());
    +  }
    +
    +  private void assertExemplars(ExemplarSampler sampler, double... values) {
    +    Exemplars exemplars = sampler.collect();
    +    Assert.assertEquals(values.length, exemplars.size());
    +    for (double value : values) {
    +      boolean found = false;
    +      for (Exemplar exemplar : exemplars) {
    +        if (exemplar.getValue() == value) {
    +          found = true;
    +          break;
             }
    +      }
    +      Assert.assertTrue(value + " not found", found);
         }
    -
    -    private void print(Exemplars exemplars) {
    -        System.out.print("[");
    -        boolean farst = true;
    -        for (Exemplar exemplar : exemplars) {
    -            if (!farst) {
    -                System.out.print(",");
    -            }
    -            farst = false;
    -            System.out.print(exemplar.getValue() + "{");
    -            boolean first = true;
    -            for (Label label : exemplar.getLabels()) {
    -                if (!first) {
    -                    System.out.print(",");
    -                }
    -                System.out.print(label.getName() + "=" + label.getValue());
    -                first = false;
    -            }
    -            if (!first) {
    -                System.out.print(",");
    -            }
    -            System.out.print("age=" + (System.currentTimeMillis() - exemplar.getTimestampMillis()));
    -            System.out.print("}");
    +  }
    +
    +  private void print(Exemplars exemplars) {
    +    System.out.print("[");
    +    boolean farst = true;
    +    for (Exemplar exemplar : exemplars) {
    +      if (!farst) {
    +        System.out.print(",");
    +      }
    +      farst = false;
    +      System.out.print(exemplar.getValue() + "{");
    +      boolean first = true;
    +      for (Label label : exemplar.getLabels()) {
    +        if (!first) {
    +          System.out.print(",");
             }
    -        System.out.println("]");
    +        System.out.print(label.getName() + "=" + label.getValue());
    +        first = false;
    +      }
    +      if (!first) {
    +        System.out.print(",");
    +      }
    +      System.out.print("age=" + (System.currentTimeMillis() - exemplar.getTimestampMillis()));
    +      System.out.print("}");
         }
    +    System.out.println("]");
    +  }
     }
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java
    index 033420950..b1409b142 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java
    @@ -1,5 +1,7 @@
     package io.prometheus.metrics.core.exemplars;
     
    +import static io.prometheus.metrics.model.snapshots.Exemplar.TRACE_ID;
    +
     import io.prometheus.metrics.config.ExemplarsProperties;
     import io.prometheus.metrics.model.snapshots.Exemplar;
     import io.prometheus.metrics.model.snapshots.Exemplars;
    @@ -7,97 +9,97 @@
     import io.prometheus.metrics.tracer.initializer.SpanContextSupplier;
     import org.junit.*;
     
    -import static io.prometheus.metrics.model.snapshots.Exemplar.TRACE_ID;
    -
     public class SpanContextSupplierTest {
     
    -    public SpanContext makeSpanContext(String traceId, String spanId) {
    -
    -        return new SpanContext() {
    -            @Override
    -            public String getCurrentTraceId() {
    -                return traceId;
    -            }
    -
    -            @Override
    -            public String getCurrentSpanId() {
    -                return spanId;
    -            }
    -
    -            @Override
    -            public boolean isCurrentSpanSampled() {
    -                return true;
    -            }
    -
    -            @Override
    -            public void markCurrentSpanAsExemplar() {
    -            }
    -        };
    -    }
    -
    -    SpanContext spanContextA = makeSpanContext("A", "a");
    -    SpanContext spanContextB = makeSpanContext("B", "b");
    -    SpanContext origSpanContext;
    -
    -    ExemplarSamplerConfig config = new ExemplarSamplerConfig(
    -            10, // min retention period in milliseconds
    -            20, // max retention period in milliseconds
    -            5, // sample interval in millisecnods
    -            1, // number of exemplars
    -            null // histogram upper bounds
    -    );
    -
    -    @Before
    -    public void setUp() {
    -        origSpanContext = SpanContextSupplier.getSpanContext();
    -    }
    -
    -    @After
    -    public void tearDown() {
    -        SpanContextSupplier.setSpanContext(origSpanContext);
    -    }
    -
    -    /**
    -     * Test: When a {@link SpanContext} is provided as a constructor argument to the {@link ExemplarSampler},
    -     * then that {@link SpanContext} is used, not the one from the {@link SpanContextSupplier}.
    -     */
    -    @Test
    -    public void testConstructorInjection() {
    -        ExemplarsProperties properties = ExemplarsProperties.builder().build();
    -        ExemplarSamplerConfig config = new ExemplarSamplerConfig(properties, 1);
    -        ExemplarSampler exemplarSampler = new ExemplarSampler(config, spanContextA);
    -
    -        SpanContextSupplier.setSpanContext(spanContextB);
    -        exemplarSampler.observe(1.0);
    -        Exemplars exemplars = exemplarSampler.collect();
    -        Assert.assertEquals(1, exemplars.size());
    -        Exemplar exemplar = exemplars.get(0);
    -        Assert.assertEquals("A", exemplar.getLabels().get(TRACE_ID));
    -    }
    -
    -    /**
    -     * When the global {@link SpanContext} is updated via {@link SpanContextSupplier#setSpanContext(SpanContext)},
    -     * the {@link ExemplarSampler} recognizes the update (unless a {@link ExemplarSampler} was provided as
    -     * constructor argument to {@link ExemplarSampler}).
    -     */
    -    @Test
    -    public void testUpdateSpanContext() throws InterruptedException {
    -        ExemplarSampler exemplarSampler = new ExemplarSampler(config);
    -
    -        SpanContextSupplier.setSpanContext(spanContextB);
    -        exemplarSampler.observe(1.0);
    -        Exemplars exemplars = exemplarSampler.collect();
    -        Assert.assertEquals(1, exemplars.size());
    -        Exemplar exemplar = exemplars.get(0);
    -        Assert.assertEquals("B", exemplar.getLabels().get(TRACE_ID));
    -
    -        Thread.sleep(15); // more than the minimum retention period defined in config above.
    -
    -        SpanContextSupplier.setSpanContext(spanContextA);
    -        exemplarSampler.observe(1.0);
    -        exemplars = exemplarSampler.collect();
    -        Assert.assertEquals(1, exemplars.size());
    -        exemplar = exemplars.get(0);
    -        Assert.assertEquals("A", exemplar.getLabels().get(TRACE_ID));
    -    }
    +  public SpanContext makeSpanContext(String traceId, String spanId) {
    +
    +    return new SpanContext() {
    +      @Override
    +      public String getCurrentTraceId() {
    +        return traceId;
    +      }
    +
    +      @Override
    +      public String getCurrentSpanId() {
    +        return spanId;
    +      }
    +
    +      @Override
    +      public boolean isCurrentSpanSampled() {
    +        return true;
    +      }
    +
    +      @Override
    +      public void markCurrentSpanAsExemplar() {}
    +    };
    +  }
    +
    +  SpanContext spanContextA = makeSpanContext("A", "a");
    +  SpanContext spanContextB = makeSpanContext("B", "b");
    +  SpanContext origSpanContext;
    +
    +  ExemplarSamplerConfig config =
    +      new ExemplarSamplerConfig(
    +          10, // min retention period in milliseconds
    +          20, // max retention period in milliseconds
    +          5, // sample interval in millisecnods
    +          1, // number of exemplars
    +          null // histogram upper bounds
    +          );
    +
    +  @Before
    +  public void setUp() {
    +    origSpanContext = SpanContextSupplier.getSpanContext();
    +  }
    +
    +  @After
    +  public void tearDown() {
    +    SpanContextSupplier.setSpanContext(origSpanContext);
    +  }
    +
    +  /**
    +   * Test: When a {@link SpanContext} is provided as a constructor argument to the {@link
    +   * ExemplarSampler}, then that {@link SpanContext} is used, not the one from the {@link
    +   * SpanContextSupplier}.
    +   */
    +  @Test
    +  public void testConstructorInjection() {
    +    ExemplarsProperties properties = ExemplarsProperties.builder().build();
    +    ExemplarSamplerConfig config = new ExemplarSamplerConfig(properties, 1);
    +    ExemplarSampler exemplarSampler = new ExemplarSampler(config, spanContextA);
    +
    +    SpanContextSupplier.setSpanContext(spanContextB);
    +    exemplarSampler.observe(1.0);
    +    Exemplars exemplars = exemplarSampler.collect();
    +    Assert.assertEquals(1, exemplars.size());
    +    Exemplar exemplar = exemplars.get(0);
    +    Assert.assertEquals("A", exemplar.getLabels().get(TRACE_ID));
    +  }
    +
    +  /**
    +   * When the global {@link SpanContext} is updated via {@link
    +   * SpanContextSupplier#setSpanContext(SpanContext)}, the {@link ExemplarSampler} recognizes the
    +   * update (unless a {@link ExemplarSampler} was provided as constructor argument to {@link
    +   * ExemplarSampler}).
    +   */
    +  @Test
    +  public void testUpdateSpanContext() throws InterruptedException {
    +    ExemplarSampler exemplarSampler = new ExemplarSampler(config);
    +
    +    SpanContextSupplier.setSpanContext(spanContextB);
    +    exemplarSampler.observe(1.0);
    +    Exemplars exemplars = exemplarSampler.collect();
    +    Assert.assertEquals(1, exemplars.size());
    +    Exemplar exemplar = exemplars.get(0);
    +    Assert.assertEquals("B", exemplar.getLabels().get(TRACE_ID));
    +
    +    Thread.sleep(15); // more than the minimum retention period defined in config above.
    +
    +    SpanContextSupplier.setSpanContext(spanContextA);
    +    exemplarSampler.observe(1.0);
    +    exemplars = exemplarSampler.collect();
    +    Assert.assertEquals(1, exemplars.size());
    +    exemplar = exemplars.get(0);
    +    Assert.assertEquals("A", exemplar.getLabels().get(TRACE_ID));
    +  }
     }
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java
    index ef90f85cf..e8adc42fe 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java
    @@ -1,340 +1,369 @@
     package io.prometheus.metrics.core.metrics;
     
    +import static org.junit.Assert.*;
    +
     import io.prometheus.metrics.core.metrics.CKMSQuantiles.Quantile;
    +import java.util.*;
     import org.apache.commons.math3.distribution.NormalDistribution;
     import org.apache.commons.math3.random.JDKRandomGenerator;
     import org.apache.commons.math3.random.RandomGenerator;
     import org.junit.Test;
     
    -import java.util.*;
    -
    -import static org.junit.Assert.*;
    -
     public class CKMSQuantilesTest {
     
    -    private final Quantile qMin = new Quantile(0.0, 0.00);
    -    private final Quantile q50 = new Quantile(0.5, 0.01);
    -    private final Quantile q95 = new Quantile(0.95, 0.005);
    -    private final Quantile q99 = new Quantile(0.99, 0.001);
    -    private final Quantile qMax = new Quantile(1.0, 0.00);
    -
    -    @Test
    -    public void testGetOnEmptyValues() {
    -        CKMSQuantiles ckms = new CKMSQuantiles(q50, q95, q99);
    -        assertTrue(Double.isNaN(ckms.get(q95.quantile)));
    -    }
    -
    -    @Test
    -    public void testGet() {
    -        Random random = new Random(0);
    -        CKMSQuantiles ckms = new CKMSQuantiles(q50, q95, q99);
    -        List input = shuffledValues(100, random);
    -        for (double value : input) {
    -            ckms.insert(value);
    -        }
    -        validateResults(ckms);
    +  private final Quantile qMin = new Quantile(0.0, 0.00);
    +  private final Quantile q50 = new Quantile(0.5, 0.01);
    +  private final Quantile q95 = new Quantile(0.95, 0.005);
    +  private final Quantile q99 = new Quantile(0.99, 0.001);
    +  private final Quantile qMax = new Quantile(1.0, 0.00);
    +
    +  @Test
    +  public void testGetOnEmptyValues() {
    +    CKMSQuantiles ckms = new CKMSQuantiles(q50, q95, q99);
    +    assertTrue(Double.isNaN(ckms.get(q95.quantile)));
    +  }
    +
    +  @Test
    +  public void testGet() {
    +    Random random = new Random(0);
    +    CKMSQuantiles ckms = new CKMSQuantiles(q50, q95, q99);
    +    List input = shuffledValues(100, random);
    +    for (double value : input) {
    +      ckms.insert(value);
         }
    -
    -    @Test
    -    public void testBatchInsert() {
    -        Random random = new Random(1);
    -        testInsertBatch(1, 1, 100, random);
    -        testInsertBatch(1, 10, 100, random);
    -        testInsertBatch(2, 10, 100, random);
    -        testInsertBatch(2, 110, 100, random); // compress never called, because compress interval > number of inserts
    -        testInsertBatch(3, 10, 100, random);
    -        testInsertBatch(10, 10, 100, random);
    -        testInsertBatch(128, 128, 1, random);
    -        testInsertBatch(128, 128, 1000, random);
    -        testInsertBatch(128, 128, 10*1000, random);
    -        testInsertBatch(128, 128, 100*1000, random);
    -        testInsertBatch(128, 128, 1000*1000, random);
    +    validateResults(ckms);
    +  }
    +
    +  @Test
    +  public void testBatchInsert() {
    +    Random random = new Random(1);
    +    testInsertBatch(1, 1, 100, random);
    +    testInsertBatch(1, 10, 100, random);
    +    testInsertBatch(2, 10, 100, random);
    +    testInsertBatch(
    +        2, 110, 100,
    +        random); // compress never called, because compress interval > number of inserts
    +    testInsertBatch(3, 10, 100, random);
    +    testInsertBatch(10, 10, 100, random);
    +    testInsertBatch(128, 128, 1, random);
    +    testInsertBatch(128, 128, 1000, random);
    +    testInsertBatch(128, 128, 10 * 1000, random);
    +    testInsertBatch(128, 128, 100 * 1000, random);
    +    testInsertBatch(128, 128, 1000 * 1000, random);
    +  }
    +
    +  private void testInsertBatch(
    +      int batchSize, int compressInterval, int totalNumber, Random random) {
    +    System.out.println(
    +        "testInsertBatch(batchSize="
    +            + batchSize
    +            + ", compressInterval="
    +            + compressInterval
    +            + ", totalNumber="
    +            + totalNumber
    +            + ")");
    +    CKMSQuantiles ckms = new CKMSQuantiles(q50, q95);
    +    int insertsSinceCompress = 0;
    +    List input = shuffledValues(totalNumber, random);
    +    for (int i = 0; i < input.size(); i += batchSize) {
    +      double[] batch = new double[batchSize];
    +      int j;
    +      for (j = 0; j < batchSize && i + j < input.size(); j++) {
    +        batch[j] = input.get(i + j);
    +      }
    +      Arrays.sort(batch, 0, j);
    +      ckms.insertBatch(batch, j);
    +      validateSamples(ckms); // after each insert the samples should still be valid
    +      insertsSinceCompress += j;
    +      if (insertsSinceCompress >= compressInterval) {
    +        ckms.compress();
    +        validateSamples(ckms); // after each compress the samples should still be valid
    +        insertsSinceCompress = 0;
    +      }
         }
    -
    -    private void testInsertBatch(int batchSize, int compressInterval, int totalNumber, Random random) {
    -        System.out.println("testInsertBatch(batchSize=" + batchSize + ", compressInterval=" + compressInterval + ", totalNumber=" + totalNumber + ")");
    -        CKMSQuantiles ckms = new CKMSQuantiles(q50, q95);
    -        int insertsSinceCompress = 0;
    -        List input = shuffledValues(totalNumber, random);
    -        for (int i=0; i= compressInterval) {
    -                ckms.compress();
    -                validateSamples(ckms); // after each compress the samples should still be valid
    -                insertsSinceCompress=0;
    -            }
    -        }
    -        validateResults(ckms);
    +    validateResults(ckms);
    +  }
    +
    +  @Test
    +  public void testGetWithAMillionElements() {
    +    Random random = new Random(2);
    +    List input = shuffledValues(1000 * 1000, random);
    +    CKMSQuantiles ckms = new CKMSQuantiles(q50, q95, q99);
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testGetWithAMillionElements() {
    -        Random random = new Random(2);
    -        List input = shuffledValues(1000*1000, random);
    -        CKMSQuantiles ckms = new CKMSQuantiles(q50, q95, q99);
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    -        assertTrue("sample size should be way below 1_000_000", ckms.samples.size() < 1000);
    +    validateResults(ckms);
    +    assertTrue("sample size should be way below 1_000_000", ckms.samples.size() < 1000);
    +  }
    +
    +  @Test
    +  public void testMin() {
    +    Random random = new Random(3);
    +    List input = shuffledValues(1000, random);
    +    CKMSQuantiles ckms = new CKMSQuantiles(qMin);
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testMin() {
    -        Random random = new Random(3);
    -        List input = shuffledValues(1000, random);
    -        CKMSQuantiles ckms = new CKMSQuantiles(qMin);
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    -        ckms.compress();
    -        assertEquals(2, ckms.samples.size());
    +    validateResults(ckms);
    +    ckms.compress();
    +    assertEquals(2, ckms.samples.size());
    +  }
    +
    +  @Test
    +  public void testMax() {
    +    Random random = new Random(4);
    +    List input = shuffledValues(1000, random);
    +    CKMSQuantiles ckms = new CKMSQuantiles(qMax);
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testMax() {
    -        Random random = new Random(4);
    -        List input = shuffledValues(1000, random);
    -        CKMSQuantiles ckms = new CKMSQuantiles(qMax);
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    -        ckms.compress();
    -        assertEquals(2, ckms.samples.size());
    +    validateResults(ckms);
    +    ckms.compress();
    +    assertEquals(2, ckms.samples.size());
    +  }
    +
    +  @Test
    +  public void testMinMax() {
    +    Random random = new Random(5);
    +    List input = shuffledValues(1000, random);
    +    CKMSQuantiles ckms = new CKMSQuantiles(qMin, qMax);
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testMinMax() {
    -        Random random = new Random(5);
    -        List input = shuffledValues(1000, random);
    -        CKMSQuantiles ckms = new CKMSQuantiles(qMin, qMax);
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    -        ckms.compress();
    -        assertEquals(2, ckms.samples.size());
    +    validateResults(ckms);
    +    ckms.compress();
    +    assertEquals(2, ckms.samples.size());
    +  }
    +
    +  @Test
    +  public void testMinAndOthers() {
    +    Random random = new Random(6);
    +    List input = shuffledValues(1000, random);
    +    CKMSQuantiles ckms = new CKMSQuantiles(q95, qMin);
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testMinAndOthers() {
    -        Random random = new Random(6);
    -        List input = shuffledValues(1000, random);
    -        CKMSQuantiles ckms = new CKMSQuantiles(q95, qMin);
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    -        assertTrue(ckms.samples.size() < 200); // should be a lot less than input.size()
    +    validateResults(ckms);
    +    assertTrue(ckms.samples.size() < 200); // should be a lot less than input.size()
    +  }
    +
    +  @Test
    +  public void testMaxAndOthers() {
    +    Random random = new Random(7);
    +    List input = shuffledValues(10000, random);
    +    CKMSQuantiles ckms = new CKMSQuantiles(q50, q95, qMax);
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testMaxAndOthers() {
    -        Random random = new Random(7);
    -        List input = shuffledValues(10000, random);
    -        CKMSQuantiles ckms = new CKMSQuantiles(q50, q95, qMax);
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    -        assertTrue(ckms.samples.size() < 200); // should be a lot less than input.size()
    +    validateResults(ckms);
    +    assertTrue(ckms.samples.size() < 200); // should be a lot less than input.size()
    +  }
    +
    +  @Test
    +  public void testMinMaxAndOthers() {
    +    Random random = new Random(8);
    +    List input = shuffledValues(10000, random);
    +    CKMSQuantiles ckms = new CKMSQuantiles(qMin, q50, q95, q99, qMax);
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testMinMaxAndOthers() {
    -        Random random = new Random(8);
    -        List input = shuffledValues(10000, random);
    -        CKMSQuantiles ckms = new CKMSQuantiles(qMin, q50, q95, q99, qMax);
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    -        assertTrue(ckms.samples.size() < 200); // should be a lot less than input.size()
    +    validateResults(ckms);
    +    assertTrue(ckms.samples.size() < 200); // should be a lot less than input.size()
    +  }
    +
    +  @Test
    +  public void testExactQuantile() {
    +    Random random = new Random(9);
    +    List input = shuffledValues(10000, random);
    +    CKMSQuantiles ckms = new CKMSQuantiles(new Quantile(0.95, 0));
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testExactQuantile() {
    -        Random random = new Random(9);
    -        List input = shuffledValues(10000, random);
    -        CKMSQuantiles ckms = new CKMSQuantiles(new Quantile(0.95, 0));
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    -        // With epsilon == 0 we need to keep all inputs in samples.
    -        assertEquals(input.size(), ckms.samples.size());
    +    validateResults(ckms);
    +    // With epsilon == 0 we need to keep all inputs in samples.
    +    assertEquals(input.size(), ckms.samples.size());
    +  }
    +
    +  @Test
    +  public void testExactAndOthers() {
    +    Random random = new Random(10);
    +    List input = shuffledValues(10000, random);
    +    CKMSQuantiles ckms = new CKMSQuantiles(q50, new Quantile(0.95, 0), q99);
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testExactAndOthers() {
    -        Random random = new Random(10);
    -        List input = shuffledValues(10000, random);
    -        CKMSQuantiles ckms = new CKMSQuantiles(q50, new Quantile(0.95, 0), q99);
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    -        // With epsilon == 0 we need to keep all inputs in samples.
    -        assertEquals(input.size(), ckms.samples.size());
    +    validateResults(ckms);
    +    // With epsilon == 0 we need to keep all inputs in samples.
    +    assertEquals(input.size(), ckms.samples.size());
    +  }
    +
    +  @Test
    +  public void testExactAndMin() {
    +    Random random = new Random(11);
    +    List input = shuffledValues(10000, random);
    +    CKMSQuantiles ckms = new CKMSQuantiles(qMin, q50, new Quantile(0.95, 0));
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testExactAndMin() {
    -        Random random = new Random(11);
    -        List input = shuffledValues(10000, random);
    -        CKMSQuantiles ckms = new CKMSQuantiles(qMin, q50, new Quantile(0.95, 0));
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    -        // With epsilon == 0 we need to keep all inputs in samples.
    -        assertEquals(input.size(), ckms.samples.size());
    +    validateResults(ckms);
    +    // With epsilon == 0 we need to keep all inputs in samples.
    +    assertEquals(input.size(), ckms.samples.size());
    +  }
    +
    +  @Test
    +  public void testMaxEpsilon() {
    +    Random random = new Random(12);
    +    List input = shuffledValues(10000, random);
    +    // epsilon == 1 basically gives you random results, but it should still not throw an exception.
    +    CKMSQuantiles ckms = new CKMSQuantiles(new Quantile(0.95, 1));
    +    for (double v : input) {
    +      ckms.insert(v);
         }
    -
    -    @Test
    -    public void testMaxEpsilon() {
    -        Random random = new Random(12);
    -        List input = shuffledValues(10000, random);
    -        // epsilon == 1 basically gives you random results, but it should still not throw an exception.
    -        CKMSQuantiles ckms = new CKMSQuantiles(new Quantile(0.95, 1));
    -        for (double v : input) {
    -            ckms.insert(v);
    -        }
    -        validateResults(ckms);
    +    validateResults(ckms);
    +  }
    +
    +  @Test
    +  public void testGetGaussian() {
    +    RandomGenerator rand = new JDKRandomGenerator();
    +    rand.setSeed(0);
    +
    +    double mean = 0.0;
    +    double stddev = 1.0;
    +    NormalDistribution normalDistribution =
    +        new NormalDistribution(
    +            rand, mean, stddev, NormalDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY);
    +
    +    List quantiles = new ArrayList();
    +    quantiles.add(new Quantile(0.10, 0.001));
    +    quantiles.add(new Quantile(0.50, 0.01));
    +    quantiles.add(new Quantile(0.90, 0.001));
    +    quantiles.add(new Quantile(0.95, 0.001));
    +    quantiles.add(new Quantile(0.99, 0.001));
    +
    +    CKMSQuantiles ckms = new CKMSQuantiles(quantiles.toArray(new Quantile[] {}));
    +
    +    final int elemCount = 1000 * 1000;
    +    double[] shuffle = normalDistribution.sample(elemCount);
    +
    +    // insert a million samples
    +    for (double v : shuffle) {
    +      ckms.insert(v);
         }
     
    -    @Test
    -    public void testGetGaussian() {
    -        RandomGenerator rand = new JDKRandomGenerator();
    -        rand.setSeed(0);
    -
    -        double mean = 0.0;
    -        double stddev = 1.0;
    -        NormalDistribution normalDistribution = new NormalDistribution(rand, mean, stddev, NormalDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY);
    -
    -        List quantiles = new ArrayList();
    -        quantiles.add(new Quantile(0.10, 0.001));
    -        quantiles.add(new Quantile(0.50, 0.01));
    -        quantiles.add(new Quantile(0.90, 0.001));
    -        quantiles.add(new Quantile(0.95, 0.001));
    -        quantiles.add(new Quantile(0.99, 0.001));
    -
    -        CKMSQuantiles ckms = new CKMSQuantiles(quantiles.toArray(new Quantile[]{}));
    -
    -        final int elemCount = 1000*1000;
    -        double[] shuffle = normalDistribution.sample(elemCount);
    -
    -        // insert a million samples
    -        for (double v : shuffle) {
    -            ckms.insert(v);
    -        }
    -
    -        // give the actual values for the quantiles we test
    -        double p10 = normalDistribution.inverseCumulativeProbability(0.1);
    -        double p90 = normalDistribution.inverseCumulativeProbability(0.9);
    -        double p95 = normalDistribution.inverseCumulativeProbability(0.95);
    -        double p99 = normalDistribution.inverseCumulativeProbability(0.99);
    -
    -        //ε-approximate quantiles relaxes the requirement
    -        //to finding an item with rank between (φ−ε)n and (φ+ε)n.
    -        assertEquals(p10, ckms.get(0.1), errorBoundsNormalDistribution(0.1, 0.001, normalDistribution));
    -        assertEquals(mean, ckms.get(0.5), errorBoundsNormalDistribution(0.5, 0.01, normalDistribution));
    -        assertEquals(p90, ckms.get(0.9), errorBoundsNormalDistribution(0.9, 0.001, normalDistribution));
    -        assertEquals(p95, ckms.get(0.95), errorBoundsNormalDistribution(0.95, 0.001, normalDistribution));
    -        assertEquals(p99, ckms.get(0.99), errorBoundsNormalDistribution(0.99, 0.001, normalDistribution));
    -
    -        assertTrue("sample size should be below 1000", ckms.samples.size() < 1000);
    +    // give the actual values for the quantiles we test
    +    double p10 = normalDistribution.inverseCumulativeProbability(0.1);
    +    double p90 = normalDistribution.inverseCumulativeProbability(0.9);
    +    double p95 = normalDistribution.inverseCumulativeProbability(0.95);
    +    double p99 = normalDistribution.inverseCumulativeProbability(0.99);
    +
    +    // ε-approximate quantiles relaxes the requirement
    +    // to finding an item with rank between (φ−ε)n and (φ+ε)n.
    +    assertEquals(p10, ckms.get(0.1), errorBoundsNormalDistribution(0.1, 0.001, normalDistribution));
    +    assertEquals(mean, ckms.get(0.5), errorBoundsNormalDistribution(0.5, 0.01, normalDistribution));
    +    assertEquals(p90, ckms.get(0.9), errorBoundsNormalDistribution(0.9, 0.001, normalDistribution));
    +    assertEquals(
    +        p95, ckms.get(0.95), errorBoundsNormalDistribution(0.95, 0.001, normalDistribution));
    +    assertEquals(
    +        p99, ckms.get(0.99), errorBoundsNormalDistribution(0.99, 0.001, normalDistribution));
    +
    +    assertTrue("sample size should be below 1000", ckms.samples.size() < 1000);
    +  }
    +
    +  double errorBoundsNormalDistribution(double p, double epsilon, NormalDistribution nd) {
    +    // (φ+ε)n
    +    double upperBound = nd.inverseCumulativeProbability(p + epsilon);
    +    // (φ−ε)n
    +    double lowerBound = nd.inverseCumulativeProbability(p - epsilon);
    +    // subtract and divide by 2, assuming that the increase is linear in this small epsilon.
    +    return Math.abs(upperBound - lowerBound) / 2;
    +  }
    +
    +  @Test
    +  public void testIllegalArgumentException() {
    +    try {
    +      new Quantile(-1, 0);
    +    } catch (IllegalArgumentException e) {
    +      assertEquals("Quantile must be between 0 and 1", e.getMessage());
    +    } catch (Exception e) {
    +      fail("Wrong exception thrown" + e);
         }
    -
    -    double errorBoundsNormalDistribution(double p, double epsilon, NormalDistribution nd) {
    -        //(φ+ε)n
    -        double upperBound = nd.inverseCumulativeProbability(p + epsilon);
    -        //(φ−ε)n
    -        double lowerBound = nd.inverseCumulativeProbability(p - epsilon);
    -        // subtract and divide by 2, assuming that the increase is linear in this small epsilon.
    -        return Math.abs(upperBound - lowerBound) / 2;
    +    try {
    +      new Quantile(0.95, 2);
    +    } catch (IllegalArgumentException e) {
    +      assertEquals("Epsilon must be between 0 and 1", e.getMessage());
    +    } catch (Exception e) {
    +      fail("Wrong exception thrown" + e);
         }
    +  }
     
    -    @Test
    -    public void testIllegalArgumentException() {
    -        try {
    -            new Quantile(-1, 0);
    -        } catch (IllegalArgumentException e) {
    -            assertEquals("Quantile must be between 0 and 1", e.getMessage());
    -        } catch (Exception e) {
    -            fail("Wrong exception thrown" + e);
    -        }
    -        try {
    -            new Quantile(0.95, 2);
    -        } catch (IllegalArgumentException e) {
    -            assertEquals("Epsilon must be between 0 and 1", e.getMessage());
    -        } catch (Exception e) {
    -            fail("Wrong exception thrown" + e);
    -        }
    +  private List shuffledValues(int n, Random random) {
    +    List result = new ArrayList(n);
    +    for (int i = 0; i < n; i++) {
    +      result.add(i + 1.0);
         }
    -
    -    private List shuffledValues(int n, Random random) {
    -        List result = new ArrayList(n);
    -        for (int i=0; i= lowerBound && actual <= upperBound;
    +      if (!ok) {
             for (CKMSQuantiles.Sample sample : ckms.samples) {
    -            String msg = "invalid sample " + sample + ": count=" + ckms.n + " r=" + r + " f(r)=" + ckms.f(r);
    -            assertTrue(msg, sample.g + sample.delta <= ckms.f(r));
    -            assertTrue("Samples not ordered. Keep in mind that insertBatch() takes a sorted array as parameter.", prev <= sample.value);
    -            prev = sample.value;
    -            r += sample.g;
    -        }
    -        assertEquals("the sum of all g's must be the total number of observations", r, ckms.n);
    -    }
    -
    -    /**
    -     * The values that we insert in these tests are always the numbers from 1 to n, in random order.
    -     * So we can trivially calculate the range of acceptable results for each quantile.
    -     * We check if the value returned by get() is within the range of acceptable results.
    -     */
    -    private void validateResults(CKMSQuantiles ckms) {
    -        for (Quantile q : ckms.quantiles) {
    -            double actual = ckms.get(q.quantile);
    -            double lowerBound, upperBound;
    -            if (q.quantile == 0) {
    -                lowerBound = 1;
    -                upperBound = 1;
    -            } else if (q.quantile == 1) {
    -                lowerBound = ckms.n;
    -                upperBound = ckms.n;
    -            } else {
    -                lowerBound = Math.floor(ckms.n * (q.quantile - 2 * q.epsilon));
    -                upperBound = Math.ceil(ckms.n * (q.quantile + 2 * q.epsilon));
    -            }
    -            boolean ok = actual >= lowerBound && actual <= upperBound;
    -            if (!ok) {
    -                for (CKMSQuantiles.Sample sample : ckms.samples) {
    -                    System.err.println(sample);
    -                }
    -            }
    -            String errorMessage = q + ": " + actual + " not in [" + lowerBound + ", " + upperBound + "], n=" + ckms.n + ", " +  q.quantile + "*" + ckms.n + "=" + (q.quantile*ckms.n);
    -            assertTrue(errorMessage, ok);
    +          System.err.println(sample);
             }
    +      }
    +      String errorMessage =
    +          q
    +              + ": "
    +              + actual
    +              + " not in ["
    +              + lowerBound
    +              + ", "
    +              + upperBound
    +              + "], n="
    +              + ckms.n
    +              + ", "
    +              + q.quantile
    +              + "*"
    +              + ckms.n
    +              + "="
    +              + (q.quantile * ckms.n);
    +      assertTrue(errorMessage, ok);
         }
    +  }
     }
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java
    index 7be2a3869..435c5b8fe 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java
    @@ -1,15 +1,20 @@
     package io.prometheus.metrics.core.metrics;
     
    -import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat;
    +import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals;
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.rules.ExpectedException.none;
    +
    +import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil;
     import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter;
     import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics;
    -import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil;
    -import io.prometheus.metrics.tracer.common.SpanContext;
    -import io.prometheus.metrics.tracer.initializer.SpanContextSupplier;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.Exemplar;
     import io.prometheus.metrics.model.snapshots.Labels;
     import io.prometheus.metrics.model.snapshots.Unit;
    +import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat;
    +import io.prometheus.metrics.tracer.common.SpanContext;
    +import io.prometheus.metrics.tracer.initializer.SpanContextSupplier;
    +import java.util.Iterator;
     import org.junit.After;
     import org.junit.Assert;
     import org.junit.Before;
    @@ -17,302 +22,293 @@
     import org.junit.Test;
     import org.junit.rules.ExpectedException;
     
    -import java.util.Iterator;
    -
    -import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals;
    -import static org.junit.Assert.assertEquals;
    -import static org.junit.rules.ExpectedException.none;
    -
     public class CounterTest {
     
    -    Counter noLabels;
    -    Counter labels;
    -    private static final long exemplarSampleIntervalMillis = 10;
    -    private static final long exemplarMinAgeMillis = 100;
    -    SpanContext origSpanContext;
    -
    -    @Rule
    -    public final ExpectedException thrown = none();
    -
    -    @Before
    -    public void setUp() throws NoSuchFieldException, IllegalAccessException {
    -        noLabels = Counter.builder().name("nolabels").build();
    -        labels = Counter.builder().name("labels")
    -                .help("help")
    -                .unit(Unit.SECONDS)
    -                .labelNames("l")
    -                .build();
    -        origSpanContext = SpanContextSupplier.getSpanContext();
    -        ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(noLabels, exemplarSampleIntervalMillis);
    -        ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(noLabels, exemplarMinAgeMillis);
    -        ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(labels, exemplarSampleIntervalMillis);
    -        ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(labels, exemplarMinAgeMillis);
    -    }
    -
    -    @After
    -    public void tearDown() {
    -        SpanContextSupplier.setSpanContext(origSpanContext);
    -    }
    -
    -    private CounterSnapshot.CounterDataPointSnapshot getData(Counter counter, String... labels) {
    -        return counter.collect().getDataPoints().stream()
    -                .filter(d -> d.getLabels().equals(Labels.of(labels)))
    -                .findAny()
    -                .orElseThrow(() -> new RuntimeException("counter with labels " + labels + " not found"));
    -    }
    -
    -    private double getValue(Counter counter, String... labels) {
    -        return getData(counter, labels).getValue();
    -    }
    -
    -
    -    private int getNumberOfLabels(Counter counter) {
    -        return ((CounterSnapshot) counter.collect()).getDataPoints().size();
    -    }
    -
    -    @Test
    -    public void testIncrement() {
    -        noLabels.inc();
    -        assertEquals(1.0, getValue(noLabels), .001);
    -        noLabels.inc(2);
    -        assertEquals(3.0, getValue(noLabels), .001);
    -        noLabels.labelValues().inc(4);
    -        assertEquals(7.0, getValue(noLabels), .001);
    -        noLabels.labelValues().inc();
    -        assertEquals(8.0, getValue(noLabels), .001);
    -    }
    -
    -    @Test
    -    public void testNegativeIncrementFails() {
    -        thrown.expect(IllegalArgumentException.class);
    -        thrown.expectMessage("Negative increment -1 is illegal for Counter metrics.");
    -        noLabels.inc(-1);
    -    }
    -
    -    @Test
    -    public void testEmptyCountersHaveNoLabels() {
    -        assertEquals(1, getNumberOfLabels(noLabels));
    -        assertEquals(0, getNumberOfLabels(labels));
    -    }
    -
    -    @Test
    -    public void testLabels() {
    -        assertEquals(0, getNumberOfLabels(labels));
    -        labels.labelValues("a").inc();
    -        assertEquals(1, getNumberOfLabels(labels));
    -        assertEquals(1.0, getValue(labels, "l", "a"), .001);
    -        labels.labelValues("b").inc(3);
    -        assertEquals(2, getNumberOfLabels(labels));
    -        assertEquals(1.0, getValue(labels, "l", "a"), .001);
    -        assertEquals(3.0, getValue(labels, "l", "b"), .001);
    +  Counter noLabels;
    +  Counter labels;
    +  private static final long exemplarSampleIntervalMillis = 10;
    +  private static final long exemplarMinAgeMillis = 100;
    +  SpanContext origSpanContext;
    +
    +  @Rule public final ExpectedException thrown = none();
    +
    +  @Before
    +  public void setUp() throws NoSuchFieldException, IllegalAccessException {
    +    noLabels = Counter.builder().name("nolabels").build();
    +    labels =
    +        Counter.builder().name("labels").help("help").unit(Unit.SECONDS).labelNames("l").build();
    +    origSpanContext = SpanContextSupplier.getSpanContext();
    +    ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(noLabels, exemplarSampleIntervalMillis);
    +    ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(noLabels, exemplarMinAgeMillis);
    +    ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(labels, exemplarSampleIntervalMillis);
    +    ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(labels, exemplarMinAgeMillis);
    +  }
    +
    +  @After
    +  public void tearDown() {
    +    SpanContextSupplier.setSpanContext(origSpanContext);
    +  }
    +
    +  private CounterSnapshot.CounterDataPointSnapshot getData(Counter counter, String... labels) {
    +    return counter.collect().getDataPoints().stream()
    +        .filter(d -> d.getLabels().equals(Labels.of(labels)))
    +        .findAny()
    +        .orElseThrow(() -> new RuntimeException("counter with labels " + labels + " not found"));
    +  }
    +
    +  private double getValue(Counter counter, String... labels) {
    +    return getData(counter, labels).getValue();
    +  }
    +
    +  private int getNumberOfLabels(Counter counter) {
    +    return ((CounterSnapshot) counter.collect()).getDataPoints().size();
    +  }
    +
    +  @Test
    +  public void testIncrement() {
    +    noLabels.inc();
    +    assertEquals(1.0, getValue(noLabels), .001);
    +    noLabels.inc(2);
    +    assertEquals(3.0, getValue(noLabels), .001);
    +    noLabels.labelValues().inc(4);
    +    assertEquals(7.0, getValue(noLabels), .001);
    +    noLabels.labelValues().inc();
    +    assertEquals(8.0, getValue(noLabels), .001);
    +  }
    +
    +  @Test
    +  public void testNegativeIncrementFails() {
    +    thrown.expect(IllegalArgumentException.class);
    +    thrown.expectMessage("Negative increment -1 is illegal for Counter metrics.");
    +    noLabels.inc(-1);
    +  }
    +
    +  @Test
    +  public void testEmptyCountersHaveNoLabels() {
    +    assertEquals(1, getNumberOfLabels(noLabels));
    +    assertEquals(0, getNumberOfLabels(labels));
    +  }
    +
    +  @Test
    +  public void testLabels() {
    +    assertEquals(0, getNumberOfLabels(labels));
    +    labels.labelValues("a").inc();
    +    assertEquals(1, getNumberOfLabels(labels));
    +    assertEquals(1.0, getValue(labels, "l", "a"), .001);
    +    labels.labelValues("b").inc(3);
    +    assertEquals(2, getNumberOfLabels(labels));
    +    assertEquals(1.0, getValue(labels, "l", "a"), .001);
    +    assertEquals(3.0, getValue(labels, "l", "b"), .001);
    +  }
    +
    +  @Test
    +  public void testTotalStrippedFromName() {
    +    for (String name :
    +        new String[] {
    +          "my_counter_total", "my.counter.total",
    +          "my_counter_seconds_total", "my.counter.seconds.total",
    +          "my_counter", "my.counter",
    +          "my_counter_seconds", "my.counter.seconds"
    +        }) {
    +      Counter counter = Counter.builder().name(name).unit(Unit.SECONDS).build();
    +      Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(counter.collect());
    +      assertEquals(
    +          "name: \"my_counter_seconds_total\" type: COUNTER metric { counter { value: 0.0 } }",
    +          TextFormat.printer().shortDebugString(protobufData));
         }
    +  }
     
    -    @Test
    -    public void testTotalStrippedFromName() {
    -        for (String name : new String[]{
    -                "my_counter_total", "my.counter.total",
    -                "my_counter_seconds_total", "my.counter.seconds.total",
    -                "my_counter", "my.counter",
    -                "my_counter_seconds", "my.counter.seconds"}) {
    -            Counter counter = Counter.builder()
    -                    .name(name)
    -                    .unit(Unit.SECONDS)
    -                    .build();
    -            Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(counter.collect());
    -            assertEquals("name: \"my_counter_seconds_total\" type: COUNTER metric { counter { value: 0.0 } }", TextFormat.printer().shortDebugString(protobufData));
    -        }
    -    }
    -
    -    @Test
    -    public void testSnapshotComplete() {
    -        long before = System.currentTimeMillis();
    -        Counter counter = Counter.builder()
    -                .name("test_seconds_total")
    -                .unit(Unit.SECONDS)
    -                .help("help message")
    -                .constLabels(Labels.of("const1name", "const1value", "const2name", "const2value"))
    -                .labelNames("path", "status")
    -                .build();
    -        counter.labelValues("/", "200").inc(2);
    -        counter.labelValues("/", "500").inc();
    -        CounterSnapshot snapshot = (CounterSnapshot) counter.collect();
    -        Assert.assertEquals("test_seconds", snapshot.getMetadata().getName());
    -        Assert.assertEquals("seconds", snapshot.getMetadata().getUnit().toString());
    -        Assert.assertEquals("help message", snapshot.getMetadata().getHelp());
    -        Assert.assertEquals(2, snapshot.getDataPoints().size());
    -        Iterator iter = snapshot.getDataPoints().iterator();
    -        // data is ordered by labels, so 200 comes before 500
    -        CounterSnapshot.CounterDataPointSnapshot data = iter.next();
    -        Assert.assertEquals(Labels.of("const1name", "const1value", "const2name", "const2value", "path", "/", "status", "200"), data.getLabels());
    -        Assert.assertEquals(2, data.getValue(), 0.0001);
    -        Assert.assertTrue(data.getCreatedTimestampMillis() >= before);
    -        Assert.assertTrue(data.getCreatedTimestampMillis() <= System.currentTimeMillis());
    -        // 500
    -        data = iter.next();
    -        Assert.assertEquals(Labels.of("const1name", "const1value", "const2name", "const2value", "path", "/", "status", "500"), data.getLabels());
    -        Assert.assertEquals(1, data.getValue(), 0.0001);
    -        Assert.assertTrue(data.getCreatedTimestampMillis() >= before);
    -        Assert.assertTrue(data.getCreatedTimestampMillis() <= System.currentTimeMillis());
    -    }
    -
    -    @Test
    -    public void testIncWithExemplar() throws Exception {
    -        noLabels.incWithExemplar(Labels.of("key", "value"));
    -        assertExemplar(noLabels, 1.0, "key", "value");
    -
    -        Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
    -
    -        noLabels.incWithExemplar(Labels.EMPTY);
    -        assertExemplar(noLabels, 1.0);
    -
    -        Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
    -
    -        noLabels.incWithExemplar(3, Labels.of("key1", "value1", "key2", "value2"));
    -        assertExemplar(noLabels, 3, "key1", "value1", "key2", "value2");
    -    }
    -
    -    private void assertExemplar(Counter counter, double value, String... labels) {
    -        Exemplar exemplar = getData(counter).getExemplar();
    -        Assert.assertEquals(value, exemplar.getValue(), 0.0001);
    -        assertEquals(Labels.of(labels), exemplar.getLabels());
    -    }
    -
    -    @Test
    -    public void testExemplarSampler() throws Exception {
    -        final Exemplar exemplar1 = Exemplar.builder()
    -                .value(2.0)
    -                .traceId("abc")
    -                .spanId("123")
    -                .build();
    -        final Exemplar exemplar2 = Exemplar.builder()
    -                .value(1.0)
    -                .traceId("def")
    -                .spanId("456")
    -                .build();
    -        final Exemplar exemplar3 = Exemplar.builder()
    -                .value(1.0)
    -                .traceId("123")
    -                .spanId("abc")
    -                .build();
    -        final Exemplar customExemplar = Exemplar.builder()
    -                .value(1.0)
    -                .traceId("bab")
    -                .spanId("cdc")
    -                .labels(Labels.of("test", "test"))
    -                .build();
    -        SpanContext spanContext = new SpanContext() {
    -            private int callNumber = 0;
    -
    -            @Override
    -            public String getCurrentTraceId() {
    -                switch (callNumber) {
    -                    case 1:
    -                        return "abc";
    -                    case 3:
    -                        return "def";
    -                    case 4:
    -                        return "123";
    -                    case 5:
    -                        return "bab";
    -                    default:
    -                        throw new RuntimeException("unexpected call");
    -                }
    +  @Test
    +  public void testSnapshotComplete() {
    +    long before = System.currentTimeMillis();
    +    Counter counter =
    +        Counter.builder()
    +            .name("test_seconds_total")
    +            .unit(Unit.SECONDS)
    +            .help("help message")
    +            .constLabels(Labels.of("const1name", "const1value", "const2name", "const2value"))
    +            .labelNames("path", "status")
    +            .build();
    +    counter.labelValues("/", "200").inc(2);
    +    counter.labelValues("/", "500").inc();
    +    CounterSnapshot snapshot = (CounterSnapshot) counter.collect();
    +    Assert.assertEquals("test_seconds", snapshot.getMetadata().getName());
    +    Assert.assertEquals("seconds", snapshot.getMetadata().getUnit().toString());
    +    Assert.assertEquals("help message", snapshot.getMetadata().getHelp());
    +    Assert.assertEquals(2, snapshot.getDataPoints().size());
    +    Iterator iter = snapshot.getDataPoints().iterator();
    +    // data is ordered by labels, so 200 comes before 500
    +    CounterSnapshot.CounterDataPointSnapshot data = iter.next();
    +    Assert.assertEquals(
    +        Labels.of(
    +            "const1name", "const1value", "const2name", "const2value", "path", "/", "status", "200"),
    +        data.getLabels());
    +    Assert.assertEquals(2, data.getValue(), 0.0001);
    +    Assert.assertTrue(data.getCreatedTimestampMillis() >= before);
    +    Assert.assertTrue(data.getCreatedTimestampMillis() <= System.currentTimeMillis());
    +    // 500
    +    data = iter.next();
    +    Assert.assertEquals(
    +        Labels.of(
    +            "const1name", "const1value", "const2name", "const2value", "path", "/", "status", "500"),
    +        data.getLabels());
    +    Assert.assertEquals(1, data.getValue(), 0.0001);
    +    Assert.assertTrue(data.getCreatedTimestampMillis() >= before);
    +    Assert.assertTrue(data.getCreatedTimestampMillis() <= System.currentTimeMillis());
    +  }
    +
    +  @Test
    +  public void testIncWithExemplar() throws Exception {
    +    noLabels.incWithExemplar(Labels.of("key", "value"));
    +    assertExemplar(noLabels, 1.0, "key", "value");
    +
    +    Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
    +
    +    noLabels.incWithExemplar(Labels.EMPTY);
    +    assertExemplar(noLabels, 1.0);
    +
    +    Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
    +
    +    noLabels.incWithExemplar(3, Labels.of("key1", "value1", "key2", "value2"));
    +    assertExemplar(noLabels, 3, "key1", "value1", "key2", "value2");
    +  }
    +
    +  private void assertExemplar(Counter counter, double value, String... labels) {
    +    Exemplar exemplar = getData(counter).getExemplar();
    +    Assert.assertEquals(value, exemplar.getValue(), 0.0001);
    +    assertEquals(Labels.of(labels), exemplar.getLabels());
    +  }
    +
    +  @Test
    +  public void testExemplarSampler() throws Exception {
    +    final Exemplar exemplar1 = Exemplar.builder().value(2.0).traceId("abc").spanId("123").build();
    +    final Exemplar exemplar2 = Exemplar.builder().value(1.0).traceId("def").spanId("456").build();
    +    final Exemplar exemplar3 = Exemplar.builder().value(1.0).traceId("123").spanId("abc").build();
    +    final Exemplar customExemplar =
    +        Exemplar.builder()
    +            .value(1.0)
    +            .traceId("bab")
    +            .spanId("cdc")
    +            .labels(Labels.of("test", "test"))
    +            .build();
    +    SpanContext spanContext =
    +        new SpanContext() {
    +          private int callNumber = 0;
    +
    +          @Override
    +          public String getCurrentTraceId() {
    +            switch (callNumber) {
    +              case 1:
    +                return "abc";
    +              case 3:
    +                return "def";
    +              case 4:
    +                return "123";
    +              case 5:
    +                return "bab";
    +              default:
    +                throw new RuntimeException("unexpected call");
                 }
    -
    -            @Override
    -            public String getCurrentSpanId() {
    -                switch (callNumber) {
    -                    case 1:
    -                        return "123";
    -                    case 3:
    -                        return "456";
    -                    case 4:
    -                        return "abc";
    -                    case 5:
    -                        return "cdc";
    -                    default:
    -                        throw new RuntimeException("unexpected call");
    -                }
    +          }
    +
    +          @Override
    +          public String getCurrentSpanId() {
    +            switch (callNumber) {
    +              case 1:
    +                return "123";
    +              case 3:
    +                return "456";
    +              case 4:
    +                return "abc";
    +              case 5:
    +                return "cdc";
    +              default:
    +                throw new RuntimeException("unexpected call");
                 }
    +          }
     
    -            @Override
    -            public boolean isCurrentSpanSampled() {
    -                callNumber++;
    -                if (callNumber == 2) {
    -                    return false;
    -                }
    -                return true;
    +          @Override
    +          public boolean isCurrentSpanSampled() {
    +            callNumber++;
    +            if (callNumber == 2) {
    +              return false;
                 }
    +            return true;
    +          }
     
    -            @Override
    -            public void markCurrentSpanAsExemplar() {
    -            }
    +          @Override
    +          public void markCurrentSpanAsExemplar() {}
             };
    -        Counter counter = Counter.builder()
    -                .name("count_total")
    -                .build();
    +    Counter counter = Counter.builder().name("count_total").build();
     
    -        SpanContextSupplier.setSpanContext(spanContext);
    -        ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(counter, exemplarMinAgeMillis);
    -        ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(counter, exemplarSampleIntervalMillis);
    +    SpanContextSupplier.setSpanContext(spanContext);
    +    ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(counter, exemplarMinAgeMillis);
    +    ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(counter, exemplarSampleIntervalMillis);
     
    -        counter.inc(2.0);
    -        assertExemplarEquals(exemplar1, getData(counter).getExemplar());
    +    counter.inc(2.0);
    +    assertExemplarEquals(exemplar1, getData(counter).getExemplar());
     
    -        Thread.sleep(2 * exemplarSampleIntervalMillis);
    +    Thread.sleep(2 * exemplarSampleIntervalMillis);
     
    -        counter.inc(3.0); // min age not reached -> keep the previous exemplar, exemplar sampler not called
    -        assertExemplarEquals(exemplar1, getData(counter).getExemplar());
    +    counter.inc(
    +        3.0); // min age not reached -> keep the previous exemplar, exemplar sampler not called
    +    assertExemplarEquals(exemplar1, getData(counter).getExemplar());
     
    -        Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
    +    Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
     
    -        counter.inc(2.0); // 2nd call: isSampled() returns false -> not sampled
    -        assertExemplarEquals(exemplar1, getData(counter).getExemplar());
    +    counter.inc(2.0); // 2nd call: isSampled() returns false -> not sampled
    +    assertExemplarEquals(exemplar1, getData(counter).getExemplar());
     
    -        Thread.sleep(2 * exemplarSampleIntervalMillis);
    +    Thread.sleep(2 * exemplarSampleIntervalMillis);
     
    -        counter.inc(1.0); // sampled
    -        assertExemplarEquals(exemplar2, getData(counter).getExemplar());
    +    counter.inc(1.0); // sampled
    +    assertExemplarEquals(exemplar2, getData(counter).getExemplar());
     
    -        Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
    +    Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
     
    -        counter.inc(1.0); // sampled
    -        assertExemplarEquals(exemplar3, getData(counter).getExemplar());
    +    counter.inc(1.0); // sampled
    +    assertExemplarEquals(exemplar3, getData(counter).getExemplar());
     
    -        Thread.sleep(2 * exemplarSampleIntervalMillis);
    +    Thread.sleep(2 * exemplarSampleIntervalMillis);
     
    -        counter.incWithExemplar(Labels.of("test", "test")); // custom exemplar sampled even though the automatic exemplar hasn't reached min age yet
    -        assertExemplarEquals(customExemplar, getData(counter).getExemplar());
    -    }
    -
    -    @Test
    -    public void testExemplarSamplerDisabled() {
    -        Counter counter = Counter.builder()
    -                //.withExemplarSampler((inc, prev) -> {throw new RuntimeException("unexpected call to exemplar sampler");})
    -                .name("count_total")
    -                .withoutExemplars()
    -                .build();
    -        counter.incWithExemplar(3.0, Labels.of("a", "b"));
    -        Assert.assertNull(getData(counter).getExemplar());
    -        counter.inc(2.0);
    -        Assert.assertNull(getData(counter).getExemplar());
    -    }
    +    counter.incWithExemplar(
    +        Labels.of(
    +            "test",
    +            "test")); // custom exemplar sampled even though the automatic exemplar hasn't reached
    +    // min age yet
    +    assertExemplarEquals(customExemplar, getData(counter).getExemplar());
    +  }
     
    -    @Test(expected = IllegalArgumentException.class)
    -    public void testConstLabelsFirst() {
    +  @Test
    +  public void testExemplarSamplerDisabled() {
    +    Counter counter =
             Counter.builder()
    -                .name("test_total")
    -                .constLabels(Labels.of("const_a", "const_b"))
    -                .labelNames("const.a")
    -                .build();
    -    }
    -
    -    @Test(expected = IllegalArgumentException.class)
    -    public void testConstLabelsSecond() {
    -        Counter.builder()
    -                .name("test_total")
    -                .labelNames("const.a")
    -                .constLabels(Labels.of("const_a", "const_b"))
    -                .build();
    -    }
    +            // .withExemplarSampler((inc, prev) -> {throw new RuntimeException("unexpected call to
    +            // exemplar sampler");})
    +            .name("count_total")
    +            .withoutExemplars()
    +            .build();
    +    counter.incWithExemplar(3.0, Labels.of("a", "b"));
    +    Assert.assertNull(getData(counter).getExemplar());
    +    counter.inc(2.0);
    +    Assert.assertNull(getData(counter).getExemplar());
    +  }
    +
    +  @Test(expected = IllegalArgumentException.class)
    +  public void testConstLabelsFirst() {
    +    Counter.builder()
    +        .name("test_total")
    +        .constLabels(Labels.of("const_a", "const_b"))
    +        .labelNames("const.a")
    +        .build();
    +  }
    +
    +  @Test(expected = IllegalArgumentException.class)
    +  public void testConstLabelsSecond() {
    +    Counter.builder()
    +        .name("test_total")
    +        .labelNames("const.a")
    +        .constLabels(Labels.of("const_a", "const_b"))
    +        .build();
    +  }
     }
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java
    index 002a44545..678158cbd 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java
    @@ -1,222 +1,213 @@
     package io.prometheus.metrics.core.metrics;
     
    +import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals;
    +import static org.junit.Assert.assertEquals;
    +
    +import io.prometheus.metrics.core.datapoints.Timer;
     import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil;
    -import io.prometheus.metrics.tracer.common.SpanContext;
    -import io.prometheus.metrics.tracer.initializer.SpanContextSupplier;
     import io.prometheus.metrics.model.snapshots.Exemplar;
     import io.prometheus.metrics.model.snapshots.GaugeSnapshot;
     import io.prometheus.metrics.model.snapshots.Labels;
    -import io.prometheus.metrics.core.datapoints.Timer;
    +import io.prometheus.metrics.tracer.common.SpanContext;
    +import io.prometheus.metrics.tracer.initializer.SpanContextSupplier;
     import org.junit.After;
     import org.junit.Assert;
     import org.junit.Before;
     import org.junit.Test;
     
    -import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals;
    -import static org.junit.Assert.assertEquals;
    -
     public class GaugeTest {
     
    -    private static final long exemplarSampleIntervalMillis = 10;
    -    private static final long exemplarMinAgeMillis = 100;
    -
    -    private Gauge noLabels, labels;
    -
    -    private SpanContext origSpanContext;
    -
    -    @Before
    -    public void setUp() {
    -        noLabels = Gauge.builder().name("nolabels").build();
    -        labels = Gauge.builder().name("labels").labelNames("l").build();
    -        origSpanContext = SpanContextSupplier.getSpanContext();
    -    }
    -
    -    @After
    -    public void tearDown() {
    -        SpanContextSupplier.setSpanContext(origSpanContext);
    -    }
    -
    -    private GaugeSnapshot.GaugeDataPointSnapshot getData(Gauge gauge, String... labels) {
    -        return ((GaugeSnapshot) gauge.collect()).getDataPoints().stream()
    -                .filter(data -> data.getLabels().equals(Labels.of(labels)))
    -                .findAny()
    -                .orElseThrow(RuntimeException::new);
    +  private static final long exemplarSampleIntervalMillis = 10;
    +  private static final long exemplarMinAgeMillis = 100;
    +
    +  private Gauge noLabels, labels;
    +
    +  private SpanContext origSpanContext;
    +
    +  @Before
    +  public void setUp() {
    +    noLabels = Gauge.builder().name("nolabels").build();
    +    labels = Gauge.builder().name("labels").labelNames("l").build();
    +    origSpanContext = SpanContextSupplier.getSpanContext();
    +  }
    +
    +  @After
    +  public void tearDown() {
    +    SpanContextSupplier.setSpanContext(origSpanContext);
    +  }
    +
    +  private GaugeSnapshot.GaugeDataPointSnapshot getData(Gauge gauge, String... labels) {
    +    return ((GaugeSnapshot) gauge.collect())
    +        .getDataPoints().stream()
    +            .filter(data -> data.getLabels().equals(Labels.of(labels)))
    +            .findAny()
    +            .orElseThrow(RuntimeException::new);
    +  }
    +
    +  private double getValue(Gauge gauge, String... labels) {
    +    return getData(gauge, labels).getValue();
    +  }
    +
    +  @Test
    +  public void testIncrement() {
    +    noLabels.inc();
    +    assertEquals(1.0, getValue(noLabels), .001);
    +    noLabels.inc(2);
    +    assertEquals(3.0, getValue(noLabels), .001);
    +    noLabels.inc(4);
    +    assertEquals(7.0, getValue(noLabels), .001);
    +    noLabels.inc();
    +    assertEquals(8.0, getValue(noLabels), .001);
    +  }
    +
    +  @Test
    +  public void testDecrement() {
    +    noLabels.dec();
    +    assertEquals(-1.0, getValue(noLabels), .001);
    +    noLabels.dec(2);
    +    assertEquals(-3.0, getValue(noLabels), .001);
    +    noLabels.dec(4);
    +    assertEquals(-7.0, getValue(noLabels), .001);
    +    noLabels.dec();
    +    assertEquals(-8.0, getValue(noLabels), .001);
    +  }
    +
    +  @Test
    +  public void testSet() {
    +    noLabels.set(42);
    +    assertEquals(42, getValue(noLabels), .001);
    +    noLabels.set(7);
    +    assertEquals(7.0, getValue(noLabels), .001);
    +  }
    +
    +  @Test
    +  public void testTimer() throws InterruptedException {
    +    try (Timer timer = noLabels.startTimer()) {
    +      Thread.sleep(12);
         }
    -
    -    private double getValue(Gauge gauge, String... labels) {
    -        return getData(gauge, labels).getValue();
    -    }
    -
    -    @Test
    -    public void testIncrement() {
    -        noLabels.inc();
    -        assertEquals(1.0, getValue(noLabels), .001);
    -        noLabels.inc(2);
    -        assertEquals(3.0, getValue(noLabels), .001);
    -        noLabels.inc(4);
    -        assertEquals(7.0, getValue(noLabels), .001);
    -        noLabels.inc();
    -        assertEquals(8.0, getValue(noLabels), .001);
    -    }
    -
    -    @Test
    -    public void testDecrement() {
    -        noLabels.dec();
    -        assertEquals(-1.0, getValue(noLabels), .001);
    -        noLabels.dec(2);
    -        assertEquals(-3.0, getValue(noLabels), .001);
    -        noLabels.dec(4);
    -        assertEquals(-7.0, getValue(noLabels), .001);
    -        noLabels.dec();
    -        assertEquals(-8.0, getValue(noLabels), .001);
    -    }
    -
    -    @Test
    -    public void testSet() {
    -        noLabels.set(42);
    -        assertEquals(42, getValue(noLabels), .001);
    -        noLabels.set(7);
    -        assertEquals(7.0, getValue(noLabels), .001);
    -    }
    -
    -    @Test
    -    public void testTimer() throws InterruptedException {
    -        try (Timer timer = noLabels.startTimer()) {
    -            Thread.sleep(12);
    -        }
    -        assertEquals(0.012, getValue(noLabels), 0.005); // 5ms delta should be enough so this isn't flaky
    -    }
    -
    -    @Test
    -    public void noLabelsDefaultZeroValue() {
    -        assertEquals(0.0, getValue(noLabels), .001);
    -    }
    -
    -    @Test
    -    public void testLabels() {
    -        labels.labelValues("a").inc();
    -        labels.labelValues("b").inc(3);
    -        assertEquals(1.0, getValue(labels, "l", "a"), .001);
    -        assertEquals(3.0, getValue(labels, "l", "b"), .001);
    -    }
    -
    -    @Test
    -    public void testExemplarSampler() throws Exception {
    -        final Exemplar exemplar1 = Exemplar.builder()
    -                .value(2.0)
    -                .traceId("abc")
    -                .spanId("123")
    -                .build();
    -        final Exemplar exemplar2 = Exemplar.builder()
    -                .value(6.5)
    -                .traceId("def")
    -                .spanId("456")
    -                .build();
    -        final Exemplar exemplar3 = Exemplar.builder()
    -                .value(7.0)
    -                .traceId("123")
    -                .spanId("abc")
    -                .build();
    -        final Exemplar customExemplar = Exemplar.builder()
    -                .value(8.0)
    -                .traceId("bab")
    -                .spanId("cdc")
    -                .labels(Labels.of("test", "test"))
    -                .build();
    -        SpanContext spanContext = new SpanContext() {
    -            private int callNumber = 0;
    -
    -            @Override
    -            public String getCurrentTraceId() {
    -                switch (callNumber) {
    -                    case 1:
    -                        return "abc";
    -                    case 3:
    -                        return "def";
    -                    case 4:
    -                        return "123";
    -                    case 5:
    -                        return "bab";
    -                    default:
    -                        throw new RuntimeException("unexpected call");
    -                }
    +    assertEquals(
    +        0.012, getValue(noLabels), 0.005); // 5ms delta should be enough so this isn't flaky
    +  }
    +
    +  @Test
    +  public void noLabelsDefaultZeroValue() {
    +    assertEquals(0.0, getValue(noLabels), .001);
    +  }
    +
    +  @Test
    +  public void testLabels() {
    +    labels.labelValues("a").inc();
    +    labels.labelValues("b").inc(3);
    +    assertEquals(1.0, getValue(labels, "l", "a"), .001);
    +    assertEquals(3.0, getValue(labels, "l", "b"), .001);
    +  }
    +
    +  @Test
    +  public void testExemplarSampler() throws Exception {
    +    final Exemplar exemplar1 = Exemplar.builder().value(2.0).traceId("abc").spanId("123").build();
    +    final Exemplar exemplar2 = Exemplar.builder().value(6.5).traceId("def").spanId("456").build();
    +    final Exemplar exemplar3 = Exemplar.builder().value(7.0).traceId("123").spanId("abc").build();
    +    final Exemplar customExemplar =
    +        Exemplar.builder()
    +            .value(8.0)
    +            .traceId("bab")
    +            .spanId("cdc")
    +            .labels(Labels.of("test", "test"))
    +            .build();
    +    SpanContext spanContext =
    +        new SpanContext() {
    +          private int callNumber = 0;
    +
    +          @Override
    +          public String getCurrentTraceId() {
    +            switch (callNumber) {
    +              case 1:
    +                return "abc";
    +              case 3:
    +                return "def";
    +              case 4:
    +                return "123";
    +              case 5:
    +                return "bab";
    +              default:
    +                throw new RuntimeException("unexpected call");
                 }
    -
    -            @Override
    -            public String getCurrentSpanId() {
    -                switch (callNumber) {
    -                    case 1:
    -                        return "123";
    -                    case 3:
    -                        return "456";
    -                    case 4:
    -                        return "abc";
    -                    case 5:
    -                        return "cdc";
    -                    default:
    -                        throw new RuntimeException("unexpected call");
    -                }
    +          }
    +
    +          @Override
    +          public String getCurrentSpanId() {
    +            switch (callNumber) {
    +              case 1:
    +                return "123";
    +              case 3:
    +                return "456";
    +              case 4:
    +                return "abc";
    +              case 5:
    +                return "cdc";
    +              default:
    +                throw new RuntimeException("unexpected call");
                 }
    +          }
     
    -            @Override
    -            public boolean isCurrentSpanSampled() {
    -                callNumber++;
    -                if (callNumber == 2) {
    -                    return false;
    -                }
    -                return true;
    +          @Override
    +          public boolean isCurrentSpanSampled() {
    +            callNumber++;
    +            if (callNumber == 2) {
    +              return false;
                 }
    +            return true;
    +          }
     
    -            @Override
    -            public void markCurrentSpanAsExemplar() {
    -            }
    +          @Override
    +          public void markCurrentSpanAsExemplar() {}
             };
    -        Gauge gauge = Gauge.builder()
    -                .name("my_gauge")
    -                .build();
    +    Gauge gauge = Gauge.builder().name("my_gauge").build();
     
    -        ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(gauge, exemplarMinAgeMillis);
    -        ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(gauge, exemplarSampleIntervalMillis);
    -        SpanContextSupplier.setSpanContext(spanContext);
    +    ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(gauge, exemplarMinAgeMillis);
    +    ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(gauge, exemplarSampleIntervalMillis);
    +    SpanContextSupplier.setSpanContext(spanContext);
     
    -        gauge.inc(2.0);
    -        assertExemplarEquals(exemplar1, getData(gauge).getExemplar());
    +    gauge.inc(2.0);
    +    assertExemplarEquals(exemplar1, getData(gauge).getExemplar());
     
    -        Thread.sleep(2 * exemplarSampleIntervalMillis);
    +    Thread.sleep(2 * exemplarSampleIntervalMillis);
     
    -        gauge.inc(3.0); // min age not reached -> keep the previous exemplar, exemplar sampler not called
    -        assertExemplarEquals(exemplar1, getData(gauge).getExemplar());
    +    gauge.inc(
    +        3.0); // min age not reached -> keep the previous exemplar, exemplar sampler not called
    +    assertExemplarEquals(exemplar1, getData(gauge).getExemplar());
     
    -        Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
    +    Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
     
    -        gauge.inc(2.0); // 2nd call: isSampled() returns false -> not sampled
    -        assertExemplarEquals(exemplar1, getData(gauge).getExemplar());
    +    gauge.inc(2.0); // 2nd call: isSampled() returns false -> not sampled
    +    assertExemplarEquals(exemplar1, getData(gauge).getExemplar());
     
    -        Thread.sleep(2 * exemplarSampleIntervalMillis);
    +    Thread.sleep(2 * exemplarSampleIntervalMillis);
     
    -        gauge.dec(0.5); // sampled
    -        assertExemplarEquals(exemplar2, getData(gauge).getExemplar());
    +    gauge.dec(0.5); // sampled
    +    assertExemplarEquals(exemplar2, getData(gauge).getExemplar());
     
    -        Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
    +    Thread.sleep(exemplarMinAgeMillis + 2 * exemplarSampleIntervalMillis);
     
    -        gauge.set(7.0); // sampled
    -        assertExemplarEquals(exemplar3, getData(gauge).getExemplar());
    +    gauge.set(7.0); // sampled
    +    assertExemplarEquals(exemplar3, getData(gauge).getExemplar());
     
    -        Thread.sleep(2 * exemplarSampleIntervalMillis);
    +    Thread.sleep(2 * exemplarSampleIntervalMillis);
     
    -        gauge.incWithExemplar(Labels.of("test", "test")); // custom exemplar sampled even though the automatic exemplar hasn't reached min age yet
    -        assertExemplarEquals(customExemplar, getData(gauge).getExemplar());
    -    }
    +    gauge.incWithExemplar(
    +        Labels.of(
    +            "test",
    +            "test")); // custom exemplar sampled even though the automatic exemplar hasn't reached
    +    // min age yet
    +    assertExemplarEquals(customExemplar, getData(gauge).getExemplar());
    +  }
     
    -    @Test
    -    public void testExemplarSamplerDisabled() {
    -        Gauge gauge = Gauge.builder()
    -                .name("test")
    -                .withoutExemplars()
    -                .build();
    -        gauge.setWithExemplar(3.0, Labels.of("a", "b"));
    -        Assert.assertNull(getData(gauge).getExemplar());
    -        gauge.inc(2.0);
    -        Assert.assertNull(getData(gauge).getExemplar());
    -    }
    +  @Test
    +  public void testExemplarSamplerDisabled() {
    +    Gauge gauge = Gauge.builder().name("test").withoutExemplars().build();
    +    gauge.setWithExemplar(3.0, Labels.of("a", "b"));
    +    Assert.assertNull(getData(gauge).getExemplar());
    +    gauge.inc(2.0);
    +    Assert.assertNull(getData(gauge).getExemplar());
    +  }
     }
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java
    index 8df44b43e..da7da5a89 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java
    @@ -1,6 +1,9 @@
     package io.prometheus.metrics.core.metrics;
     
    -import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat;
    +import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals;
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertNull;
    +
     import io.prometheus.metrics.core.datapoints.DistributionDataPoint;
     import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil;
     import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
    @@ -12,13 +15,9 @@
     import io.prometheus.metrics.model.snapshots.HistogramSnapshot;
     import io.prometheus.metrics.model.snapshots.Labels;
     import io.prometheus.metrics.model.snapshots.MetricSnapshots;
    +import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat;
     import io.prometheus.metrics.tracer.common.SpanContext;
     import io.prometheus.metrics.tracer.initializer.SpanContextSupplier;
    -import org.junit.After;
    -import org.junit.Assert;
    -import org.junit.Before;
    -import org.junit.Test;
    -
     import java.io.ByteArrayOutputStream;
     import java.io.IOException;
     import java.lang.reflect.Field;
    @@ -40,1270 +39,1464 @@
     import java.util.concurrent.TimeUnit;
     import java.util.concurrent.TimeoutException;
     import java.util.stream.Collectors;
    -
    -import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals;
    -import static org.junit.Assert.assertEquals;
    -import static org.junit.Assert.assertNull;
    +import org.junit.After;
    +import org.junit.Assert;
    +import org.junit.Before;
    +import org.junit.Test;
     
     public class HistogramTest {
     
    -    private static final double RESET_DURATION_REACHED = -123.456; // just a random value indicating that we should simulate that the reset duration has been reached
    -
    -    private SpanContext origSpanContext;
    -
    -    @Before
    -    public void setUp() {
    -        origSpanContext = SpanContextSupplier.getSpanContext();
    -    }
    -
    -    @After
    -    public void tearDown() {
    -        SpanContextSupplier.setSpanContext(origSpanContext);
    +  private static final double RESET_DURATION_REACHED =
    +      -123.456; // just a random value indicating that we should simulate that the reset duration
    +  // has been reached
    +
    +  private SpanContext origSpanContext;
    +
    +  @Before
    +  public void setUp() {
    +    origSpanContext = SpanContextSupplier.getSpanContext();
    +  }
    +
    +  @After
    +  public void tearDown() {
    +    SpanContextSupplier.setSpanContext(origSpanContext);
    +  }
    +
    +  /** Mimic the tests in client_golang. */
    +  private static class GolangTestCase {
    +    final String name;
    +    final String expected;
    +    final Histogram histogram;
    +    final double[] observations;
    +
    +    private GolangTestCase(
    +        String name, String expected, Histogram histogram, double... observations) {
    +      this.name = name;
    +      this.expected = expected;
    +      this.histogram = histogram;
    +      this.observations = observations;
         }
     
    -    /**
    -     * Mimic the tests in client_golang.
    -     */
    -    private static class GolangTestCase {
    -        final String name;
    -        final String expected;
    -        final Histogram histogram;
    -        final double[] observations;
    -
    -        private GolangTestCase(String name, String expected, Histogram histogram, double... observations) {
    -            this.name = name;
    -            this.expected = expected;
    -            this.histogram = histogram;
    -            this.observations = observations;
    -        }
    -
    -        private void run() throws NoSuchFieldException, IllegalAccessException {
    -            System.out.println("Running " + name + "...");
    -            for (double observation : observations) {
    -                if (observation == RESET_DURATION_REACHED) {
    -                    Field resetAllowed = Histogram.DataPoint.class.getDeclaredField("resetDurationExpired");
    -                    resetAllowed.setAccessible(true);
    -                    resetAllowed.set(histogram.getNoLabels(), true);
    -                } else {
    -                    histogram.observe(observation);
    -                }
    -            }
    -            Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(histogram.collect());
    -            String expectedWithMetadata = "name: \"test\" type: HISTOGRAM metric { histogram { " + expected + " } }";
    -            assertEquals("test \"" + name + "\" failed", expectedWithMetadata, TextFormat.printer().shortDebugString(protobufData));
    +    private void run() throws NoSuchFieldException, IllegalAccessException {
    +      System.out.println("Running " + name + "...");
    +      for (double observation : observations) {
    +        if (observation == RESET_DURATION_REACHED) {
    +          Field resetAllowed = Histogram.DataPoint.class.getDeclaredField("resetDurationExpired");
    +          resetAllowed.setAccessible(true);
    +          resetAllowed.set(histogram.getNoLabels(), true);
    +        } else {
    +          histogram.observe(observation);
             }
    +      }
    +      Metrics.MetricFamily protobufData =
    +          new PrometheusProtobufWriter().convert(histogram.collect());
    +      String expectedWithMetadata =
    +          "name: \"test\" type: HISTOGRAM metric { histogram { " + expected + " } }";
    +      assertEquals(
    +          "test \"" + name + "\" failed",
    +          expectedWithMetadata,
    +          TextFormat.printer().shortDebugString(protobufData));
         }
    -
    -    /**
    -     * Test cases copied from histogram_test.go in client_golang.
    -     */
    -    @Test
    -    public void testGolangTests() throws NoSuchFieldException, IllegalAccessException {
    -        GolangTestCase[] testCases = new GolangTestCase[]{
    -                new GolangTestCase("'no sparse buckets' from client_golang",
    -                        "sample_count: 3 " +
    -                                "sample_sum: 6.0 " +
    -                                "bucket { cumulative_count: 0 upper_bound: 0.005 } " +
    -                                "bucket { cumulative_count: 0 upper_bound: 0.01 } " +
    -                                "bucket { cumulative_count: 0 upper_bound: 0.025 } " +
    -                                "bucket { cumulative_count: 0 upper_bound: 0.05 } " +
    -                                "bucket { cumulative_count: 0 upper_bound: 0.1 } " +
    -                                "bucket { cumulative_count: 0 upper_bound: 0.25 } " +
    -                                "bucket { cumulative_count: 0 upper_bound: 0.5 } " +
    -                                "bucket { cumulative_count: 1 upper_bound: 1.0 } " +
    -                                "bucket { cumulative_count: 2 upper_bound: 2.5 } " +
    -                                "bucket { cumulative_count: 3 upper_bound: 5.0 } " +
    -                                "bucket { cumulative_count: 3 upper_bound: 10.0 } " +
    -                                "bucket { cumulative_count: 3 upper_bound: Infinity }",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .classicOnly()
    -                                .build(),
    -                        1.0, 2.0, 3.0),
    -                new GolangTestCase("'factor 1.1 results in schema 3' from client_golang",
    -                        "sample_count: 4 " +
    -                                "sample_sum: 6.0 " +
    -                                "schema: 3 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "positive_span { offset: 0 length: 1 } " +
    -                                "positive_span { offset: 7 length: 1 } " +
    -                                "positive_span { offset: 4 length: 1 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: 0 " +
    -                                "positive_delta: 0",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(3)
    -                                .nativeMaxZeroThreshold(0)
    -                                .build(),
    -                        0.0, 1.0, 2.0, 3.0),
    -                new GolangTestCase("'factor 1.2 results in schema 2' from client_golang",
    -                        "sample_count: 6 " +
    -                                "sample_sum: 7.4 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "positive_span { offset: 0 length: 5 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: -1 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 2",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .build(),
    -                        0, 1, 1.2, 1.4, 1.8, 2),
    -                new GolangTestCase("'factor 4 results in schema -1' from client_golang",
    -                        "sample_count: 14 " +
    -                                "sample_sum: 63.2581251 " +
    -                                "schema: -1 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 0 " +
    -                                "positive_span { offset: -2 length: 6 } " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: 0 " +
    -                                "positive_delta: 0 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -1 " +
    -                                "positive_delta: -2",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(-1)
    -                                .nativeMaxZeroThreshold(0)
    -                                .build(),
    -                        0.0156251, 0.0625, // Bucket -2: (0.015625, 0.0625)
    -                        0.1, 0.25, // Bucket -1: (0.0625, 0.25]
    -                        0.5, 1, // Bucket 0: (0.25, 1]
    -                        1.5, 2, 3, 3.5, // Bucket 1: (1, 4]
    -                        5, 6, 7, // Bucket 2: (4, 16]
    -                        33.33 // Bucket 3: (16, 64]
    -                ),
    -                new GolangTestCase("'factor 17 results in schema -2' from client_golang",
    -                        "sample_count: 14 " +
    -                                "sample_sum: 63.2581251 " +
    -                                "schema: -2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 0 " +
    -                                "positive_span { offset: -1 length: 4 } " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: 3 " +
    -                                "positive_delta: -6",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(-2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .build(),
    -                        0.0156251, 0.0625, // Bucket -1: (0.015625, 0.0625]
    -                        0.1, 0.25, 0.5, 1, // Bucket 0: (0.0625, 1]
    -                        1.5, 2, 3, 3.5, 5, 6, 7, // Bucket 1: (1, 16]
    -                        33.33 // Bucket 2: (16, 256]
    -                ),
    -                new GolangTestCase("'negative buckets' from client_golang",
    -                        "sample_count: 6 " +
    -                                "sample_sum: -7.4 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "negative_span { offset: 0 length: 5 } " +
    -                                "negative_delta: 1 " +
    -                                "negative_delta: -1 " +
    -                                "negative_delta: 2 " +
    -                                "negative_delta: -2 " +
    -                                "negative_delta: 2",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .build(),
    -                        0, -1, -1.2, -1.4, -1.8, -2
    -                ),
    -                new GolangTestCase("'negative and positive buckets' from client_golang",
    -                        "sample_count: 11 " +
    -                                "sample_sum: 0.0 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "negative_span { offset: 0 length: 5 } " +
    -                                "negative_delta: 1 " +
    -                                "negative_delta: -1 " +
    -                                "negative_delta: 2 " +
    -                                "negative_delta: -2 " +
    -                                "negative_delta: 2 " +
    -                                "positive_span { offset: 0 length: 5 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: -1 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 2",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .build(),
    -                        0, -1, -1.2, -1.4, -1.8, -2, 1, 1.2, 1.4, 1.8, 2
    -                ),
    -                new GolangTestCase("'wide zero bucket' from client_golang",
    -                        "sample_count: 11 " +
    -                                "sample_sum: 0.0 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 1.4 " +
    -                                "zero_count: 7 " +
    -                                "negative_span { offset: 4 length: 1 } " +
    -                                "negative_delta: 2 " +
    -                                "positive_span { offset: 4 length: 1 } " +
    -                                "positive_delta: 2",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMinZeroThreshold(1.4)
    -                                .build(),
    -                        0, -1, -1.2, -1.4, -1.8, -2, 1, 1.2, 1.4, 1.8, 2
    -                ),
    -                /*
    -                // See https://github.com/prometheus/client_golang/issues/1275
    -                new TestCase("'NaN observation' from client_golang",
    -                        "sample_count: 7 " +
    -                                "sample_sum: NaN " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "positive_span { offset: 0 length: 5 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: -1 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 2",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeHistogram()
    -                                .nativeSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .build(),
    -                        0, 1, 1.2, 1.4, 1.8, 2, Double.NaN
    -                ),
    -                */
    -                new GolangTestCase("'+Inf observation' from client_golang",
    -                        "sample_count: 7 " +
    -                                "sample_sum: Infinity " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "positive_span { offset: 0 length: 5 } " +
    -                                "positive_span { offset: 4092 length: 1 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: -1 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -1",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .build(),
    -                        0, 1, 1.2, 1.4, 1.8, 2, Double.POSITIVE_INFINITY
    -                ),
    -                new GolangTestCase("'-Inf observation' from client_golang",
    -                        "sample_count: 7 " +
    -                                "sample_sum: -Infinity " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "negative_span { offset: 4097 length: 1 } " +
    -                                "negative_delta: 1 " +
    -                                "positive_span { offset: 0 length: 5 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: -1 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 2",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .build(),
    -                        0, 1, 1.2, 1.4, 1.8, 2, Double.NEGATIVE_INFINITY
    -                ),
    -                new GolangTestCase("'limited buckets but nothing triggered' from client_golang",
    -                        "sample_count: 6 " +
    -                                "sample_sum: 7.4 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "positive_span { offset: 0 length: 5 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: -1 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 2",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, 1, 1.2, 1.4, 1.8, 2
    -                ),
    -                new GolangTestCase("'buckets limited by halving resolution' from client_golang",
    -                        "sample_count: 8 " +
    -                                "sample_sum: 11.5 " +
    -                                "schema: 1 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "positive_span { offset: 0 length: 5 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -1 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 1",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, 1, 1.1, 1.2, 1.4, 1.8, 2, 3
    -                ),
    -                new GolangTestCase("'buckets limited by widening the zero bucket' from client_golang",
    -                        "sample_count: 8 " +
    -                                "sample_sum: 11.5 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 1.0 " +
    -                                "zero_count: 2 " +
    -                                "positive_span { offset: 1 length: 7 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 0 " +
    -                                "positive_delta: 1",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(1.2)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, 1, 1.1, 1.2, 1.4, 1.8, 2, 3
    -                ),
    -                new GolangTestCase("'buckets limited by widening the zero bucket twice' from client_golang",
    -                        "sample_count: 9 " +
    -                                "sample_sum: 15.5 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 1.189207115002721 " +
    -                                "zero_count: 3 " +
    -                                "positive_span { offset: 2 length: 7 } " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 2 " +
    -                                "positive_delta: -2 " +
    -                                "positive_delta: 0 " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: 0",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(1.2)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, 1, 1.1, 1.2, 1.4, 1.8, 2, 3, 4),
    -                new GolangTestCase("'buckets limited by reset' from client_golang",
    -                        "sample_count: 2 " +
    -                                "sample_sum: 7.0 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 0 " +
    -                                "positive_span { offset: 7 length: 2 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: 0",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(1.2)
    -                                .nativeMinZeroThreshold(0)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, 1, 1.1, 1.2, 1.4, 1.8, 2, RESET_DURATION_REACHED, 3, 4),
    -                new GolangTestCase("'limited buckets but nothing triggered, negative observations' from client_golang",
    -                        "sample_count: 6 " +
    -                                "sample_sum: -7.4 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "negative_span { offset: 0 length: 5 } " +
    -                                "negative_delta: 1 " +
    -                                "negative_delta: -1 " +
    -                                "negative_delta: 2 " +
    -                                "negative_delta: -2 " +
    -                                "negative_delta: 2",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, -1, -1.2, -1.4, -1.8, -2),
    -                new GolangTestCase("'buckets limited by halving resolution, negative observations' from client_golang",
    -                        "sample_count: 8 " +
    -                                "sample_sum: -11.5 " +
    -                                "schema: 1 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "negative_span { offset: 0 length: 5 } " +
    -                                "negative_delta: 1 " +
    -                                "negative_delta: 2 " +
    -                                "negative_delta: -1 " +
    -                                "negative_delta: -2 " +
    -                                "negative_delta: 1",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, -1, -1.1, -1.2, -1.4, -1.8, -2, -3),
    -                new GolangTestCase("'buckets limited by widening the zero bucket, negative observations' from client_golang",
    -                        "sample_count: 8 " +
    -                                "sample_sum: -11.5 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 1.0 " +
    -                                "zero_count: 2 " +
    -                                "negative_span { offset: 1 length: 7 } " +
    -                                "negative_delta: 1 " +
    -                                "negative_delta: 1 " +
    -                                "negative_delta: -2 " +
    -                                "negative_delta: 2 " +
    -                                "negative_delta: -2 " +
    -                                "negative_delta: 0 " +
    -                                "negative_delta: 1",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(1.2)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, -1, -1.1, -1.2, -1.4, -1.8, -2, -3),
    -                new GolangTestCase("'buckets limited by widening the zero bucket twice, negative observations' from client_golang",
    -                        "sample_count: 9 " +
    -                                "sample_sum: -15.5 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 1.189207115002721 " +
    -                                "zero_count: 3 " +
    -                                "negative_span { offset: 2 length: 7 } " +
    -                                "negative_delta: 2 " +
    -                                "negative_delta: -2 " +
    -                                "negative_delta: 2 " +
    -                                "negative_delta: -2 " +
    -                                "negative_delta: 0 " +
    -                                "negative_delta: 1 " +
    -                                "negative_delta: 0",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(1.2)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, -1, -1.1, -1.2, -1.4, -1.8, -2, -3, -4),
    -                new GolangTestCase("'buckets limited by reset, negative observations' from client_golang",
    -                        "sample_count: 2 " +
    -                                "sample_sum: -7.0 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: " + Math.pow(2.0, -128.0) + " " +
    -                                "zero_count: 0 " +
    -                                "negative_span { offset: 7 length: 2 } " +
    -                                "negative_delta: 1 " +
    -                                "negative_delta: 0",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(1.2)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, -1, -1.1, -1.2, -1.4, -1.8, -2, RESET_DURATION_REACHED, -3, -4),
    -                new GolangTestCase("'buckets limited by halving resolution, then reset' from client_golang",
    -                        "sample_count: 2 " +
    -                                "sample_sum: 7.0 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 0 " +
    -                                "positive_span { offset: 7 length: 2 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: 0",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(0)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, 1, 1.1, 1.2, 1.4, 1.8, 2, 5, 5.1, RESET_DURATION_REACHED, 3, 4),
    -                new GolangTestCase("'buckets limited by widening the zero bucket, then reset' from client_golang",
    -                        "sample_count: 2 " +
    -                                "sample_sum: 7.0 " +
    -                                "schema: 2 " +
    -                                "zero_threshold: " + Math.pow(2.0, -128.0) + " " +
    -                                "zero_count: 0 " +
    -                                "positive_span { offset: 7 length: 2 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: 0",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(2)
    -                                .nativeMaxZeroThreshold(1.2)
    -                                .nativeMaxNumberOfBuckets(4)
    -                                .build(),
    -                        0, 1, 1.1, 1.2, 1.4, 1.8, 2, 5, 5.1, RESET_DURATION_REACHED, 3, 4)
    +  }
    +
    +  /** Test cases copied from histogram_test.go in client_golang. */
    +  @Test
    +  public void testGolangTests() throws NoSuchFieldException, IllegalAccessException {
    +    GolangTestCase[] testCases =
    +        new GolangTestCase[] {
    +          new GolangTestCase(
    +              "'no sparse buckets' from client_golang",
    +              "sample_count: 3 "
    +                  + "sample_sum: 6.0 "
    +                  + "bucket { cumulative_count: 0 upper_bound: 0.005 } "
    +                  + "bucket { cumulative_count: 0 upper_bound: 0.01 } "
    +                  + "bucket { cumulative_count: 0 upper_bound: 0.025 } "
    +                  + "bucket { cumulative_count: 0 upper_bound: 0.05 } "
    +                  + "bucket { cumulative_count: 0 upper_bound: 0.1 } "
    +                  + "bucket { cumulative_count: 0 upper_bound: 0.25 } "
    +                  + "bucket { cumulative_count: 0 upper_bound: 0.5 } "
    +                  + "bucket { cumulative_count: 1 upper_bound: 1.0 } "
    +                  + "bucket { cumulative_count: 2 upper_bound: 2.5 } "
    +                  + "bucket { cumulative_count: 3 upper_bound: 5.0 } "
    +                  + "bucket { cumulative_count: 3 upper_bound: 10.0 } "
    +                  + "bucket { cumulative_count: 3 upper_bound: Infinity }",
    +              Histogram.builder().name("test").classicOnly().build(),
    +              1.0,
    +              2.0,
    +              3.0),
    +          new GolangTestCase(
    +              "'factor 1.1 results in schema 3' from client_golang",
    +              "sample_count: 4 "
    +                  + "sample_sum: 6.0 "
    +                  + "schema: 3 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "positive_span { offset: 0 length: 1 } "
    +                  + "positive_span { offset: 7 length: 1 } "
    +                  + "positive_span { offset: 4 length: 1 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: 0 "
    +                  + "positive_delta: 0",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(3)
    +                  .nativeMaxZeroThreshold(0)
    +                  .build(),
    +              0.0,
    +              1.0,
    +              2.0,
    +              3.0),
    +          new GolangTestCase(
    +              "'factor 1.2 results in schema 2' from client_golang",
    +              "sample_count: 6 "
    +                  + "sample_sum: 7.4 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "positive_span { offset: 0 length: 5 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: -1 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -2 "
    +                  + "positive_delta: 2",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .build(),
    +              0,
    +              1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2),
    +          new GolangTestCase(
    +              "'factor 4 results in schema -1' from client_golang",
    +              "sample_count: 14 "
    +                  + "sample_sum: 63.2581251 "
    +                  + "schema: -1 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 0 "
    +                  + "positive_span { offset: -2 length: 6 } "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: 0 "
    +                  + "positive_delta: 0 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -1 "
    +                  + "positive_delta: -2",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(-1)
    +                  .nativeMaxZeroThreshold(0)
    +                  .build(),
    +              0.0156251,
    +              0.0625, // Bucket -2: (0.015625, 0.0625)
    +              0.1,
    +              0.25, // Bucket -1: (0.0625, 0.25]
    +              0.5,
    +              1, // Bucket 0: (0.25, 1]
    +              1.5,
    +              2,
    +              3,
    +              3.5, // Bucket 1: (1, 4]
    +              5,
    +              6,
    +              7, // Bucket 2: (4, 16]
    +              33.33 // Bucket 3: (16, 64]
    +              ),
    +          new GolangTestCase(
    +              "'factor 17 results in schema -2' from client_golang",
    +              "sample_count: 14 "
    +                  + "sample_sum: 63.2581251 "
    +                  + "schema: -2 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 0 "
    +                  + "positive_span { offset: -1 length: 4 } "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: 3 "
    +                  + "positive_delta: -6",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(-2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .build(),
    +              0.0156251,
    +              0.0625, // Bucket -1: (0.015625, 0.0625]
    +              0.1,
    +              0.25,
    +              0.5,
    +              1, // Bucket 0: (0.0625, 1]
    +              1.5,
    +              2,
    +              3,
    +              3.5,
    +              5,
    +              6,
    +              7, // Bucket 1: (1, 16]
    +              33.33 // Bucket 2: (16, 256]
    +              ),
    +          new GolangTestCase(
    +              "'negative buckets' from client_golang",
    +              "sample_count: 6 "
    +                  + "sample_sum: -7.4 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "negative_span { offset: 0 length: 5 } "
    +                  + "negative_delta: 1 "
    +                  + "negative_delta: -1 "
    +                  + "negative_delta: 2 "
    +                  + "negative_delta: -2 "
    +                  + "negative_delta: 2",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .build(),
    +              0,
    +              -1,
    +              -1.2,
    +              -1.4,
    +              -1.8,
    +              -2),
    +          new GolangTestCase(
    +              "'negative and positive buckets' from client_golang",
    +              "sample_count: 11 "
    +                  + "sample_sum: 0.0 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "negative_span { offset: 0 length: 5 } "
    +                  + "negative_delta: 1 "
    +                  + "negative_delta: -1 "
    +                  + "negative_delta: 2 "
    +                  + "negative_delta: -2 "
    +                  + "negative_delta: 2 "
    +                  + "positive_span { offset: 0 length: 5 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: -1 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -2 "
    +                  + "positive_delta: 2",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .build(),
    +              0,
    +              -1,
    +              -1.2,
    +              -1.4,
    +              -1.8,
    +              -2,
    +              1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2),
    +          new GolangTestCase(
    +              "'wide zero bucket' from client_golang",
    +              "sample_count: 11 "
    +                  + "sample_sum: 0.0 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 1.4 "
    +                  + "zero_count: 7 "
    +                  + "negative_span { offset: 4 length: 1 } "
    +                  + "negative_delta: 2 "
    +                  + "positive_span { offset: 4 length: 1 } "
    +                  + "positive_delta: 2",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMinZeroThreshold(1.4)
    +                  .build(),
    +              0,
    +              -1,
    +              -1.2,
    +              -1.4,
    +              -1.8,
    +              -2,
    +              1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2),
    +          /*
    +          // See https://github.com/prometheus/client_golang/issues/1275
    +          new TestCase("'NaN observation' from client_golang",
    +                  "sample_count: 7 " +
    +                          "sample_sum: NaN " +
    +                          "schema: 2 " +
    +                          "zero_threshold: 0.0 " +
    +                          "zero_count: 1 " +
    +                          "positive_span { offset: 0 length: 5 } " +
    +                          "positive_delta: 1 " +
    +                          "positive_delta: -1 " +
    +                          "positive_delta: 2 " +
    +                          "positive_delta: -2 " +
    +                          "positive_delta: 2",
    +                  Histogram.builder()
    +                          .name("test")
    +                          .nativeHistogram()
    +                          .nativeSchema(2)
    +                          .nativeMaxZeroThreshold(0)
    +                          .build(),
    +                  0, 1, 1.2, 1.4, 1.8, 2, Double.NaN
    +          ),
    +          */
    +          new GolangTestCase(
    +              "'+Inf observation' from client_golang",
    +              "sample_count: 7 "
    +                  + "sample_sum: Infinity "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "positive_span { offset: 0 length: 5 } "
    +                  + "positive_span { offset: 4092 length: 1 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: -1 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -2 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -1",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .build(),
    +              0,
    +              1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2,
    +              Double.POSITIVE_INFINITY),
    +          new GolangTestCase(
    +              "'-Inf observation' from client_golang",
    +              "sample_count: 7 "
    +                  + "sample_sum: -Infinity "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "negative_span { offset: 4097 length: 1 } "
    +                  + "negative_delta: 1 "
    +                  + "positive_span { offset: 0 length: 5 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: -1 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -2 "
    +                  + "positive_delta: 2",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .build(),
    +              0,
    +              1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2,
    +              Double.NEGATIVE_INFINITY),
    +          new GolangTestCase(
    +              "'limited buckets but nothing triggered' from client_golang",
    +              "sample_count: 6 "
    +                  + "sample_sum: 7.4 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "positive_span { offset: 0 length: 5 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: -1 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -2 "
    +                  + "positive_delta: 2",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2),
    +          new GolangTestCase(
    +              "'buckets limited by halving resolution' from client_golang",
    +              "sample_count: 8 "
    +                  + "sample_sum: 11.5 "
    +                  + "schema: 1 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "positive_span { offset: 0 length: 5 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -1 "
    +                  + "positive_delta: -2 "
    +                  + "positive_delta: 1",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              1,
    +              1.1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2,
    +              3),
    +          new GolangTestCase(
    +              "'buckets limited by widening the zero bucket' from client_golang",
    +              "sample_count: 8 "
    +                  + "sample_sum: 11.5 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 1.0 "
    +                  + "zero_count: 2 "
    +                  + "positive_span { offset: 1 length: 7 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: -2 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -2 "
    +                  + "positive_delta: 0 "
    +                  + "positive_delta: 1",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(1.2)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              1,
    +              1.1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2,
    +              3),
    +          new GolangTestCase(
    +              "'buckets limited by widening the zero bucket twice' from client_golang",
    +              "sample_count: 9 "
    +                  + "sample_sum: 15.5 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 1.189207115002721 "
    +                  + "zero_count: 3 "
    +                  + "positive_span { offset: 2 length: 7 } "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -2 "
    +                  + "positive_delta: 2 "
    +                  + "positive_delta: -2 "
    +                  + "positive_delta: 0 "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: 0",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(1.2)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              1,
    +              1.1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2,
    +              3,
    +              4),
    +          new GolangTestCase(
    +              "'buckets limited by reset' from client_golang",
    +              "sample_count: 2 "
    +                  + "sample_sum: 7.0 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 0 "
    +                  + "positive_span { offset: 7 length: 2 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: 0",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(1.2)
    +                  .nativeMinZeroThreshold(0)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              1,
    +              1.1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2,
    +              RESET_DURATION_REACHED,
    +              3,
    +              4),
    +          new GolangTestCase(
    +              "'limited buckets but nothing triggered, negative observations' from client_golang",
    +              "sample_count: 6 "
    +                  + "sample_sum: -7.4 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "negative_span { offset: 0 length: 5 } "
    +                  + "negative_delta: 1 "
    +                  + "negative_delta: -1 "
    +                  + "negative_delta: 2 "
    +                  + "negative_delta: -2 "
    +                  + "negative_delta: 2",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              -1,
    +              -1.2,
    +              -1.4,
    +              -1.8,
    +              -2),
    +          new GolangTestCase(
    +              "'buckets limited by halving resolution, negative observations' from client_golang",
    +              "sample_count: 8 "
    +                  + "sample_sum: -11.5 "
    +                  + "schema: 1 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "negative_span { offset: 0 length: 5 } "
    +                  + "negative_delta: 1 "
    +                  + "negative_delta: 2 "
    +                  + "negative_delta: -1 "
    +                  + "negative_delta: -2 "
    +                  + "negative_delta: 1",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              -1,
    +              -1.1,
    +              -1.2,
    +              -1.4,
    +              -1.8,
    +              -2,
    +              -3),
    +          new GolangTestCase(
    +              "'buckets limited by widening the zero bucket, negative observations' from client_golang",
    +              "sample_count: 8 "
    +                  + "sample_sum: -11.5 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 1.0 "
    +                  + "zero_count: 2 "
    +                  + "negative_span { offset: 1 length: 7 } "
    +                  + "negative_delta: 1 "
    +                  + "negative_delta: 1 "
    +                  + "negative_delta: -2 "
    +                  + "negative_delta: 2 "
    +                  + "negative_delta: -2 "
    +                  + "negative_delta: 0 "
    +                  + "negative_delta: 1",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(1.2)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              -1,
    +              -1.1,
    +              -1.2,
    +              -1.4,
    +              -1.8,
    +              -2,
    +              -3),
    +          new GolangTestCase(
    +              "'buckets limited by widening the zero bucket twice, negative observations' from client_golang",
    +              "sample_count: 9 "
    +                  + "sample_sum: -15.5 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 1.189207115002721 "
    +                  + "zero_count: 3 "
    +                  + "negative_span { offset: 2 length: 7 } "
    +                  + "negative_delta: 2 "
    +                  + "negative_delta: -2 "
    +                  + "negative_delta: 2 "
    +                  + "negative_delta: -2 "
    +                  + "negative_delta: 0 "
    +                  + "negative_delta: 1 "
    +                  + "negative_delta: 0",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(1.2)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              -1,
    +              -1.1,
    +              -1.2,
    +              -1.4,
    +              -1.8,
    +              -2,
    +              -3,
    +              -4),
    +          new GolangTestCase(
    +              "'buckets limited by reset, negative observations' from client_golang",
    +              "sample_count: 2 "
    +                  + "sample_sum: -7.0 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: "
    +                  + Math.pow(2.0, -128.0)
    +                  + " "
    +                  + "zero_count: 0 "
    +                  + "negative_span { offset: 7 length: 2 } "
    +                  + "negative_delta: 1 "
    +                  + "negative_delta: 0",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(1.2)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              -1,
    +              -1.1,
    +              -1.2,
    +              -1.4,
    +              -1.8,
    +              -2,
    +              RESET_DURATION_REACHED,
    +              -3,
    +              -4),
    +          new GolangTestCase(
    +              "'buckets limited by halving resolution, then reset' from client_golang",
    +              "sample_count: 2 "
    +                  + "sample_sum: 7.0 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 0 "
    +                  + "positive_span { offset: 7 length: 2 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: 0",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(0)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              1,
    +              1.1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2,
    +              5,
    +              5.1,
    +              RESET_DURATION_REACHED,
    +              3,
    +              4),
    +          new GolangTestCase(
    +              "'buckets limited by widening the zero bucket, then reset' from client_golang",
    +              "sample_count: 2 "
    +                  + "sample_sum: 7.0 "
    +                  + "schema: 2 "
    +                  + "zero_threshold: "
    +                  + Math.pow(2.0, -128.0)
    +                  + " "
    +                  + "zero_count: 0 "
    +                  + "positive_span { offset: 7 length: 2 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: 0",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(2)
    +                  .nativeMaxZeroThreshold(1.2)
    +                  .nativeMaxNumberOfBuckets(4)
    +                  .build(),
    +              0,
    +              1,
    +              1.1,
    +              1.2,
    +              1.4,
    +              1.8,
    +              2,
    +              5,
    +              5.1,
    +              RESET_DURATION_REACHED,
    +              3,
    +              4)
             };
    -        for (GolangTestCase testCase : testCases) {
    -            testCase.run();
    -        }
    +    for (GolangTestCase testCase : testCases) {
    +      testCase.run();
         }
    -
    -    /**
    -     * Additional tests that are not part of client_golang's test suite.
    -     */
    -    @Test
    -    public void testAdditional() throws NoSuchFieldException, IllegalAccessException {
    -        GolangTestCase[] testCases = new GolangTestCase[]{
    -                new GolangTestCase("observed values are exactly at bucket boundaries",
    -                        "sample_count: 3 " +
    -                                "sample_sum: 1.5 " +
    -                                "schema: 0 " +
    -                                "zero_threshold: 0.0 " +
    -                                "zero_count: 1 " +
    -                                "positive_span { offset: -1 length: 2 } " +
    -                                "positive_delta: 1 " +
    -                                "positive_delta: 0",
    -                        Histogram.builder()
    -                                .name("test")
    -                                .nativeOnly()
    -                                .nativeInitialSchema(0)
    -                                .nativeMaxZeroThreshold(0)
    -                                .build(),
    -                        0.0, 0.5, 1.0)
    +  }
    +
    +  /** Additional tests that are not part of client_golang's test suite. */
    +  @Test
    +  public void testAdditional() throws NoSuchFieldException, IllegalAccessException {
    +    GolangTestCase[] testCases =
    +        new GolangTestCase[] {
    +          new GolangTestCase(
    +              "observed values are exactly at bucket boundaries",
    +              "sample_count: 3 "
    +                  + "sample_sum: 1.5 "
    +                  + "schema: 0 "
    +                  + "zero_threshold: 0.0 "
    +                  + "zero_count: 1 "
    +                  + "positive_span { offset: -1 length: 2 } "
    +                  + "positive_delta: 1 "
    +                  + "positive_delta: 0",
    +              Histogram.builder()
    +                  .name("test")
    +                  .nativeOnly()
    +                  .nativeInitialSchema(0)
    +                  .nativeMaxZeroThreshold(0)
    +                  .build(),
    +              0.0,
    +              0.5,
    +              1.0)
             };
    -        for (GolangTestCase testCase : testCases) {
    -            testCase.run();
    -        }
    +    for (GolangTestCase testCase : testCases) {
    +      testCase.run();
         }
    -
    -    /**
    -     * Tests HistogramData.nativeBucketIndexToUpperBound(int, int).
    -     * 

    - * This test is ported from client_golang's TestGetLe(). - */ - @Test - public void testNativeBucketIndexToUpperBound() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { - int[] indexes = new int[]{-1, 0, 1, 512, 513, -1, 0, 1, 1024, 1025, -1, 0, 1, 4096, 4097}; - int[] schemas = new int[]{-1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2}; - double[] expectedUpperBounds = new double[]{0.25, 1, 4, Double.MAX_VALUE, Double.POSITIVE_INFINITY, - 0.5, 1, 2, Double.MAX_VALUE, Double.POSITIVE_INFINITY, - 0.8408964152537144, 1, 1.189207115002721, Double.MAX_VALUE, Double.POSITIVE_INFINITY}; - Method method = Histogram.DataPoint.class.getDeclaredMethod("nativeBucketIndexToUpperBound", int.class, int.class); - method.setAccessible(true); - for (int i = 0; i < indexes.length; i++) { - Histogram histogram = Histogram.builder() - .name("test") - .nativeInitialSchema(schemas[i]) - .build(); - Histogram.DataPoint histogramData = histogram.newDataPoint(); - double result = (double) method.invoke(histogramData, schemas[i], indexes[i]); - Assert.assertEquals("index=" + indexes[i] + ", schema=" + schemas[i], expectedUpperBounds[i], result, 0.0000000000001); - } + } + + /** + * Tests HistogramData.nativeBucketIndexToUpperBound(int, int). + * + *

    This test is ported from client_golang's TestGetLe(). + */ + @Test + public void testNativeBucketIndexToUpperBound() + throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + int[] indexes = new int[] {-1, 0, 1, 512, 513, -1, 0, 1, 1024, 1025, -1, 0, 1, 4096, 4097}; + int[] schemas = new int[] {-1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2}; + double[] expectedUpperBounds = + new double[] { + 0.25, + 1, + 4, + Double.MAX_VALUE, + Double.POSITIVE_INFINITY, + 0.5, + 1, + 2, + Double.MAX_VALUE, + Double.POSITIVE_INFINITY, + 0.8408964152537144, + 1, + 1.189207115002721, + Double.MAX_VALUE, + Double.POSITIVE_INFINITY + }; + Method method = + Histogram.DataPoint.class.getDeclaredMethod( + "nativeBucketIndexToUpperBound", int.class, int.class); + method.setAccessible(true); + for (int i = 0; i < indexes.length; i++) { + Histogram histogram = + Histogram.builder().name("test").nativeInitialSchema(schemas[i]).build(); + Histogram.DataPoint histogramData = histogram.newDataPoint(); + double result = (double) method.invoke(histogramData, schemas[i], indexes[i]); + Assert.assertEquals( + "index=" + indexes[i] + ", schema=" + schemas[i], + expectedUpperBounds[i], + result, + 0.0000000000001); } - - /** - * Test if lowerBound < value <= upperBound is true for the bucket index returned by findBucketIndex() - */ - @Test - public void testFindBucketIndex() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { - Random rand = new Random(); - Method findBucketIndex = Histogram.DataPoint.class.getDeclaredMethod("findBucketIndex", double.class); - Method nativeBucketIndexToUpperBound = Histogram.DataPoint.class.getDeclaredMethod("nativeBucketIndexToUpperBound", int.class, int.class); - findBucketIndex.setAccessible(true); - nativeBucketIndexToUpperBound.setAccessible(true); - for (int schema = -4; schema <= 8; schema++) { - Histogram histogram = Histogram.builder() - .nativeOnly() - .name("test") - .nativeInitialSchema(schema) - .build(); - for (int i = 0; i < 10_000; i++) { - for (int zeros = -5; zeros <= 10; zeros++) { - double value = rand.nextDouble() * Math.pow(10, zeros); - int bucketIndex = (int) findBucketIndex.invoke(histogram.getNoLabels(), value); - double lowerBound = (double) nativeBucketIndexToUpperBound.invoke(histogram.getNoLabels(), schema, bucketIndex - 1); - double upperBound = (double) nativeBucketIndexToUpperBound.invoke(histogram.getNoLabels(), schema, bucketIndex); - Assert.assertTrue("Bucket index " + bucketIndex + " with schema " + schema + " has range [" + lowerBound + ", " + upperBound + "]. Value " + value + " is outside of that range.", lowerBound < value && upperBound >= value); - } - } + } + + /** + * Test if lowerBound < value <= upperBound is true for the bucket index returned by + * findBucketIndex() + */ + @Test + public void testFindBucketIndex() + throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + Random rand = new Random(); + Method findBucketIndex = + Histogram.DataPoint.class.getDeclaredMethod("findBucketIndex", double.class); + Method nativeBucketIndexToUpperBound = + Histogram.DataPoint.class.getDeclaredMethod( + "nativeBucketIndexToUpperBound", int.class, int.class); + findBucketIndex.setAccessible(true); + nativeBucketIndexToUpperBound.setAccessible(true); + for (int schema = -4; schema <= 8; schema++) { + Histogram histogram = + Histogram.builder().nativeOnly().name("test").nativeInitialSchema(schema).build(); + for (int i = 0; i < 10_000; i++) { + for (int zeros = -5; zeros <= 10; zeros++) { + double value = rand.nextDouble() * Math.pow(10, zeros); + int bucketIndex = (int) findBucketIndex.invoke(histogram.getNoLabels(), value); + double lowerBound = + (double) + nativeBucketIndexToUpperBound.invoke( + histogram.getNoLabels(), schema, bucketIndex - 1); + double upperBound = + (double) + nativeBucketIndexToUpperBound.invoke( + histogram.getNoLabels(), schema, bucketIndex); + Assert.assertTrue( + "Bucket index " + + bucketIndex + + " with schema " + + schema + + " has range [" + + lowerBound + + ", " + + upperBound + + "]. Value " + + value + + " is outside of that range.", + lowerBound < value && upperBound >= value); } + } } - - @Test - public void testDefaults() throws IOException { - Histogram histogram = Histogram.builder().name("test").build(); - histogram.observe(0.5); - HistogramSnapshot snapshot = histogram.collect(); - String expectedProtobuf = "" + - "name: \"test\" " + - "type: HISTOGRAM " + - "metric { " + - "histogram { " + - "sample_count: 1 " + - "sample_sum: 0.5 " + - // default has both, native and classic buckets - "bucket { cumulative_count: 0 upper_bound: 0.005 } " + - "bucket { cumulative_count: 0 upper_bound: 0.01 } " + - "bucket { cumulative_count: 0 upper_bound: 0.025 } " + - "bucket { cumulative_count: 0 upper_bound: 0.05 } " + - "bucket { cumulative_count: 0 upper_bound: 0.1 } " + - "bucket { cumulative_count: 0 upper_bound: 0.25 } " + - "bucket { cumulative_count: 1 upper_bound: 0.5 } " + - "bucket { cumulative_count: 1 upper_bound: 1.0 } " + - "bucket { cumulative_count: 1 upper_bound: 2.5 } " + - "bucket { cumulative_count: 1 upper_bound: 5.0 } " + - "bucket { cumulative_count: 1 upper_bound: 10.0 } " + - "bucket { cumulative_count: 1 upper_bound: Infinity } " + - // default native schema is 5 - "schema: 5 " + - // default zero threshold is 2^-128 - "zero_threshold: " + Math.pow(2.0, -128.0) + " " + - "zero_count: 0 " + - "positive_span { offset: -32 length: 1 } " + - "positive_delta: 1 " + - "} }"; - String expectedTextFormat = "" + - // default classic buckets - "# TYPE test histogram\n" + - "test_bucket{le=\"0.005\"} 0\n" + - "test_bucket{le=\"0.01\"} 0\n" + - "test_bucket{le=\"0.025\"} 0\n" + - "test_bucket{le=\"0.05\"} 0\n" + - "test_bucket{le=\"0.1\"} 0\n" + - "test_bucket{le=\"0.25\"} 0\n" + - "test_bucket{le=\"0.5\"} 1\n" + - "test_bucket{le=\"1.0\"} 1\n" + - "test_bucket{le=\"2.5\"} 1\n" + - "test_bucket{le=\"5.0\"} 1\n" + - "test_bucket{le=\"10.0\"} 1\n" + - "test_bucket{le=\"+Inf\"} 1\n" + - "test_count 1\n" + - "test_sum 0.5\n" + - "# EOF\n"; - - // protobuf - Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(snapshot); - Assert.assertEquals(expectedProtobuf, TextFormat.printer().shortDebugString(protobufData)); - - // text - ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, true); - writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expectedTextFormat, out.toString()); - } - - @Test - public void testExemplarsClassicHistogram() throws Exception { - SpanContext spanContext = new SpanContext() { - int callCount = 0; - - @Override - public String getCurrentTraceId() { - return "traceId-" + callCount; - } - - @Override - public String getCurrentSpanId() { - return "spanId-" + callCount; - } - - @Override - public boolean isCurrentSpanSampled() { - callCount++; - return true; - } - - @Override - public void markCurrentSpanAsExemplar() { - } + } + + @Test + public void testDefaults() throws IOException { + Histogram histogram = Histogram.builder().name("test").build(); + histogram.observe(0.5); + HistogramSnapshot snapshot = histogram.collect(); + String expectedProtobuf = + "" + + "name: \"test\" " + + "type: HISTOGRAM " + + "metric { " + + "histogram { " + + "sample_count: 1 " + + "sample_sum: 0.5 " + + + // default has both, native and classic buckets + "bucket { cumulative_count: 0 upper_bound: 0.005 } " + + "bucket { cumulative_count: 0 upper_bound: 0.01 } " + + "bucket { cumulative_count: 0 upper_bound: 0.025 } " + + "bucket { cumulative_count: 0 upper_bound: 0.05 } " + + "bucket { cumulative_count: 0 upper_bound: 0.1 } " + + "bucket { cumulative_count: 0 upper_bound: 0.25 } " + + "bucket { cumulative_count: 1 upper_bound: 0.5 } " + + "bucket { cumulative_count: 1 upper_bound: 1.0 } " + + "bucket { cumulative_count: 1 upper_bound: 2.5 } " + + "bucket { cumulative_count: 1 upper_bound: 5.0 } " + + "bucket { cumulative_count: 1 upper_bound: 10.0 } " + + "bucket { cumulative_count: 1 upper_bound: Infinity } " + + + // default native schema is 5 + "schema: 5 " + + + // default zero threshold is 2^-128 + "zero_threshold: " + + Math.pow(2.0, -128.0) + + " " + + "zero_count: 0 " + + "positive_span { offset: -32 length: 1 } " + + "positive_delta: 1 " + + "} }"; + String expectedTextFormat = + "" + + + // default classic buckets + "# TYPE test histogram\n" + + "test_bucket{le=\"0.005\"} 0\n" + + "test_bucket{le=\"0.01\"} 0\n" + + "test_bucket{le=\"0.025\"} 0\n" + + "test_bucket{le=\"0.05\"} 0\n" + + "test_bucket{le=\"0.1\"} 0\n" + + "test_bucket{le=\"0.25\"} 0\n" + + "test_bucket{le=\"0.5\"} 1\n" + + "test_bucket{le=\"1.0\"} 1\n" + + "test_bucket{le=\"2.5\"} 1\n" + + "test_bucket{le=\"5.0\"} 1\n" + + "test_bucket{le=\"10.0\"} 1\n" + + "test_bucket{le=\"+Inf\"} 1\n" + + "test_count 1\n" + + "test_sum 0.5\n" + + "# EOF\n"; + + // protobuf + Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(snapshot); + Assert.assertEquals(expectedProtobuf, TextFormat.printer().shortDebugString(protobufData)); + + // text + ByteArrayOutputStream out = new ByteArrayOutputStream(); + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, true); + writer.write(out, MetricSnapshots.of(snapshot)); + Assert.assertEquals(expectedTextFormat, out.toString()); + } + + @Test + public void testExemplarsClassicHistogram() throws Exception { + SpanContext spanContext = + new SpanContext() { + int callCount = 0; + + @Override + public String getCurrentTraceId() { + return "traceId-" + callCount; + } + + @Override + public String getCurrentSpanId() { + return "spanId-" + callCount; + } + + @Override + public boolean isCurrentSpanSampled() { + callCount++; + return true; + } + + @Override + public void markCurrentSpanAsExemplar() {} }; - Histogram histogram = Histogram.builder() - .name("test") - // The default number of Exemplars is 4. - // Use 5 buckets to verify that the exemplar sample is configured with the buckets. - .classicUpperBounds(1.0, 2.0, 3.0, 4.0, Double.POSITIVE_INFINITY) - .labelNames("path") - .build(); - - long sampleIntervalMillis = 10; - ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(histogram, sampleIntervalMillis); - SpanContextSupplier.setSpanContext(spanContext); - - Exemplar ex1a = Exemplar.builder() - .value(0.5) - .spanId("spanId-1") - .traceId("traceId-1") - .build(); - Exemplar ex1b = Exemplar.builder() - .value(0.5) - .spanId("spanId-2") - .traceId("traceId-2") - .build(); - Exemplar ex2a = Exemplar.builder() - .value(4.5) - .spanId("spanId-3") - .traceId("traceId-3") - .build(); - Exemplar ex2b = Exemplar.builder() - .value(4.5) - .spanId("spanId-4") - .traceId("traceId-4") - .build(); - Exemplar ex3a = Exemplar.builder() - .value(1.5) - .spanId("spanId-5") - .traceId("traceId-5") - .build(); - Exemplar ex3b = Exemplar.builder() - .value(1.5) - .spanId("spanId-6") - .traceId("traceId-6") - .build(); - Exemplar ex4a = Exemplar.builder() - .value(2.5) - .spanId("spanId-7") - .traceId("traceId-7") - .build(); - Exemplar ex4b = Exemplar.builder() - .value(2.5) - .spanId("spanId-8") - .traceId("traceId-8") - .build(); - Exemplar ex5a = Exemplar.builder() - .value(3.5) - .spanId("spanId-9") - .traceId("traceId-9") - .build(); - Exemplar ex5b = Exemplar.builder() - .value(3.5) - .spanId("spanId-10") - .traceId("traceId-10") - .build(); - histogram.labelValues("/hello").observe(0.5); - histogram.labelValues("/world").observe(0.5); // different labels are tracked independently, i.e. we don't need to wait for sampleIntervalMillis - - HistogramSnapshot snapshot = histogram.collect(); - assertExemplarEquals(ex1a, getExemplar(snapshot, 1.0, "path", "/hello")); - assertExemplarEquals(ex1b, getExemplar(snapshot, 1.0, "path", "/world")); - assertNull(getExemplar(snapshot, 2.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 2.0, "path", "/world")); - assertNull(getExemplar(snapshot, 3.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 3.0, "path", "/world")); - assertNull(getExemplar(snapshot, 4.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 4.0, "path", "/world")); - assertNull(getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/hello")); - assertNull(getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/world")); - - Thread.sleep(sampleIntervalMillis + 1); - histogram.labelValues("/hello").observe(4.5); - histogram.labelValues("/world").observe(4.5); - - snapshot = histogram.collect(); - assertExemplarEquals(ex1a, getExemplar(snapshot, 1.0, "path", "/hello")); - assertExemplarEquals(ex1b, getExemplar(snapshot, 1.0, "path", "/world")); - assertNull(getExemplar(snapshot, 2.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 2.0, "path", "/world")); - assertNull(getExemplar(snapshot, 3.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 3.0, "path", "/world")); - assertNull(getExemplar(snapshot, 4.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 4.0, "path", "/world")); - assertExemplarEquals(ex2a, getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/hello")); - assertExemplarEquals(ex2b, getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/world")); - - Thread.sleep(sampleIntervalMillis + 1); - histogram.labelValues("/hello").observe(1.5); - histogram.labelValues("/world").observe(1.5); - Thread.sleep(sampleIntervalMillis + 1); - histogram.labelValues("/hello").observe(2.5); - histogram.labelValues("/world").observe(2.5); - Thread.sleep(sampleIntervalMillis + 1); - histogram.labelValues("/hello").observe(3.5); - histogram.labelValues("/world").observe(3.5); - - snapshot = histogram.collect(); - assertExemplarEquals(ex1a, getExemplar(snapshot, 1.0, "path", "/hello")); - assertExemplarEquals(ex1b, getExemplar(snapshot, 1.0, "path", "/world")); - assertExemplarEquals(ex3a, getExemplar(snapshot, 2.0, "path", "/hello")); - assertExemplarEquals(ex3b, getExemplar(snapshot, 2.0, "path", "/world")); - assertExemplarEquals(ex4a, getExemplar(snapshot, 3.0, "path", "/hello")); - assertExemplarEquals(ex4b, getExemplar(snapshot, 3.0, "path", "/world")); - assertExemplarEquals(ex5a, getExemplar(snapshot, 4.0, "path", "/hello")); - assertExemplarEquals(ex5b, getExemplar(snapshot, 4.0, "path", "/world")); - assertExemplarEquals(ex2a, getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/hello")); - assertExemplarEquals(ex2b, getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/world")); - - Exemplar custom = Exemplar.builder() - .value(3.4) - .labels(Labels.of("key2", "value2", "key1", "value1", "trace_id", "traceId-11", "span_id", "spanId-11")) - .build(); - Thread.sleep(sampleIntervalMillis + 1); - histogram.labelValues("/hello").observeWithExemplar(3.4, Labels.of("key1", "value1", "key2", "value2")); - snapshot = histogram.collect(); - // custom exemplars have preference, so the automatic exemplar is replaced - assertExemplarEquals(custom, getExemplar(snapshot, 4.0, "path", "/hello")); + Histogram histogram = + Histogram.builder() + .name("test") + // The default number of Exemplars is 4. + // Use 5 buckets to verify that the exemplar sample is configured with the buckets. + .classicUpperBounds(1.0, 2.0, 3.0, 4.0, Double.POSITIVE_INFINITY) + .labelNames("path") + .build(); + + long sampleIntervalMillis = 10; + ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(histogram, sampleIntervalMillis); + SpanContextSupplier.setSpanContext(spanContext); + + Exemplar ex1a = Exemplar.builder().value(0.5).spanId("spanId-1").traceId("traceId-1").build(); + Exemplar ex1b = Exemplar.builder().value(0.5).spanId("spanId-2").traceId("traceId-2").build(); + Exemplar ex2a = Exemplar.builder().value(4.5).spanId("spanId-3").traceId("traceId-3").build(); + Exemplar ex2b = Exemplar.builder().value(4.5).spanId("spanId-4").traceId("traceId-4").build(); + Exemplar ex3a = Exemplar.builder().value(1.5).spanId("spanId-5").traceId("traceId-5").build(); + Exemplar ex3b = Exemplar.builder().value(1.5).spanId("spanId-6").traceId("traceId-6").build(); + Exemplar ex4a = Exemplar.builder().value(2.5).spanId("spanId-7").traceId("traceId-7").build(); + Exemplar ex4b = Exemplar.builder().value(2.5).spanId("spanId-8").traceId("traceId-8").build(); + Exemplar ex5a = Exemplar.builder().value(3.5).spanId("spanId-9").traceId("traceId-9").build(); + Exemplar ex5b = Exemplar.builder().value(3.5).spanId("spanId-10").traceId("traceId-10").build(); + histogram.labelValues("/hello").observe(0.5); + histogram + .labelValues("/world") + .observe(0.5); // different labels are tracked independently, i.e. we don't need to wait for + // sampleIntervalMillis + + HistogramSnapshot snapshot = histogram.collect(); + assertExemplarEquals(ex1a, getExemplar(snapshot, 1.0, "path", "/hello")); + assertExemplarEquals(ex1b, getExemplar(snapshot, 1.0, "path", "/world")); + assertNull(getExemplar(snapshot, 2.0, "path", "/hello")); + assertNull(getExemplar(snapshot, 2.0, "path", "/world")); + assertNull(getExemplar(snapshot, 3.0, "path", "/hello")); + assertNull(getExemplar(snapshot, 3.0, "path", "/world")); + assertNull(getExemplar(snapshot, 4.0, "path", "/hello")); + assertNull(getExemplar(snapshot, 4.0, "path", "/world")); + assertNull(getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/hello")); + assertNull(getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/world")); + + Thread.sleep(sampleIntervalMillis + 1); + histogram.labelValues("/hello").observe(4.5); + histogram.labelValues("/world").observe(4.5); + + snapshot = histogram.collect(); + assertExemplarEquals(ex1a, getExemplar(snapshot, 1.0, "path", "/hello")); + assertExemplarEquals(ex1b, getExemplar(snapshot, 1.0, "path", "/world")); + assertNull(getExemplar(snapshot, 2.0, "path", "/hello")); + assertNull(getExemplar(snapshot, 2.0, "path", "/world")); + assertNull(getExemplar(snapshot, 3.0, "path", "/hello")); + assertNull(getExemplar(snapshot, 3.0, "path", "/world")); + assertNull(getExemplar(snapshot, 4.0, "path", "/hello")); + assertNull(getExemplar(snapshot, 4.0, "path", "/world")); + assertExemplarEquals(ex2a, getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/hello")); + assertExemplarEquals(ex2b, getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/world")); + + Thread.sleep(sampleIntervalMillis + 1); + histogram.labelValues("/hello").observe(1.5); + histogram.labelValues("/world").observe(1.5); + Thread.sleep(sampleIntervalMillis + 1); + histogram.labelValues("/hello").observe(2.5); + histogram.labelValues("/world").observe(2.5); + Thread.sleep(sampleIntervalMillis + 1); + histogram.labelValues("/hello").observe(3.5); + histogram.labelValues("/world").observe(3.5); + + snapshot = histogram.collect(); + assertExemplarEquals(ex1a, getExemplar(snapshot, 1.0, "path", "/hello")); + assertExemplarEquals(ex1b, getExemplar(snapshot, 1.0, "path", "/world")); + assertExemplarEquals(ex3a, getExemplar(snapshot, 2.0, "path", "/hello")); + assertExemplarEquals(ex3b, getExemplar(snapshot, 2.0, "path", "/world")); + assertExemplarEquals(ex4a, getExemplar(snapshot, 3.0, "path", "/hello")); + assertExemplarEquals(ex4b, getExemplar(snapshot, 3.0, "path", "/world")); + assertExemplarEquals(ex5a, getExemplar(snapshot, 4.0, "path", "/hello")); + assertExemplarEquals(ex5b, getExemplar(snapshot, 4.0, "path", "/world")); + assertExemplarEquals(ex2a, getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/hello")); + assertExemplarEquals(ex2b, getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/world")); + + Exemplar custom = + Exemplar.builder() + .value(3.4) + .labels( + Labels.of( + "key2", + "value2", + "key1", + "value1", + "trace_id", + "traceId-11", + "span_id", + "spanId-11")) + .build(); + Thread.sleep(sampleIntervalMillis + 1); + histogram + .labelValues("/hello") + .observeWithExemplar(3.4, Labels.of("key1", "value1", "key2", "value2")); + snapshot = histogram.collect(); + // custom exemplars have preference, so the automatic exemplar is replaced + assertExemplarEquals(custom, getExemplar(snapshot, 4.0, "path", "/hello")); + } + + private Exemplar getExemplar(HistogramSnapshot snapshot, double le, String... labels) { + HistogramSnapshot.HistogramDataPointSnapshot data = + snapshot.getDataPoints().stream() + .filter(d -> d.getLabels().equals(Labels.of(labels))) + .findFirst() + .orElseThrow(() -> new RuntimeException("Labels not found")); + double lowerBound = Double.NEGATIVE_INFINITY; + for (ClassicHistogramBucket bucket : data.getClassicBuckets()) { + if (bucket.getUpperBound() == le) { + break; + } else { + lowerBound = bucket.getUpperBound(); + } } - - private Exemplar getExemplar(HistogramSnapshot snapshot, double le, String... labels) { - HistogramSnapshot.HistogramDataPointSnapshot data = snapshot.getDataPoints().stream() - .filter(d -> d.getLabels().equals(Labels.of(labels))) - .findFirst() - .orElseThrow(() -> new RuntimeException("Labels not found")); - double lowerBound = Double.NEGATIVE_INFINITY; - for (ClassicHistogramBucket bucket : data.getClassicBuckets()) { - if (bucket.getUpperBound() == le) { - break; - } else { - lowerBound = bucket.getUpperBound(); - } - } - return data.getExemplars().get(lowerBound, le); + return data.getExemplars().get(lowerBound, le); + } + + @Test + public void testCustomExemplarsClassicHistogram() + throws InterruptedException, NoSuchFieldException, IllegalAccessException { + + // TODO: This was copied from the old simpleclient, can probably be refactored. + + Histogram histogram = Histogram.builder().name("test").withExemplars().build(); + + long sampleIntervalMillis = 10; + ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(histogram, sampleIntervalMillis); + ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(histogram, 3 * sampleIntervalMillis); + + Labels labels = Labels.of("mapKey1", "mapValue1", "mapKey2", "mapValue2"); + + histogram.observeWithExemplar(0.5, Labels.of("key", "value")); + assertExemplar(histogram, 0.5, "key", "value"); + + Thread.sleep(sampleIntervalMillis * 3 + 1); + histogram.observeWithExemplar(0.5, Labels.EMPTY); + assertExemplar(histogram, 0.5); + + Thread.sleep(sampleIntervalMillis * 3 + 1); + histogram.observeWithExemplar(0.5, labels); + assertExemplar(histogram, 0.5, "mapKey1", "mapValue1", "mapKey2", "mapValue2"); + + // default buckets are {.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10} + Thread.sleep(sampleIntervalMillis * 3 + 1); + histogram.observeWithExemplar(2.0, Labels.of("key1", "value1", "key2", "value2")); + assertExemplar(histogram, 2.0, "key1", "value1", "key2", "value2"); + assertExemplar(histogram, 0.5, "mapKey1", "mapValue1", "mapKey2", "mapValue2"); + + Thread.sleep(sampleIntervalMillis * 3 + 1); + histogram.observeWithExemplar(0.4, Labels.EMPTY); // same bucket as 0.5 + assertExemplar(histogram, 0.4); + assertExemplar(histogram, 2.0, "key1", "value1", "key2", "value2"); + } + + private void assertExemplar(Histogram histogram, double value, String... labels) { + double lowerBound = Double.NEGATIVE_INFINITY; + double upperBound = Double.POSITIVE_INFINITY; + HistogramSnapshot snapshot = histogram.collect(); + HistogramSnapshot.HistogramDataPointSnapshot data = + snapshot.getDataPoints().stream() + .filter(d -> d.getLabels().isEmpty()) + .findFirst() + .orElseThrow(() -> new RuntimeException("No data without labels found")); + for (ClassicHistogramBucket bucket : data.getClassicBuckets()) { + if (bucket.getUpperBound() >= value) { + upperBound = bucket.getUpperBound(); + break; + } else { + lowerBound = bucket.getUpperBound(); + } } - - @Test - public void testCustomExemplarsClassicHistogram() throws InterruptedException, NoSuchFieldException, IllegalAccessException { - - // TODO: This was copied from the old simpleclient, can probably be refactored. - - Histogram histogram = Histogram.builder() - .name("test") - .withExemplars() - .build(); - - long sampleIntervalMillis = 10; - ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(histogram, sampleIntervalMillis); - ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(histogram, 3 * sampleIntervalMillis); - - Labels labels = Labels.of("mapKey1", "mapValue1", "mapKey2", "mapValue2"); - - histogram.observeWithExemplar(0.5, Labels.of("key", "value")); - assertExemplar(histogram, 0.5, "key", "value"); - - Thread.sleep(sampleIntervalMillis * 3 + 1); - histogram.observeWithExemplar(0.5, Labels.EMPTY); - assertExemplar(histogram, 0.5); - - Thread.sleep(sampleIntervalMillis * 3 + 1); - histogram.observeWithExemplar(0.5, labels); - assertExemplar(histogram, 0.5, "mapKey1", "mapValue1", "mapKey2", "mapValue2"); - - // default buckets are {.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10} - Thread.sleep(sampleIntervalMillis * 3 + 1); - histogram.observeWithExemplar(2.0, Labels.of("key1", "value1", "key2", "value2")); - assertExemplar(histogram, 2.0, "key1", "value1", "key2", "value2"); - assertExemplar(histogram, 0.5, "mapKey1", "mapValue1", "mapKey2", "mapValue2"); - - Thread.sleep(sampleIntervalMillis * 3 + 1); - histogram.observeWithExemplar(0.4, Labels.EMPTY); // same bucket as 0.5 - assertExemplar(histogram, 0.4); - assertExemplar(histogram, 2.0, "key1", "value1", "key2", "value2"); - } - - private void assertExemplar(Histogram histogram, double value, String... labels) { - double lowerBound = Double.NEGATIVE_INFINITY; - double upperBound = Double.POSITIVE_INFINITY; - HistogramSnapshot snapshot = histogram.collect(); - HistogramSnapshot.HistogramDataPointSnapshot data = snapshot.getDataPoints().stream() - .filter(d -> d.getLabels().isEmpty()) - .findFirst() - .orElseThrow(() -> new RuntimeException("No data without labels found")); - for (ClassicHistogramBucket bucket : data.getClassicBuckets()) { - if (bucket.getUpperBound() >= value) { - upperBound = bucket.getUpperBound(); - break; - } else { - lowerBound = bucket.getUpperBound(); - } - } - Exemplar exemplar = data.getExemplars().get(lowerBound, upperBound); - Assert.assertNotNull("No exemplar found in bucket [" + lowerBound + ", " + upperBound + "]", exemplar); - Assert.assertEquals(value, exemplar.getValue(), 0.0); - Assert.assertEquals("" + exemplar.getLabels(), labels.length / 2, exemplar.getLabels().size()); - for (int i = 0; i < labels.length; i += 2) { - Assert.assertEquals(labels[i], exemplar.getLabels().getName(i / 2)); - Assert.assertEquals(labels[i + 1], exemplar.getLabels().getValue(i / 2)); - } + Exemplar exemplar = data.getExemplars().get(lowerBound, upperBound); + Assert.assertNotNull( + "No exemplar found in bucket [" + lowerBound + ", " + upperBound + "]", exemplar); + Assert.assertEquals(value, exemplar.getValue(), 0.0); + Assert.assertEquals("" + exemplar.getLabels(), labels.length / 2, exemplar.getLabels().size()); + for (int i = 0; i < labels.length; i += 2) { + Assert.assertEquals(labels[i], exemplar.getLabels().getName(i / 2)); + Assert.assertEquals(labels[i + 1], exemplar.getLabels().getValue(i / 2)); } + } + @Test + public void testExemplarsNativeHistogram() throws NoSuchFieldException, IllegalAccessException { - @Test - public void testExemplarsNativeHistogram() throws NoSuchFieldException, IllegalAccessException { + SpanContext spanContext = + new SpanContext() { + int callCount = 0; - SpanContext spanContext = new SpanContext() { - int callCount = 0; + @Override + public String getCurrentTraceId() { + return "traceId-" + callCount; + } - @Override - public String getCurrentTraceId() { - return "traceId-" + callCount; - } + @Override + public String getCurrentSpanId() { + return "spanId-" + callCount; + } - @Override - public String getCurrentSpanId() { - return "spanId-" + callCount; - } + @Override + public boolean isCurrentSpanSampled() { + callCount++; + return true; + } - @Override - public boolean isCurrentSpanSampled() { - callCount++; - return true; - } - - @Override - public void markCurrentSpanAsExemplar() { - } + @Override + public void markCurrentSpanAsExemplar() {} }; - Histogram histogram = Histogram.builder() - .name("test") - .nativeOnly() - .labelNames("path") - .build(); - - long sampleIntervalMillis = 10; - ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(histogram, sampleIntervalMillis); - SpanContextSupplier.setSpanContext(spanContext); - - Exemplar ex1 = Exemplar.builder() - .value(3.11) - .spanId("spanId-1") - .traceId("traceId-1") - .build(); - Exemplar ex2 = Exemplar.builder() - .value(3.12) - .spanId("spanId-2") - .traceId("traceId-2") - .build(); - Exemplar ex3 = Exemplar.builder() - .value(3.13) - .spanId("spanId-3") - .traceId("traceId-3") - .labels(Labels.of("key1", "value1", "key2", "value2")) - .build(); - - histogram.labelValues("/hello").observe(3.11); - histogram.labelValues("/world").observe(3.12); - assertEquals(1, getData(histogram, "path", "/hello").getExemplars().size()); - assertExemplarEquals(ex1, getData(histogram, "path", "/hello").getExemplars().iterator().next()); - assertEquals(1, getData(histogram, "path", "/world").getExemplars().size()); - assertExemplarEquals(ex2, getData(histogram, "path", "/world").getExemplars().iterator().next()); - - histogram.labelValues("/world").observeWithExemplar(3.13, Labels.of("key1", "value1", "key2", "value2")); - assertEquals(1, getData(histogram, "path", "/hello").getExemplars().size()); - assertExemplarEquals(ex1, getData(histogram, "path", "/hello").getExemplars().iterator().next()); - assertEquals(2, getData(histogram, "path", "/world").getExemplars().size()); - Exemplars exemplars = getData(histogram, "path", "/world").getExemplars(); - List exemplarList = new ArrayList<>(exemplars.size()); - for (Exemplar exemplar : exemplars) { - exemplarList.add(exemplar); - } - exemplarList.sort(Comparator.comparingDouble(Exemplar::getValue)); - assertEquals(2, exemplars.size()); - assertExemplarEquals(ex2, exemplarList.get(0)); - assertExemplarEquals(ex3, exemplarList.get(1)); + Histogram histogram = Histogram.builder().name("test").nativeOnly().labelNames("path").build(); + + long sampleIntervalMillis = 10; + ExemplarSamplerConfigTestUtil.setSampleIntervalMillis(histogram, sampleIntervalMillis); + SpanContextSupplier.setSpanContext(spanContext); + + Exemplar ex1 = Exemplar.builder().value(3.11).spanId("spanId-1").traceId("traceId-1").build(); + Exemplar ex2 = Exemplar.builder().value(3.12).spanId("spanId-2").traceId("traceId-2").build(); + Exemplar ex3 = + Exemplar.builder() + .value(3.13) + .spanId("spanId-3") + .traceId("traceId-3") + .labels(Labels.of("key1", "value1", "key2", "value2")) + .build(); + + histogram.labelValues("/hello").observe(3.11); + histogram.labelValues("/world").observe(3.12); + assertEquals(1, getData(histogram, "path", "/hello").getExemplars().size()); + assertExemplarEquals( + ex1, getData(histogram, "path", "/hello").getExemplars().iterator().next()); + assertEquals(1, getData(histogram, "path", "/world").getExemplars().size()); + assertExemplarEquals( + ex2, getData(histogram, "path", "/world").getExemplars().iterator().next()); + + histogram + .labelValues("/world") + .observeWithExemplar(3.13, Labels.of("key1", "value1", "key2", "value2")); + assertEquals(1, getData(histogram, "path", "/hello").getExemplars().size()); + assertExemplarEquals( + ex1, getData(histogram, "path", "/hello").getExemplars().iterator().next()); + assertEquals(2, getData(histogram, "path", "/world").getExemplars().size()); + Exemplars exemplars = getData(histogram, "path", "/world").getExemplars(); + List exemplarList = new ArrayList<>(exemplars.size()); + for (Exemplar exemplar : exemplars) { + exemplarList.add(exemplar); } - - @Test(expected = IllegalArgumentException.class) - public void testIllegalLabelName() { + exemplarList.sort(Comparator.comparingDouble(Exemplar::getValue)); + assertEquals(2, exemplars.size()); + assertExemplarEquals(ex2, exemplarList.get(0)); + assertExemplarEquals(ex3, exemplarList.get(1)); + } + + @Test(expected = IllegalArgumentException.class) + public void testIllegalLabelName() { + Histogram.builder().name("test").labelNames("label", "le"); + } + + @Test(expected = IllegalArgumentException.class) + public void testIllegalLabelNameConstLabels() { + Histogram.builder().name("test").constLabels(Labels.of("label1", "value1", "le", "0.3")); + } + + @Test(expected = IllegalArgumentException.class) + public void testIllegalLabelNamePrefix() { + Histogram.builder().name("test").labelNames("__hello"); + } + + @Test(expected = IllegalArgumentException.class) + public void testIllegalName() { + Histogram.builder().name("my_namespace/server.durations"); + } + + @Test(expected = IllegalArgumentException.class) + public void testNoName() { + Histogram.builder().build(); + } + + @Test(expected = NullPointerException.class) + public void testNullName() { + Histogram.builder().name(null); + } + + @Test + public void testDuplicateClassicBuckets() { + Histogram histogram = + Histogram.builder().name("test").classicUpperBounds(0, 3, 17, 3, 21).build(); + List upperBounds = + getData(histogram).getClassicBuckets().stream() + .map(ClassicHistogramBucket::getUpperBound) + .collect(Collectors.toList()); + Assert.assertEquals(Arrays.asList(0.0, 3.0, 17.0, 21.0, Double.POSITIVE_INFINITY), upperBounds); + } + + @Test + public void testUnsortedBuckets() { + Histogram histogram = Histogram.builder().name("test").classicUpperBounds(0.2, 0.1).build(); + List upperBounds = + getData(histogram).getClassicBuckets().stream() + .map(ClassicHistogramBucket::getUpperBound) + .collect(Collectors.toList()); + Assert.assertEquals(Arrays.asList(0.1, 0.2, Double.POSITIVE_INFINITY), upperBounds); + } + + @Test + public void testEmptyBuckets() { + Histogram histogram = Histogram.builder().name("test").classicUpperBounds().build(); + List upperBounds = + getData(histogram).getClassicBuckets().stream() + .map(ClassicHistogramBucket::getUpperBound) + .collect(Collectors.toList()); + Assert.assertEquals(Collections.singletonList(Double.POSITIVE_INFINITY), upperBounds); + } + + @Test + public void testBucketsIncludePositiveInfinity() { + Histogram histogram = Histogram.builder() - .name("test") - .labelNames("label", "le"); - } - - @Test(expected = IllegalArgumentException.class) - public void testIllegalLabelNameConstLabels() { + .name("test") + .classicUpperBounds(0.01, 0.1, 1.0, Double.POSITIVE_INFINITY) + .build(); + List upperBounds = + getData(histogram).getClassicBuckets().stream() + .map(ClassicHistogramBucket::getUpperBound) + .collect(Collectors.toList()); + Assert.assertEquals(Arrays.asList(0.01, 0.1, 1.0, Double.POSITIVE_INFINITY), upperBounds); + } + + @Test + public void testLinearBuckets() { + Histogram histogram = + Histogram.builder().name("test").classicLinearUpperBounds(0.1, 0.1, 10).build(); + List upperBounds = + getData(histogram).getClassicBuckets().stream() + .map(ClassicHistogramBucket::getUpperBound) + .collect(Collectors.toList()); + Assert.assertEquals( + Arrays.asList(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, Double.POSITIVE_INFINITY), + upperBounds); + } + + @Test + public void testExponentialBuckets() { + Histogram histogram = + Histogram.builder().classicExponentialUpperBounds(2, 2.5, 3).name("test").build(); + List upperBounds = + getData(histogram).getClassicBuckets().stream() + .map(ClassicHistogramBucket::getUpperBound) + .collect(Collectors.toList()); + assertEquals(Arrays.asList(2.0, 5.0, 12.5, Double.POSITIVE_INFINITY), upperBounds); + } + + @Test(expected = RuntimeException.class) + public void testBucketsIncludeNaN() { + Histogram.builder().name("test").classicUpperBounds(0.01, 0.1, 1.0, Double.NaN); + } + + @Test + public void testNoLabelsDefaultZeroValue() { + Histogram noLabels = Histogram.builder().name("test").build(); + assertEquals(0.0, getBucket(noLabels, 0.005).getCount(), 0.0); + assertEquals(0, getData(noLabels).getCount()); + assertEquals(0.0, getData(noLabels).getSum(), 0.0); + } + + private ClassicHistogramBucket getBucket(Histogram histogram, double le, String... labels) { + return getData(histogram, labels).getClassicBuckets().stream() + .filter(b -> b.getUpperBound() == le) + .findAny() + .orElseThrow(() -> new RuntimeException("bucket with le=" + le + " not found.")); + } + + @Test + public void testObserve() { + Histogram noLabels = Histogram.builder().name("test").build(); + noLabels.observe(2); + assertEquals(1, getData(noLabels).getCount()); + assertEquals(2.0, getData(noLabels).getSum(), .0); + assertEquals(0.0, getBucket(noLabels, 1).getCount(), .0); + assertEquals(1.0, getBucket(noLabels, 2.5).getCount(), .0); + noLabels.observe(4); + assertEquals(2.0, getData(noLabels).getCount(), .0); + assertEquals(6.0, getData(noLabels).getSum(), .0); + assertEquals(0.0, getBucket(noLabels, 1).getCount(), .0); + assertEquals(1.0, getBucket(noLabels, 2.5).getCount(), .0); + assertEquals(1.0, getBucket(noLabels, 5).getCount(), .0); + assertEquals(0.0, getBucket(noLabels, 10).getCount(), .0); + assertEquals(0.0, getBucket(noLabels, Double.POSITIVE_INFINITY).getCount(), .0); + } + + @Test + // See https://github.com/prometheus/client_java/issues/646 + public void testNegativeAmount() { + Histogram histogram = Histogram.builder() - .name("test") - .constLabels(Labels.of("label1", "value1", "le", "0.3")); - } - - @Test(expected = IllegalArgumentException.class) - public void testIllegalLabelNamePrefix() { - Histogram.builder() - .name("test") - .labelNames("__hello"); - } - - @Test(expected = IllegalArgumentException.class) - public void testIllegalName() { - Histogram.builder().name("my_namespace/server.durations"); - } - - @Test(expected = IllegalArgumentException.class) - public void testNoName() { - Histogram.builder().build(); - } - - @Test(expected = NullPointerException.class) - public void testNullName() { - Histogram.builder() - .name(null); - } - - @Test - public void testDuplicateClassicBuckets() { - Histogram histogram = Histogram.builder() - .name("test") - .classicUpperBounds(0, 3, 17, 3, 21) - .build(); - List upperBounds = getData(histogram).getClassicBuckets().stream() - .map(ClassicHistogramBucket::getUpperBound) - .collect(Collectors.toList()); - Assert.assertEquals(Arrays.asList(0.0, 3.0, 17.0, 21.0, Double.POSITIVE_INFINITY), upperBounds); - } - - @Test - public void testUnsortedBuckets() { - Histogram histogram = Histogram.builder() - .name("test") - .classicUpperBounds(0.2, 0.1) - .build(); - List upperBounds = getData(histogram).getClassicBuckets().stream() - .map(ClassicHistogramBucket::getUpperBound) - .collect(Collectors.toList()); - Assert.assertEquals(Arrays.asList(0.1, 0.2, Double.POSITIVE_INFINITY), upperBounds); + .name("histogram") + .help("test histogram for negative values") + .classicUpperBounds(-10, -5, 0, 5, 10) + .build(); + double expectedCount = 0; + double expectedSum = 0; + for (int i = 10; i >= -11; i--) { + histogram.observe(i); + expectedCount++; + expectedSum += i; + assertEquals(expectedSum, getData(histogram).getSum(), .001); + assertEquals(expectedCount, getData(histogram).getCount(), .001); } - - @Test - public void testEmptyBuckets() { - Histogram histogram = Histogram.builder() - .name("test") - .classicUpperBounds() - .build(); - List upperBounds = getData(histogram).getClassicBuckets().stream() - .map(ClassicHistogramBucket::getUpperBound) - .collect(Collectors.toList()); - Assert.assertEquals(Collections.singletonList(Double.POSITIVE_INFINITY), upperBounds); - } - - @Test - public void testBucketsIncludePositiveInfinity() { - Histogram histogram = Histogram.builder() - .name("test") - .classicUpperBounds(0.01, 0.1, 1.0, Double.POSITIVE_INFINITY) - .build(); - List upperBounds = getData(histogram).getClassicBuckets().stream() - .map(ClassicHistogramBucket::getUpperBound) - .collect(Collectors.toList()); - Assert.assertEquals(Arrays.asList(0.01, 0.1, 1.0, Double.POSITIVE_INFINITY), upperBounds); - } - - @Test - public void testLinearBuckets() { - Histogram histogram = Histogram.builder() - .name("test") - .classicLinearUpperBounds(0.1, 0.1, 10) - .build(); - List upperBounds = getData(histogram).getClassicBuckets().stream() - .map(ClassicHistogramBucket::getUpperBound) - .collect(Collectors.toList()); - Assert.assertEquals(Arrays.asList(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, Double.POSITIVE_INFINITY), upperBounds); - } - - @Test - public void testExponentialBuckets() { - Histogram histogram = Histogram.builder() - .classicExponentialUpperBounds(2, 2.5, 3) - .name("test") - .build(); - List upperBounds = getData(histogram).getClassicBuckets().stream() - .map(ClassicHistogramBucket::getUpperBound) - .collect(Collectors.toList()); - assertEquals(Arrays.asList(2.0, 5.0, 12.5, Double.POSITIVE_INFINITY), upperBounds); - } - - @Test(expected = RuntimeException.class) - public void testBucketsIncludeNaN() { + List expectedBucketCounts = + Arrays.asList(2L, 5L, 5L, 5L, 5L, 0L); // buckets -10, -5, 0, 5, 10, +Inf + List actualBucketCounts = + getData(histogram).getClassicBuckets().stream() + .map(ClassicHistogramBucket::getCount) + .collect(Collectors.toList()); + assertEquals(expectedBucketCounts, actualBucketCounts); + } + + @Test + public void testBoundaryConditions() { + Histogram histogram = Histogram.builder().name("test").build(); + histogram.observe(2.5); + assertEquals(0, getBucket(histogram, 1).getCount()); + assertEquals(1, getBucket(histogram, 2.5).getCount()); + + histogram.observe(Double.POSITIVE_INFINITY); + assertEquals(0, getBucket(histogram, 1).getCount()); + assertEquals(1, getBucket(histogram, 2.5).getCount()); + assertEquals(0, getBucket(histogram, 5).getCount()); + assertEquals(0, getBucket(histogram, 10).getCount()); + assertEquals(1, getBucket(histogram, Double.POSITIVE_INFINITY).getCount()); + } + + @Test + public void testObserveWithLabels() { + Histogram histogram = Histogram.builder() - .name("test") - .classicUpperBounds(0.01, 0.1, 1.0, Double.NaN); - } - - @Test - public void testNoLabelsDefaultZeroValue() { - Histogram noLabels = Histogram.builder().name("test").build(); - assertEquals(0.0, getBucket(noLabels, 0.005).getCount(), 0.0); - assertEquals(0, getData(noLabels).getCount()); - assertEquals(0.0, getData(noLabels).getSum(), 0.0); - } - - private ClassicHistogramBucket getBucket(Histogram histogram, double le, String... labels) { - return getData(histogram, labels).getClassicBuckets().stream() - .filter(b -> b.getUpperBound() == le) - .findAny() - .orElseThrow(() -> new RuntimeException("bucket with le=" + le + " not found.")); - } - - @Test - public void testObserve() { - Histogram noLabels = Histogram.builder() - .name("test") - .build(); - noLabels.observe(2); - assertEquals(1, getData(noLabels).getCount()); - assertEquals(2.0, getData(noLabels).getSum(), .0); - assertEquals(0.0, getBucket(noLabels, 1).getCount(), .0); - assertEquals(1.0, getBucket(noLabels, 2.5).getCount(), .0); - noLabels.observe(4); - assertEquals(2.0, getData(noLabels).getCount(), .0); - assertEquals(6.0, getData(noLabels).getSum(), .0); - assertEquals(0.0, getBucket(noLabels, 1).getCount(), .0); - assertEquals(1.0, getBucket(noLabels, 2.5).getCount(), .0); - assertEquals(1.0, getBucket(noLabels, 5).getCount(), .0); - assertEquals(0.0, getBucket(noLabels, 10).getCount(), .0); - assertEquals(0.0, getBucket(noLabels, Double.POSITIVE_INFINITY).getCount(), .0); - } - - @Test - // See https://github.com/prometheus/client_java/issues/646 - public void testNegativeAmount() { - Histogram histogram = Histogram.builder() - .name("histogram") - .help("test histogram for negative values") - .classicUpperBounds(-10, -5, 0, 5, 10) - .build(); - double expectedCount = 0; - double expectedSum = 0; - for (int i = 10; i >= -11; i--) { - histogram.observe(i); - expectedCount++; - expectedSum += i; - assertEquals(expectedSum, getData(histogram).getSum(), .001); - assertEquals(expectedCount, getData(histogram).getCount(), .001); - } - List expectedBucketCounts = Arrays.asList(2L, 5L, 5L, 5L, 5L, 0L); // buckets -10, -5, 0, 5, 10, +Inf - List actualBucketCounts = getData(histogram).getClassicBuckets().stream() - .map(ClassicHistogramBucket::getCount) - .collect(Collectors.toList()); - assertEquals(expectedBucketCounts, actualBucketCounts); - } - - @Test - public void testBoundaryConditions() { - Histogram histogram = Histogram.builder() - .name("test") - .build(); - histogram.observe(2.5); - assertEquals(0, getBucket(histogram, 1).getCount()); - assertEquals(1, getBucket(histogram, 2.5).getCount()); - - histogram.observe(Double.POSITIVE_INFINITY); - assertEquals(0, getBucket(histogram, 1).getCount()); - assertEquals(1, getBucket(histogram, 2.5).getCount()); - assertEquals(0, getBucket(histogram, 5).getCount()); - assertEquals(0, getBucket(histogram, 10).getCount()); - assertEquals(1, getBucket(histogram, Double.POSITIVE_INFINITY).getCount()); - } - - @Test - public void testObserveWithLabels() { - Histogram histogram = Histogram.builder() - .name("test") - .constLabels(Labels.of("env", "prod")) - .labelNames("path", "status") - .build(); - histogram.labelValues("/hello", "200").observe(0.11); - histogram.labelValues("/hello", "200").observe(0.2); - histogram.labelValues("/hello", "500").observe(0.19); - HistogramSnapshot.HistogramDataPointSnapshot data200 = getData(histogram, "env", "prod", "path", "/hello", "status", "200"); - HistogramSnapshot.HistogramDataPointSnapshot data500 = getData(histogram, "env", "prod", "path", "/hello", "status", "500"); - assertEquals(2, data200.getCount()); - assertEquals(0.31, data200.getSum(), 0.0000001); - assertEquals(1, data500.getCount()); - assertEquals(0.19, data500.getSum(), 0.0000001); - histogram.labelValues("/hello", "200").observe(0.13); - data200 = getData(histogram, "env", "prod", "path", "/hello", "status", "200"); - data500 = getData(histogram, "env", "prod", "path", "/hello", "status", "500"); - assertEquals(3, data200.getCount()); - assertEquals(0.44, data200.getSum(), 0.0000001); - assertEquals(1, data500.getCount()); - assertEquals(0.19, data500.getSum(), 0.0000001); - } - - @Test - public void testObserveMultithreaded() throws InterruptedException, ExecutionException, TimeoutException { - // Hard to test concurrency, but let's run a couple of observations in parallel and assert none gets lost. - Histogram histogram = Histogram.builder() - .name("test") - .labelNames("status") - .build(); - int nThreads = 8; - DistributionDataPoint obs = histogram.labelValues("200"); - ExecutorService executor = Executors.newFixedThreadPool(nThreads); - CompletionService> completionService = new ExecutorCompletionService<>(executor); - CountDownLatch startSignal = new CountDownLatch(nThreads); - for (int t = 0; t < nThreads; t++) { - completionService.submit(() -> { - List snapshots = new ArrayList<>(); - startSignal.countDown(); - startSignal.await(); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < 1000; j++) { - obs.observe(1.1); - } - snapshots.add(histogram.collect()); - } - return snapshots; - }); - } - long maxCount = 0; - for (int i = 0; i < nThreads; i++) { - Future> future = completionService.take(); - List snapshots = future.get(5, TimeUnit.SECONDS); - long count = 0; - for (HistogramSnapshot snapshot : snapshots) { - Assert.assertEquals(1, snapshot.getDataPoints().size()); - HistogramSnapshot.HistogramDataPointSnapshot data = snapshot.getDataPoints().stream().findFirst().orElseThrow(RuntimeException::new); - Assert.assertTrue(data.getCount() >= (count + 1000)); // 1000 own observations plus the ones from other threads - count = data.getCount(); - } - if (count > maxCount) { - maxCount = count; + .name("test") + .constLabels(Labels.of("env", "prod")) + .labelNames("path", "status") + .build(); + histogram.labelValues("/hello", "200").observe(0.11); + histogram.labelValues("/hello", "200").observe(0.2); + histogram.labelValues("/hello", "500").observe(0.19); + HistogramSnapshot.HistogramDataPointSnapshot data200 = + getData(histogram, "env", "prod", "path", "/hello", "status", "200"); + HistogramSnapshot.HistogramDataPointSnapshot data500 = + getData(histogram, "env", "prod", "path", "/hello", "status", "500"); + assertEquals(2, data200.getCount()); + assertEquals(0.31, data200.getSum(), 0.0000001); + assertEquals(1, data500.getCount()); + assertEquals(0.19, data500.getSum(), 0.0000001); + histogram.labelValues("/hello", "200").observe(0.13); + data200 = getData(histogram, "env", "prod", "path", "/hello", "status", "200"); + data500 = getData(histogram, "env", "prod", "path", "/hello", "status", "500"); + assertEquals(3, data200.getCount()); + assertEquals(0.44, data200.getSum(), 0.0000001); + assertEquals(1, data500.getCount()); + assertEquals(0.19, data500.getSum(), 0.0000001); + } + + @Test + public void testObserveMultithreaded() + throws InterruptedException, ExecutionException, TimeoutException { + // Hard to test concurrency, but let's run a couple of observations in parallel and assert none + // gets lost. + Histogram histogram = Histogram.builder().name("test").labelNames("status").build(); + int nThreads = 8; + DistributionDataPoint obs = histogram.labelValues("200"); + ExecutorService executor = Executors.newFixedThreadPool(nThreads); + CompletionService> completionService = + new ExecutorCompletionService<>(executor); + CountDownLatch startSignal = new CountDownLatch(nThreads); + for (int t = 0; t < nThreads; t++) { + completionService.submit( + () -> { + List snapshots = new ArrayList<>(); + startSignal.countDown(); + startSignal.await(); + for (int i = 0; i < 10; i++) { + for (int j = 0; j < 1000; j++) { + obs.observe(1.1); + } + snapshots.add(histogram.collect()); } - } - Assert.assertEquals(nThreads * 10_000, maxCount); // the last collect() has seen all observations - Assert.assertEquals(getBucket(histogram, 2.5, "status", "200").getCount(), nThreads * 10_000); - executor.shutdown(); - Assert.assertTrue(executor.awaitTermination(5, TimeUnit.SECONDS)); + return snapshots; + }); } - - - private HistogramSnapshot.HistogramDataPointSnapshot getData(Histogram histogram, String... labels) { - return histogram.collect().getDataPoints().stream() - .filter(d -> d.getLabels().equals(Labels.of(labels))) - .findAny() - .orElseThrow(() -> new RuntimeException("histogram with labels " + labels + " not found")); + long maxCount = 0; + for (int i = 0; i < nThreads; i++) { + Future> future = completionService.take(); + List snapshots = future.get(5, TimeUnit.SECONDS); + long count = 0; + for (HistogramSnapshot snapshot : snapshots) { + Assert.assertEquals(1, snapshot.getDataPoints().size()); + HistogramSnapshot.HistogramDataPointSnapshot data = + snapshot.getDataPoints().stream().findFirst().orElseThrow(RuntimeException::new); + Assert.assertTrue( + data.getCount() + >= (count + 1000)); // 1000 own observations plus the ones from other threads + count = data.getCount(); + } + if (count > maxCount) { + maxCount = count; + } } + Assert.assertEquals( + nThreads * 10_000, maxCount); // the last collect() has seen all observations + Assert.assertEquals(getBucket(histogram, 2.5, "status", "200").getCount(), nThreads * 10_000); + executor.shutdown(); + Assert.assertTrue(executor.awaitTermination(5, TimeUnit.SECONDS)); + } + + private HistogramSnapshot.HistogramDataPointSnapshot getData( + Histogram histogram, String... labels) { + return histogram.collect().getDataPoints().stream() + .filter(d -> d.getLabels().equals(Labels.of(labels))) + .findAny() + .orElseThrow(() -> new RuntimeException("histogram with labels " + labels + " not found")); + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index f2ddbc456..4175ae733 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -1,107 +1,102 @@ package io.prometheus.metrics.core.metrics; +import static org.junit.Assert.assertEquals; + import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; +import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; -import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; -import org.junit.Assert; -import org.junit.Test; - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; - -import static org.junit.Assert.assertEquals; +import org.junit.Assert; +import org.junit.Test; public class InfoTest { - @Test - public void testInfoStrippedFromName() { - for (String name : new String[]{ - "jvm.runtime", "jvm_runtime", - "jvm.runtime.info", "jvm_runtime_info"}) { - for (String labelName : new String[]{"my.key", "my_key"}) { - Info info = Info.builder() - .name(name) - .labelNames(labelName) - .build(); - info.addLabelValues("value"); - Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(info.collect()); - assertEquals("name: \"jvm_runtime_info\" type: GAUGE metric { label { name: \"my_key\" value: \"value\" } gauge { value: 1.0 } }", TextFormat.printer().shortDebugString(protobufData)); - } - } - } - - @Test - public void testAddAndRemove() throws IOException { - Info info = Info.builder() - .name("test_info") - .labelNames("a", "b") - .build(); - Assert.assertEquals(0, info.collect().getDataPoints().size()); - info.addLabelValues("val1", "val2"); - Assert.assertEquals(1, info.collect().getDataPoints().size()); - info.addLabelValues("val1", "val2"); // already exist, so no change - Assert.assertEquals(1, info.collect().getDataPoints().size()); - info.addLabelValues("val2", "val2"); - Assert.assertEquals(2, info.collect().getDataPoints().size()); - info.remove("val1", "val3"); // does not exist, so no change - Assert.assertEquals(2, info.collect().getDataPoints().size()); - info.remove("val1", "val2"); - Assert.assertEquals(1, info.collect().getDataPoints().size()); - info.remove("val2", "val2"); - Assert.assertEquals(0, info.collect().getDataPoints().size()); + @Test + public void testInfoStrippedFromName() { + for (String name : + new String[] { + "jvm.runtime", "jvm_runtime", + "jvm.runtime.info", "jvm_runtime_info" + }) { + for (String labelName : new String[] {"my.key", "my_key"}) { + Info info = Info.builder().name(name).labelNames(labelName).build(); + info.addLabelValues("value"); + Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(info.collect()); + assertEquals( + "name: \"jvm_runtime_info\" type: GAUGE metric { label { name: \"my_key\" value: \"value\" } gauge { value: 1.0 } }", + TextFormat.printer().shortDebugString(protobufData)); + } } + } - @Test - public void testSet() throws IOException { - Info info = Info.builder() - .name("target_info") - .constLabels(Labels.of("service.name", "test", "service.instance.id", "123")) - .labelNames("service.version") - .build(); - info.setLabelValues("1.0.0"); - Assert.assertEquals(1, info.collect().getDataPoints().size()); - info.setLabelValues("2.0.0"); - Assert.assertEquals(1, info.collect().getDataPoints().size()); - assertTextFormat("target_info{service_instance_id=\"123\",service_name=\"test\",service_version=\"2.0.0\"} 1\n", info); - } + @Test + public void testAddAndRemove() throws IOException { + Info info = Info.builder().name("test_info").labelNames("a", "b").build(); + Assert.assertEquals(0, info.collect().getDataPoints().size()); + info.addLabelValues("val1", "val2"); + Assert.assertEquals(1, info.collect().getDataPoints().size()); + info.addLabelValues("val1", "val2"); // already exist, so no change + Assert.assertEquals(1, info.collect().getDataPoints().size()); + info.addLabelValues("val2", "val2"); + Assert.assertEquals(2, info.collect().getDataPoints().size()); + info.remove("val1", "val3"); // does not exist, so no change + Assert.assertEquals(2, info.collect().getDataPoints().size()); + info.remove("val1", "val2"); + Assert.assertEquals(1, info.collect().getDataPoints().size()); + info.remove("val2", "val2"); + Assert.assertEquals(0, info.collect().getDataPoints().size()); + } - @Test - public void testConstLabelsOnly() throws IOException { - Info info = Info.builder() - .name("target_info") - .constLabels(Labels.of("service.name", "test", "service.instance.id", "123")) - .build(); - Assert.assertEquals(1, info.collect().getDataPoints().size()); - assertTextFormat("target_info{service_instance_id=\"123\",service_name=\"test\"} 1\n", info); - } - - @Test(expected = IllegalArgumentException.class) - public void testConstLabelsDuplicate1() { + @Test + public void testSet() throws IOException { + Info info = Info.builder() - .constLabels(Labels.of("a_1", "val1")) - .labelNames("a.1") - .build(); - } + .name("target_info") + .constLabels(Labels.of("service.name", "test", "service.instance.id", "123")) + .labelNames("service.version") + .build(); + info.setLabelValues("1.0.0"); + Assert.assertEquals(1, info.collect().getDataPoints().size()); + info.setLabelValues("2.0.0"); + Assert.assertEquals(1, info.collect().getDataPoints().size()); + assertTextFormat( + "target_info{service_instance_id=\"123\",service_name=\"test\",service_version=\"2.0.0\"} 1\n", + info); + } - @Test(expected = IllegalArgumentException.class) - public void testConstLabelsDuplicate2() { + @Test + public void testConstLabelsOnly() throws IOException { + Info info = Info.builder() - .labelNames("a_1") - .constLabels(Labels.of("a.1", "val1")) - .build(); - } + .name("target_info") + .constLabels(Labels.of("service.name", "test", "service.instance.id", "123")) + .build(); + Assert.assertEquals(1, info.collect().getDataPoints().size()); + assertTextFormat("target_info{service_instance_id=\"123\",service_name=\"test\"} 1\n", info); + } + + @Test(expected = IllegalArgumentException.class) + public void testConstLabelsDuplicate1() { + Info.builder().constLabels(Labels.of("a_1", "val1")).labelNames("a.1").build(); + } + + @Test(expected = IllegalArgumentException.class) + public void testConstLabelsDuplicate2() { + Info.builder().labelNames("a_1").constLabels(Labels.of("a.1", "val1")).build(); + } - private void assertTextFormat(String expected, Info info) throws IOException { - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - writer.write(outputStream, MetricSnapshots.of(info.collect())); - String result = outputStream.toString(StandardCharsets.UTF_8.name()); - if (!result.contains(expected)) { - throw new AssertionError(expected + " is not contained in the following output:\n" + result); - } + private void assertTextFormat(String expected, Info info) throws IOException { + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + writer.write(outputStream, MetricSnapshots.of(info.collect())); + String result = outputStream.toString(StandardCharsets.UTF_8.name()); + if (!result.contains(expected)) { + throw new AssertionError(expected + " is not contained in the following output:\n" + result); } + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java index 3461d959e..ce43b141c 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java @@ -1,79 +1,89 @@ package io.prometheus.metrics.core.metrics; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicLong; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; public class SlidingWindowTest { - class Observer { + class Observer { - final List values = new ArrayList<>(); + final List values = new ArrayList<>(); - public void observe(double value) { - values.add(value); - } + public void observe(double value) { + values.add(value); + } - void assertValues(double... expectedValues) { - ArrayList expectedList = new ArrayList<>(); - for (double expectedValue : expectedValues) { - expectedList.add(expectedValue); - } - Assert.assertEquals("Start time: " + startTime + ", current time: " + currentTimeMillis.get() + ", elapsed time: " + (currentTimeMillis.get() - startTime), expectedList, values); - } + void assertValues(double... expectedValues) { + ArrayList expectedList = new ArrayList<>(); + for (double expectedValue : expectedValues) { + expectedList.add(expectedValue); + } + Assert.assertEquals( + "Start time: " + + startTime + + ", current time: " + + currentTimeMillis.get() + + ", elapsed time: " + + (currentTimeMillis.get() - startTime), + expectedList, + values); } + } - private long startTime; - private final AtomicLong currentTimeMillis = new AtomicLong(); - private SlidingWindow ringBuffer; - private final long maxAgeSeconds = 30; - private final int ageBuckets = 5; - private final long timeBetweenRotateMillis = maxAgeSeconds * 1000 / ageBuckets + 2; + private long startTime; + private final AtomicLong currentTimeMillis = new AtomicLong(); + private SlidingWindow ringBuffer; + private final long maxAgeSeconds = 30; + private final int ageBuckets = 5; + private final long timeBetweenRotateMillis = maxAgeSeconds * 1000 / ageBuckets + 2; - @Before - public void setUp() { - startTime = System.currentTimeMillis(); - currentTimeMillis.set(startTime); - ringBuffer = new SlidingWindow<>(Observer.class, Observer::new, Observer::observe, maxAgeSeconds, ageBuckets); - ringBuffer.currentTimeMillis = currentTimeMillis::get; - } + @Before + public void setUp() { + startTime = System.currentTimeMillis(); + currentTimeMillis.set(startTime); + ringBuffer = + new SlidingWindow<>( + Observer.class, Observer::new, Observer::observe, maxAgeSeconds, ageBuckets); + ringBuffer.currentTimeMillis = currentTimeMillis::get; + } - @Test - public void testRotate() { - for (int i=0; i first observation evicted - ringBuffer.current().assertValues(2.0); - ringBuffer.observe(3.0); - ringBuffer.current().assertValues(2.0, 3.0); - currentTimeMillis.addAndGet(2 * timeBetweenRotateMillis); // 7/5 of max age - ringBuffer.current().assertValues(3.0); - currentTimeMillis.addAndGet(3 * timeBetweenRotateMillis); // 10/5 of max age - ringBuffer.current().assertValues(); // empty - } + @Test + public void testMultiRotate() { + ringBuffer.observe(1.0); + currentTimeMillis.addAndGet(2 * timeBetweenRotateMillis); // 2/5 of max aqe + ringBuffer.observe(2.0); + ringBuffer.current().assertValues(1.0, 2.0); + currentTimeMillis.addAndGet( + 3 * timeBetweenRotateMillis); // 5/5 of max age -> first observation evicted + ringBuffer.current().assertValues(2.0); + ringBuffer.observe(3.0); + ringBuffer.current().assertValues(2.0, 3.0); + currentTimeMillis.addAndGet(2 * timeBetweenRotateMillis); // 7/5 of max age + ringBuffer.current().assertValues(3.0); + currentTimeMillis.addAndGet(3 * timeBetweenRotateMillis); // 10/5 of max age + ringBuffer.current().assertValues(); // empty + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java index 5a82cdb48..776aeacde 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java @@ -7,69 +7,68 @@ public class StateSetTest { - enum MyFeatureFlag { - EXPERIMENTAL_FEATURE_1 { - @Override - public String toString() { - return "feature1"; - } - }, + enum MyFeatureFlag { + EXPERIMENTAL_FEATURE_1 { + @Override + public String toString() { + return "feature1"; + } + }, - EXPERIMENTAL_FEATURE_2 { - @Override - public String toString() { - return "feature2"; - } - } + EXPERIMENTAL_FEATURE_2 { + @Override + public String toString() { + return "feature2"; + } } + } - @Test - public void testEnumStateSet() { - StateSet stateSet = StateSet.builder() - .name("feature_flags") - .labelNames("environment") - .states(MyFeatureFlag.class) - .build(); - stateSet.labelValues("dev").setTrue(MyFeatureFlag.EXPERIMENTAL_FEATURE_2); - stateSet.labelValues("prod").setFalse(MyFeatureFlag.EXPERIMENTAL_FEATURE_2); - StateSetSnapshot snapshot = stateSet.collect(); - Assert.assertEquals(2, snapshot.getDataPoints().size()); - Assert.assertEquals(2, getData(stateSet, "environment", "dev").size()); - Assert.assertEquals("feature1", getData(stateSet, "environment", "dev").getName(0)); - Assert.assertFalse(getData(stateSet, "environment", "dev").isTrue(0)); - Assert.assertEquals("feature2", getData(stateSet, "environment", "dev").getName(1)); - Assert.assertTrue(getData(stateSet, "environment", "dev").isTrue(1)); - Assert.assertEquals(2, getData(stateSet, "environment", "prod").size()); - Assert.assertEquals("feature1", getData(stateSet, "environment", "prod").getName(0)); - Assert.assertFalse(getData(stateSet, "environment", "prod").isTrue(0)); - Assert.assertEquals("feature2", getData(stateSet, "environment", "prod").getName(1)); - Assert.assertFalse(getData(stateSet, "environment", "prod").isTrue(1)); - } + @Test + public void testEnumStateSet() { + StateSet stateSet = + StateSet.builder() + .name("feature_flags") + .labelNames("environment") + .states(MyFeatureFlag.class) + .build(); + stateSet.labelValues("dev").setTrue(MyFeatureFlag.EXPERIMENTAL_FEATURE_2); + stateSet.labelValues("prod").setFalse(MyFeatureFlag.EXPERIMENTAL_FEATURE_2); + StateSetSnapshot snapshot = stateSet.collect(); + Assert.assertEquals(2, snapshot.getDataPoints().size()); + Assert.assertEquals(2, getData(stateSet, "environment", "dev").size()); + Assert.assertEquals("feature1", getData(stateSet, "environment", "dev").getName(0)); + Assert.assertFalse(getData(stateSet, "environment", "dev").isTrue(0)); + Assert.assertEquals("feature2", getData(stateSet, "environment", "dev").getName(1)); + Assert.assertTrue(getData(stateSet, "environment", "dev").isTrue(1)); + Assert.assertEquals(2, getData(stateSet, "environment", "prod").size()); + Assert.assertEquals("feature1", getData(stateSet, "environment", "prod").getName(0)); + Assert.assertFalse(getData(stateSet, "environment", "prod").isTrue(0)); + Assert.assertEquals("feature2", getData(stateSet, "environment", "prod").getName(1)); + Assert.assertFalse(getData(stateSet, "environment", "prod").isTrue(1)); + } - @Test - public void testDefaultFalse() { - StateSet stateSet = StateSet.builder() - .name("test") - .states("state1", "state2", "state3") - .build(); - Assert.assertEquals(3, getData(stateSet).size()); - Assert.assertEquals("state1", getData(stateSet).getName(0)); - Assert.assertFalse(getData(stateSet).isTrue(0)); - Assert.assertEquals("state2", getData(stateSet).getName(1)); - Assert.assertFalse(getData(stateSet).isTrue(1)); - Assert.assertEquals("state3", getData(stateSet).getName(2)); - Assert.assertFalse(getData(stateSet).isTrue(2)); - } + @Test + public void testDefaultFalse() { + StateSet stateSet = + StateSet.builder().name("test").states("state1", "state2", "state3").build(); + Assert.assertEquals(3, getData(stateSet).size()); + Assert.assertEquals("state1", getData(stateSet).getName(0)); + Assert.assertFalse(getData(stateSet).isTrue(0)); + Assert.assertEquals("state2", getData(stateSet).getName(1)); + Assert.assertFalse(getData(stateSet).isTrue(1)); + Assert.assertEquals("state3", getData(stateSet).getName(2)); + Assert.assertFalse(getData(stateSet).isTrue(2)); + } - private StateSetSnapshot.StateSetDataPointSnapshot getData(StateSet stateSet, String... labels) { - return stateSet.collect().getDataPoints().stream() - .filter(d -> d.getLabels().equals(Labels.of(labels))) - .findAny() - .orElseThrow(() -> new RuntimeException("stateset with labels " + labels + " not found")); - } + private StateSetSnapshot.StateSetDataPointSnapshot getData(StateSet stateSet, String... labels) { + return stateSet.collect().getDataPoints().stream() + .filter(d -> d.getLabels().equals(Labels.of(labels))) + .findAny() + .orElseThrow(() -> new RuntimeException("stateset with labels " + labels + " not found")); + } - @Test(expected = IllegalStateException.class) - public void testStatesCannotBeEmpty() { - StateSet.builder().name("invalid").build(); - } + @Test(expected = IllegalStateException.class) + public void testStatesCannotBeEmpty() { + StateSet.builder().name("invalid").build(); + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java index dd2c4355a..d77ec6e83 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java @@ -1,69 +1,69 @@ package io.prometheus.metrics.core.metrics; -import org.junit.Assert; -import org.junit.Test; - import java.lang.reflect.Field; import java.util.Map; +import org.junit.Assert; +import org.junit.Test; public class StatefulMetricTest { - @Test - public void testLabelRemoveWhileCollecting() throws Exception { - Counter counter = Counter.builder().name("test").labelNames("label1", "label2").build(); - Field data = counter.getClass().getSuperclass().getDeclaredField("data"); - data.setAccessible(true); + @Test + public void testLabelRemoveWhileCollecting() throws Exception { + Counter counter = Counter.builder().name("test").labelNames("label1", "label2").build(); + Field data = counter.getClass().getSuperclass().getDeclaredField("data"); + data.setAccessible(true); - counter.labelValues("a", "b").inc(1.0); - counter.labelValues("c", "d").inc(3.0); - counter.labelValues("e", "f").inc(7.0); + counter.labelValues("a", "b").inc(1.0); + counter.labelValues("c", "d").inc(3.0); + counter.labelValues("e", "f").inc(7.0); - // collect() iterates over data.entrySet(). - // remove() removes entries from data. - // Make sure iterating does not yield null while removing. + // collect() iterates over data.entrySet(). + // remove() removes entries from data. + // Make sure iterating does not yield null while removing. - int i = 0; - for (Map.Entry entry : ((Map) data.get(counter)).entrySet()) { - i++; - if (i == 2) { - counter.remove("c", "d"); - counter.remove("e", "f"); - } - Assert.assertNotNull(entry.getKey()); - Assert.assertNotNull(entry.getValue()); - } + int i = 0; + for (Map.Entry entry : ((Map) data.get(counter)).entrySet()) { + i++; + if (i == 2) { + counter.remove("c", "d"); + counter.remove("e", "f"); + } + Assert.assertNotNull(entry.getKey()); + Assert.assertNotNull(entry.getValue()); } + } - @Test - public void testClear() { - Counter counter = Counter.builder().name("test").labelNames("label1", "label2").build(); - counter.labelValues("a", "b").inc(3.0); - counter.labelValues("c", "d").inc(3.0); - counter.labelValues("a", "b").inc(); - Assert.assertEquals(2, counter.collect().getDataPoints().size()); + @Test + public void testClear() { + Counter counter = Counter.builder().name("test").labelNames("label1", "label2").build(); + counter.labelValues("a", "b").inc(3.0); + counter.labelValues("c", "d").inc(3.0); + counter.labelValues("a", "b").inc(); + Assert.assertEquals(2, counter.collect().getDataPoints().size()); - counter.clear(); - Assert.assertEquals(0, counter.collect().getDataPoints().size()); + counter.clear(); + Assert.assertEquals(0, counter.collect().getDataPoints().size()); - counter.labelValues("a", "b").inc(); - Assert.assertEquals(1, counter.collect().getDataPoints().size()); - } + counter.labelValues("a", "b").inc(); + Assert.assertEquals(1, counter.collect().getDataPoints().size()); + } - @Test - public void testClearNoLabels() { - Counter counter = Counter.builder().name("test").build(); - counter.inc(); - Assert.assertEquals(1, counter.collect().getDataPoints().size()); - Assert.assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + @Test + public void testClearNoLabels() { + Counter counter = Counter.builder().name("test").build(); + counter.inc(); + Assert.assertEquals(1, counter.collect().getDataPoints().size()); + Assert.assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); - counter.clear(); - // No labels is always present, but as no value has been observed after clear() the value should be 0.0 - Assert.assertEquals(1, counter.collect().getDataPoints().size()); - Assert.assertEquals(0.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + counter.clear(); + // No labels is always present, but as no value has been observed after clear() the value should + // be 0.0 + Assert.assertEquals(1, counter.collect().getDataPoints().size()); + Assert.assertEquals(0.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); - // Making inc() works correctly after clear() - counter.inc(); - Assert.assertEquals(1, counter.collect().getDataPoints().size()); - Assert.assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); - } + // Making inc() works correctly after clear() + counter.inc(); + Assert.assertEquals(1, counter.collect().getDataPoints().size()); + Assert.assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java index cbd9ef53f..8231d86f2 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java @@ -2,5 +2,5 @@ public class SummaryWithCallbackTest { - // TODO :). Anyway, callbacks are implicitly covered by the JVM metrics tests as well. + // TODO :). Anyway, callbacks are implicitly covered by the JVM metrics tests as well. } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java index 489bcac33..95a8b90fb 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java @@ -5,9 +5,9 @@ public class TestUtil { - public static void assertExemplarEquals(Exemplar expected, Exemplar actual) { - // ignore timestamp - Assert.assertEquals(expected.getValue(), actual.getValue(), 0.00001); - Assert.assertEquals(expected.getLabels(), actual.getLabels()); - } + public static void assertExemplarEquals(Exemplar expected, Exemplar actual) { + // ignore timestamp + Assert.assertEquals(expected.getValue(), actual.getValue(), 0.00001); + Assert.assertEquals(expected.getLabels(), actual.getLabels()); + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TodoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TodoTest.java index 996e199db..be6d17784 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TodoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TodoTest.java @@ -2,16 +2,17 @@ public class TodoTest { - // if a metric with labels is created but never used it has no data. - // The registry's collect() method should skip those metrics to avoid illegal protobuf or text format. + // if a metric with labels is created but never used it has no data. + // The registry's collect() method should skip those metrics to avoid illegal protobuf or text + // format. - // callback versions of metrics + // callback versions of metrics - // build() called with name == null + // build() called with name == null - // call inc() without labels, but the metric was created with labels + // call inc() without labels, but the metric was created with labels - // call inc() with labels, but the metric was created without labels + // call inc() with labels, but the metric was created without labels - // for performance: Use return value of withLabels() directly + // for performance: Use return value of withLabels() directly } diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpExchange.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpExchange.java index 7a9f5846b..b7ac63b28 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpExchange.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpExchange.java @@ -3,11 +3,14 @@ import java.io.IOException; public interface PrometheusHttpExchange extends AutoCloseable { - PrometheusHttpRequest getRequest(); - PrometheusHttpResponse getResponse(); - void handleException(IOException e) throws IOException; - void handleException(RuntimeException e); + PrometheusHttpRequest getRequest(); - @Override - void close(); + PrometheusHttpResponse getResponse(); + + void handleException(IOException e) throws IOException; + + void handleException(RuntimeException e); + + @Override + void close(); } diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java index f7b5346a5..954facfef 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java @@ -1,78 +1,65 @@ package io.prometheus.metrics.exporter.common; +import io.prometheus.metrics.model.registry.PrometheusScrapeRequest; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Enumeration; -import io.prometheus.metrics.model.registry.PrometheusScrapeRequest; - public interface PrometheusHttpRequest extends PrometheusScrapeRequest { - /** - * See {@code jakarta.servlet.http.HttpServletRequest.getQueryString()} - */ - String getQueryString(); + /** See {@code jakarta.servlet.http.HttpServletRequest.getQueryString()} */ + String getQueryString(); - /** - * See {@code jakarta.servlet.http.HttpServletRequest.getHeaders(String)} - */ - Enumeration getHeaders(String name); + /** See {@code jakarta.servlet.http.HttpServletRequest.getHeaders(String)} */ + Enumeration getHeaders(String name); - /** - * See {@code jakarta.servlet.http.HttpServletRequest.getMethod()} - */ - String getMethod(); + /** See {@code jakarta.servlet.http.HttpServletRequest.getMethod()} */ + String getMethod(); - /** - * See {@code jakarta.servlet.http.HttpServletRequest.getHeader(String)} - */ - default String getHeader(String name) { - Enumeration headers = getHeaders(name); - if (headers == null || !headers.hasMoreElements()) { - return null; - } else { - return headers.nextElement(); - } + /** See {@code jakarta.servlet.http.HttpServletRequest.getHeader(String)} */ + default String getHeader(String name) { + Enumeration headers = getHeaders(name); + if (headers == null || !headers.hasMoreElements()) { + return null; + } else { + return headers.nextElement(); } + } - /** - * See {@code jakarta.servlet.ServletRequest.getParameter(String)} - */ - default String getParameter(String name) { - String[] values = getParameterValues(name); - if (values == null || values.length == 0) { - return null; - } else { - return values[0]; - } + /** See {@code jakarta.servlet.ServletRequest.getParameter(String)} */ + default String getParameter(String name) { + String[] values = getParameterValues(name); + if (values == null || values.length == 0) { + return null; + } else { + return values[0]; } + } - /** - * See {@code jakarta.servlet.ServletRequest.getParameterValues(String)} - */ - default String[] getParameterValues(String name) { - try { - ArrayList result = new ArrayList<>(); - String queryString = getQueryString(); - if (queryString != null) { - String[] pairs = queryString.split("&"); - for (String pair : pairs) { - int idx = pair.indexOf("="); - if (idx != -1 && URLDecoder.decode(pair.substring(0, idx), "UTF-8").equals(name)) { - result.add(URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); - } - } - } - if (result.isEmpty()) { - // Servlet API: getParameterValues() returns null if the parameter does not exist. - return null; - } else { - return result.toArray(new String[0]); - } - } catch (UnsupportedEncodingException e) { - // UTF-8 encoding not supported. - throw new RuntimeException(e); + /** See {@code jakarta.servlet.ServletRequest.getParameterValues(String)} */ + default String[] getParameterValues(String name) { + try { + ArrayList result = new ArrayList<>(); + String queryString = getQueryString(); + if (queryString != null) { + String[] pairs = queryString.split("&"); + for (String pair : pairs) { + int idx = pair.indexOf("="); + if (idx != -1 && URLDecoder.decode(pair.substring(0, idx), "UTF-8").equals(name)) { + result.add(URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); + } } + } + if (result.isEmpty()) { + // Servlet API: getParameterValues() returns null if the parameter does not exist. + return null; + } else { + return result.toArray(new String[0]); + } + } catch (UnsupportedEncodingException e) { + // UTF-8 encoding not supported. + throw new RuntimeException(e); } + } } diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpResponse.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpResponse.java index 4e3db6955..b3dd4e2fb 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpResponse.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpResponse.java @@ -5,14 +5,13 @@ public interface PrometheusHttpResponse { - /** - * See {@code jakarta.servlet.http.HttpServletResponse.setHeader(String, String)} - */ - void setHeader(String name, String value); + /** See {@code jakarta.servlet.http.HttpServletResponse.setHeader(String, String)} */ + void setHeader(String name, String value); - /** - * This is equivalent to calling {@link com.sun.net.httpserver.HttpExchange#sendResponseHeaders(int, long)} - * followed by {@link com.sun.net.httpserver.HttpExchange#getResponseBody()}. - */ - OutputStream sendHeadersAndGetBody(int statusCode, int contentLength) throws IOException; + /** + * This is equivalent to calling {@link + * com.sun.net.httpserver.HttpExchange#sendResponseHeaders(int, long)} followed by {@link + * com.sun.net.httpserver.HttpExchange#getResponseBody()}. + */ + OutputStream sendHeadersAndGetBody(int statusCode, int contentLength) throws IOException; } diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java index 5155457df..dee7098fb 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java @@ -7,7 +7,6 @@ import io.prometheus.metrics.model.registry.MetricNameFilter; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; @@ -18,157 +17,168 @@ import java.util.function.Predicate; import java.util.zip.GZIPOutputStream; -/** - * Prometheus scrape endpoint. - */ +/** Prometheus scrape endpoint. */ public class PrometheusScrapeHandler { - private final PrometheusRegistry registry; - private final ExpositionFormats expositionFormats; - private final Predicate nameFilter; - private AtomicInteger lastResponseSize = new AtomicInteger(2 << 9); // 0.5 MB - - public PrometheusScrapeHandler() { - this(PrometheusProperties.get(), PrometheusRegistry.defaultRegistry); - } - - public PrometheusScrapeHandler(PrometheusRegistry registry) { - this(PrometheusProperties.get(), registry); - } - - public PrometheusScrapeHandler(PrometheusProperties config) { - this(config, PrometheusRegistry.defaultRegistry); - } - - public PrometheusScrapeHandler(PrometheusProperties config, PrometheusRegistry registry) { - this.expositionFormats = ExpositionFormats.init(config.getExporterProperties()); - this.registry = registry; - this.nameFilter = makeNameFilter(config.getExporterFilterProperties()); - } - - public void handleRequest(PrometheusHttpExchange exchange) throws IOException { - try { - PrometheusHttpRequest request = exchange.getRequest(); - PrometheusHttpResponse response = exchange.getResponse(); - MetricSnapshots snapshots = scrape(request); - if (writeDebugResponse(snapshots, exchange)) { - return; - } - ByteArrayOutputStream responseBuffer = new ByteArrayOutputStream(lastResponseSize.get() + 1024); - String acceptHeader = request.getHeader("Accept"); - ExpositionFormatWriter writer = expositionFormats.findWriter(acceptHeader); - writer.write(responseBuffer, snapshots); - lastResponseSize.set(responseBuffer.size()); - response.setHeader("Content-Type", writer.getContentType()); - - if (shouldUseCompression(request)) { - response.setHeader("Content-Encoding", "gzip"); - try (GZIPOutputStream gzipOutputStream = new GZIPOutputStream(response.sendHeadersAndGetBody(200, 0))) { - responseBuffer.writeTo(gzipOutputStream); - } - } else { - int contentLength = responseBuffer.size(); - if (contentLength > 0) { - response.setHeader("Content-Length", String.valueOf(contentLength)); - } - if (request.getMethod().equals("HEAD")) { - // The HTTPServer implementation will throw an Exception if we close the output stream - // without sending a response body, so let's not close the output stream in case of a HEAD response. - response.sendHeadersAndGetBody(200, -1); - } else { - try (OutputStream outputStream = response.sendHeadersAndGetBody(200, contentLength)) { - responseBuffer.writeTo(outputStream); - } - } - } - } catch (IOException e) { - exchange.handleException(e); - } catch (RuntimeException e) { - exchange.handleException(e); - } finally { - exchange.close(); + private final PrometheusRegistry registry; + private final ExpositionFormats expositionFormats; + private final Predicate nameFilter; + private AtomicInteger lastResponseSize = new AtomicInteger(2 << 9); // 0.5 MB + + public PrometheusScrapeHandler() { + this(PrometheusProperties.get(), PrometheusRegistry.defaultRegistry); + } + + public PrometheusScrapeHandler(PrometheusRegistry registry) { + this(PrometheusProperties.get(), registry); + } + + public PrometheusScrapeHandler(PrometheusProperties config) { + this(config, PrometheusRegistry.defaultRegistry); + } + + public PrometheusScrapeHandler(PrometheusProperties config, PrometheusRegistry registry) { + this.expositionFormats = ExpositionFormats.init(config.getExporterProperties()); + this.registry = registry; + this.nameFilter = makeNameFilter(config.getExporterFilterProperties()); + } + + public void handleRequest(PrometheusHttpExchange exchange) throws IOException { + try { + PrometheusHttpRequest request = exchange.getRequest(); + PrometheusHttpResponse response = exchange.getResponse(); + MetricSnapshots snapshots = scrape(request); + if (writeDebugResponse(snapshots, exchange)) { + return; + } + ByteArrayOutputStream responseBuffer = + new ByteArrayOutputStream(lastResponseSize.get() + 1024); + String acceptHeader = request.getHeader("Accept"); + ExpositionFormatWriter writer = expositionFormats.findWriter(acceptHeader); + writer.write(responseBuffer, snapshots); + lastResponseSize.set(responseBuffer.size()); + response.setHeader("Content-Type", writer.getContentType()); + + if (shouldUseCompression(request)) { + response.setHeader("Content-Encoding", "gzip"); + try (GZIPOutputStream gzipOutputStream = + new GZIPOutputStream(response.sendHeadersAndGetBody(200, 0))) { + responseBuffer.writeTo(gzipOutputStream); } - } - - private Predicate makeNameFilter(ExporterFilterProperties props) { - if (props.getAllowedMetricNames() == null && props.getExcludedMetricNames() == null && props.getAllowedMetricNamePrefixes() == null && props.getExcludedMetricNamePrefixes() == null) { - return null; + } else { + int contentLength = responseBuffer.size(); + if (contentLength > 0) { + response.setHeader("Content-Length", String.valueOf(contentLength)); + } + if (request.getMethod().equals("HEAD")) { + // The HTTPServer implementation will throw an Exception if we close the output stream + // without sending a response body, so let's not close the output stream in case of a HEAD + // response. + response.sendHeadersAndGetBody(200, -1); } else { - return MetricNameFilter.builder() - .nameMustBeEqualTo(props.getAllowedMetricNames()) - .nameMustNotBeEqualTo(props.getExcludedMetricNames()) - .nameMustStartWith(props.getAllowedMetricNamePrefixes()) - .nameMustNotStartWith(props.getExcludedMetricNamePrefixes()) - .build(); + try (OutputStream outputStream = response.sendHeadersAndGetBody(200, contentLength)) { + responseBuffer.writeTo(outputStream); + } } + } + } catch (IOException e) { + exchange.handleException(e); + } catch (RuntimeException e) { + exchange.handleException(e); + } finally { + exchange.close(); + } + } + + private Predicate makeNameFilter(ExporterFilterProperties props) { + if (props.getAllowedMetricNames() == null + && props.getExcludedMetricNames() == null + && props.getAllowedMetricNamePrefixes() == null + && props.getExcludedMetricNamePrefixes() == null) { + return null; + } else { + return MetricNameFilter.builder() + .nameMustBeEqualTo(props.getAllowedMetricNames()) + .nameMustNotBeEqualTo(props.getExcludedMetricNames()) + .nameMustStartWith(props.getAllowedMetricNamePrefixes()) + .nameMustNotStartWith(props.getExcludedMetricNamePrefixes()) + .build(); } + } - private MetricSnapshots scrape(PrometheusHttpRequest request) { + private MetricSnapshots scrape(PrometheusHttpRequest request) { - Predicate filter = makeNameFilter(request.getParameterValues("name[]")); - if (filter != null) { - return registry.scrape(filter, request); - } else { - return registry.scrape(request); - } + Predicate filter = makeNameFilter(request.getParameterValues("name[]")); + if (filter != null) { + return registry.scrape(filter, request); + } else { + return registry.scrape(request); } + } - private Predicate makeNameFilter(String[] includedNames) { - Predicate result = null; - if (includedNames != null && includedNames.length > 0) { - result = MetricNameFilter.builder().nameMustBeEqualTo(includedNames).build(); - } - if (result != null && nameFilter != null) { - result = result.and(nameFilter); - } else if (nameFilter != null) { - result = nameFilter; - } - return result; + private Predicate makeNameFilter(String[] includedNames) { + Predicate result = null; + if (includedNames != null && includedNames.length > 0) { + result = MetricNameFilter.builder().nameMustBeEqualTo(includedNames).build(); } - - private boolean writeDebugResponse(MetricSnapshots snapshots, PrometheusHttpExchange exchange) throws IOException { - String debugParam = exchange.getRequest().getParameter("debug"); - PrometheusHttpResponse response = exchange.getResponse(); - if (debugParam == null) { - return false; - } else { - response.setHeader("Content-Type", "text/plain; charset=utf-8"); - boolean supportedFormat = Arrays.asList("openmetrics", "text", "prometheus-protobuf").contains(debugParam); - int responseStatus = supportedFormat ? 200 : 500; - OutputStream body = response.sendHeadersAndGetBody(responseStatus, 0); - switch (debugParam) { - case "openmetrics": - expositionFormats.getOpenMetricsTextFormatWriter().write(body, snapshots); - break; - case "text": - expositionFormats.getPrometheusTextFormatWriter().write(body, snapshots); - break; - case "prometheus-protobuf": - String debugString = expositionFormats.getPrometheusProtobufWriter().toDebugString(snapshots); - body.write(debugString.getBytes(StandardCharsets.UTF_8)); - break; - default: - body.write(("debug=" + debugParam + ": Unsupported query parameter. Valid values are 'openmetrics', 'text', and 'prometheus-protobuf'.").getBytes(StandardCharsets.UTF_8)); - break; - } - return true; - } + if (result != null && nameFilter != null) { + result = result.and(nameFilter); + } else if (nameFilter != null) { + result = nameFilter; } + return result; + } + + private boolean writeDebugResponse(MetricSnapshots snapshots, PrometheusHttpExchange exchange) + throws IOException { + String debugParam = exchange.getRequest().getParameter("debug"); + PrometheusHttpResponse response = exchange.getResponse(); + if (debugParam == null) { + return false; + } else { + response.setHeader("Content-Type", "text/plain; charset=utf-8"); + boolean supportedFormat = + Arrays.asList("openmetrics", "text", "prometheus-protobuf").contains(debugParam); + int responseStatus = supportedFormat ? 200 : 500; + OutputStream body = response.sendHeadersAndGetBody(responseStatus, 0); + switch (debugParam) { + case "openmetrics": + expositionFormats.getOpenMetricsTextFormatWriter().write(body, snapshots); + break; + case "text": + expositionFormats.getPrometheusTextFormatWriter().write(body, snapshots); + break; + case "prometheus-protobuf": + String debugString = + expositionFormats.getPrometheusProtobufWriter().toDebugString(snapshots); + body.write(debugString.getBytes(StandardCharsets.UTF_8)); + break; + default: + body.write( + ("debug=" + + debugParam + + ": Unsupported query parameter. Valid values are 'openmetrics', 'text', and 'prometheus-protobuf'.") + .getBytes(StandardCharsets.UTF_8)); + break; + } + return true; + } + } - private boolean shouldUseCompression(PrometheusHttpRequest request) { - Enumeration encodingHeaders = request.getHeaders("Accept-Encoding"); - if (encodingHeaders == null) { - return false; - } - while (encodingHeaders.hasMoreElements()) { - String encodingHeader = encodingHeaders.nextElement(); - String[] encodings = encodingHeader.split(","); - for (String encoding : encodings) { - if (encoding.trim().equalsIgnoreCase("gzip")) { - return true; - } - } + private boolean shouldUseCompression(PrometheusHttpRequest request) { + Enumeration encodingHeaders = request.getHeaders("Accept-Encoding"); + if (encodingHeaders == null) { + return false; + } + while (encodingHeaders.hasMoreElements()) { + String encodingHeader = encodingHeaders.nextElement(); + String[] encodings = encodingHeader.split(","); + for (String encoding : encodings) { + if (encoding.trim().equalsIgnoreCase("gzip")) { + return true; } - return false; + } } + return false; + } } diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java index 0bf3b5cc2..eeb2f70f6 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java @@ -2,69 +2,67 @@ import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; - import java.io.IOException; import java.nio.charset.StandardCharsets; -/** - * Handler for the / endpoint - */ +/** Handler for the / endpoint */ public class DefaultHandler implements HttpHandler { - private final byte[] responseBytes; - private final String contentType; + private final byte[] responseBytes; + private final String contentType; - public DefaultHandler() { - String responseString = "" + - "\n" + - "Prometheus Java Client\n" + - "\n" + - "

    Prometheus Java Client

    \n" + - "

    Metrics Path

    \n" + - "The metrics path is /metrics.\n" + - "

    Name Filter

    \n" + - "If you want to scrape only specific metrics, use the name[] parameter like this:\n" + - "\n" + - "You can also use multiple name[] parameters to query multiple metrics:\n" + - "\n" + - "The name[] parameter can be used by the Prometheus server for scraping. Add the following snippet to your scrape job configuration in prometheus.yaml:\n" + - "
    \n" +
    -                "params:\n" +
    -                "    name[]:\n" +
    -                "        - my_metric_a\n" +
    -                "        - my_metric_b\n" +
    -                "
    \n" + - "

    Debug Parameter

    \n" + - "The Prometheus Java metrics library supports multiple exposition formats.\n" + - "The Prometheus server sends the Accept header to indicate which format it accepts.\n" + - "By default, the Prometheus server accepts OpenMetrics text format, unless the Prometheus server is started with feature flag --enable-feature=native-histograms,\n" + - "in which case the default is Prometheus protobuf.\n" + - "The Prometheus Java metrics library supports a debug query parameter for viewing the different formats in a Web browser:\n" + - "\n" + - "Note that the debug parameter is only for viewing different formats in a Web browser, it should not be used by the Prometheus server for scraping. The Prometheus server uses the Accept header for indicating which format it accepts.\n" + - "\n" + - "\n"; - this.responseBytes = responseString.getBytes(StandardCharsets.UTF_8); - this.contentType = "text/html; charset=utf-8"; - } + public DefaultHandler() { + String responseString = + "" + + "\n" + + "Prometheus Java Client\n" + + "\n" + + "

    Prometheus Java Client

    \n" + + "

    Metrics Path

    \n" + + "The metrics path is /metrics.\n" + + "

    Name Filter

    \n" + + "If you want to scrape only specific metrics, use the name[] parameter like this:\n" + + "\n" + + "You can also use multiple name[] parameters to query multiple metrics:\n" + + "\n" + + "The name[] parameter can be used by the Prometheus server for scraping. Add the following snippet to your scrape job configuration in prometheus.yaml:\n" + + "
    \n"
    +            + "params:\n"
    +            + "    name[]:\n"
    +            + "        - my_metric_a\n"
    +            + "        - my_metric_b\n"
    +            + "
    \n" + + "

    Debug Parameter

    \n" + + "The Prometheus Java metrics library supports multiple exposition formats.\n" + + "The Prometheus server sends the Accept header to indicate which format it accepts.\n" + + "By default, the Prometheus server accepts OpenMetrics text format, unless the Prometheus server is started with feature flag --enable-feature=native-histograms,\n" + + "in which case the default is Prometheus protobuf.\n" + + "The Prometheus Java metrics library supports a debug query parameter for viewing the different formats in a Web browser:\n" + + "\n" + + "Note that the debug parameter is only for viewing different formats in a Web browser, it should not be used by the Prometheus server for scraping. The Prometheus server uses the Accept header for indicating which format it accepts.\n" + + "\n" + + "\n"; + this.responseBytes = responseString.getBytes(StandardCharsets.UTF_8); + this.contentType = "text/html; charset=utf-8"; + } - @Override - public void handle(HttpExchange exchange) throws IOException { - try { - exchange.getResponseHeaders().set("Content-Type", contentType); - exchange.getResponseHeaders().set("Content-Length", Integer.toString(responseBytes.length)); - exchange.sendResponseHeaders(200, responseBytes.length); - exchange.getResponseBody().write(responseBytes); - } finally { - exchange.close(); - } + @Override + public void handle(HttpExchange exchange) throws IOException { + try { + exchange.getResponseHeaders().set("Content-Type", contentType); + exchange.getResponseHeaders().set("Content-Length", Integer.toString(responseBytes.length)); + exchange.sendResponseHeaders(200, responseBytes.length); + exchange.getResponseBody().write(responseBytes); + } finally { + exchange.close(); } + } } diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java index de572ba9f..ad13d70af 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java @@ -8,7 +8,6 @@ import com.sun.net.httpserver.HttpsServer; import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.registry.PrometheusRegistry; - import java.io.Closeable; import java.io.IOException; import java.net.InetAddress; @@ -22,251 +21,245 @@ /** * Expose Prometheus metrics using a plain Java HttpServer. - *

    - * Example Usage: - *

    - * {@code
    + *
    + * 

    Example Usage: + * + *

    {@code
      * HTTPServer server = HTTPServer.builder()
      *     .port(9090)
      *     .buildAndStart();
      * }
    - * */ + */ public class HTTPServer implements Closeable { - static { - if (!System.getProperties().containsKey("sun.net.httpserver.maxReqTime")) { - System.setProperty("sun.net.httpserver.maxReqTime", "60"); - } + static { + if (!System.getProperties().containsKey("sun.net.httpserver.maxReqTime")) { + System.setProperty("sun.net.httpserver.maxReqTime", "60"); + } - if (!System.getProperties().containsKey("sun.net.httpserver.maxRspTime")) { - System.setProperty("sun.net.httpserver.maxRspTime", "600"); - } + if (!System.getProperties().containsKey("sun.net.httpserver.maxRspTime")) { + System.setProperty("sun.net.httpserver.maxRspTime", "600"); } + } - protected final HttpServer server; - protected final ExecutorService executorService; + protected final HttpServer server; + protected final ExecutorService executorService; - private HTTPServer(PrometheusProperties config, ExecutorService executorService, HttpServer httpServer, PrometheusRegistry registry, Authenticator authenticator, HttpHandler defaultHandler) { - if (httpServer.getAddress() == null) { - throw new IllegalArgumentException("HttpServer hasn't been bound to an address"); - } - this.server = httpServer; - this.executorService = executorService; - registerHandler("/", defaultHandler == null ? new DefaultHandler() : defaultHandler, authenticator); - registerHandler("/metrics", new MetricsHandler(config, registry), authenticator); - registerHandler("/-/healthy", new HealthyHandler(), authenticator); - try { - // HttpServer.start() starts the HttpServer in a new background thread. - // If we call HttpServer.start() from a thread of the executorService, - // the background thread will inherit the "daemon" property, - // i.e. the server will run as a Daemon thread. - // See https://github.com/prometheus/client_java/pull/955 - this.executorService.submit(this.server::start).get(); - // calling .get() on the Future here to avoid silently discarding errors - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } + private HTTPServer( + PrometheusProperties config, + ExecutorService executorService, + HttpServer httpServer, + PrometheusRegistry registry, + Authenticator authenticator, + HttpHandler defaultHandler) { + if (httpServer.getAddress() == null) { + throw new IllegalArgumentException("HttpServer hasn't been bound to an address"); } + this.server = httpServer; + this.executorService = executorService; + registerHandler( + "/", defaultHandler == null ? new DefaultHandler() : defaultHandler, authenticator); + registerHandler("/metrics", new MetricsHandler(config, registry), authenticator); + registerHandler("/-/healthy", new HealthyHandler(), authenticator); + try { + // HttpServer.start() starts the HttpServer in a new background thread. + // If we call HttpServer.start() from a thread of the executorService, + // the background thread will inherit the "daemon" property, + // i.e. the server will run as a Daemon thread. + // See https://github.com/prometheus/client_java/pull/955 + this.executorService.submit(this.server::start).get(); + // calling .get() on the Future here to avoid silently discarding errors + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } - private void registerHandler(String path, HttpHandler handler, Authenticator authenticator) { - HttpContext context = server.createContext(path, handler); - if (authenticator != null) { - context.setAuthenticator(authenticator); - } + private void registerHandler(String path, HttpHandler handler, Authenticator authenticator) { + HttpContext context = server.createContext(path, handler); + if (authenticator != null) { + context.setAuthenticator(authenticator); + } + } + + /** Stop the HTTP server. Same as {@link #close()}. */ + public void stop() { + close(); + } + + /** Stop the HTTPServer. Same as {@link #stop()}. */ + @Override + public void close() { + server.stop(0); + executorService.shutdown(); // Free any (parked/idle) threads in pool + } + + /** + * Gets the port number. This is useful if you did not specify a port and the server picked a free + * port automatically. + */ + public int getPort() { + return server.getAddress().getPort(); + } + + public static Builder builder() { + return new Builder(PrometheusProperties.get()); + } + + public static Builder builder(PrometheusProperties config) { + return new Builder(config); + } + + public static class Builder { + + private final PrometheusProperties config; + private Integer port = null; + private String hostname = null; + private InetAddress inetAddress = null; + private ExecutorService executorService = null; + private PrometheusRegistry registry = null; + private Authenticator authenticator = null; + private HttpsConfigurator httpsConfigurator = null; + private HttpHandler defaultHandler = null; + + private Builder(PrometheusProperties config) { + this.config = config; } /** - * Stop the HTTP server. Same as {@link #close()}. + * Port to bind to. Default is 0, indicating that a random port will be selected. You can learn + * the randomly selected port by calling {@link HTTPServer#getPort()}. */ - public void stop() { - close(); + public Builder port(int port) { + this.port = port; + return this; } /** - * Stop the HTTPServer. Same as {@link #stop()}. + * Use this hostname to resolve the IP address to bind to. Must not be called together with + * {@link #inetAddress(InetAddress)}. Default is empty, indicating that the HTTPServer binds to + * the wildcard address. */ - @Override - public void close() { - server.stop(0); - executorService.shutdown(); // Free any (parked/idle) threads in pool + public Builder hostname(String hostname) { + this.hostname = hostname; + return this; } /** - * Gets the port number. - * This is useful if you did not specify a port and the server picked a free port automatically. + * Bind to this IP address. Must not be called together with {@link #hostname(String)}. Default + * is empty, indicating that the HTTPServer binds to the wildcard address. */ - public int getPort() { - return server.getAddress().getPort(); + public Builder inetAddress(InetAddress address) { + this.inetAddress = address; + return this; } - public static Builder builder() { - return new Builder(PrometheusProperties.get()); + /** Optional: ExecutorService used by the {@code httpServer}. */ + public Builder executorService(ExecutorService executorService) { + this.executorService = executorService; + return this; } - public static Builder builder(PrometheusProperties config) { - return new Builder(config); + /** Optional: Default is {@link PrometheusRegistry#defaultRegistry}. */ + public Builder registry(PrometheusRegistry registry) { + this.registry = registry; + return this; } - public static class Builder { - - private final PrometheusProperties config; - private Integer port = null; - private String hostname = null; - private InetAddress inetAddress = null; - private ExecutorService executorService = null; - private PrometheusRegistry registry = null; - private Authenticator authenticator = null; - private HttpsConfigurator httpsConfigurator = null; - private HttpHandler defaultHandler = null; - - private Builder(PrometheusProperties config) { - this.config = config; - } - - /** - * Port to bind to. Default is 0, indicating that a random port will be selected. - * You can learn the randomly selected port by calling {@link HTTPServer#getPort()}. - */ - public Builder port(int port) { - this.port = port; - return this; - } - - /** - * Use this hostname to resolve the IP address to bind to. - * Must not be called together with {@link #inetAddress(InetAddress)}. - * Default is empty, indicating that the HTTPServer binds to the wildcard address. - */ - public Builder hostname(String hostname) { - this.hostname = hostname; - return this; - } - - /** - * Bind to this IP address. - * Must not be called together with {@link #hostname(String)}. - * Default is empty, indicating that the HTTPServer binds to the wildcard address. - */ - public Builder inetAddress(InetAddress address) { - this.inetAddress = address; - return this; - } - - /** - * Optional: ExecutorService used by the {@code httpServer}. - */ - public Builder executorService(ExecutorService executorService) { - this.executorService = executorService; - return this; - } - - /** - * Optional: Default is {@link PrometheusRegistry#defaultRegistry}. - */ - public Builder registry(PrometheusRegistry registry) { - this.registry = registry; - return this; - } - - /** - * Optional: {@link Authenticator} for authentication. - */ - public Builder authenticator(Authenticator authenticator) { - this.authenticator = authenticator; - return this; - } + /** Optional: {@link Authenticator} for authentication. */ + public Builder authenticator(Authenticator authenticator) { + this.authenticator = authenticator; + return this; + } - /** - * Optional: {@link HttpsConfigurator} for TLS/SSL - */ - public Builder httpsConfigurator(HttpsConfigurator configurator) { - this.httpsConfigurator = configurator; - return this; - } + /** Optional: {@link HttpsConfigurator} for TLS/SSL */ + public Builder httpsConfigurator(HttpsConfigurator configurator) { + this.httpsConfigurator = configurator; + return this; + } - /** - * Optional: Override default handler, i.e. the handler that will be registered for the / endpoint. - */ - public Builder defaultHandler(HttpHandler defaultHandler) { - this.defaultHandler = defaultHandler; - return this; - } + /** + * Optional: Override default handler, i.e. the handler that will be registered for the / + * endpoint. + */ + public Builder defaultHandler(HttpHandler defaultHandler) { + this.defaultHandler = defaultHandler; + return this; + } - /** - * Build and start the HTTPServer. - */ - public HTTPServer buildAndStart() throws IOException { - if (registry == null) { - registry = PrometheusRegistry.defaultRegistry; - } - HttpServer httpServer; - if (httpsConfigurator != null) { - httpServer = HttpsServer.create(makeInetSocketAddress(), 3); - ((HttpsServer)httpServer).setHttpsConfigurator(httpsConfigurator); - } else { - httpServer = HttpServer.create(makeInetSocketAddress(), 3); - } - ExecutorService executorService = makeExecutorService(); - httpServer.setExecutor(executorService); - return new HTTPServer(config, executorService, httpServer, registry, authenticator, defaultHandler); - } + /** Build and start the HTTPServer. */ + public HTTPServer buildAndStart() throws IOException { + if (registry == null) { + registry = PrometheusRegistry.defaultRegistry; + } + HttpServer httpServer; + if (httpsConfigurator != null) { + httpServer = HttpsServer.create(makeInetSocketAddress(), 3); + ((HttpsServer) httpServer).setHttpsConfigurator(httpsConfigurator); + } else { + httpServer = HttpServer.create(makeInetSocketAddress(), 3); + } + ExecutorService executorService = makeExecutorService(); + httpServer.setExecutor(executorService); + return new HTTPServer( + config, executorService, httpServer, registry, authenticator, defaultHandler); + } - private InetSocketAddress makeInetSocketAddress() { - if (inetAddress != null) { - assertNull(hostname, "cannot configure 'inetAddress' and 'hostname' at the same time"); - return new InetSocketAddress(inetAddress, findPort()); - } else if (hostname != null) { - return new InetSocketAddress(hostname, findPort()); - } else { - return new InetSocketAddress(findPort()); - } - } + private InetSocketAddress makeInetSocketAddress() { + if (inetAddress != null) { + assertNull(hostname, "cannot configure 'inetAddress' and 'hostname' at the same time"); + return new InetSocketAddress(inetAddress, findPort()); + } else if (hostname != null) { + return new InetSocketAddress(hostname, findPort()); + } else { + return new InetSocketAddress(findPort()); + } + } - private ExecutorService makeExecutorService() { - if (executorService != null) { - return executorService; - } else { - return new ThreadPoolExecutor( - 1, - 10, - 120, - TimeUnit.SECONDS, - new SynchronousQueue<>(true), - NamedDaemonThreadFactory.defaultThreadFactory(true), - new BlockingRejectedExecutionHandler()); - } - } + private ExecutorService makeExecutorService() { + if (executorService != null) { + return executorService; + } else { + return new ThreadPoolExecutor( + 1, + 10, + 120, + TimeUnit.SECONDS, + new SynchronousQueue<>(true), + NamedDaemonThreadFactory.defaultThreadFactory(true), + new BlockingRejectedExecutionHandler()); + } + } - private int findPort() { - if (config != null && config.getExporterHttpServerProperties() != null) { - Integer port = config.getExporterHttpServerProperties().getPort(); - if (port != null) { - return port; - } - } - if (port != null) { - return port; - } - return 0; // random port will be selected + private int findPort() { + if (config != null && config.getExporterHttpServerProperties() != null) { + Integer port = config.getExporterHttpServerProperties().getPort(); + if (port != null) { + return port; } + } + if (port != null) { + return port; + } + return 0; // random port will be selected + } - private void assertNull(Object o, String msg) { - if (o != null) { - throw new IllegalStateException(msg); - } - } + private void assertNull(Object o, String msg) { + if (o != null) { + throw new IllegalStateException(msg); + } } + } - private static class BlockingRejectedExecutionHandler implements RejectedExecutionHandler { + private static class BlockingRejectedExecutionHandler implements RejectedExecutionHandler { - @Override - public void rejectedExecution(Runnable runnable, ThreadPoolExecutor threadPoolExecutor) { - if (!threadPoolExecutor.isShutdown()) { - try { - threadPoolExecutor.getQueue().put(runnable); - } catch (InterruptedException ignored) { - } - } + @Override + public void rejectedExecution(Runnable runnable, ThreadPoolExecutor threadPoolExecutor) { + if (!threadPoolExecutor.isShutdown()) { + try { + threadPoolExecutor.getQueue().put(runnable); + } catch (InterruptedException ignored) { } + } } + } } diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HealthyHandler.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HealthyHandler.java index 4fbdb9426..806b47553 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HealthyHandler.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HealthyHandler.java @@ -2,33 +2,30 @@ import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; - import java.io.IOException; import java.nio.charset.StandardCharsets; -/** - * Handler for the /-/healthy endpoint - */ +/** Handler for the /-/healthy endpoint */ public class HealthyHandler implements HttpHandler { - private final byte[] responseBytes; - private final String contentType; + private final byte[] responseBytes; + private final String contentType; - public HealthyHandler() { - String responseString = "Exporter is healthy.\n"; - this.responseBytes = responseString.getBytes(StandardCharsets.UTF_8); - this.contentType = "text/plain; charset=utf-8"; - } + public HealthyHandler() { + String responseString = "Exporter is healthy.\n"; + this.responseBytes = responseString.getBytes(StandardCharsets.UTF_8); + this.contentType = "text/plain; charset=utf-8"; + } - @Override - public void handle(HttpExchange exchange) throws IOException { - try { - exchange.getResponseHeaders().set("Content-Type", contentType); - exchange.getResponseHeaders().set("Content-Length", Integer.toString(responseBytes.length)); - exchange.sendResponseHeaders(200, responseBytes.length); - exchange.getResponseBody().write(responseBytes); - } finally { - exchange.close(); - } + @Override + public void handle(HttpExchange exchange) throws IOException { + try { + exchange.getResponseHeaders().set("Content-Type", contentType); + exchange.getResponseHeaders().set("Content-Length", Integer.toString(responseBytes.length)); + exchange.sendResponseHeaders(200, responseBytes.length); + exchange.getResponseBody().write(responseBytes); + } finally { + exchange.close(); } + } } diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java index 3636acedf..e7d33d310 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java @@ -4,7 +4,6 @@ import io.prometheus.metrics.exporter.common.PrometheusHttpExchange; import io.prometheus.metrics.exporter.common.PrometheusHttpRequest; import io.prometheus.metrics.exporter.common.PrometheusHttpResponse; - import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; @@ -19,113 +18,129 @@ public class HttpExchangeAdapter implements PrometheusHttpExchange { - private final HttpExchange httpExchange; - private final HttpRequest request = new HttpRequest(); - private final HttpResponse response = new HttpResponse(); - private volatile boolean responseSent = false; + private final HttpExchange httpExchange; + private final HttpRequest request = new HttpRequest(); + private final HttpResponse response = new HttpResponse(); + private volatile boolean responseSent = false; - public HttpExchangeAdapter(HttpExchange httpExchange) { - this.httpExchange = httpExchange; - } + public HttpExchangeAdapter(HttpExchange httpExchange) { + this.httpExchange = httpExchange; + } - public class HttpRequest implements PrometheusHttpRequest { - - @Override - public String getQueryString() { - return httpExchange.getRequestURI().getRawQuery(); - } - - @Override - public Enumeration getHeaders(String name) { - List headers = httpExchange.getRequestHeaders().get(name); - if (headers == null) { - return Collections.emptyEnumeration(); - } else { - return Collections.enumeration(headers); - } - } - - @Override - public String getMethod() { - return httpExchange.getRequestMethod(); - } - - @Override - public String getRequestPath() { - URI requestURI = httpExchange.getRequestURI(); - String uri = requestURI.toString(); - int qx = uri.indexOf('?'); - if (qx != -1) { - uri = uri.substring(0, qx); - } - return uri; - } - } - - public class HttpResponse implements PrometheusHttpResponse { - - @Override - public void setHeader(String name, String value) { - httpExchange.getResponseHeaders().set(name, value); - } - - @Override - public OutputStream sendHeadersAndGetBody(int statusCode, int contentLength) throws IOException { - if (responseSent) { - throw new IOException("Cannot send multiple HTTP responses for a single HTTP exchange."); - } - responseSent = true; - httpExchange.sendResponseHeaders(statusCode, contentLength); - return httpExchange.getResponseBody(); - } - } + public class HttpRequest implements PrometheusHttpRequest { @Override - public HttpRequest getRequest() { - return request; + public String getQueryString() { + return httpExchange.getRequestURI().getRawQuery(); } @Override - public HttpResponse getResponse() { - return response; + public Enumeration getHeaders(String name) { + List headers = httpExchange.getRequestHeaders().get(name); + if (headers == null) { + return Collections.emptyEnumeration(); + } else { + return Collections.enumeration(headers); + } } @Override - public void handleException(IOException e) throws IOException { - sendErrorResponseWithStackTrace(e); + public String getMethod() { + return httpExchange.getRequestMethod(); } @Override - public void handleException(RuntimeException e) { - sendErrorResponseWithStackTrace(e); + public String getRequestPath() { + URI requestURI = httpExchange.getRequestURI(); + String uri = requestURI.toString(); + int qx = uri.indexOf('?'); + if (qx != -1) { + uri = uri.substring(0, qx); + } + return uri; } + } - private void sendErrorResponseWithStackTrace(Exception requestHandlerException) { - if (!responseSent) { - responseSent = true; - try { - StringWriter stringWriter = new StringWriter(); - PrintWriter printWriter = new PrintWriter(stringWriter); - printWriter.write("An Exception occurred while scraping metrics: "); - requestHandlerException.printStackTrace(new PrintWriter(printWriter)); - byte[] stackTrace = stringWriter.toString().getBytes(StandardCharsets.UTF_8); - httpExchange.getResponseHeaders().set("Content-Type", "text/plain; charset=utf-8"); - httpExchange.sendResponseHeaders(500, stackTrace.length); - httpExchange.getResponseBody().write(stackTrace); - } catch (Exception errorWriterException) { - // We want to avoid logging so that we don't mess with application logs when the HTTPServer is used in a Java agent. - // However, if we can't even send an error response to the client there's nothing we can do but logging a message. - Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "The Prometheus metrics HTTPServer caught an Exception during scrape and failed to send an error response to the client.", errorWriterException); - Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Original Exception that caused the Prometheus scrape error:", requestHandlerException); - } - } else { - // If the exception occurs after response headers have been sent, it's too late to respond with HTTP 500. - Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "The Prometheus metrics HTTPServer caught an Exception while trying to send the metrics response.", requestHandlerException); - } + public class HttpResponse implements PrometheusHttpResponse { + + @Override + public void setHeader(String name, String value) { + httpExchange.getResponseHeaders().set(name, value); } @Override - public void close() { - httpExchange.close(); + public OutputStream sendHeadersAndGetBody(int statusCode, int contentLength) + throws IOException { + if (responseSent) { + throw new IOException("Cannot send multiple HTTP responses for a single HTTP exchange."); + } + responseSent = true; + httpExchange.sendResponseHeaders(statusCode, contentLength); + return httpExchange.getResponseBody(); } + } + + @Override + public HttpRequest getRequest() { + return request; + } + + @Override + public HttpResponse getResponse() { + return response; + } + + @Override + public void handleException(IOException e) throws IOException { + sendErrorResponseWithStackTrace(e); + } + + @Override + public void handleException(RuntimeException e) { + sendErrorResponseWithStackTrace(e); + } + + private void sendErrorResponseWithStackTrace(Exception requestHandlerException) { + if (!responseSent) { + responseSent = true; + try { + StringWriter stringWriter = new StringWriter(); + PrintWriter printWriter = new PrintWriter(stringWriter); + printWriter.write("An Exception occurred while scraping metrics: "); + requestHandlerException.printStackTrace(new PrintWriter(printWriter)); + byte[] stackTrace = stringWriter.toString().getBytes(StandardCharsets.UTF_8); + httpExchange.getResponseHeaders().set("Content-Type", "text/plain; charset=utf-8"); + httpExchange.sendResponseHeaders(500, stackTrace.length); + httpExchange.getResponseBody().write(stackTrace); + } catch (Exception errorWriterException) { + // We want to avoid logging so that we don't mess with application logs when the HTTPServer + // is used in a Java agent. + // However, if we can't even send an error response to the client there's nothing we can do + // but logging a message. + Logger.getLogger(this.getClass().getName()) + .log( + Level.SEVERE, + "The Prometheus metrics HTTPServer caught an Exception during scrape and failed to send an error response to the client.", + errorWriterException); + Logger.getLogger(this.getClass().getName()) + .log( + Level.SEVERE, + "Original Exception that caused the Prometheus scrape error:", + requestHandlerException); + } + } else { + // If the exception occurs after response headers have been sent, it's too late to respond + // with HTTP 500. + Logger.getLogger(this.getClass().getName()) + .log( + Level.SEVERE, + "The Prometheus metrics HTTPServer caught an Exception while trying to send the metrics response.", + requestHandlerException); + } + } + + @Override + public void close() { + httpExchange.close(); + } } diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/MetricsHandler.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/MetricsHandler.java index 3506ddd4b..4ac4b80d7 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/MetricsHandler.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/MetricsHandler.java @@ -5,41 +5,31 @@ import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.exporter.common.PrometheusScrapeHandler; import io.prometheus.metrics.model.registry.PrometheusRegistry; - -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.nio.charset.StandardCharsets; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Handler for the /metrics endpoint - */ + +/** Handler for the /metrics endpoint */ public class MetricsHandler implements HttpHandler { - private final PrometheusScrapeHandler prometheusScrapeHandler; + private final PrometheusScrapeHandler prometheusScrapeHandler; - public MetricsHandler() { - prometheusScrapeHandler = new PrometheusScrapeHandler(); - } + public MetricsHandler() { + prometheusScrapeHandler = new PrometheusScrapeHandler(); + } - public MetricsHandler(PrometheusRegistry registry) { - prometheusScrapeHandler = new PrometheusScrapeHandler(registry); - } + public MetricsHandler(PrometheusRegistry registry) { + prometheusScrapeHandler = new PrometheusScrapeHandler(registry); + } - public MetricsHandler(PrometheusProperties config) { - prometheusScrapeHandler = new PrometheusScrapeHandler(config); - } + public MetricsHandler(PrometheusProperties config) { + prometheusScrapeHandler = new PrometheusScrapeHandler(config); + } - public MetricsHandler(PrometheusProperties config, PrometheusRegistry registry) { - prometheusScrapeHandler = new PrometheusScrapeHandler(config, registry); - } + public MetricsHandler(PrometheusProperties config, PrometheusRegistry registry) { + prometheusScrapeHandler = new PrometheusScrapeHandler(config, registry); + } - @Override - public void handle(HttpExchange t) throws IOException { - prometheusScrapeHandler.handleRequest(new HttpExchangeAdapter(t)); - } + @Override + public void handle(HttpExchange t) throws IOException { + prometheusScrapeHandler.handleRequest(new HttpExchangeAdapter(t)); + } } diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/NamedDaemonThreadFactory.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/NamedDaemonThreadFactory.java index 378ac6ddc..b5d2415f7 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/NamedDaemonThreadFactory.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/NamedDaemonThreadFactory.java @@ -6,26 +6,26 @@ class NamedDaemonThreadFactory implements ThreadFactory { - private static final AtomicInteger POOL_NUMBER = new AtomicInteger(1); - private final int poolNumber = POOL_NUMBER.getAndIncrement(); - private final AtomicInteger threadNumber = new AtomicInteger(1); - private final ThreadFactory delegate; - private final boolean daemon; + private static final AtomicInteger POOL_NUMBER = new AtomicInteger(1); + private final int poolNumber = POOL_NUMBER.getAndIncrement(); + private final AtomicInteger threadNumber = new AtomicInteger(1); + private final ThreadFactory delegate; + private final boolean daemon; - NamedDaemonThreadFactory(ThreadFactory delegate, boolean daemon) { - this.delegate = delegate; - this.daemon = daemon; - } + NamedDaemonThreadFactory(ThreadFactory delegate, boolean daemon) { + this.delegate = delegate; + this.daemon = daemon; + } - @Override - public Thread newThread(Runnable r) { - Thread t = delegate.newThread(r); - t.setName(String.format("prometheus-http-%d-%d", poolNumber, threadNumber.getAndIncrement())); - t.setDaemon(daemon); - return t; - } + @Override + public Thread newThread(Runnable r) { + Thread t = delegate.newThread(r); + t.setName(String.format("prometheus-http-%d-%d", poolNumber, threadNumber.getAndIncrement())); + t.setDaemon(daemon); + return t; + } - static ThreadFactory defaultThreadFactory(boolean daemon) { - return new NamedDaemonThreadFactory(Executors.defaultThreadFactory(), daemon); - } + static ThreadFactory defaultThreadFactory(boolean daemon) { + return new NamedDaemonThreadFactory(Executors.defaultThreadFactory(), daemon); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java index 97719d6c3..fb674e351 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java @@ -12,444 +12,492 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.export.PeriodicMetricReader; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.Resource; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.ResourceBuilder; - import java.time.Duration; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; public class OpenTelemetryExporter implements AutoCloseable { - private final PeriodicMetricReader reader; - - private OpenTelemetryExporter(Builder builder, PrometheusProperties config, PrometheusRegistry registry) { - InstrumentationScopeInfo instrumentationScopeInfo = PrometheusInstrumentationScope.loadInstrumentationScopeInfo(); - ExporterOpenTelemetryProperties properties = config.getExporterOpenTelemetryProperties(); - Resource resource = initResourceAttributes(builder, properties, instrumentationScopeInfo); - MetricExporter exporter; - if (ConfigHelper.getProtocol(builder, properties).equals("grpc")) { - OtlpGrpcMetricExporterBuilder exporterBuilder = OtlpGrpcMetricExporter.builder() - .setTimeout(Duration.ofSeconds(ConfigHelper.getTimeoutSeconds(builder, properties))) - .setEndpoint(ConfigHelper.getEndpoint(builder, properties)); - for (Map.Entry header : ConfigHelper.getHeaders(builder, properties).entrySet()) { - exporterBuilder.addHeader(header.getKey(), header.getValue()); - } - exporter = exporterBuilder.build(); - } else { - OtlpHttpMetricExporterBuilder exporterBuilder = OtlpHttpMetricExporter.builder() - .setTimeout(Duration.ofSeconds(ConfigHelper.getTimeoutSeconds(builder, properties))) - .setEndpoint(ConfigHelper.getEndpoint(builder, properties)); - for (Map.Entry header : ConfigHelper.getHeaders(builder, properties).entrySet()) { - exporterBuilder.addHeader(header.getKey(), header.getValue()); - } - exporter = exporterBuilder.build(); - } - reader = PeriodicMetricReader.builder(exporter) - .setInterval(Duration.ofSeconds(ConfigHelper.getIntervalSeconds(builder, properties))) - .build(); - - PrometheusMetricProducer prometheusMetricProducer = new PrometheusMetricProducer(registry, instrumentationScopeInfo, resource); - reader.register(prometheusMetricProducer); + private final PeriodicMetricReader reader; + + private OpenTelemetryExporter( + Builder builder, PrometheusProperties config, PrometheusRegistry registry) { + InstrumentationScopeInfo instrumentationScopeInfo = + PrometheusInstrumentationScope.loadInstrumentationScopeInfo(); + ExporterOpenTelemetryProperties properties = config.getExporterOpenTelemetryProperties(); + Resource resource = initResourceAttributes(builder, properties, instrumentationScopeInfo); + MetricExporter exporter; + if (ConfigHelper.getProtocol(builder, properties).equals("grpc")) { + OtlpGrpcMetricExporterBuilder exporterBuilder = + OtlpGrpcMetricExporter.builder() + .setTimeout(Duration.ofSeconds(ConfigHelper.getTimeoutSeconds(builder, properties))) + .setEndpoint(ConfigHelper.getEndpoint(builder, properties)); + for (Map.Entry header : + ConfigHelper.getHeaders(builder, properties).entrySet()) { + exporterBuilder.addHeader(header.getKey(), header.getValue()); + } + exporter = exporterBuilder.build(); + } else { + OtlpHttpMetricExporterBuilder exporterBuilder = + OtlpHttpMetricExporter.builder() + .setTimeout(Duration.ofSeconds(ConfigHelper.getTimeoutSeconds(builder, properties))) + .setEndpoint(ConfigHelper.getEndpoint(builder, properties)); + for (Map.Entry header : + ConfigHelper.getHeaders(builder, properties).entrySet()) { + exporterBuilder.addHeader(header.getKey(), header.getValue()); + } + exporter = exporterBuilder.build(); } - - public void close() { - reader.shutdown(); + reader = + PeriodicMetricReader.builder(exporter) + .setInterval(Duration.ofSeconds(ConfigHelper.getIntervalSeconds(builder, properties))) + .build(); + + PrometheusMetricProducer prometheusMetricProducer = + new PrometheusMetricProducer(registry, instrumentationScopeInfo, resource); + reader.register(prometheusMetricProducer); + } + + public void close() { + reader.shutdown(); + } + + private Resource initResourceAttributes( + Builder builder, + ExporterOpenTelemetryProperties properties, + InstrumentationScopeInfo instrumentationScopeInfo) { + String serviceName = ConfigHelper.getServiceName(builder, properties); + String serviceNamespace = ConfigHelper.getServiceNamespace(builder, properties); + String serviceInstanceId = ConfigHelper.getServiceInstanceId(builder, properties); + String serviceVersion = ConfigHelper.getServiceVersion(builder, properties); + Map resourceAttributes = + ResourceAttributes.get( + instrumentationScopeInfo.getName(), + serviceName, + serviceNamespace, + serviceInstanceId, + serviceVersion, + ConfigHelper.getResourceAttributes(builder, properties)); + ResourceBuilder resourceBuilder = Resource.builder(); + for (Map.Entry entry : resourceAttributes.entrySet()) { + resourceBuilder.put(entry.getKey(), entry.getValue()); } - - private Resource initResourceAttributes(Builder builder, ExporterOpenTelemetryProperties properties, InstrumentationScopeInfo instrumentationScopeInfo) { - String serviceName = ConfigHelper.getServiceName(builder, properties); - String serviceNamespace = ConfigHelper.getServiceNamespace(builder, properties); - String serviceInstanceId = ConfigHelper.getServiceInstanceId(builder, properties); - String serviceVersion = ConfigHelper.getServiceVersion(builder, properties); - Map resourceAttributes = ResourceAttributes.get(instrumentationScopeInfo.getName(), serviceName, serviceNamespace, serviceInstanceId, serviceVersion, ConfigHelper.getResourceAttributes(builder, properties)); - ResourceBuilder resourceBuilder = Resource.builder(); - for (Map.Entry entry : resourceAttributes.entrySet()) { - resourceBuilder.put(entry.getKey(), entry.getValue()); - } - return resourceBuilder.build(); + return resourceBuilder.build(); + } + + public static Builder builder() { + return new Builder(PrometheusProperties.get()); + } + + public static Builder builder(PrometheusProperties config) { + return new Builder(config); + } + + public static class Builder { + + private final PrometheusProperties config; + private PrometheusRegistry registry = null; + private String protocol; + private String endpoint; + private final Map headers = new HashMap<>(); + private Integer intervalSeconds; + private Integer timeoutSeconds; + private String serviceName; + private String serviceNamespace; + private String serviceInstanceId; + private String serviceVersion; + private final Map resourceAttributes = new HashMap<>(); + + private Builder(PrometheusProperties config) { + this.config = config; } - public static Builder builder() { - return new Builder(PrometheusProperties.get()); + public Builder registry(PrometheusRegistry registry) { + this.registry = registry; + return this; } - public static Builder builder(PrometheusProperties config) { - return new Builder(config); + /** + * Specifies the OTLP transport protocol to be used when exporting metrics. + * + *

    Supported values are {@code "grpc"} and {@code "http/protobuf"}. Default is {@code + * "grpc"}. + * + *

    See OpenTelemetry's OTEL_EXPORTER_OTLP_PROTOCOL. + */ + public Builder protocol(String protocol) { + if (!protocol.equals("grpc") && !protocol.equals("http/protobuf")) { + throw new IllegalArgumentException( + protocol + ": Unsupported protocol. Expecting grpc or http/protobuf"); + } + this.protocol = protocol; + return this; } - public static class Builder { - - private final PrometheusProperties config; - private PrometheusRegistry registry = null; - private String protocol; - private String endpoint; - private final Map headers = new HashMap<>(); - private Integer intervalSeconds; - private Integer timeoutSeconds; - private String serviceName; - private String serviceNamespace; - private String serviceInstanceId; - private String serviceVersion; - private final Map resourceAttributes = new HashMap<>(); - - private Builder(PrometheusProperties config) { - this.config = config; - } - - public Builder registry(PrometheusRegistry registry) { - this.registry = registry; - return this; - } - - /** - * Specifies the OTLP transport protocol to be used when exporting metrics. - *

    - * Supported values are {@code "grpc"} and {@code "http/protobuf"}. Default is {@code "grpc"}. - *

    - * See OpenTelemetry's OTEL_EXPORTER_OTLP_PROTOCOL. - */ - public Builder protocol(String protocol) { - if (!protocol.equals("grpc") && !protocol.equals("http/protobuf")) { - throw new IllegalArgumentException(protocol + ": Unsupported protocol. Expecting grpc or http/protobuf"); - } - this.protocol = protocol; - return this; - } - - /** - * The OTLP endpoint to send metric data to. - *

    - * The default depends on the protocol: - *

      - *
    • {@code "grpc"}: {@code "http://localhost:4317"}
    • - *
    • {@code "http/protobuf"}: {@code "http://localhost:4318/v1/metrics"}
    • - *
    - * If the protocol is {@code "http/protobuf"} and the endpoint does not have the {@code "/v1/metrics"} suffix, - * the {@code "/v1/metrics"} suffix will automatically be appended. - *

    - * See OpenTelemetry's OTEL_EXPORTER_OTLP_METRICS_ENDPOINT. - */ - public Builder endpoint(String endpoint) { - this.endpoint = endpoint; - return this; - } + /** + * The OTLP endpoint to send metric data to. + * + *

    The default depends on the protocol: + * + *

      + *
    • {@code "grpc"}: {@code "http://localhost:4317"} + *
    • {@code "http/protobuf"}: {@code "http://localhost:4318/v1/metrics"} + *
    + * + * If the protocol is {@code "http/protobuf"} and the endpoint does not have the {@code + * "/v1/metrics"} suffix, the {@code "/v1/metrics"} suffix will automatically be appended. + * + *

    See OpenTelemetry's OTEL_EXPORTER_OTLP_METRICS_ENDPOINT. + */ + public Builder endpoint(String endpoint) { + this.endpoint = endpoint; + return this; + } - /** - * Add an HTTP header to be applied to outgoing requests. - * Call multiple times to add multiple headers. - *

    - * See OpenTelemetry's OTEL_EXPORTER_OTLP_HEADERS. - */ - public Builder header(String name, String value) { - this.headers.put(name, value); - return this; - } + /** + * Add an HTTP header to be applied to outgoing requests. Call multiple times to add multiple + * headers. + * + *

    See OpenTelemetry's OTEL_EXPORTER_OTLP_HEADERS. + */ + public Builder header(String name, String value) { + this.headers.put(name, value); + return this; + } - /** - * The interval between the start of two export attempts. Default is 60000. - *

    - * Like OpenTelemetry's OTEL_METRIC_EXPORT_INTERVAL, - * but in seconds rather than milliseconds. - */ - public Builder intervalSeconds(int intervalSeconds) { - if (intervalSeconds <= 0) { - throw new IllegalStateException(intervalSeconds + ": expecting a push interval > 0s"); - } - this.intervalSeconds = intervalSeconds; - return this; - } + /** + * The interval between the start of two export attempts. Default is 60000. + * + *

    Like OpenTelemetry's OTEL_METRIC_EXPORT_INTERVAL, + * but in seconds rather than milliseconds. + */ + public Builder intervalSeconds(int intervalSeconds) { + if (intervalSeconds <= 0) { + throw new IllegalStateException(intervalSeconds + ": expecting a push interval > 0s"); + } + this.intervalSeconds = intervalSeconds; + return this; + } - /** - * The timeout for outgoing requests. Default is 10. - *

    - * Like OpenTelemetry's OTEL_EXPORTER_OTLP_METRICS_TIMEOUT, - * but in seconds rather than milliseconds. - */ - public Builder timeoutSeconds(int timeoutSeconds) { - if (timeoutSeconds <= 0) { - throw new IllegalStateException(timeoutSeconds + ": expecting a push interval > 0s"); - } - this.timeoutSeconds = timeoutSeconds; - return this; - } + /** + * The timeout for outgoing requests. Default is 10. + * + *

    Like OpenTelemetry's OTEL_EXPORTER_OTLP_METRICS_TIMEOUT, + * but in seconds rather than milliseconds. + */ + public Builder timeoutSeconds(int timeoutSeconds) { + if (timeoutSeconds <= 0) { + throw new IllegalStateException(timeoutSeconds + ": expecting a push interval > 0s"); + } + this.timeoutSeconds = timeoutSeconds; + return this; + } - /** - * The {@code service.name} resource attribute. - *

    - * If not explicitly specified, {@code client_java} will try to initialize it with a reasonable default, like the JAR file name. - *

    - * See {@code service.name} in OpenTelemetry's Resource Semantic Conventions. - */ - public Builder serviceName(String serviceName) { - this.serviceName = serviceName; - return this; - } + /** + * The {@code service.name} resource attribute. + * + *

    If not explicitly specified, {@code client_java} will try to initialize it with a + * reasonable default, like the JAR file name. + * + *

    See {@code service.name} in OpenTelemetry's Resource + * Semantic Conventions. + */ + public Builder serviceName(String serviceName) { + this.serviceName = serviceName; + return this; + } - /** - * The {@code service.namespace} resource attribute. - *

    - * See {@code service.namespace} in OpenTelemetry's Resource Semantic Conventions. - */ - public Builder serviceNamespace(String serviceNamespace) { - this.serviceNamespace = serviceNamespace; - return this; - } + /** + * The {@code service.namespace} resource attribute. + * + *

    See {@code service.namespace} in OpenTelemetry's Resource + * Semantic Conventions. + */ + public Builder serviceNamespace(String serviceNamespace) { + this.serviceNamespace = serviceNamespace; + return this; + } - /** - * The {@code service.instance.id} resource attribute. - *

    - * See {@code service.instance.id} in OpenTelemetry's Resource Semantic Conventions. - */ - public Builder serviceInstanceId(String serviceInstanceId) { - this.serviceInstanceId = serviceInstanceId; - return this; - } + /** + * The {@code service.instance.id} resource attribute. + * + *

    See {@code service.instance.id} in OpenTelemetry's Resource + * Semantic Conventions. + */ + public Builder serviceInstanceId(String serviceInstanceId) { + this.serviceInstanceId = serviceInstanceId; + return this; + } - /** - * The {@code service.version} resource attribute. - *

    - * See {@code service.version} in OpenTelemetry's Resource Semantic Conventions. - */ - public Builder serviceVersion(String serviceVersion) { - this.serviceVersion = serviceVersion; - return this; - } + /** + * The {@code service.version} resource attribute. + * + *

    See {@code service.version} in OpenTelemetry's Resource + * Semantic Conventions. + */ + public Builder serviceVersion(String serviceVersion) { + this.serviceVersion = serviceVersion; + return this; + } - /** - * Add a resource attribute. Call multiple times to add multiple resource attributes. - *

    - * See OpenTelemetry's OTEL_RESOURCE_ATTRIBUTES. - */ - public Builder resourceAttribute(String name, String value) { - this.resourceAttributes.put(name, value); - return this; - } + /** + * Add a resource attribute. Call multiple times to add multiple resource attributes. + * + *

    See OpenTelemetry's OTEL_RESOURCE_ATTRIBUTES. + */ + public Builder resourceAttribute(String name, String value) { + this.resourceAttributes.put(name, value); + return this; + } - public OpenTelemetryExporter buildAndStart() { - if (registry == null) { - registry = PrometheusRegistry.defaultRegistry; - } - return new OpenTelemetryExporter(this, config, registry); + public OpenTelemetryExporter buildAndStart() { + if (registry == null) { + registry = PrometheusRegistry.defaultRegistry; + } + return new OpenTelemetryExporter(this, config, registry); + } + } + + private static class ConfigHelper { + + private static String getProtocol( + OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { + String protocol = config.getProtocol(); + if (protocol != null) { + return protocol; + } + protocol = getString("otel.exporter.otlp.protocol"); + if (protocol != null) { + if (!protocol.equals("grpc") && !protocol.equals("http/protobuf")) { + throw new IllegalStateException( + protocol + + ": Unsupported OpenTelemetry exporter protocol. Expecting grpc or http/protobuf."); } + return protocol; + } + if (builder.protocol != null) { + return builder.protocol; + } + return "grpc"; } - private static class ConfigHelper { - - private static String getProtocol(OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String protocol = config.getProtocol(); - if (protocol != null) { - return protocol; - } - protocol = getString("otel.exporter.otlp.protocol"); - if (protocol != null) { - if (!protocol.equals("grpc") && !protocol.equals("http/protobuf")) { - throw new IllegalStateException(protocol + ": Unsupported OpenTelemetry exporter protocol. Expecting grpc or http/protobuf."); - } - return protocol; - } - if (builder.protocol != null) { - return builder.protocol; - } - return "grpc"; + private static String getEndpoint( + OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { + String endpoint = config.getEndpoint(); + if (endpoint == null) { + endpoint = getString("otel.exporter.otlp.metrics.endpoint"); + } + if (endpoint == null) { + endpoint = getString("otel.exporter.otlp.endpoint"); + } + if (endpoint == null) { + endpoint = builder.endpoint; + } + if (endpoint == null) { + if (getProtocol(builder, config).equals("grpc")) { + endpoint = "http://localhost:4317"; + } else { // http/protobuf + endpoint = "http://localhost:4318/v1/metrics"; } - - private static String getEndpoint(OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String endpoint = config.getEndpoint(); - if (endpoint == null) { - endpoint = getString("otel.exporter.otlp.metrics.endpoint"); - } - if (endpoint == null) { - endpoint = getString("otel.exporter.otlp.endpoint"); - } - if (endpoint == null) { - endpoint = builder.endpoint; - } - if (endpoint == null) { - if (getProtocol(builder, config).equals("grpc")) { - endpoint = "http://localhost:4317"; - } else { // http/protobuf - endpoint = "http://localhost:4318/v1/metrics"; - } - } - if (getProtocol(builder, config).equals("grpc")) { - return endpoint; - } else { // http/protobuf - if (!endpoint.endsWith("v1/metrics")) { - if (!endpoint.endsWith("/")) { - return endpoint + "/v1/metrics"; - } else { - return endpoint + "v1/metrics"; - } - } else { - return endpoint; - } - } + } + if (getProtocol(builder, config).equals("grpc")) { + return endpoint; + } else { // http/protobuf + if (!endpoint.endsWith("v1/metrics")) { + if (!endpoint.endsWith("/")) { + return endpoint + "/v1/metrics"; + } else { + return endpoint + "v1/metrics"; + } + } else { + return endpoint; } + } + } - private static Map getHeaders(OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - Map headers = config.getHeaders(); - if (!headers.isEmpty()) { - return headers; - } - headers = getMap("otel.exporter.otlp.headers"); - if (!headers.isEmpty()) { - return headers; - } - if (!builder.headers.isEmpty()) { - return builder.headers; - } - return new HashMap<>(); - } + private static Map getHeaders( + OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { + Map headers = config.getHeaders(); + if (!headers.isEmpty()) { + return headers; + } + headers = getMap("otel.exporter.otlp.headers"); + if (!headers.isEmpty()) { + return headers; + } + if (!builder.headers.isEmpty()) { + return builder.headers; + } + return new HashMap<>(); + } - private static int getIntervalSeconds(OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - Integer intervalSeconds = config.getIntervalSeconds(); - if (intervalSeconds != null) { - return intervalSeconds; - } - intervalSeconds = getPositiveInteger("otel.metric.export.interval"); - if (intervalSeconds != null) { - return (int) TimeUnit.MILLISECONDS.toSeconds(intervalSeconds); - } - if (builder.intervalSeconds != null) { - return builder.intervalSeconds; - } - return 60; - } + private static int getIntervalSeconds( + OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { + Integer intervalSeconds = config.getIntervalSeconds(); + if (intervalSeconds != null) { + return intervalSeconds; + } + intervalSeconds = getPositiveInteger("otel.metric.export.interval"); + if (intervalSeconds != null) { + return (int) TimeUnit.MILLISECONDS.toSeconds(intervalSeconds); + } + if (builder.intervalSeconds != null) { + return builder.intervalSeconds; + } + return 60; + } - private static int getTimeoutSeconds(OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - Integer timeoutSeconds = config.getTimeoutSeconds(); - if (timeoutSeconds != null) { - return timeoutSeconds; - } - Integer timeoutMilliseconds = getPositiveInteger("otel.exporter.otlp.metrics.timeout"); - if (timeoutMilliseconds == null) { - timeoutMilliseconds = getPositiveInteger("otel.exporter.otlp.timeout"); - } - if (timeoutMilliseconds != null) { - return (int) TimeUnit.MILLISECONDS.toSeconds(timeoutMilliseconds); - } - if (builder.timeoutSeconds != null) { - return builder.timeoutSeconds; - } - return 10; - } + private static int getTimeoutSeconds( + OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { + Integer timeoutSeconds = config.getTimeoutSeconds(); + if (timeoutSeconds != null) { + return timeoutSeconds; + } + Integer timeoutMilliseconds = getPositiveInteger("otel.exporter.otlp.metrics.timeout"); + if (timeoutMilliseconds == null) { + timeoutMilliseconds = getPositiveInteger("otel.exporter.otlp.timeout"); + } + if (timeoutMilliseconds != null) { + return (int) TimeUnit.MILLISECONDS.toSeconds(timeoutMilliseconds); + } + if (builder.timeoutSeconds != null) { + return builder.timeoutSeconds; + } + return 10; + } - private static String getServiceName(OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String serviceName = config.getServiceName(); - if (serviceName != null) { - return serviceName; - } - serviceName = getString("otel.service.name"); - if (serviceName != null) { - return serviceName; - } - if (builder.serviceName != null) { - return builder.serviceName; - } - return null; - } + private static String getServiceName( + OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { + String serviceName = config.getServiceName(); + if (serviceName != null) { + return serviceName; + } + serviceName = getString("otel.service.name"); + if (serviceName != null) { + return serviceName; + } + if (builder.serviceName != null) { + return builder.serviceName; + } + return null; + } - private static String getServiceNamespace(OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String serviceNamespace = config.getServiceNamespace(); - if (serviceNamespace != null) { - return serviceNamespace; - } - if (builder.serviceNamespace != null) { - return builder.serviceNamespace; - } - return null; - } + private static String getServiceNamespace( + OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { + String serviceNamespace = config.getServiceNamespace(); + if (serviceNamespace != null) { + return serviceNamespace; + } + if (builder.serviceNamespace != null) { + return builder.serviceNamespace; + } + return null; + } - private static String getServiceInstanceId(OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String serviceInstanceId = config.getServiceInstanceId(); - if (serviceInstanceId != null) { - return serviceInstanceId; - } - if (builder.serviceInstanceId != null) { - return builder.serviceInstanceId; - } - return null; - } + private static String getServiceInstanceId( + OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { + String serviceInstanceId = config.getServiceInstanceId(); + if (serviceInstanceId != null) { + return serviceInstanceId; + } + if (builder.serviceInstanceId != null) { + return builder.serviceInstanceId; + } + return null; + } - private static String getServiceVersion(OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String serviceVersion = config.getServiceVersion(); - if (serviceVersion != null) { - return serviceVersion; - } - if (builder.serviceVersion != null) { - return builder.serviceVersion; - } - return null; - } + private static String getServiceVersion( + OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { + String serviceVersion = config.getServiceVersion(); + if (serviceVersion != null) { + return serviceVersion; + } + if (builder.serviceVersion != null) { + return builder.serviceVersion; + } + return null; + } - private static Map getResourceAttributes(OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - Map resourceAttributes = config.getResourceAttributes(); - if (!resourceAttributes.isEmpty()) { - return resourceAttributes; - } - resourceAttributes = getMap("otel.resource.attributes"); - if (!resourceAttributes.isEmpty()) { - return resourceAttributes; - } - if (!builder.resourceAttributes.isEmpty()) { - return builder.resourceAttributes; - } - return new HashMap<>(); - } + private static Map getResourceAttributes( + OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { + Map resourceAttributes = config.getResourceAttributes(); + if (!resourceAttributes.isEmpty()) { + return resourceAttributes; + } + resourceAttributes = getMap("otel.resource.attributes"); + if (!resourceAttributes.isEmpty()) { + return resourceAttributes; + } + if (!builder.resourceAttributes.isEmpty()) { + return builder.resourceAttributes; + } + return new HashMap<>(); + } - private static String getString(String otelPropertyName) { - String otelEnvVarName = otelPropertyName.replace(".", "_").replace("-", "_").toUpperCase(); - if (System.getenv(otelEnvVarName) != null) { - return System.getenv(otelEnvVarName); - } - if (System.getProperty(otelPropertyName) != null) { - return System.getProperty(otelPropertyName); - } - return null; - } + private static String getString(String otelPropertyName) { + String otelEnvVarName = otelPropertyName.replace(".", "_").replace("-", "_").toUpperCase(); + if (System.getenv(otelEnvVarName) != null) { + return System.getenv(otelEnvVarName); + } + if (System.getProperty(otelPropertyName) != null) { + return System.getProperty(otelPropertyName); + } + return null; + } - private static Integer getInteger(String otelPropertyName) { - String result = getString(otelPropertyName); - if (result == null) { - return null; - } else { - try { - return Integer.parseInt(result); - } catch (NumberFormatException e) { - throw new IllegalStateException(otelPropertyName + "=" + result + " - illegal value."); - } - } + private static Integer getInteger(String otelPropertyName) { + String result = getString(otelPropertyName); + if (result == null) { + return null; + } else { + try { + return Integer.parseInt(result); + } catch (NumberFormatException e) { + throw new IllegalStateException(otelPropertyName + "=" + result + " - illegal value."); } + } + } - private static Integer getPositiveInteger(String otelPropertyName) { - Integer result = getInteger(otelPropertyName); - if (result == null) { - return null; - } - if (result <= 0) { - throw new IllegalStateException(otelPropertyName + "=" + result + ": Expecting value > 0."); - } - return result; - } + private static Integer getPositiveInteger(String otelPropertyName) { + Integer result = getInteger(otelPropertyName); + if (result == null) { + return null; + } + if (result <= 0) { + throw new IllegalStateException(otelPropertyName + "=" + result + ": Expecting value > 0."); + } + return result; + } - private static Map getMap(String otelPropertyName) { - Map result = new HashMap<>(); - String property = getString(otelPropertyName); - if (property != null) { - String[] pairs = property.split(","); - for (String pair : pairs) { - if (pair.contains("=")) { - String[] keyValue = pair.split("=", 1); - if (keyValue.length == 2) { - String key = keyValue[0].trim(); - String value = keyValue[1].trim(); - if (key.length() > 0 && value.length() > 0) { - result.putIfAbsent(key, value); - } - } - } - } - } - return result; + private static Map getMap(String otelPropertyName) { + Map result = new HashMap<>(); + String property = getString(otelPropertyName); + if (property != null) { + String[] pairs = property.split(","); + for (String pair : pairs) { + if (pair.contains("=")) { + String[] keyValue = pair.split("=", 1); + if (keyValue.length == 2) { + String key = keyValue[0].trim(); + String value = keyValue[1].trim(); + if (key.length() > 0 && value.length() > 0) { + result.putIfAbsent(key, value); + } + } + } } + } + return result; } + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java index de14def11..fae9a2984 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java @@ -1,32 +1,49 @@ package io.prometheus.metrics.exporter.opentelemetry; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; - import java.util.Properties; class PrometheusInstrumentationScope { - private static final String instrumentationScopePropertiesFile = "instrumentationScope.properties"; - private static final String instrumentationScopeNameKey = "instrumentationScope.name"; - private static final String instrumentationScopeVersionKey = "instrumentationScope.version"; + private static final String instrumentationScopePropertiesFile = + "instrumentationScope.properties"; + private static final String instrumentationScopeNameKey = "instrumentationScope.name"; + private static final String instrumentationScopeVersionKey = "instrumentationScope.version"; - public static InstrumentationScopeInfo loadInstrumentationScopeInfo() { - try { - Properties properties = new Properties(); - properties.load(PrometheusInstrumentationScope.class.getClassLoader().getResourceAsStream(instrumentationScopePropertiesFile)); - String instrumentationScopeName = properties.getProperty(instrumentationScopeNameKey); - if (instrumentationScopeName == null) { - throw new IllegalStateException("Prometheus metrics library initialization error: " + instrumentationScopeNameKey + " not found in " + instrumentationScopePropertiesFile + " in classpath."); - } - String instrumentationScopeVersion = properties.getProperty(instrumentationScopeVersionKey); - if (instrumentationScopeVersion == null) { - throw new IllegalStateException("Prometheus metrics library initialization error: " + instrumentationScopeVersionKey + " not found in " + instrumentationScopePropertiesFile + " in classpath."); - } - return InstrumentationScopeInfo.builder(instrumentationScopeName) - .setVersion(instrumentationScopeVersion) - .build(); - } catch (Exception e) { - throw new IllegalStateException("Prometheus metrics library initialization error: Failed to read " + instrumentationScopePropertiesFile + " from classpath.", e); - } + public static InstrumentationScopeInfo loadInstrumentationScopeInfo() { + try { + Properties properties = new Properties(); + properties.load( + PrometheusInstrumentationScope.class + .getClassLoader() + .getResourceAsStream(instrumentationScopePropertiesFile)); + String instrumentationScopeName = properties.getProperty(instrumentationScopeNameKey); + if (instrumentationScopeName == null) { + throw new IllegalStateException( + "Prometheus metrics library initialization error: " + + instrumentationScopeNameKey + + " not found in " + + instrumentationScopePropertiesFile + + " in classpath."); + } + String instrumentationScopeVersion = properties.getProperty(instrumentationScopeVersionKey); + if (instrumentationScopeVersion == null) { + throw new IllegalStateException( + "Prometheus metrics library initialization error: " + + instrumentationScopeVersionKey + + " not found in " + + instrumentationScopePropertiesFile + + " in classpath."); + } + return InstrumentationScopeInfo.builder(instrumentationScopeName) + .setVersion(instrumentationScopeVersion) + .build(); + } catch (Exception e) { + throw new IllegalStateException( + "Prometheus metrics library initialization error: Failed to read " + + instrumentationScopePropertiesFile + + " from classpath.", + e); } + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java index 37ee4d1de..8d3fb2469 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java @@ -19,106 +19,115 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.export.CollectionRegistration; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.Resource; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.ResourceBuilder; - import java.util.ArrayList; import java.util.Collection; import java.util.List; class PrometheusMetricProducer implements CollectionRegistration { - private final PrometheusRegistry registry; - private final Resource resource; - private final InstrumentationScopeInfo instrumentationScopeInfo; + private final PrometheusRegistry registry; + private final Resource resource; + private final InstrumentationScopeInfo instrumentationScopeInfo; - public PrometheusMetricProducer(PrometheusRegistry registry, InstrumentationScopeInfo instrumentationScopeInfo, Resource resource) { - this.registry = registry; - this.instrumentationScopeInfo = instrumentationScopeInfo; - this.resource = resource; - } + public PrometheusMetricProducer( + PrometheusRegistry registry, + InstrumentationScopeInfo instrumentationScopeInfo, + Resource resource) { + this.registry = registry; + this.instrumentationScopeInfo = instrumentationScopeInfo; + this.resource = resource; + } - @Override - public Collection collectAllMetrics() { - // TODO: We could add a filter configuration for the OpenTelemetry exporter and call registry.scrape(filter) if a filter is configured, like in the Servlet exporter. - MetricSnapshots snapshots = registry.scrape(); - Resource resourceWithTargetInfo = resource.merge(resourceFromTargetInfo(snapshots)); - InstrumentationScopeInfo scopeFromInfo = instrumentationScopeFromOTelScopeInfo(snapshots); - List result = new ArrayList<>(snapshots.size()); - MetricDataFactory factory = new MetricDataFactory(resourceWithTargetInfo, scopeFromInfo != null ? scopeFromInfo : instrumentationScopeInfo, System.currentTimeMillis()); - for (MetricSnapshot snapshot : snapshots) { - if (snapshot instanceof CounterSnapshot) { - addUnlessNull(result, factory.create((CounterSnapshot) snapshot)); - } else if (snapshot instanceof GaugeSnapshot) { - addUnlessNull(result, factory.create((GaugeSnapshot) snapshot)); - } else if (snapshot instanceof HistogramSnapshot) { - if (!((HistogramSnapshot) snapshot).isGaugeHistogram()) { - addUnlessNull(result, factory.create((HistogramSnapshot) snapshot)); - } - } else if (snapshot instanceof SummarySnapshot) { - addUnlessNull(result, factory.create((SummarySnapshot) snapshot)); - } else if (snapshot instanceof InfoSnapshot) { - String name = snapshot.getMetadata().getPrometheusName(); - if (!name.equals("target") && !name.equals("otel_scope")) { - addUnlessNull(result, factory.create((InfoSnapshot) snapshot)); - } - } else if (snapshot instanceof StateSetSnapshot) { - addUnlessNull(result, factory.create((StateSetSnapshot) snapshot)); - } else if (snapshot instanceof UnknownSnapshot) { - addUnlessNull(result, factory.create((UnknownSnapshot) snapshot)); - } + @Override + public Collection collectAllMetrics() { + // TODO: We could add a filter configuration for the OpenTelemetry exporter and call + // registry.scrape(filter) if a filter is configured, like in the Servlet exporter. + MetricSnapshots snapshots = registry.scrape(); + Resource resourceWithTargetInfo = resource.merge(resourceFromTargetInfo(snapshots)); + InstrumentationScopeInfo scopeFromInfo = instrumentationScopeFromOTelScopeInfo(snapshots); + List result = new ArrayList<>(snapshots.size()); + MetricDataFactory factory = + new MetricDataFactory( + resourceWithTargetInfo, + scopeFromInfo != null ? scopeFromInfo : instrumentationScopeInfo, + System.currentTimeMillis()); + for (MetricSnapshot snapshot : snapshots) { + if (snapshot instanceof CounterSnapshot) { + addUnlessNull(result, factory.create((CounterSnapshot) snapshot)); + } else if (snapshot instanceof GaugeSnapshot) { + addUnlessNull(result, factory.create((GaugeSnapshot) snapshot)); + } else if (snapshot instanceof HistogramSnapshot) { + if (!((HistogramSnapshot) snapshot).isGaugeHistogram()) { + addUnlessNull(result, factory.create((HistogramSnapshot) snapshot)); } - return result; + } else if (snapshot instanceof SummarySnapshot) { + addUnlessNull(result, factory.create((SummarySnapshot) snapshot)); + } else if (snapshot instanceof InfoSnapshot) { + String name = snapshot.getMetadata().getPrometheusName(); + if (!name.equals("target") && !name.equals("otel_scope")) { + addUnlessNull(result, factory.create((InfoSnapshot) snapshot)); + } + } else if (snapshot instanceof StateSetSnapshot) { + addUnlessNull(result, factory.create((StateSetSnapshot) snapshot)); + } else if (snapshot instanceof UnknownSnapshot) { + addUnlessNull(result, factory.create((UnknownSnapshot) snapshot)); + } } + return result; + } - private Resource resourceFromTargetInfo(MetricSnapshots snapshots) { - ResourceBuilder result = Resource.builder(); - for (MetricSnapshot snapshot : snapshots) { - if (snapshot.getMetadata().getName().equals("target") && snapshot instanceof InfoSnapshot) { - InfoSnapshot targetInfo = (InfoSnapshot) snapshot; - if (targetInfo.getDataPoints().size() > 0) { - InfoSnapshot.InfoDataPointSnapshot data = targetInfo.getDataPoints().get(0); - Labels labels = data.getLabels(); - for (int i = 0; i < labels.size(); i++) { - result.put(labels.getName(i), labels.getValue(i)); - } - } - } + private Resource resourceFromTargetInfo(MetricSnapshots snapshots) { + ResourceBuilder result = Resource.builder(); + for (MetricSnapshot snapshot : snapshots) { + if (snapshot.getMetadata().getName().equals("target") && snapshot instanceof InfoSnapshot) { + InfoSnapshot targetInfo = (InfoSnapshot) snapshot; + if (targetInfo.getDataPoints().size() > 0) { + InfoSnapshot.InfoDataPointSnapshot data = targetInfo.getDataPoints().get(0); + Labels labels = data.getLabels(); + for (int i = 0; i < labels.size(); i++) { + result.put(labels.getName(i), labels.getValue(i)); + } } - return result.build(); + } } + return result.build(); + } - private InstrumentationScopeInfo instrumentationScopeFromOTelScopeInfo(MetricSnapshots snapshots) { - for (MetricSnapshot snapshot : snapshots) { - if (snapshot.getMetadata().getPrometheusName().equals("otel_scope") && snapshot instanceof InfoSnapshot) { - InfoSnapshot scopeInfo = (InfoSnapshot) snapshot; - if (scopeInfo.getDataPoints().size() > 0) { - Labels labels = scopeInfo.getDataPoints().get(0).getLabels(); - String name = null; - String version = null; - AttributesBuilder attributesBuilder = Attributes.builder(); - for (int i = 0; i < labels.size(); i++) { - if (labels.getPrometheusName(i).equals("otel_scope_name")) { - name = labels.getValue(i); - } else if (labels.getPrometheusName(i).equals("otel_scope_version")) { - version = labels.getValue(i); - } else { - attributesBuilder.put(labels.getName(i), labels.getValue(i)); - } - } - if (name != null) { - return InstrumentationScopeInfo.builder(name) - .setVersion(version) - .setAttributes(attributesBuilder.build()) - .build(); - } - } + private InstrumentationScopeInfo instrumentationScopeFromOTelScopeInfo( + MetricSnapshots snapshots) { + for (MetricSnapshot snapshot : snapshots) { + if (snapshot.getMetadata().getPrometheusName().equals("otel_scope") + && snapshot instanceof InfoSnapshot) { + InfoSnapshot scopeInfo = (InfoSnapshot) snapshot; + if (scopeInfo.getDataPoints().size() > 0) { + Labels labels = scopeInfo.getDataPoints().get(0).getLabels(); + String name = null; + String version = null; + AttributesBuilder attributesBuilder = Attributes.builder(); + for (int i = 0; i < labels.size(); i++) { + if (labels.getPrometheusName(i).equals("otel_scope_name")) { + name = labels.getValue(i); + } else if (labels.getPrometheusName(i).equals("otel_scope_version")) { + version = labels.getValue(i); + } else { + attributesBuilder.put(labels.getName(i), labels.getValue(i)); } + } + if (name != null) { + return InstrumentationScopeInfo.builder(name) + .setVersion(version) + .setAttributes(attributesBuilder.build()) + .build(); + } } - return null; + } } + return null; + } - private void addUnlessNull(List result, MetricData data) { - if (data != null) { - result.add(data); - } + private void addUnlessNull(List result, MetricData data) { + if (data != null) { + result.add(data); } + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributes.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributes.java index c4319b7fc..2c88badfc 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributes.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributes.java @@ -5,30 +5,32 @@ public class ResourceAttributes { - // TODO: The OTel Java instrumentation also has a SpringBootServiceNameDetector, we should port this over. - public static Map get(String instrumentationScopeName, - String serviceName, - String serviceNamespace, - String serviceInstanceId, - String serviceVersion, - Map configuredResourceAttributes) { - Map result = new HashMap<>(); - ResourceAttributesFromOtelAgent.addIfAbsent(result, instrumentationScopeName); - putIfAbsent(result, "service.name", serviceName); - putIfAbsent(result, "service.namespace", serviceNamespace); - putIfAbsent(result, "service.instance.id", serviceInstanceId); - putIfAbsent(result, "service.version", serviceVersion); - for (Map.Entry attribute : configuredResourceAttributes.entrySet()) { - putIfAbsent(result, attribute.getKey(), attribute.getValue()); - } - ResourceAttributesFromJarFileName.addIfAbsent(result); - ResourceAttributesDefaults.addIfAbsent(result); - return result; + // TODO: The OTel Java instrumentation also has a SpringBootServiceNameDetector, we should port + // this over. + public static Map get( + String instrumentationScopeName, + String serviceName, + String serviceNamespace, + String serviceInstanceId, + String serviceVersion, + Map configuredResourceAttributes) { + Map result = new HashMap<>(); + ResourceAttributesFromOtelAgent.addIfAbsent(result, instrumentationScopeName); + putIfAbsent(result, "service.name", serviceName); + putIfAbsent(result, "service.namespace", serviceNamespace); + putIfAbsent(result, "service.instance.id", serviceInstanceId); + putIfAbsent(result, "service.version", serviceVersion); + for (Map.Entry attribute : configuredResourceAttributes.entrySet()) { + putIfAbsent(result, attribute.getKey(), attribute.getValue()); } + ResourceAttributesFromJarFileName.addIfAbsent(result); + ResourceAttributesDefaults.addIfAbsent(result); + return result; + } - private static void putIfAbsent(Map result, String key, String value) { - if (value != null) { - result.putIfAbsent(key, value); - } + private static void putIfAbsent(Map result, String key, String value) { + if (value != null) { + result.putIfAbsent(key, value); } + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesDefaults.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesDefaults.java index 0e63f4ccb..19328fd73 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesDefaults.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesDefaults.java @@ -5,10 +5,10 @@ public class ResourceAttributesDefaults { - private static final String instanceId = UUID.randomUUID().toString(); + private static final String instanceId = UUID.randomUUID().toString(); - public static void addIfAbsent(Map result) { - result.putIfAbsent("service.instance.id", instanceId); - result.putIfAbsent("service.name", "unknown_service:java"); - } + public static void addIfAbsent(Map result) { + result.putIfAbsent("service.instance.id", instanceId); + result.putIfAbsent("service.name", "unknown_service:java"); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromJarFileName.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromJarFileName.java index 093b3b44d..7cf7a51aa 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromJarFileName.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromJarFileName.java @@ -9,52 +9,52 @@ // See io.opentelemetry.instrumentation.resources.JarServiceNameDetector public class ResourceAttributesFromJarFileName { - public static void addIfAbsent(Map result) { - if (result.containsKey("service.name")) { - return; - } - Path jarPath = getJarPathFromSunCommandLine(); - if (jarPath == null) { - return; - } - String serviceName = getServiceName(jarPath); - result.putIfAbsent("service.name", serviceName); + public static void addIfAbsent(Map result) { + if (result.containsKey("service.name")) { + return; } - - private static Path getJarPathFromSunCommandLine() { - String programArguments = System.getProperty("sun.java.command"); - if (programArguments == null) { - return null; - } - // Take the path until the first space. If the path doesn't exist extend it up to the next - // space. Repeat until a path that exists is found or input runs out. - int next = 0; - while (true) { - int nextSpace = programArguments.indexOf(' ', next); - if (nextSpace == -1) { - return pathIfExists(programArguments); - } - Path path = pathIfExists(programArguments.substring(0, nextSpace)); - next = nextSpace + 1; - if (path != null) { - return path; - } - } + Path jarPath = getJarPathFromSunCommandLine(); + if (jarPath == null) { + return; } + String serviceName = getServiceName(jarPath); + result.putIfAbsent("service.name", serviceName); + } - private static Path pathIfExists(String programArguments) { - Path candidate; - try { - candidate = Paths.get(programArguments); - } catch (InvalidPathException e) { - return null; - } - return Files.isRegularFile(candidate) ? candidate : null; + private static Path getJarPathFromSunCommandLine() { + String programArguments = System.getProperty("sun.java.command"); + if (programArguments == null) { + return null; + } + // Take the path until the first space. If the path doesn't exist extend it up to the next + // space. Repeat until a path that exists is found or input runs out. + int next = 0; + while (true) { + int nextSpace = programArguments.indexOf(' ', next); + if (nextSpace == -1) { + return pathIfExists(programArguments); + } + Path path = pathIfExists(programArguments.substring(0, nextSpace)); + next = nextSpace + 1; + if (path != null) { + return path; + } } + } - private static String getServiceName(Path jarPath) { - String jarName = jarPath.getFileName().toString(); - int dotIndex = jarName.lastIndexOf("."); - return dotIndex == -1 ? jarName : jarName.substring(0, dotIndex); + private static Path pathIfExists(String programArguments) { + Path candidate; + try { + candidate = Paths.get(programArguments); + } catch (InvalidPathException e) { + return null; } + return Files.isRegularFile(candidate) ? candidate : null; + } + + private static String getServiceName(Path jarPath) { + String jarName = jarPath.getFileName().toString(); + int dotIndex = jarName.lastIndexOf("."); + return dotIndex == -1 ? jarName : jarName.substring(0, dotIndex); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java index a18897fe5..698db602f 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java @@ -1,5 +1,7 @@ package io.prometheus.metrics.exporter.opentelemetry; +import static java.nio.file.Files.createTempDirectory; + import java.io.File; import java.io.InputStream; import java.lang.reflect.Field; @@ -11,91 +13,98 @@ import java.nio.file.StandardCopyOption; import java.util.Map; -import static java.nio.file.Files.createTempDirectory; - public class ResourceAttributesFromOtelAgent { - private static final String[] OTEL_JARS = new String[]{"opentelemetry-api-1.29.0.jar", "opentelemetry-context-1.29.0.jar"}; + private static final String[] OTEL_JARS = + new String[] {"opentelemetry-api-1.29.0.jar", "opentelemetry-context-1.29.0.jar"}; - /** - * This grabs resource attributes like {@code service.name} and {@code service.instance.id} from - * the OTel Java agent (if present) and adds them to {@code result}. - *

    - * The way this works is as follows: If the OTel Java agent is attached, it modifies the - * {@code GlobalOpenTelemetry.get()} method to return an agent-specific object. - * From that agent-specific object we can get the resource attributes via reflection. - *

    - * So we load the {@code GlobalOpenTelemetry} class (in a separate class loader from the JAR files - * that are bundled with this module), call {@code .get()}, and inspect the returned object. - *

    - * After that we discard the class loader so that all OTel specific classes are unloaded. - * No runtime dependency on any OTel version remains. - */ - public static void addIfAbsent(Map result, String instrumentationScopeName) { - try { - Path tmpDir = createTempDirectory(instrumentationScopeName + "-"); - try { - URL[] otelJars = copyOtelJarsToTempDir(tmpDir, instrumentationScopeName); + /** + * This grabs resource attributes like {@code service.name} and {@code service.instance.id} from + * the OTel Java agent (if present) and adds them to {@code result}. + * + *

    The way this works is as follows: If the OTel Java agent is attached, it modifies the {@code + * GlobalOpenTelemetry.get()} method to return an agent-specific object. From that agent-specific + * object we can get the resource attributes via reflection. + * + *

    So we load the {@code GlobalOpenTelemetry} class (in a separate class loader from the JAR + * files that are bundled with this module), call {@code .get()}, and inspect the returned object. + * + *

    After that we discard the class loader so that all OTel specific classes are unloaded. No + * runtime dependency on any OTel version remains. + */ + public static void addIfAbsent(Map result, String instrumentationScopeName) { + try { + Path tmpDir = createTempDirectory(instrumentationScopeName + "-"); + try { + URL[] otelJars = copyOtelJarsToTempDir(tmpDir, instrumentationScopeName); - try (URLClassLoader classLoader = new URLClassLoader(otelJars)) { - Class globalOpenTelemetryClass = classLoader.loadClass("io.opentelemetry.api.GlobalOpenTelemetry"); - Object globalOpenTelemetry = globalOpenTelemetryClass.getMethod("get").invoke(null); - if (globalOpenTelemetry.getClass().getSimpleName().contains("ApplicationOpenTelemetry")) { - // GlobalOpenTelemetry is injected by the OTel Java aqent - Object applicationMeterProvider = callMethod("getMeterProvider", globalOpenTelemetry); - Object agentMeterProvider = getField("agentMeterProvider", applicationMeterProvider); - Object sdkMeterProvider = getField("delegate", agentMeterProvider); - Object sharedState = getField("sharedState", sdkMeterProvider); - Object resource = callMethod("getResource", sharedState); - Object attributes = callMethod("getAttributes", resource); - Map attributeMap = (Map) callMethod("asMap", attributes); + try (URLClassLoader classLoader = new URLClassLoader(otelJars)) { + Class globalOpenTelemetryClass = + classLoader.loadClass("io.opentelemetry.api.GlobalOpenTelemetry"); + Object globalOpenTelemetry = globalOpenTelemetryClass.getMethod("get").invoke(null); + if (globalOpenTelemetry.getClass().getSimpleName().contains("ApplicationOpenTelemetry")) { + // GlobalOpenTelemetry is injected by the OTel Java aqent + Object applicationMeterProvider = callMethod("getMeterProvider", globalOpenTelemetry); + Object agentMeterProvider = getField("agentMeterProvider", applicationMeterProvider); + Object sdkMeterProvider = getField("delegate", agentMeterProvider); + Object sharedState = getField("sharedState", sdkMeterProvider); + Object resource = callMethod("getResource", sharedState); + Object attributes = callMethod("getAttributes", resource); + Map attributeMap = (Map) callMethod("asMap", attributes); - for (Map.Entry entry : attributeMap.entrySet()) { - if (entry.getKey() != null && entry.getValue() != null) { - result.putIfAbsent(entry.getKey().toString(), entry.getValue().toString()); - } - } - } - } - } finally { - deleteTempDir(tmpDir.toFile()); + for (Map.Entry entry : attributeMap.entrySet()) { + if (entry.getKey() != null && entry.getValue() != null) { + result.putIfAbsent(entry.getKey().toString(), entry.getValue().toString()); + } } - } catch (Exception ignored) { + } } + } finally { + deleteTempDir(tmpDir.toFile()); + } + } catch (Exception ignored) { } + } - private static Object getField(String name, Object obj) throws Exception { - Field field = obj.getClass().getDeclaredField(name); - field.setAccessible(true); - return field.get(obj); - } + private static Object getField(String name, Object obj) throws Exception { + Field field = obj.getClass().getDeclaredField(name); + field.setAccessible(true); + return field.get(obj); + } - private static Object callMethod(String name, Object obj) throws Exception { - Method method = obj.getClass().getMethod(name); - method.setAccessible(true); - return method.invoke(obj); - } + private static Object callMethod(String name, Object obj) throws Exception { + Method method = obj.getClass().getMethod(name); + method.setAccessible(true); + return method.invoke(obj); + } - private static URL[] copyOtelJarsToTempDir(Path tmpDir, String instrumentationScopeName) throws Exception { - URL[] result = new URL[OTEL_JARS.length]; - for (int i = 0; i < OTEL_JARS.length; i++) { - InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("lib/" + OTEL_JARS[i]); - if (inputStream == null) { - throw new IllegalStateException("Error initializing " + instrumentationScopeName + ": lib/" + OTEL_JARS[i] + " not found in classpath."); - } - File outputFile = tmpDir.resolve(OTEL_JARS[i]).toFile(); - Files.copy(inputStream, outputFile.toPath(), StandardCopyOption.REPLACE_EXISTING); - inputStream.close(); - result[i] = outputFile.toURI().toURL(); - } - return result; + private static URL[] copyOtelJarsToTempDir(Path tmpDir, String instrumentationScopeName) + throws Exception { + URL[] result = new URL[OTEL_JARS.length]; + for (int i = 0; i < OTEL_JARS.length; i++) { + InputStream inputStream = + Thread.currentThread().getContextClassLoader().getResourceAsStream("lib/" + OTEL_JARS[i]); + if (inputStream == null) { + throw new IllegalStateException( + "Error initializing " + + instrumentationScopeName + + ": lib/" + + OTEL_JARS[i] + + " not found in classpath."); + } + File outputFile = tmpDir.resolve(OTEL_JARS[i]).toFile(); + Files.copy(inputStream, outputFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + inputStream.close(); + result[i] = outputFile.toURI().toURL(); } + return result; + } - private static void deleteTempDir(File tmpDir) { - // We don't have subdirectories, so this simple implementation should work. - for (File file : tmpDir.listFiles()) { - file.delete(); - } - tmpDir.delete(); + private static void deleteTempDir(File tmpDir) { + // We don't have subdirectories, so this simple implementation should work. + for (File file : tmpDir.listFiles()) { + file.delete(); } + tmpDir.delete(); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java index 8f4a627ff..12b7c7acd 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java @@ -3,20 +3,24 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; - import java.util.List; class DoublePointDataImpl extends PointDataImpl implements DoublePointData { - private final double value; + private final double value; - public DoublePointDataImpl(double value, long startEpochNanos, long epochNanos, Attributes attributes, List exemplars) { - super(startEpochNanos, epochNanos, attributes, exemplars); - this.value = value; - } + public DoublePointDataImpl( + double value, + long startEpochNanos, + long epochNanos, + Attributes attributes, + List exemplars) { + super(startEpochNanos, epochNanos, attributes, exemplars); + this.value = value; + } - @Override - public double getValue() { - return value; - } + @Override + public double getValue() { + return value; + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java index 5acacc457..798e9b5df 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java @@ -1,46 +1,45 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramBuckets; - import java.util.ArrayList; import java.util.List; class ExponentialHistogramBucketsImpl implements ExponentialHistogramBuckets { - private final int scale; - private final int offset; - private final List bucketCounts = new ArrayList<>(); - - ExponentialHistogramBucketsImpl(int scale, int offset) { - this.scale = scale; - this.offset = offset; - } - - void addCount(long count) { - bucketCounts.add(count); - } - - @Override - public int getScale() { - return scale; - } - - @Override - public int getOffset() { - return offset; - } - - @Override - public List getBucketCounts() { - return bucketCounts; - } - - @Override - public long getTotalCount() { - long result = 0; - for (Long count : bucketCounts) { - result += count; - } - return result; + private final int scale; + private final int offset; + private final List bucketCounts = new ArrayList<>(); + + ExponentialHistogramBucketsImpl(int scale, int offset) { + this.scale = scale; + this.offset = offset; + } + + void addCount(long count) { + bucketCounts.add(count); + } + + @Override + public int getScale() { + return scale; + } + + @Override + public int getOffset() { + return offset; + } + + @Override + public List getBucketCounts() { + return bucketCounts; + } + + @Override + public long getTotalCount() { + long result = 0; + for (Long count : bucketCounts) { + result += count; } + return result; + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java index 799e44712..3c5a893e2 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java @@ -4,82 +4,92 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramBuckets; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramPointData; - import java.util.List; -public class ExponentialHistogramPointDataImpl extends PointDataImpl implements ExponentialHistogramPointData { - - private final int scale; - private final double sum; - private final long count; - private final long zeroCount; - private final double min; - private final double max; - - private final ExponentialHistogramBuckets positiveBuckets; - private final ExponentialHistogramBuckets negativeBuckets; - - ExponentialHistogramPointDataImpl(int scale, double sum, long count, long zeroCount, double min, double max, - ExponentialHistogramBuckets positiveBuckets, ExponentialHistogramBuckets negativeBuckets, - long startEpochNanos, long epochNanos, Attributes attributes, List exemplars) { - super(startEpochNanos, epochNanos, attributes, exemplars); - this.scale = scale; - this.sum = sum; - this.count = count; - this.zeroCount = zeroCount; - this.min = min; - this.max = max; - this.positiveBuckets = positiveBuckets; - this.negativeBuckets = negativeBuckets; - } - - @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 !Double.isNaN(min); - } - - @Override - public double getMin() { - return min; - } - - @Override - public boolean hasMax() { - return !Double.isNaN(max); - } - - @Override - public double getMax() { - return max; - } - - @Override - public ExponentialHistogramBuckets getPositiveBuckets() { - return positiveBuckets; - } - - @Override - public ExponentialHistogramBuckets getNegativeBuckets() { - return negativeBuckets; - } +public class ExponentialHistogramPointDataImpl extends PointDataImpl + implements ExponentialHistogramPointData { + + private final int scale; + private final double sum; + private final long count; + private final long zeroCount; + private final double min; + private final double max; + + private final ExponentialHistogramBuckets positiveBuckets; + private final ExponentialHistogramBuckets negativeBuckets; + + ExponentialHistogramPointDataImpl( + int scale, + double sum, + long count, + long zeroCount, + double min, + double max, + ExponentialHistogramBuckets positiveBuckets, + ExponentialHistogramBuckets negativeBuckets, + long startEpochNanos, + long epochNanos, + Attributes attributes, + List exemplars) { + super(startEpochNanos, epochNanos, attributes, exemplars); + this.scale = scale; + this.sum = sum; + this.count = count; + this.zeroCount = zeroCount; + this.min = min; + this.max = max; + this.positiveBuckets = positiveBuckets; + this.negativeBuckets = negativeBuckets; + } + + @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 !Double.isNaN(min); + } + + @Override + public double getMin() { + return min; + } + + @Override + public boolean hasMax() { + return !Double.isNaN(max); + } + + @Override + public double getMax() { + return max; + } + + @Override + public ExponentialHistogramBuckets getPositiveBuckets() { + return positiveBuckets; + } + + @Override + public ExponentialHistogramBuckets getNegativeBuckets() { + return negativeBuckets; + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java index af9c1519d..19b141b04 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java @@ -3,66 +3,74 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.HistogramPointData; - import java.util.List; public class HistogramPointDataImpl extends PointDataImpl implements HistogramPointData { - private final double sum; - private final long count; - private final double min; - private final double max; - private final List boundaries; - private final List counts; + private final double sum; + private final long count; + private final double min; + private final double max; + private final List boundaries; + private final List counts; - public HistogramPointDataImpl(double sum, long count, double min, double max, List boundaries, List counts, - long startEpochNanos, long epochNanos, Attributes attributes, List exemplars) { - super(startEpochNanos, epochNanos, attributes, exemplars); - this.sum = sum; - this.count = count; - this.min = min; - this.max = max; - this.boundaries = boundaries; - this.counts = counts; - } + public HistogramPointDataImpl( + double sum, + long count, + double min, + double max, + List boundaries, + List counts, + long startEpochNanos, + long epochNanos, + Attributes attributes, + List exemplars) { + super(startEpochNanos, epochNanos, attributes, exemplars); + this.sum = sum; + this.count = count; + this.min = min; + this.max = max; + this.boundaries = boundaries; + this.counts = counts; + } - @Override - public double getSum() { - return sum; - } + @Override + public double getSum() { + return sum; + } - @Override - public long getCount() { - return count; - } + @Override + public long getCount() { + return count; + } - @Override - public boolean hasMin() { - return !Double.isNaN(min); - } + @Override + public boolean hasMin() { + return !Double.isNaN(min); + } - @Override - public double getMin() { - return min; - } + @Override + public double getMin() { + return min; + } - @Override - public boolean hasMax() { - return !Double.isNaN(max); - } + @Override + public boolean hasMax() { + return !Double.isNaN(max); + } - @Override - public double getMax() { - return max; - } + @Override + public double getMax() { + return max; + } - @Override - public List getBoundaries() { - return boundaries; - } + @Override + public List getBoundaries() { + return boundaries; + } - @Override - public List getCounts() { - return counts; - } + @Override + public List getCounts() { + return counts; + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java index 6e723e20a..95cb59546 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java @@ -13,49 +13,84 @@ public class MetricDataFactory { - private final Resource resource; - private final InstrumentationScopeInfo instrumentationScopeInfo; - private final long currentTimeMillis; - - public MetricDataFactory(Resource resource, InstrumentationScopeInfo instrumentationScopeInfo, long currentTimeMillis) { - this.resource = resource; - this.instrumentationScopeInfo = instrumentationScopeInfo; - this.currentTimeMillis = currentTimeMillis; - } + private final Resource resource; + private final InstrumentationScopeInfo instrumentationScopeInfo; + private final long currentTimeMillis; - public MetricData create(CounterSnapshot snapshot) { - return new PrometheusMetricData<>(snapshot.getMetadata(), new PrometheusCounter(snapshot, currentTimeMillis), instrumentationScopeInfo, resource); - } + public MetricDataFactory( + Resource resource, + InstrumentationScopeInfo instrumentationScopeInfo, + long currentTimeMillis) { + this.resource = resource; + this.instrumentationScopeInfo = instrumentationScopeInfo; + this.currentTimeMillis = currentTimeMillis; + } - public MetricData create(GaugeSnapshot snapshot) { - return new PrometheusMetricData<>(snapshot.getMetadata(), new PrometheusGauge(snapshot, currentTimeMillis), instrumentationScopeInfo, resource); - } + public MetricData create(CounterSnapshot snapshot) { + return new PrometheusMetricData<>( + snapshot.getMetadata(), + new PrometheusCounter(snapshot, currentTimeMillis), + instrumentationScopeInfo, + resource); + } - public MetricData create(HistogramSnapshot snapshot) { - if (!snapshot.getDataPoints().isEmpty()) { - HistogramSnapshot.HistogramDataPointSnapshot firstDataPoint = snapshot.getDataPoints().get(0); - if (firstDataPoint.hasNativeHistogramData()) { - return new PrometheusMetricData<>(snapshot.getMetadata(), new PrometheusNativeHistogram(snapshot, currentTimeMillis), instrumentationScopeInfo, resource); - } else if (firstDataPoint.hasClassicHistogramData()) { - return new PrometheusMetricData<>(snapshot.getMetadata(), new PrometheusClassicHistogram(snapshot, currentTimeMillis), instrumentationScopeInfo, resource); - } - } - return null; - } + public MetricData create(GaugeSnapshot snapshot) { + return new PrometheusMetricData<>( + snapshot.getMetadata(), + new PrometheusGauge(snapshot, currentTimeMillis), + instrumentationScopeInfo, + resource); + } - public MetricData create(SummarySnapshot snapshot) { - return new PrometheusMetricData<>(snapshot.getMetadata(), new PrometheusSummary(snapshot, currentTimeMillis), instrumentationScopeInfo, resource); + public MetricData create(HistogramSnapshot snapshot) { + if (!snapshot.getDataPoints().isEmpty()) { + HistogramSnapshot.HistogramDataPointSnapshot firstDataPoint = snapshot.getDataPoints().get(0); + if (firstDataPoint.hasNativeHistogramData()) { + return new PrometheusMetricData<>( + snapshot.getMetadata(), + new PrometheusNativeHistogram(snapshot, currentTimeMillis), + instrumentationScopeInfo, + resource); + } else if (firstDataPoint.hasClassicHistogramData()) { + return new PrometheusMetricData<>( + snapshot.getMetadata(), + new PrometheusClassicHistogram(snapshot, currentTimeMillis), + instrumentationScopeInfo, + resource); + } } + return null; + } - public MetricData create(InfoSnapshot snapshot) { - return new PrometheusMetricData<>(snapshot.getMetadata(), new PrometheusInfo(snapshot, currentTimeMillis), instrumentationScopeInfo, resource); - } + public MetricData create(SummarySnapshot snapshot) { + return new PrometheusMetricData<>( + snapshot.getMetadata(), + new PrometheusSummary(snapshot, currentTimeMillis), + instrumentationScopeInfo, + resource); + } - public MetricData create(StateSetSnapshot snapshot) { - return new PrometheusMetricData<>(snapshot.getMetadata(), new PrometheusStateSet(snapshot, currentTimeMillis), instrumentationScopeInfo, resource); - } + public MetricData create(InfoSnapshot snapshot) { + return new PrometheusMetricData<>( + snapshot.getMetadata(), + new PrometheusInfo(snapshot, currentTimeMillis), + instrumentationScopeInfo, + resource); + } - public MetricData create(UnknownSnapshot snapshot) { - return new PrometheusMetricData<>(snapshot.getMetadata(), new PrometheusUnknown(snapshot, currentTimeMillis), instrumentationScopeInfo, resource); - } + public MetricData create(StateSetSnapshot snapshot) { + return new PrometheusMetricData<>( + snapshot.getMetadata(), + new PrometheusStateSet(snapshot, currentTimeMillis), + instrumentationScopeInfo, + resource); + } + + public MetricData create(UnknownSnapshot snapshot) { + return new PrometheusMetricData<>( + snapshot.getMetadata(), + new PrometheusUnknown(snapshot, currentTimeMillis), + instrumentationScopeInfo, + resource); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java index b3795e5dd..d1ba082e5 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java @@ -3,40 +3,43 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.PointData; - import java.util.List; abstract class PointDataImpl implements PointData { - private final long startEpochNanos; - private final long epochNanos; - private final Attributes attributes; - private final List exemplars; - - PointDataImpl(long startEpochNanos, long epochNanos, Attributes attributes, List exemplars) { - this.startEpochNanos = startEpochNanos; - this.epochNanos = epochNanos; - this.attributes = attributes; - this.exemplars = exemplars; - } - - @Override - public long getStartEpochNanos() { - return startEpochNanos; - } - - @Override - public long getEpochNanos() { - return epochNanos; - } - - @Override - public Attributes getAttributes() { - return attributes; - } - - @Override - public List getExemplars() { - return exemplars; - } + private final long startEpochNanos; + private final long epochNanos; + private final Attributes attributes; + private final List exemplars; + + PointDataImpl( + long startEpochNanos, + long epochNanos, + Attributes attributes, + List exemplars) { + this.startEpochNanos = startEpochNanos; + this.epochNanos = epochNanos; + this.attributes = attributes; + this.exemplars = exemplars; + } + + @Override + public long getStartEpochNanos() { + return startEpochNanos; + } + + @Override + public long getEpochNanos() { + return epochNanos; + } + + @Override + public Attributes getAttributes() { + return attributes; + } + + @Override + public List getExemplars() { + return exemplars; + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java index 0040c7d17..3434dc467 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java @@ -6,75 +6,78 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.HistogramData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.HistogramPointData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; - import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -class PrometheusClassicHistogram extends PrometheusData implements HistogramData { +class PrometheusClassicHistogram extends PrometheusData + implements HistogramData { - private final List points; + private final List points; - PrometheusClassicHistogram(HistogramSnapshot snapshot, long currentTimeMillis) { - super(MetricDataType.HISTOGRAM); - this.points = snapshot.getDataPoints().stream() - .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } + PrometheusClassicHistogram(HistogramSnapshot snapshot, long currentTimeMillis) { + super(MetricDataType.HISTOGRAM); + this.points = + snapshot.getDataPoints().stream() + .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } - @Override - public AggregationTemporality getAggregationTemporality() { - return AggregationTemporality.CUMULATIVE; - } + @Override + public AggregationTemporality getAggregationTemporality() { + return AggregationTemporality.CUMULATIVE; + } - @Override - public Collection getPoints() { - return points; - } + @Override + public Collection getPoints() { + return points; + } - private HistogramPointData toOtelDataPoint(HistogramSnapshot.HistogramDataPointSnapshot dataPoint, long currentTimeMillis) { - if (!dataPoint.hasClassicHistogramData()) { - return null; - } else { - return new HistogramPointDataImpl( - dataPoint.hasSum() ? dataPoint.getSum() : Double.NaN, - dataPoint.hasCount() ? dataPoint.getCount() : calculateCount(dataPoint.getClassicBuckets()), - Double.NaN, - Double.NaN, - makeBoundaries(dataPoint.getClassicBuckets()), - makeCounts(dataPoint.getClassicBuckets()), - getStartEpochNanos(dataPoint), - getEpochNanos(dataPoint, currentTimeMillis), - labelsToAttributes(dataPoint.getLabels()), - convertExemplars(dataPoint.getExemplars()) - ); - } + private HistogramPointData toOtelDataPoint( + HistogramSnapshot.HistogramDataPointSnapshot dataPoint, long currentTimeMillis) { + if (!dataPoint.hasClassicHistogramData()) { + return null; + } else { + return new HistogramPointDataImpl( + dataPoint.hasSum() ? dataPoint.getSum() : Double.NaN, + dataPoint.hasCount() + ? dataPoint.getCount() + : calculateCount(dataPoint.getClassicBuckets()), + Double.NaN, + Double.NaN, + makeBoundaries(dataPoint.getClassicBuckets()), + makeCounts(dataPoint.getClassicBuckets()), + getStartEpochNanos(dataPoint), + getEpochNanos(dataPoint, currentTimeMillis), + labelsToAttributes(dataPoint.getLabels()), + convertExemplars(dataPoint.getExemplars())); } + } - private long calculateCount(ClassicHistogramBuckets buckets) { - int result = 0; - for (int i=0; i makeBoundaries(ClassicHistogramBuckets buckets) { - List result = new ArrayList<>(buckets.size()); - for (int i=0; i makeBoundaries(ClassicHistogramBuckets buckets) { + List result = new ArrayList<>(buckets.size()); + for (int i = 0; i < buckets.size(); i++) { + result.add(buckets.getUpperBound(i)); } + return result; + } - private List makeCounts(ClassicHistogramBuckets buckets) { - List result = new ArrayList<>(buckets.size()); - for (int i=0; i makeCounts(ClassicHistogramBuckets buckets) { + List result = new ArrayList<>(buckets.size()); + for (int i = 0; i < buckets.size(); i++) { + result.add(buckets.getCount(i)); } + return result; + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java index 4ad04975f..f730fb97d 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java @@ -1,48 +1,49 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData; -import io.prometheus.metrics.model.snapshots.CounterSnapshot; - import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -class PrometheusCounter extends PrometheusData implements SumData { - - private final List points; - - public PrometheusCounter(CounterSnapshot snapshot, long currentTimeMillis) { - super(MetricDataType.DOUBLE_SUM); - this.points = snapshot.getDataPoints().stream() - .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) - .collect(Collectors.toList()); - } - - @Override - public boolean isMonotonic() { - return true; - } - - @Override - public AggregationTemporality getAggregationTemporality() { - return AggregationTemporality.CUMULATIVE; - } - - @Override - public Collection getPoints() { - return points; - } - - private DoublePointData toOtelDataPoint(CounterSnapshot.CounterDataPointSnapshot dataPoint, long currentTimeMillis) { - return new DoublePointDataImpl( - dataPoint.getValue(), - getStartEpochNanos(dataPoint), - getEpochNanos(dataPoint, currentTimeMillis), - labelsToAttributes(dataPoint.getLabels()), - convertExemplar(dataPoint.getExemplar()) - ); - } +class PrometheusCounter extends PrometheusData + implements SumData { + + private final List points; + + public PrometheusCounter(CounterSnapshot snapshot, long currentTimeMillis) { + super(MetricDataType.DOUBLE_SUM); + this.points = + snapshot.getDataPoints().stream() + .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) + .collect(Collectors.toList()); + } + + @Override + public boolean isMonotonic() { + return true; + } + + @Override + public AggregationTemporality getAggregationTemporality() { + return AggregationTemporality.CUMULATIVE; + } + + @Override + public Collection getPoints() { + return points; + } + + private DoublePointData toOtelDataPoint( + CounterSnapshot.CounterDataPointSnapshot dataPoint, long currentTimeMillis) { + return new DoublePointDataImpl( + dataPoint.getValue(), + getStartEpochNanos(dataPoint), + getEpochNanos(dataPoint, currentTimeMillis), + labelsToAttributes(dataPoint.getLabels()), + convertExemplar(dataPoint.getExemplar())); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java index 7d67a22fa..7e09a483e 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java @@ -11,7 +11,6 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.PointData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.internal.data.ImmutableDoubleExemplarData; - import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; @@ -20,78 +19,81 @@ abstract class PrometheusData implements Data { - private final MetricDataType type; + private final MetricDataType type; - public PrometheusData(MetricDataType type) { - this.type = type; - } + public PrometheusData(MetricDataType type) { + this.type = type; + } - public MetricDataType getType() { - return type; - } - - protected Attributes labelsToAttributes(Labels labels) { - if (labels.isEmpty()) { - return Attributes.empty(); - } else { - AttributesBuilder builder = Attributes.builder(); - for (int i=0; i convertExemplar(Exemplar exemplar) { - if (exemplar == null) { - return Collections.emptyList(); - } - return convertExemplars(Exemplars.of(exemplar)); + protected Attributes labelsToAttributes(Labels labels) { + if (labels.isEmpty()) { + return Attributes.empty(); + } else { + AttributesBuilder builder = Attributes.builder(); + for (int i = 0; i < labels.size(); i++) { + builder.put(labels.getName(i), labels.getValue(i)); + } + return builder.build(); } + } - protected List convertExemplars(Exemplars exemplars) { - return StreamSupport.stream(exemplars.spliterator(), false) - .map(this::toDoubleExemplarData) - .collect(Collectors.toList()); + protected List convertExemplar(Exemplar exemplar) { + if (exemplar == null) { + return Collections.emptyList(); } + return convertExemplars(Exemplars.of(exemplar)); + } - protected DoubleExemplarData toDoubleExemplarData(Exemplar exemplar) { - if (exemplar == null) { - return null; - } - - AttributesBuilder filteredAttributesBuilder = Attributes.builder(); - String traceId = null; - String spanId = null; - for (Label label : exemplar.getLabels()) { - if (label.getName().equals(Exemplar.TRACE_ID)) { - traceId = label.getValue(); - } - else if (label.getName().equals(Exemplar.SPAN_ID)) { - spanId = label.getValue(); - } else { - filteredAttributesBuilder.put(label.getName(), label.getValue()); - } - } - Attributes filteredAttributes = filteredAttributesBuilder.build(); + protected List convertExemplars(Exemplars exemplars) { + return StreamSupport.stream(exemplars.spliterator(), false) + .map(this::toDoubleExemplarData) + .collect(Collectors.toList()); + } - SpanContext spanContext = (traceId != null && spanId != null) - ? SpanContext.create(traceId, spanId, TraceFlags.getSampled(), TraceState.getDefault()) - : SpanContext.getInvalid(); - - return ImmutableDoubleExemplarData.create( - filteredAttributes, - TimeUnit.MILLISECONDS.toNanos(exemplar.getTimestampMillis()), - spanContext, - exemplar.getValue()); + protected DoubleExemplarData toDoubleExemplarData(Exemplar exemplar) { + if (exemplar == null) { + return null; } - protected long getStartEpochNanos(DataPointSnapshot dataPoint) { - return dataPoint.hasCreatedTimestamp() ? TimeUnit.MILLISECONDS.toNanos(dataPoint.getCreatedTimestampMillis()) : 0L; + AttributesBuilder filteredAttributesBuilder = Attributes.builder(); + String traceId = null; + String spanId = null; + for (Label label : exemplar.getLabels()) { + if (label.getName().equals(Exemplar.TRACE_ID)) { + traceId = label.getValue(); + } else if (label.getName().equals(Exemplar.SPAN_ID)) { + spanId = label.getValue(); + } else { + filteredAttributesBuilder.put(label.getName(), label.getValue()); + } } + Attributes filteredAttributes = filteredAttributesBuilder.build(); - protected long getEpochNanos(DataPointSnapshot dataPoint, long currentTimeMillis) { - return dataPoint.hasScrapeTimestamp() ? TimeUnit.MILLISECONDS.toNanos(dataPoint.getScrapeTimestampMillis()) : TimeUnit.MILLISECONDS.toNanos(currentTimeMillis); - } + SpanContext spanContext = + (traceId != null && spanId != null) + ? SpanContext.create(traceId, spanId, TraceFlags.getSampled(), TraceState.getDefault()) + : SpanContext.getInvalid(); + + return ImmutableDoubleExemplarData.create( + filteredAttributes, + TimeUnit.MILLISECONDS.toNanos(exemplar.getTimestampMillis()), + spanContext, + exemplar.getValue()); + } + + protected long getStartEpochNanos(DataPointSnapshot dataPoint) { + return dataPoint.hasCreatedTimestamp() + ? TimeUnit.MILLISECONDS.toNanos(dataPoint.getCreatedTimestampMillis()) + : 0L; + } + protected long getEpochNanos(DataPointSnapshot dataPoint, long currentTimeMillis) { + return dataPoint.hasScrapeTimestamp() + ? TimeUnit.MILLISECONDS.toNanos(dataPoint.getScrapeTimestampMillis()) + : TimeUnit.MILLISECONDS.toNanos(currentTimeMillis); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java index 73e176bb6..872d569e6 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java @@ -4,34 +4,35 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.GaugeData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; - import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -class PrometheusGauge extends PrometheusData implements GaugeData { +class PrometheusGauge extends PrometheusData + implements GaugeData { - private final List points; + private final List points; - public PrometheusGauge(GaugeSnapshot snapshot, long currentTimeMillis) { - super(MetricDataType.DOUBLE_GAUGE); - this.points = snapshot.getDataPoints().stream() - .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) - .collect(Collectors.toList()); - } + public PrometheusGauge(GaugeSnapshot snapshot, long currentTimeMillis) { + super(MetricDataType.DOUBLE_GAUGE); + this.points = + snapshot.getDataPoints().stream() + .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) + .collect(Collectors.toList()); + } - @Override - public Collection getPoints() { - return points; - } + @Override + public Collection getPoints() { + return points; + } - private DoublePointData toOtelDataPoint(GaugeSnapshot.GaugeDataPointSnapshot dataPoint, long currentTimeMillis) { - return new DoublePointDataImpl( - dataPoint.getValue(), - getStartEpochNanos(dataPoint), - getEpochNanos(dataPoint, currentTimeMillis), - labelsToAttributes(dataPoint.getLabels()), - convertExemplar(dataPoint.getExemplar()) - ); - } + private DoublePointData toOtelDataPoint( + GaugeSnapshot.GaugeDataPointSnapshot dataPoint, long currentTimeMillis) { + return new DoublePointDataImpl( + dataPoint.getValue(), + getStartEpochNanos(dataPoint), + getEpochNanos(dataPoint, currentTimeMillis), + labelsToAttributes(dataPoint.getLabels()), + convertExemplar(dataPoint.getExemplar())); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java index 6159e77fb..eb5ae48f6 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java @@ -5,45 +5,46 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData; - import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -public class PrometheusInfo extends PrometheusData implements SumData { - - private final List points; - - public PrometheusInfo(InfoSnapshot snapshot, long currentTimeMillis) { - super(MetricDataType.DOUBLE_SUM); - this.points = snapshot.getDataPoints().stream() - .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) - .collect(Collectors.toList()); - } - - @Override - public boolean isMonotonic() { - return false; - } - - @Override - public AggregationTemporality getAggregationTemporality() { - return AggregationTemporality.CUMULATIVE; - } - - @Override - public Collection getPoints() { - return points; - } - - private DoublePointData toOtelDataPoint(InfoSnapshot.InfoDataPointSnapshot dataPoint, long currentTimeMillis) { - return new DoublePointDataImpl( - 1.0, - getStartEpochNanos(dataPoint), - getEpochNanos(dataPoint, currentTimeMillis), - labelsToAttributes(dataPoint.getLabels()), - Collections.emptyList() - ); - } +public class PrometheusInfo extends PrometheusData + implements SumData { + + private final List points; + + public PrometheusInfo(InfoSnapshot snapshot, long currentTimeMillis) { + super(MetricDataType.DOUBLE_SUM); + this.points = + snapshot.getDataPoints().stream() + .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) + .collect(Collectors.toList()); + } + + @Override + public boolean isMonotonic() { + return false; + } + + @Override + public AggregationTemporality getAggregationTemporality() { + return AggregationTemporality.CUMULATIVE; + } + + @Override + public Collection getPoints() { + return points; + } + + private DoublePointData toOtelDataPoint( + InfoSnapshot.InfoDataPointSnapshot dataPoint, long currentTimeMillis) { + return new DoublePointDataImpl( + 1.0, + getStartEpochNanos(dataPoint), + getEpochNanos(dataPoint, currentTimeMillis), + labelsToAttributes(dataPoint.getLabels()), + Collections.emptyList()); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java index 348ff535f..5d86000b8 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java @@ -11,124 +11,154 @@ class PrometheusMetricData> implements MetricData { - private final Resource resource; - private final InstrumentationScopeInfo instrumentationScopeInfo; - private final String name; - private final String description; - private final String unit; - T data; + private final Resource resource; + private final InstrumentationScopeInfo instrumentationScopeInfo; + private final String name; + private final String description; + private final String unit; + T data; - PrometheusMetricData(MetricMetadata metricMetadata, T data, InstrumentationScopeInfo instrumentationScopeInfo, Resource resource) { - this.instrumentationScopeInfo = instrumentationScopeInfo; - this.resource = resource; - this.name = getNameWithoutUnit(metricMetadata); - this.description = metricMetadata.getHelp(); - this.unit = convertUnit(metricMetadata.getUnit()); - this.data = data; - } + PrometheusMetricData( + MetricMetadata metricMetadata, + T data, + InstrumentationScopeInfo instrumentationScopeInfo, + Resource resource) { + this.instrumentationScopeInfo = instrumentationScopeInfo; + this.resource = resource; + this.name = getNameWithoutUnit(metricMetadata); + this.description = metricMetadata.getHelp(); + this.unit = convertUnit(metricMetadata.getUnit()); + this.data = data; + } - // In OpenTelemetry the unit should not be part of the metric name. - private String getNameWithoutUnit(MetricMetadata metricMetadata) { - String name = metricMetadata.getName(); - if (metricMetadata.getUnit() != null) { - String unit = metricMetadata.getUnit().toString(); - if (name.endsWith(unit)) { - name = name.substring(0, name.length() - unit.length()); - } - while (name.endsWith("_")) { - name = name.substring(0, name.length()-1); - } - } - return name; + // In OpenTelemetry the unit should not be part of the metric name. + private String getNameWithoutUnit(MetricMetadata metricMetadata) { + String name = metricMetadata.getName(); + if (metricMetadata.getUnit() != null) { + String unit = metricMetadata.getUnit().toString(); + if (name.endsWith(unit)) { + name = name.substring(0, name.length() - unit.length()); + } + while (name.endsWith("_")) { + name = name.substring(0, name.length() - 1); + } } + return name; + } - // See https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/6cf4dec6cb42d87d8840e9f67d4acf66d4eb8fda/pkg/translator/prometheus/normalize_name.go#L19 - private String convertUnit(Unit unit) { - if (unit == null) { - return null; - } - switch (unit.toString()) { - // Time - case "days": return "d"; - case "hours": return "h"; - case "minutes": return "min"; - case "seconds": return "s"; - case "milliseconds": return "ms"; - case "microseconds": return "us"; - case "nanoseconds": return "ns"; - // Bytes - case "bytes": return "By"; - case "kibibytes": return "KiBy"; - case "mebibytes": return "MiBy"; - case "gibibytes": return "GiBy"; - case "tibibytes": return "TiBy"; - case "kilobytes": return "KBy"; - case "megabytes": return "MBy"; - case "gigabytes": return "GBy"; - case "terabytes": return "TBy"; - // SI - case "meters": return "m"; - case "volts": return "V"; - case "amperes": return "A"; - case "joules": return "J"; - case "watts": return "W"; - case "grams": return "g"; - // Misc - case "celsius": return "Cel"; - case "hertz": return "Hz"; - case "percent": return "%"; - // default - default: - return unit.toString(); - } + // See + // https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/6cf4dec6cb42d87d8840e9f67d4acf66d4eb8fda/pkg/translator/prometheus/normalize_name.go#L19 + private String convertUnit(Unit unit) { + if (unit == null) { + return null; } - - @Override - public Resource getResource() { - return resource; + switch (unit.toString()) { + // Time + case "days": + return "d"; + case "hours": + return "h"; + case "minutes": + return "min"; + case "seconds": + return "s"; + case "milliseconds": + return "ms"; + case "microseconds": + return "us"; + case "nanoseconds": + return "ns"; + // Bytes + case "bytes": + return "By"; + case "kibibytes": + return "KiBy"; + case "mebibytes": + return "MiBy"; + case "gibibytes": + return "GiBy"; + case "tibibytes": + return "TiBy"; + case "kilobytes": + return "KBy"; + case "megabytes": + return "MBy"; + case "gigabytes": + return "GBy"; + case "terabytes": + return "TBy"; + // SI + case "meters": + return "m"; + case "volts": + return "V"; + case "amperes": + return "A"; + case "joules": + return "J"; + case "watts": + return "W"; + case "grams": + return "g"; + // Misc + case "celsius": + return "Cel"; + case "hertz": + return "Hz"; + case "percent": + return "%"; + // default + default: + return unit.toString(); } + } + + @Override + public Resource getResource() { + return resource; + } - @Override - public InstrumentationScopeInfo getInstrumentationScopeInfo() { + @Override + public InstrumentationScopeInfo getInstrumentationScopeInfo() { return instrumentationScopeInfo; - } + } - @Override - public String getName() { - return name; - } + @Override + public String getName() { + return name; + } - @Override - public String getDescription() { - return description; - } + @Override + public String getDescription() { + return description; + } - @Override - public String getUnit() { - return unit; - } + @Override + public String getUnit() { + return unit; + } - @Override - public MetricDataType getType() { - return data.getType(); - } + @Override + public MetricDataType getType() { + return data.getType(); + } - @Override - public T getData() { - return data; - } + @Override + public T getData() { + return data; + } - @Override - public SumData getDoubleSumData() { - if (data instanceof PrometheusCounter) { - return (PrometheusCounter) data; - } - if (data instanceof PrometheusStateSet) { - return (PrometheusStateSet) data; - } - if (data instanceof PrometheusInfo) { - return (PrometheusInfo) data; - } - return MetricData.super.getDoubleSumData(); + @Override + public SumData getDoubleSumData() { + if (data instanceof PrometheusCounter) { + return (PrometheusCounter) data; + } + if (data instanceof PrometheusStateSet) { + return (PrometheusStateSet) data; + } + if (data instanceof PrometheusInfo) { + return (PrometheusInfo) data; } + return MetricData.super.getDoubleSumData(); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java index 83ce1f14a..eb2a6555e 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java @@ -7,81 +7,82 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramPointData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; - import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -class PrometheusNativeHistogram extends PrometheusData implements ExponentialHistogramData { +class PrometheusNativeHistogram extends PrometheusData + implements ExponentialHistogramData { - private final List points; + private final List points; - PrometheusNativeHistogram(HistogramSnapshot snapshot, long currentTimeMillis) { - super(MetricDataType.EXPONENTIAL_HISTOGRAM); - this.points = snapshot.getDataPoints().stream() - .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } + PrometheusNativeHistogram(HistogramSnapshot snapshot, long currentTimeMillis) { + super(MetricDataType.EXPONENTIAL_HISTOGRAM); + this.points = + snapshot.getDataPoints().stream() + .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } - @Override - public AggregationTemporality getAggregationTemporality() { - return AggregationTemporality.CUMULATIVE; - } + @Override + public AggregationTemporality getAggregationTemporality() { + return AggregationTemporality.CUMULATIVE; + } - @Override - public Collection getPoints() { - return points; - } + @Override + public Collection getPoints() { + return points; + } - private ExponentialHistogramPointData toOtelDataPoint(HistogramSnapshot.HistogramDataPointSnapshot dataPoint, long currentTimeMillis) { - if (!dataPoint.hasNativeHistogramData()) { - return null; - } - return new ExponentialHistogramPointDataImpl( - dataPoint.getNativeSchema(), - dataPoint.hasSum() ? dataPoint.getSum() : Double.NaN, - dataPoint.hasCount() ? dataPoint.getCount() : calculateCount(dataPoint), - dataPoint.getNativeZeroCount(), - Double.NaN, - Double.NaN, - convertBuckets(dataPoint.getNativeSchema(), dataPoint.getNativeBucketsForPositiveValues()), - convertBuckets(dataPoint.getNativeSchema(), dataPoint.getNativeBucketsForNegativeValues()), - getStartEpochNanos(dataPoint), - getEpochNanos(dataPoint, currentTimeMillis), - labelsToAttributes(dataPoint.getLabels()), - convertExemplars(dataPoint.getExemplars()) - ); + private ExponentialHistogramPointData toOtelDataPoint( + HistogramSnapshot.HistogramDataPointSnapshot dataPoint, long currentTimeMillis) { + if (!dataPoint.hasNativeHistogramData()) { + return null; } + return new ExponentialHistogramPointDataImpl( + dataPoint.getNativeSchema(), + dataPoint.hasSum() ? dataPoint.getSum() : Double.NaN, + dataPoint.hasCount() ? dataPoint.getCount() : calculateCount(dataPoint), + dataPoint.getNativeZeroCount(), + Double.NaN, + Double.NaN, + convertBuckets(dataPoint.getNativeSchema(), dataPoint.getNativeBucketsForPositiveValues()), + convertBuckets(dataPoint.getNativeSchema(), dataPoint.getNativeBucketsForNegativeValues()), + getStartEpochNanos(dataPoint), + getEpochNanos(dataPoint, currentTimeMillis), + labelsToAttributes(dataPoint.getLabels()), + convertExemplars(dataPoint.getExemplars())); + } - private ExponentialHistogramBuckets convertBuckets(int scale, NativeHistogramBuckets buckets) { - if (buckets.size() == 0) { - return new ExponentialHistogramBucketsImpl(scale, 0); - } - int offset = buckets.getBucketIndex(0); - ExponentialHistogramBucketsImpl result = new ExponentialHistogramBucketsImpl(scale, offset-1); - int currentBucket = 0; - for (int i=offset; i<=buckets.getBucketIndex(buckets.size()-1); i++) { - if (buckets.getBucketIndex(currentBucket) == i) { - result.addCount(buckets.getCount(currentBucket)); - currentBucket++; - } else { - result.addCount(0); - } - } - return result; + private ExponentialHistogramBuckets convertBuckets(int scale, NativeHistogramBuckets buckets) { + if (buckets.size() == 0) { + return new ExponentialHistogramBucketsImpl(scale, 0); + } + int offset = buckets.getBucketIndex(0); + ExponentialHistogramBucketsImpl result = new ExponentialHistogramBucketsImpl(scale, offset - 1); + int currentBucket = 0; + for (int i = offset; i <= buckets.getBucketIndex(buckets.size() - 1); i++) { + if (buckets.getBucketIndex(currentBucket) == i) { + result.addCount(buckets.getCount(currentBucket)); + currentBucket++; + } else { + result.addCount(0); + } } + return result; + } - private long calculateCount(HistogramSnapshot.HistogramDataPointSnapshot dataPoint) { - long result = 0L; - for (int i=0; i implements SumData { - - private final List points; - public PrometheusStateSet(StateSetSnapshot snapshot, long currentTimeMillis) { - super(MetricDataType.DOUBLE_SUM); - this.points = new ArrayList<>(); - for (StateSetSnapshot.StateSetDataPointSnapshot dataPoint : snapshot.getDataPoints()) { - for (int i=0; i + implements SumData { - @Override - public AggregationTemporality getAggregationTemporality() { - return AggregationTemporality.CUMULATIVE; - } - - @Override - public Collection getPoints() { - return points; - } + private final List points; - private DoublePointData toOtelDataPoint(StateSetSnapshot snapshot, StateSetSnapshot.StateSetDataPointSnapshot dataPoint, int i, long currentTimeMillis) { - return new DoublePointDataImpl( - dataPoint.isTrue(i) ? 1.0 : 0.0, - getStartEpochNanos(dataPoint), - getEpochNanos(dataPoint, currentTimeMillis), - labelsToAttributes(dataPoint.getLabels().merge(Labels.of(snapshot.getMetadata().getName(), dataPoint.getName(i)))), - Collections.emptyList() - ); + public PrometheusStateSet(StateSetSnapshot snapshot, long currentTimeMillis) { + super(MetricDataType.DOUBLE_SUM); + this.points = new ArrayList<>(); + for (StateSetSnapshot.StateSetDataPointSnapshot dataPoint : snapshot.getDataPoints()) { + for (int i = 0; i < dataPoint.size(); i++) { + this.points.add(toOtelDataPoint(snapshot, dataPoint, i, currentTimeMillis)); + } } + } + + @Override + public boolean isMonotonic() { + return false; + } + + @Override + public AggregationTemporality getAggregationTemporality() { + return AggregationTemporality.CUMULATIVE; + } + + @Override + public Collection getPoints() { + return points; + } + + private DoublePointData toOtelDataPoint( + StateSetSnapshot snapshot, + StateSetSnapshot.StateSetDataPointSnapshot dataPoint, + int i, + long currentTimeMillis) { + return new DoublePointDataImpl( + dataPoint.isTrue(i) ? 1.0 : 0.0, + getStartEpochNanos(dataPoint), + getEpochNanos(dataPoint, currentTimeMillis), + labelsToAttributes( + dataPoint + .getLabels() + .merge(Labels.of(snapshot.getMetadata().getName(), dataPoint.getName(i)))), + Collections.emptyList()); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java index 11e780018..709b819af 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java @@ -5,39 +5,40 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SummaryData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SummaryPointData; - import java.util.Collection; import java.util.List; import java.util.stream.Collectors; class PrometheusSummary extends PrometheusData implements SummaryData { - private final List points; + private final List points; - PrometheusSummary(SummarySnapshot snapshot, long currentTimeMillis) { - super(MetricDataType.SUMMARY); - this.points = snapshot.getDataPoints().stream() - .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) - .collect(Collectors.toList()); - } + PrometheusSummary(SummarySnapshot snapshot, long currentTimeMillis) { + super(MetricDataType.SUMMARY); + this.points = + snapshot.getDataPoints().stream() + .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) + .collect(Collectors.toList()); + } - @Override - public Collection getPoints() { - return points; - } + @Override + public Collection getPoints() { + return points; + } - private SummaryPointData toOtelDataPoint(SummarySnapshot.SummaryDataPointSnapshot dataPoint, long currentTimeMillis) { - SummaryPointDataImpl result = new SummaryPointDataImpl( - dataPoint.hasSum() ? dataPoint.getSum() : Double.NaN, - dataPoint.hasCount() ? dataPoint.getCount() : 0, - getStartEpochNanos(dataPoint), - getEpochNanos(dataPoint, currentTimeMillis), - labelsToAttributes(dataPoint.getLabels()), - convertExemplars(dataPoint.getExemplars()) - ); - for (Quantile quantile : dataPoint.getQuantiles()) { - result.addValue(quantile.getQuantile(), quantile.getValue()); - } - return result; + private SummaryPointData toOtelDataPoint( + SummarySnapshot.SummaryDataPointSnapshot dataPoint, long currentTimeMillis) { + SummaryPointDataImpl result = + new SummaryPointDataImpl( + dataPoint.hasSum() ? dataPoint.getSum() : Double.NaN, + dataPoint.hasCount() ? dataPoint.getCount() : 0, + getStartEpochNanos(dataPoint), + getEpochNanos(dataPoint, currentTimeMillis), + labelsToAttributes(dataPoint.getLabels()), + convertExemplars(dataPoint.getExemplars())); + for (Quantile quantile : dataPoint.getQuantiles()) { + result.addValue(quantile.getQuantile(), quantile.getValue()); } + return result; + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java index 9bb2f8e76..39c8f508f 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java @@ -4,34 +4,35 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.GaugeData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; - import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -class PrometheusUnknown extends PrometheusData implements GaugeData { +class PrometheusUnknown extends PrometheusData + implements GaugeData { - private final List points; + private final List points; - public PrometheusUnknown(UnknownSnapshot snapshot, long currentTimeMillis) { - super(MetricDataType.DOUBLE_GAUGE); - this.points = snapshot.getDataPoints().stream() - .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) - .collect(Collectors.toList()); - } + public PrometheusUnknown(UnknownSnapshot snapshot, long currentTimeMillis) { + super(MetricDataType.DOUBLE_GAUGE); + this.points = + snapshot.getDataPoints().stream() + .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis)) + .collect(Collectors.toList()); + } - @Override - public Collection getPoints() { - return points; - } + @Override + public Collection getPoints() { + return points; + } - private DoublePointData toOtelDataPoint(UnknownSnapshot.UnknownDataPointSnapshot dataPoint, long currentTimeMillis) { - return new DoublePointDataImpl( - dataPoint.getValue(), - getStartEpochNanos(dataPoint), - getEpochNanos(dataPoint, currentTimeMillis), - labelsToAttributes(dataPoint.getLabels()), - convertExemplar(dataPoint.getExemplar()) - ); - } + private DoublePointData toOtelDataPoint( + UnknownSnapshot.UnknownDataPointSnapshot dataPoint, long currentTimeMillis) { + return new DoublePointDataImpl( + dataPoint.getValue(), + getStartEpochNanos(dataPoint), + getEpochNanos(dataPoint, currentTimeMillis), + labelsToAttributes(dataPoint.getLabels()), + convertExemplar(dataPoint.getExemplar())); + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java index 83155f05a..eab7da588 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java @@ -4,38 +4,43 @@ import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SummaryPointData; import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ValueAtQuantile; - import java.util.ArrayList; import java.util.List; public class SummaryPointDataImpl extends PointDataImpl implements SummaryPointData { - private final double sum; - private final long count; - private final List values; - - public SummaryPointDataImpl(double sum, long count, long startEpochNanos, long epochNanos, Attributes attributes, List exemplars) { - super(startEpochNanos, epochNanos, attributes, exemplars); - this.sum = sum; - this.count = count; - this.values = new ArrayList<>(); - } - - void addValue(double quantile, double value) { - values.add(new ValueAtQuantileImpl(quantile, value)); - } - - @Override - public long getCount() { - return count; - } - - @Override - public double getSum() { - return sum; - } - - @Override - public List getValues() { - return values; - } + private final double sum; + private final long count; + private final List values; + + public SummaryPointDataImpl( + double sum, + long count, + long startEpochNanos, + long epochNanos, + Attributes attributes, + List exemplars) { + super(startEpochNanos, epochNanos, attributes, exemplars); + this.sum = sum; + this.count = count; + this.values = new ArrayList<>(); + } + + void addValue(double quantile, double value) { + values.add(new ValueAtQuantileImpl(quantile, value)); + } + + @Override + public long getCount() { + return count; + } + + @Override + public double getSum() { + return sum; + } + + @Override + public List getValues() { + return values; + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java index 8117c5a8c..13b39d3aa 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java @@ -4,21 +4,21 @@ public class ValueAtQuantileImpl implements ValueAtQuantile { - private final double quantile; - private final double value; + private final double quantile; + private final double value; - public ValueAtQuantileImpl(double quantile, double value) { - this.quantile = quantile; - this.value = value; - } + public ValueAtQuantileImpl(double quantile, double value) { + this.quantile = quantile; + this.value = value; + } - @Override - public double getQuantile() { - return quantile; - } + @Override + public double getQuantile() { + return quantile; + } - @Override - public double getValue() { - return value; - } + @Override + public double getValue() { + return value; + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java index 2482d6857..5af5193f6 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java @@ -1,5 +1,15 @@ package io.prometheus.metrics.exporter.opentelemetry; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; +import static com.github.tomakehurst.wiremock.client.WireMock.ok; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.awaitility.Awaitility.await; + import com.github.tomakehurst.wiremock.http.Request; import com.github.tomakehurst.wiremock.junit.WireMockRule; import com.github.tomakehurst.wiremock.matching.MatchResult; @@ -23,123 +33,113 @@ import org.junit.Rule; import org.junit.Test; -import static com.github.tomakehurst.wiremock.client.WireMock.containing; -import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; -import static com.github.tomakehurst.wiremock.client.WireMock.ok; -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; -import static com.github.tomakehurst.wiremock.client.WireMock.verify; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.awaitility.Awaitility.await; - public class ExemplarTest { - private static final String ENDPOINT_PATH = "/v1/metrics"; - private static final int TIMEOUT = 3; - private static final String INSTRUMENTATION_SCOPE_NAME = "testInstrumentationScope"; - private static final String SPAN_NAME = "test-span"; - public static final String TEST_COUNTER_NAME = "test_counter"; - private Counter testCounter; - private OpenTelemetryExporter openTelemetryExporter; - @Rule - public WireMockRule wireMockRule = new WireMockRule(4317); - - @Before - public void setUp() { - openTelemetryExporter = OpenTelemetryExporter.builder() - .endpoint("http://localhost:4317") - .protocol("http/protobuf") - .intervalSeconds(1) - .buildAndStart(); - - testCounter = Counter.builder() - .name(TEST_COUNTER_NAME) - .withExemplars() - .register(); - - wireMockRule.stubFor(post(ENDPOINT_PATH) - .withHeader("Content-Type", containing("application/x-protobuf")) - .willReturn(ok() - .withHeader("Content-Type", "application/json") - .withBody("{\"partialSuccess\":{}}"))); + private static final String ENDPOINT_PATH = "/v1/metrics"; + private static final int TIMEOUT = 3; + private static final String INSTRUMENTATION_SCOPE_NAME = "testInstrumentationScope"; + private static final String SPAN_NAME = "test-span"; + public static final String TEST_COUNTER_NAME = "test_counter"; + private Counter testCounter; + private OpenTelemetryExporter openTelemetryExporter; + @Rule public WireMockRule wireMockRule = new WireMockRule(4317); + + @Before + public void setUp() { + openTelemetryExporter = + OpenTelemetryExporter.builder() + .endpoint("http://localhost:4317") + .protocol("http/protobuf") + .intervalSeconds(1) + .buildAndStart(); + + testCounter = Counter.builder().name(TEST_COUNTER_NAME).withExemplars().register(); + + wireMockRule.stubFor( + post(ENDPOINT_PATH) + .withHeader("Content-Type", containing("application/x-protobuf")) + .willReturn( + ok().withHeader("Content-Type", "application/json") + .withBody("{\"partialSuccess\":{}}"))); + } + + @After + public void tearDown() { + PrometheusRegistry.defaultRegistry.unregister(testCounter); + openTelemetryExporter.close(); + } + + @Test + public void sampledExemplarIsForwarded() { + try (SdkTracerProvider sdkTracerProvider = + SdkTracerProvider.builder().setSampler(Sampler.alwaysOn()).build()) { + + Tracer test = sdkTracerProvider.get(INSTRUMENTATION_SCOPE_NAME); + Span span = test.spanBuilder(SPAN_NAME).startSpan(); + try (Scope scope = span.makeCurrent()) { + testCounter.inc(2); + } } - @After - public void tearDown() { - PrometheusRegistry.defaultRegistry.unregister(testCounter); - openTelemetryExporter.close(); + await() + .atMost(TIMEOUT, SECONDS) + .ignoreException(com.github.tomakehurst.wiremock.client.VerificationException.class) + .until( + () -> { + verify( + postRequestedFor(urlEqualTo(ENDPOINT_PATH)) + .withHeader("Content-Type", equalTo("application/x-protobuf")) + .andMatching(getExemplarCountMatcher(1))); + return true; + }); + } + + @Test(expected = ConditionTimeoutException.class) + public void notSampledExemplarIsNotForwarded() { + try (SdkTracerProvider sdkTracerProvider = + SdkTracerProvider.builder().setSampler(Sampler.alwaysOff()).build()) { + + Tracer test = sdkTracerProvider.get(INSTRUMENTATION_SCOPE_NAME); + Span span = test.spanBuilder(SPAN_NAME).startSpan(); + try (Scope scope = span.makeCurrent()) { + testCounter.inc(2); + } } - @Test - public void sampledExemplarIsForwarded() { - try (SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder() - .setSampler(Sampler.alwaysOn()) - .build()) { - - Tracer test = sdkTracerProvider.get(INSTRUMENTATION_SCOPE_NAME); - Span span = test.spanBuilder(SPAN_NAME) - .startSpan(); - try (Scope scope = span.makeCurrent()) { - testCounter.inc(2); + await() + .atMost(TIMEOUT, SECONDS) + .ignoreException(com.github.tomakehurst.wiremock.client.VerificationException.class) + .until( + () -> { + verify( + postRequestedFor(urlEqualTo(ENDPOINT_PATH)) + .withHeader("Content-Type", equalTo("application/x-protobuf")) + .andMatching(getExemplarCountMatcher(1))); + return true; + }); + } + + private static ValueMatcher getExemplarCountMatcher(int expectedCount) { + return request -> { + try { + ExportMetricsServiceRequest exportMetricsServiceRequest = + ExportMetricsServiceRequest.parseFrom(request.getBody()); + for (ResourceMetrics resourceMetrics : + exportMetricsServiceRequest.getResourceMetricsList()) { + for (InstrumentationLibraryMetrics instrumentationLibraryMetrics : + resourceMetrics.getInstrumentationLibraryMetricsList()) { + for (Metric metric : instrumentationLibraryMetrics.getMetricsList()) { + for (NumberDataPoint numberDataPoint : metric.getSum().getDataPointsList()) { + if (numberDataPoint.getExemplarsCount() == expectedCount) { + return MatchResult.exactMatch(); } + } } - - - await().atMost(TIMEOUT, SECONDS) - .ignoreException(com.github.tomakehurst.wiremock.client.VerificationException.class) - .until(() -> { - verify(postRequestedFor(urlEqualTo(ENDPOINT_PATH)) - .withHeader("Content-Type", equalTo("application/x-protobuf")) - .andMatching(getExemplarCountMatcher(1))); - return true; - }); - - } - - @Test(expected = ConditionTimeoutException.class) - public void notSampledExemplarIsNotForwarded() { - try (SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder() - .setSampler(Sampler.alwaysOff()) - .build()) { - - Tracer test = sdkTracerProvider.get(INSTRUMENTATION_SCOPE_NAME); - Span span = test.spanBuilder(SPAN_NAME) - .startSpan(); - try (Scope scope = span.makeCurrent()) { - testCounter.inc(2); - } + } } - - await().atMost(TIMEOUT, SECONDS) - .ignoreException(com.github.tomakehurst.wiremock.client.VerificationException.class) - .until(() -> { - verify(postRequestedFor(urlEqualTo(ENDPOINT_PATH)) - .withHeader("Content-Type", equalTo("application/x-protobuf")) - .andMatching(getExemplarCountMatcher(1))); - return true; - }); - - } - - private static ValueMatcher getExemplarCountMatcher(int expectedCount) { - return request -> { - try { - ExportMetricsServiceRequest exportMetricsServiceRequest = ExportMetricsServiceRequest.parseFrom(request.getBody()); - for (ResourceMetrics resourceMetrics : exportMetricsServiceRequest.getResourceMetricsList()) { - for (InstrumentationLibraryMetrics instrumentationLibraryMetrics : resourceMetrics.getInstrumentationLibraryMetricsList()) { - for (Metric metric : instrumentationLibraryMetrics.getMetricsList()) { - for (NumberDataPoint numberDataPoint : metric.getSum().getDataPointsList()) { - if (numberDataPoint.getExemplarsCount() == expectedCount) { - return MatchResult.exactMatch(); - } - } - } - } - } - } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); - } - return MatchResult.noMatch(); - }; - } + } catch (InvalidProtocolBufferException e) { + throw new RuntimeException(e); + } + return MatchResult.noMatch(); + }; + } } diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java index f3223cb53..60c110149 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultHttpConnectionFactory.java @@ -6,13 +6,15 @@ /** * This can be used for creating {@link Scheme#HTTP} and {@link Scheme#HTTPS} connections. - *

    - * However, if you want to use it with {@link Scheme#HTTPS} you must make sure that the keychain for verifying the server certificate is set up correctly. - * For an example of how to skip certificate verification see {@code PushGatewayTestApp} in {@code integration-tests/it-pushgateway/}. + * + *

    However, if you want to use it with {@link Scheme#HTTPS} you must make sure that the keychain + * for verifying the server certificate is set up correctly. For an example of how to skip + * certificate verification see {@code PushGatewayTestApp} in {@code + * integration-tests/it-pushgateway/}. */ public class DefaultHttpConnectionFactory implements HttpConnectionFactory { - @Override - public HttpURLConnection create(URL url) throws IOException { - return (HttpURLConnection) url.openConnection(); - } + @Override + public HttpURLConnection create(URL url) throws IOException { + return (HttpURLConnection) url.openConnection(); + } } diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultJobLabelDetector.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultJobLabelDetector.java index 8d9afb71e..59a11a473 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultJobLabelDetector.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/DefaultJobLabelDetector.java @@ -7,54 +7,54 @@ /** * The default {@code job} label is the name of the JAR file being executed. - *

    - * This is copy-and-paste from {@code ResourceAttributesFromJarFileName} - * in the {@code prometheus-metrics-exporter-opentelemetry} module. + * + *

    This is copy-and-paste from {@code ResourceAttributesFromJarFileName} in the {@code + * prometheus-metrics-exporter-opentelemetry} module. */ class DefaultJobLabelDetector { - static String getDefaultJobLabel() { - Path jarPath = getJarPathFromSunCommandLine(); - if (jarPath == null) { - return "unknown_job"; - } - return getServiceName(jarPath); + static String getDefaultJobLabel() { + Path jarPath = getJarPathFromSunCommandLine(); + if (jarPath == null) { + return "unknown_job"; } + return getServiceName(jarPath); + } - private static String getServiceName(Path jarPath) { - String jarName = jarPath.getFileName().toString(); - int dotIndex = jarName.lastIndexOf("."); - return dotIndex == -1 ? jarName : jarName.substring(0, dotIndex); - } + private static String getServiceName(Path jarPath) { + String jarName = jarPath.getFileName().toString(); + int dotIndex = jarName.lastIndexOf("."); + return dotIndex == -1 ? jarName : jarName.substring(0, dotIndex); + } - private static Path getJarPathFromSunCommandLine() { - String programArguments = System.getProperty("sun.java.command"); - if (programArguments == null) { - return null; - } - // Take the path until the first space. If the path doesn't exist extend it up to the next - // space. Repeat until a path that exists is found or input runs out. - int next = 0; - while (true) { - int nextSpace = programArguments.indexOf(' ', next); - if (nextSpace == -1) { - return pathIfExists(programArguments); - } - Path path = pathIfExists(programArguments.substring(0, nextSpace)); - next = nextSpace + 1; - if (path != null) { - return path; - } - } + private static Path getJarPathFromSunCommandLine() { + String programArguments = System.getProperty("sun.java.command"); + if (programArguments == null) { + return null; + } + // Take the path until the first space. If the path doesn't exist extend it up to the next + // space. Repeat until a path that exists is found or input runs out. + int next = 0; + while (true) { + int nextSpace = programArguments.indexOf(' ', next); + if (nextSpace == -1) { + return pathIfExists(programArguments); + } + Path path = pathIfExists(programArguments.substring(0, nextSpace)); + next = nextSpace + 1; + if (path != null) { + return path; + } } + } - private static Path pathIfExists(String programArguments) { - Path candidate; - try { - candidate = Paths.get(programArguments); - } catch (InvalidPathException e) { - return null; - } - return Files.isRegularFile(candidate) ? candidate : null; + private static Path pathIfExists(String programArguments) { + Path candidate; + try { + candidate = Paths.get(programArguments); + } catch (InvalidPathException e) { + return null; } + return Files.isRegularFile(candidate) ? candidate : null; + } } diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Format.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Format.java index 90204cff9..3d1b9d2e6 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Format.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Format.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.exporter.pushgateway; public enum Format { - PROMETHEUS_PROTOBUF, - PROMETHEUS_TEXT + PROMETHEUS_PROTOBUF, + PROMETHEUS_TEXT } diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java index c583b144e..f7a039af7 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.java @@ -4,10 +4,8 @@ import java.net.HttpURLConnection; import java.net.URL; -/** - * See {@link DefaultHttpConnectionFactory}. - */ +/** See {@link DefaultHttpConnectionFactory}. */ @FunctionalInterface public interface HttpConnectionFactory { - HttpURLConnection create(URL url) throws IOException; + HttpURLConnection create(URL url) throws IOException; } diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java index 0e6ab8d54..d879c3105 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java @@ -1,5 +1,7 @@ package io.prometheus.metrics.exporter.pushgateway; +import static io.prometheus.metrics.exporter.pushgateway.Scheme.HTTP; + import io.prometheus.metrics.config.ExporterPushgatewayProperties; import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.config.PrometheusPropertiesException; @@ -8,24 +10,23 @@ import io.prometheus.metrics.model.registry.Collector; import io.prometheus.metrics.model.registry.MultiCollector; import io.prometheus.metrics.model.registry.PrometheusRegistry; - import java.io.*; import java.net.*; import java.nio.charset.StandardCharsets; import java.util.*; -import static io.prometheus.metrics.exporter.pushgateway.Scheme.HTTP; - /** - * Export metrics via the Prometheus Pushgateway - *

    - * The Prometheus Pushgateway exists to allow ephemeral and batch jobs to expose their metrics to Prometheus. - * Since these kinds of jobs may not exist long enough to be scraped, they can instead push their metrics - * to a Pushgateway. This Java class allows pushing the contents of a {@link PrometheusRegistry} to a Pushgateway. - *

    - * Example usage: - *

    - * {@code
    + * Export metrics via the Prometheus
    + * Pushgateway
    + *
    + * 

    The Prometheus Pushgateway exists to allow ephemeral and batch jobs to expose their metrics to + * Prometheus. Since these kinds of jobs may not exist long enough to be scraped, they can instead + * push their metrics to a Pushgateway. This Java class allows pushing the contents of a {@link + * PrometheusRegistry} to a Pushgateway. + * + *

    Example usage: + * + *

    {@code
      * void executeBatchJob() throws Exception {
      *     PrometheusRegistry registry = new PrometheusRegistry();
      *     Gauge duration = Gauge.builder()
    @@ -53,384 +54,397 @@
      *         pg.pushAdd();
      *     }
      * }
    - * }
    - * 
    - *

    - * See https://github.com/prometheus/pushgateway. + * }

    + * + *

    See https://github.com/prometheus/pushgateway. */ public class PushGateway { - private static final int MILLISECONDS_PER_SECOND = 1000; + private static final int MILLISECONDS_PER_SECOND = 1000; + + private final URL url; + private final Format format; + private final Map requestHeaders; + private final PrometheusRegistry registry; + private final HttpConnectionFactory connectionFactory; + + private PushGateway( + PrometheusRegistry registry, + Format format, + URL url, + HttpConnectionFactory connectionFactory, + Map requestHeaders) { + this.registry = registry; + this.format = format; + this.url = url; + this.requestHeaders = Collections.unmodifiableMap(new HashMap<>(requestHeaders)); + this.connectionFactory = connectionFactory; + } + + /** + * Push all metrics. All metrics with the same job and grouping key are replaced. + * + *

    This uses the PUT HTTP method. + */ + public void push() throws IOException { + doRequest(registry, "PUT"); + } + + /** + * Push a single metric. All metrics with the same job and grouping key are replaced. + * + *

    This is useful for pushing a single Gauge. + * + *

    This uses the PUT HTTP method. + */ + public void push(Collector collector) throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + doRequest(registry, "PUT"); + } + + /** + * Push a single collector. All metrics with the same job and grouping key are replaced. + * + *

    This uses the PUT HTTP method. + */ + public void push(MultiCollector collector) throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + doRequest(registry, "PUT"); + } + + /** + * Like {@link #push()}, but only metrics with the same name as the newly pushed metrics are + * replaced. + * + *

    This uses the POST HTTP method. + */ + public void pushAdd() throws IOException { + doRequest(registry, "POST"); + } + + /** + * Like {@link #push(Collector)}, but only the specified metric will be replaced. + * + *

    This uses the POST HTTP method. + */ + public void pushAdd(Collector collector) throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + doRequest(registry, "POST"); + } + + /** + * Like {@link #push(MultiCollector)}, but only the metrics from the collector will be replaced. + * + *

    This uses the POST HTTP method. + */ + public void pushAdd(MultiCollector collector) throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + doRequest(registry, "POST"); + } + + /** + * Deletes metrics from the Pushgateway. + * + *

    This uses the DELETE HTTP method. + */ + public void delete() throws IOException { + doRequest(null, "DELETE"); + } + + private void doRequest(PrometheusRegistry registry, String method) throws IOException { + try { + HttpURLConnection connection = connectionFactory.create(url); + requestHeaders.forEach(connection::setRequestProperty); + if (format == Format.PROMETHEUS_TEXT) { + connection.setRequestProperty("Content-Type", PrometheusTextFormatWriter.CONTENT_TYPE); + } else { + connection.setRequestProperty("Content-Type", PrometheusProtobufWriter.CONTENT_TYPE); + } + if (!method.equals("DELETE")) { + connection.setDoOutput(true); + } + connection.setRequestMethod(method); + + connection.setConnectTimeout(10 * MILLISECONDS_PER_SECOND); + connection.setReadTimeout(10 * MILLISECONDS_PER_SECOND); + connection.connect(); + + try { + if (!method.equals("DELETE")) { + OutputStream outputStream = connection.getOutputStream(); + if (format == Format.PROMETHEUS_TEXT) { + new PrometheusTextFormatWriter(false).write(outputStream, registry.scrape()); + } else { + new PrometheusProtobufWriter().write(outputStream, registry.scrape()); + } + outputStream.flush(); + outputStream.close(); + } - private final URL url; - private final Format format; - private final Map requestHeaders; - private final PrometheusRegistry registry; - private final HttpConnectionFactory connectionFactory; + int response = connection.getResponseCode(); + if (response / 100 != 2) { + String errorMessage; + InputStream errorStream = connection.getErrorStream(); + if (errorStream != null) { + String errBody = readFromStream(errorStream); + errorMessage = + "Response code from " + url + " was " + response + ", response body: " + errBody; + } else { + errorMessage = "Response code from " + url + " was " + response; + } + throw new IOException(errorMessage); + } - private PushGateway(PrometheusRegistry registry, Format format, URL url, HttpConnectionFactory connectionFactory, Map requestHeaders) { - this.registry = registry; - this.format = format; - this.url = url; - this.requestHeaders = Collections.unmodifiableMap(new HashMap<>(requestHeaders)); - this.connectionFactory = connectionFactory; + } finally { + connection.disconnect(); + } + } catch (IOException e) { + String baseUrl = url.getProtocol() + "://" + url.getHost(); + if (url.getPort() != -1) { + baseUrl += ":" + url.getPort(); + } + throw new IOException( + "Failed to push metrics to the Prometheus Pushgateway on " + + baseUrl + + ": " + + e.getMessage(), + e); + } + } + + private static String readFromStream(InputStream is) throws IOException { + ByteArrayOutputStream result = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int length; + while ((length = is.read(buffer)) != -1) { + result.write(buffer, 0, length); + } + return result.toString("UTF-8"); + } + + public static Builder builder() { + return builder(PrometheusProperties.get()); + } + + /** + * The {@link PrometheusProperties} will be used to override what is set in the {@link Builder}. + */ + public static Builder builder(PrometheusProperties config) { + return new Builder(config); + } + + public static class Builder { + + private final PrometheusProperties config; + private Format format; + private String address; + private Scheme scheme; + private String job; + private final Map requestHeaders = new HashMap<>(); + private PrometheusRegistry registry = PrometheusRegistry.defaultRegistry; + private HttpConnectionFactory connectionFactory = new DefaultHttpConnectionFactory(); + private Map groupingKey = new TreeMap<>(); + + private Builder(PrometheusProperties config) { + this.config = config; } - /** - * Push all metrics. All metrics with the same job and grouping key are replaced. - *

    - * This uses the PUT HTTP method. - */ - public void push() throws IOException { - doRequest(registry, "PUT"); + /** Default is {@link Format#PROMETHEUS_PROTOBUF}. */ + public Builder format(Format format) { + if (format == null) { + throw new NullPointerException(); + } + this.format = format; + return this; } /** - * Push a single metric. All metrics with the same job and grouping key are replaced. - *

    - * This is useful for pushing a single Gauge. - *

    - * This uses the PUT HTTP method. + * Address of the Pushgateway in format {@code host:port}. Default is {@code localhost:9091}. + * Can be overwritten at runtime with the {@code io.prometheus.exporter.pushgateway.address} + * property. */ - public void push(Collector collector) throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - registry.register(collector); - doRequest(registry, "PUT"); + public Builder address(String address) { + if (address == null) { + throw new NullPointerException(); + } + this.address = address; + return this; } - /** - * Push a single collector. All metrics with the same job and grouping key are replaced. - *

    - * This uses the PUT HTTP method. - */ - public void push(MultiCollector collector) throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - registry.register(collector); - doRequest(registry, "PUT"); + /** Username and password for HTTP basic auth when pushing to the Pushgateway. */ + public Builder basicAuth(String user, String password) { + if (user == null || password == null) { + throw new NullPointerException(); + } + byte[] credentialsBytes = (user + ":" + password).getBytes(StandardCharsets.UTF_8); + String encoded = Base64.getEncoder().encodeToString(credentialsBytes); + requestHeaders.put("Authorization", String.format("Basic %s", encoded)); + return this; + } + + /** Bearer token authorization when pushing to the Pushgateway. */ + public Builder bearerToken(String token) { + if (token == null) { + throw new NullPointerException(); + } + requestHeaders.put("Authorization", String.format("Bearer %s", token)); + return this; } /** - * Like {@link #push()}, but only metrics with the same name as the newly pushed metrics are replaced. - *

    - * This uses the POST HTTP method. + * Specify if metrics should be pushed using HTTP or HTTPS. Default is HTTP. Can be overwritten + * at runtime with the {@code io.prometheus.exporter.pushgateway.scheme} property. */ - public void pushAdd() throws IOException { - doRequest(registry, "POST"); + public Builder scheme(Scheme scheme) { + if (scheme == null) { + throw new NullPointerException(); + } + this.scheme = scheme; + return this; } /** - * Like {@link #push(Collector)}, but only the specified metric will be replaced. - *

    - * This uses the POST HTTP method. + * Custom connection factory. Default is {@link DefaultHttpConnectionFactory}. + * + *

    The {@code PushGatewayTestApp} in {@code integration-tests/it-pushgateway/} has an example + * of a custom connection factory that skips SSL certificate validation for HTTPS connections. */ - public void pushAdd(Collector collector) throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - registry.register(collector); - doRequest(registry, "POST"); + public Builder connectionFactory(HttpConnectionFactory connectionFactory) { + if (connectionFactory == null) { + throw new NullPointerException(); + } + this.connectionFactory = connectionFactory; + return this; } /** - * Like {@link #push(MultiCollector)}, but only the metrics from the collector will be replaced. - *

    - * This uses the POST HTTP method. + * The {@code job} label to be used when pushing metrics. If not provided, the name of the JAR + * file will be used by default. Can be overwritten at runtime with the {@code + * io.prometheus.exporter.pushgateway.job} property. */ - public void pushAdd(MultiCollector collector) throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - registry.register(collector); - doRequest(registry, "POST"); + public Builder job(String job) { + if (job == null) { + throw new NullPointerException(); + } + this.job = job; + return this; } /** - * Deletes metrics from the Pushgateway. - *

    - * This uses the DELETE HTTP method. + * Grouping keys to be used when pushing/deleting metrics. Call this method multiple times for + * adding multiple grouping keys. */ - public void delete() throws IOException { - doRequest(null, "DELETE"); + public Builder groupingKey(String name, String value) { + if (name == null || value == null) { + throw new NullPointerException(); + } + groupingKey.put(name, value); + return this; } - private void doRequest(PrometheusRegistry registry, String method) throws IOException { - try { - HttpURLConnection connection = connectionFactory.create(url); - requestHeaders.forEach(connection::setRequestProperty); - if (format == Format.PROMETHEUS_TEXT) { - connection.setRequestProperty("Content-Type", PrometheusTextFormatWriter.CONTENT_TYPE); - } else { - connection.setRequestProperty("Content-Type", PrometheusProtobufWriter.CONTENT_TYPE); - } - if (!method.equals("DELETE")) { - connection.setDoOutput(true); - } - connection.setRequestMethod(method); - - connection.setConnectTimeout(10 * MILLISECONDS_PER_SECOND); - connection.setReadTimeout(10 * MILLISECONDS_PER_SECOND); - connection.connect(); - - try { - if (!method.equals("DELETE")) { - OutputStream outputStream = connection.getOutputStream(); - if (format == Format.PROMETHEUS_TEXT) { - new PrometheusTextFormatWriter(false).write(outputStream, registry.scrape()); - } else { - new PrometheusProtobufWriter().write(outputStream, registry.scrape()); - } - outputStream.flush(); - outputStream.close(); - } - - int response = connection.getResponseCode(); - if (response / 100 != 2) { - String errorMessage; - InputStream errorStream = connection.getErrorStream(); - if (errorStream != null) { - String errBody = readFromStream(errorStream); - errorMessage = "Response code from " + url + " was " + response + ", response body: " + errBody; - } else { - errorMessage = "Response code from " + url + " was " + response; - } - throw new IOException(errorMessage); - } - - } finally { - connection.disconnect(); - } - } catch (IOException e) { - String baseUrl = url.getProtocol() + "://" + url.getHost(); - if (url.getPort() != -1) { - baseUrl += ":" + url.getPort(); - } - throw new IOException("Failed to push metrics to the Prometheus Pushgateway on " + baseUrl + ": " + e.getMessage(), e); - } + /** Convenience method for adding the current IP address as an "instance" label. */ + public Builder instanceIpGroupingKey() throws UnknownHostException { + return groupingKey("instance", InetAddress.getLocalHost().getHostAddress()); } - private static String readFromStream(InputStream is) throws IOException { - ByteArrayOutputStream result = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int length; - while ((length = is.read(buffer)) != -1) { - result.write(buffer, 0, length); - } - return result.toString("UTF-8"); + /** Push metrics from this registry instead of {@link PrometheusRegistry#defaultRegistry}. */ + public Builder registry(PrometheusRegistry registry) { + if (registry == null) { + throw new NullPointerException(); + } + this.registry = registry; + return this; } - public static Builder builder() { - return builder(PrometheusProperties.get()); + private Scheme getScheme(ExporterPushgatewayProperties properties) { + if (properties != null && properties.getScheme() != null) { + return Scheme.valueOf(properties.getScheme()); + } else if (this.scheme != null) { + return this.scheme; + } else { + return HTTP; + } } - /** - * The {@link PrometheusProperties} will be used to override what is set in the {@link Builder}. - */ - public static Builder builder(PrometheusProperties config) { - return new Builder(config); + private String getAddress(ExporterPushgatewayProperties properties) { + if (properties != null && properties.getAddress() != null) { + return properties.getAddress(); + } else if (this.address != null) { + return this.address; + } else { + return "localhost:9091"; + } } - public static class Builder { - - private final PrometheusProperties config; - private Format format; - private String address; - private Scheme scheme; - private String job; - private final Map requestHeaders = new HashMap<>(); - private PrometheusRegistry registry = PrometheusRegistry.defaultRegistry; - private HttpConnectionFactory connectionFactory = new DefaultHttpConnectionFactory(); - private Map groupingKey = new TreeMap<>(); - - private Builder(PrometheusProperties config) { - this.config = config; - } - - /** - * Default is {@link Format#PROMETHEUS_PROTOBUF}. - */ - public Builder format(Format format) { - if (format == null) { - throw new NullPointerException(); - } - this.format = format; - return this; - } - - /** - * Address of the Pushgateway in format {@code host:port}. - * Default is {@code localhost:9091}. - * Can be overwritten at runtime with the {@code io.prometheus.exporter.pushgateway.address} property. - */ - public Builder address(String address) { - if (address == null) { - throw new NullPointerException(); - } - this.address = address; - return this; - } - - /** - * Username and password for HTTP basic auth when pushing to the Pushgateway. - */ - public Builder basicAuth(String user, String password) { - if (user == null || password == null) { - throw new NullPointerException(); - } - byte[] credentialsBytes = (user + ":" + password).getBytes(StandardCharsets.UTF_8); - String encoded = Base64.getEncoder().encodeToString(credentialsBytes); - requestHeaders.put("Authorization", String.format("Basic %s", encoded)); - return this; - } - - /** - * Bearer token authorization when pushing to the Pushgateway. - */ - public Builder bearerToken(String token) { - if (token == null) { - throw new NullPointerException(); - } - requestHeaders.put("Authorization", String.format("Bearer %s", token)); - return this; - } - - /** - * Specify if metrics should be pushed using HTTP or HTTPS. Default is HTTP. - * Can be overwritten at runtime with the {@code io.prometheus.exporter.pushgateway.scheme} property. - */ - public Builder scheme(Scheme scheme) { - if (scheme == null) { - throw new NullPointerException(); - } - this.scheme = scheme; - return this; - } - - /** - * Custom connection factory. Default is {@link DefaultHttpConnectionFactory}. - *

    - * The {@code PushGatewayTestApp} in {@code integration-tests/it-pushgateway/} has an example of a custom - * connection factory that skips SSL certificate validation for HTTPS connections. - */ - public Builder connectionFactory(HttpConnectionFactory connectionFactory) { - if (connectionFactory == null) { - throw new NullPointerException(); - } - this.connectionFactory = connectionFactory; - return this; - } - - /** - * The {@code job} label to be used when pushing metrics. - * If not provided, the name of the JAR file will be used by default. - * Can be overwritten at runtime with the {@code io.prometheus.exporter.pushgateway.job} property. - */ - public Builder job(String job) { - if (job == null) { - throw new NullPointerException(); - } - this.job = job; - return this; - } - - /** - * Grouping keys to be used when pushing/deleting metrics. - * Call this method multiple times for adding multiple grouping keys. - */ - public Builder groupingKey(String name, String value) { - if (name == null || value == null) { - throw new NullPointerException(); - } - groupingKey.put(name, value); - return this; - } - - /** - * Convenience method for adding the current IP address as an "instance" label. - */ - public Builder instanceIpGroupingKey() throws UnknownHostException { - return groupingKey("instance", InetAddress.getLocalHost().getHostAddress()); - } - - /** - * Push metrics from this registry instead of {@link PrometheusRegistry#defaultRegistry}. - */ - public Builder registry(PrometheusRegistry registry) { - if (registry == null) { - throw new NullPointerException(); - } - this.registry = registry; - return this; - } - - private Scheme getScheme(ExporterPushgatewayProperties properties) { - if (properties != null && properties.getScheme() != null) { - return Scheme.valueOf(properties.getScheme()); - } else if (this.scheme != null) { - return this.scheme; - } else { - return HTTP; - } - } - - private String getAddress(ExporterPushgatewayProperties properties) { - if (properties != null && properties.getAddress() != null) { - return properties.getAddress(); - } else if (this.address != null) { - return this.address; - } else { - return "localhost:9091"; - } - } - - private String getJob(ExporterPushgatewayProperties properties) { - if (properties != null && properties.getJob() != null) { - return properties.getJob(); - } else if (this.job != null) { - return this.job; - } else { - return DefaultJobLabelDetector.getDefaultJobLabel(); - } - } + private String getJob(ExporterPushgatewayProperties properties) { + if (properties != null && properties.getJob() != null) { + return properties.getJob(); + } else if (this.job != null) { + return this.job; + } else { + return DefaultJobLabelDetector.getDefaultJobLabel(); + } + } - private Format getFormat(ExporterPushgatewayProperties properties) { - // currently not configurable via properties - if (this.format != null) { - return this.format; - } - return Format.PROMETHEUS_PROTOBUF; - } + private Format getFormat(ExporterPushgatewayProperties properties) { + // currently not configurable via properties + if (this.format != null) { + return this.format; + } + return Format.PROMETHEUS_PROTOBUF; + } - private URL makeUrl(ExporterPushgatewayProperties properties) throws UnsupportedEncodingException, MalformedURLException { - String url = getScheme(properties) + "://" + getAddress(properties) + "/metrics/"; - String job = getJob(properties); - if (job.contains("/")) { - url += "job@base64/" + base64url(job); - } else { - url += "job/" + URLEncoder.encode(job, "UTF-8"); - } - if (groupingKey != null) { - for (Map.Entry entry : groupingKey.entrySet()) { - if (entry.getValue().isEmpty()) { - url += "/" + entry.getKey() + "@base64/="; - } else if (entry.getValue().contains("/")) { - url += "/" + entry.getKey() + "@base64/" + base64url(entry.getValue()); - } else { - url += "/" + entry.getKey() + "/" + URLEncoder.encode(entry.getValue(), "UTF-8"); - } - } - } - return URI.create(url).normalize().toURL(); + private URL makeUrl(ExporterPushgatewayProperties properties) + throws UnsupportedEncodingException, MalformedURLException { + String url = getScheme(properties) + "://" + getAddress(properties) + "/metrics/"; + String job = getJob(properties); + if (job.contains("/")) { + url += "job@base64/" + base64url(job); + } else { + url += "job/" + URLEncoder.encode(job, "UTF-8"); + } + if (groupingKey != null) { + for (Map.Entry entry : groupingKey.entrySet()) { + if (entry.getValue().isEmpty()) { + url += "/" + entry.getKey() + "@base64/="; + } else if (entry.getValue().contains("/")) { + url += "/" + entry.getKey() + "@base64/" + base64url(entry.getValue()); + } else { + url += "/" + entry.getKey() + "/" + URLEncoder.encode(entry.getValue(), "UTF-8"); + } } + } + return URI.create(url).normalize().toURL(); + } - private String base64url(String v) { - return Base64.getEncoder().encodeToString(v.getBytes(StandardCharsets.UTF_8)).replace("+", "-").replace("/", "_"); - } + private String base64url(String v) { + return Base64.getEncoder() + .encodeToString(v.getBytes(StandardCharsets.UTF_8)) + .replace("+", "-") + .replace("/", "_"); + } - public PushGateway build() { - ExporterPushgatewayProperties properties = config == null ? null : config.getExporterPushgatewayProperties(); - try { - return new PushGateway(registry, getFormat(properties), makeUrl(properties), connectionFactory, requestHeaders); - } catch (MalformedURLException e) { - throw new PrometheusPropertiesException(address + ": Invalid address. Expecting :"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); // cannot happen, UTF-8 is always supported - } - } + public PushGateway build() { + ExporterPushgatewayProperties properties = + config == null ? null : config.getExporterPushgatewayProperties(); + try { + return new PushGateway( + registry, + getFormat(properties), + makeUrl(properties), + connectionFactory, + requestHeaders); + } catch (MalformedURLException e) { + throw new PrometheusPropertiesException( + address + ": Invalid address. Expecting :"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); // cannot happen, UTF-8 is always supported + } } + } } diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Scheme.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Scheme.java index adb7ebf07..51a2e32dd 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Scheme.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/Scheme.java @@ -1,29 +1,29 @@ package io.prometheus.metrics.exporter.pushgateway; public enum Scheme { + HTTP("http"), + HTTPS("https"); - HTTP("http"), - HTTPS("https"); + private final String name; - private final String name; + Scheme(String name) { + this.name = name; + } - Scheme(String name) { - this.name = name; - } - - @Override - public String toString() { - return name; - } + @Override + public String toString() { + return name; + } - public static Scheme fromString(String name) { - switch (name) { - case "http": - return HTTP; - case "https": - return HTTPS; - default: - throw new IllegalArgumentException(name + ": Unsupported scheme. Expecting 'http' or 'https'."); - } + public static Scheme fromString(String name) { + switch (name) { + case "http": + return HTTP; + case "https": + return HTTPS; + default: + throw new IllegalArgumentException( + name + ": Unsupported scheme. Expecting 'http' or 'https'."); } + } } diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java index 78706ee49..7fbb32b10 100644 --- a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java @@ -1,48 +1,48 @@ package io.prometheus.metrics.exporter.pushgateway; +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; + import io.prometheus.metrics.core.metrics.Gauge; import io.prometheus.metrics.model.registry.PrometheusRegistry; +import java.io.IOException; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockserver.client.MockServerClient; import org.mockserver.junit.MockServerRule; -import java.io.IOException; - -import static org.mockserver.model.HttpRequest.request; -import static org.mockserver.model.HttpResponse.response; - public class BasicAuthPushGatewayTest { - @Rule - public MockServerRule mockServerRule = new MockServerRule(this); - private MockServerClient mockServerClient; - - PrometheusRegistry registry; - Gauge gauge; - PushGateway pushGateway; - - @Before - public void setUp() { - registry = new PrometheusRegistry(); - gauge = Gauge.builder().name("g").help("help").build(); - pushGateway = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .basicAuth("testUser", "testPwd") - .registry(registry) - .job("j") - .build(); - } - - @Test - public void testAuthorizedPush() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withHeader("Authorization", "Basic dGVzdFVzZXI6dGVzdFB3ZA==") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - pushGateway.push(); - } + @Rule public MockServerRule mockServerRule = new MockServerRule(this); + private MockServerClient mockServerClient; + + PrometheusRegistry registry; + Gauge gauge; + PushGateway pushGateway; + + @Before + public void setUp() { + registry = new PrometheusRegistry(); + gauge = Gauge.builder().name("g").help("help").build(); + pushGateway = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .basicAuth("testUser", "testPwd") + .registry(registry) + .job("j") + .build(); + } + + @Test + public void testAuthorizedPush() throws IOException { + mockServerClient + .when( + request() + .withMethod("PUT") + .withHeader("Authorization", "Basic dGVzdFVzZXI6dGVzdFB3ZA==") + .withPath("/metrics/job/j")) + .respond(response().withStatusCode(202)); + pushGateway.push(); + } } diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java index 8687b2d55..144a0f24f 100644 --- a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java @@ -1,48 +1,48 @@ package io.prometheus.metrics.exporter.pushgateway; +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; + import io.prometheus.metrics.core.metrics.Gauge; import io.prometheus.metrics.model.registry.PrometheusRegistry; +import java.io.IOException; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockserver.client.MockServerClient; import org.mockserver.junit.MockServerRule; -import java.io.IOException; - -import static org.mockserver.model.HttpRequest.request; -import static org.mockserver.model.HttpResponse.response; - public class BearerTokenPushGatewayTest { - @Rule - public MockServerRule mockServerRule = new MockServerRule(this); - private MockServerClient mockServerClient; - - PrometheusRegistry registry; - Gauge gauge; - PushGateway pushGateway; - - @Before - public void setUp() { - registry = new PrometheusRegistry(); - gauge = Gauge.builder().name("g").help("help").build(); - pushGateway = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .bearerToken("xxx") - .registry(registry) - .job("j") - .build(); - } - - @Test - public void testAuthorizedPush() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withHeader("Authorization", "Bearer xxx") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - pushGateway.push(); - } + @Rule public MockServerRule mockServerRule = new MockServerRule(this); + private MockServerClient mockServerClient; + + PrometheusRegistry registry; + Gauge gauge; + PushGateway pushGateway; + + @Before + public void setUp() { + registry = new PrometheusRegistry(); + gauge = Gauge.builder().name("g").help("help").build(); + pushGateway = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .bearerToken("xxx") + .registry(registry) + .job("j") + .build(); + } + + @Test + public void testAuthorizedPush() throws IOException { + mockServerClient + .when( + request() + .withMethod("PUT") + .withHeader("Authorization", "Bearer xxx") + .withPath("/metrics/job/j")) + .respond(response().withStatusCode(202)); + pushGateway.push(); + } } diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java index 74ebae7ac..ce88300db 100644 --- a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java @@ -1,8 +1,15 @@ package io.prometheus.metrics.exporter.pushgateway; +import static org.junit.rules.ExpectedException.none; +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; import io.prometheus.metrics.core.metrics.Gauge; import io.prometheus.metrics.model.registry.PrometheusRegistry; +import java.io.IOException; +import java.lang.reflect.Field; +import java.net.InetAddress; +import java.net.URL; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; @@ -11,309 +18,276 @@ import org.mockserver.client.MockServerClient; import org.mockserver.junit.MockServerRule; -import java.io.IOException; -import java.lang.reflect.Field; -import java.net.InetAddress; -import java.net.URL; - -import static org.junit.rules.ExpectedException.none; -import static org.mockserver.model.HttpRequest.request; -import static org.mockserver.model.HttpResponse.response; - public class PushGatewayTest { - @Rule - public final ExpectedException thrown = none(); + @Rule public final ExpectedException thrown = none(); - @Rule - public MockServerRule mockServerRule = new MockServerRule(this); - private MockServerClient mockServerClient; + @Rule public MockServerRule mockServerRule = new MockServerRule(this); + private MockServerClient mockServerClient; - PrometheusRegistry registry; - Gauge gauge; + PrometheusRegistry registry; + Gauge gauge; - @Before - public void setUp() { - registry = new PrometheusRegistry(); - gauge = Gauge.builder().name("g").help("help").build(); - } + @Before + public void setUp() { + registry = new PrometheusRegistry(); + gauge = Gauge.builder().name("g").help("help").build(); + } - @Test(expected = RuntimeException.class) - public void testInvalidURLThrowsRuntimeException() { - PushGateway.builder().address("::").build(); // ":" is interpreted as port number, so parsing fails - } + @Test(expected = RuntimeException.class) + public void testInvalidURLThrowsRuntimeException() { + PushGateway.builder() + .address("::") + .build(); // ":" is interpreted as port number, so parsing fails + } - @Test - public void testMultipleSlashesAreStrippedFromURL() throws NoSuchFieldException, IllegalAccessException { - final PushGateway pushGateway = PushGateway.builder() - .address("example.com:1234/context///path//") - .job("test") - .build(); - Assert.assertEquals( - "http://example.com:1234/context/path/metrics/job/test", - getUrl(pushGateway).toString() - ); - } + @Test + public void testMultipleSlashesAreStrippedFromURL() + throws NoSuchFieldException, IllegalAccessException { + final PushGateway pushGateway = + PushGateway.builder().address("example.com:1234/context///path//").job("test").build(); + Assert.assertEquals( + "http://example.com:1234/context/path/metrics/job/test", getUrl(pushGateway).toString()); + } - private URL getUrl(PushGateway pushGateway) throws IllegalAccessException, NoSuchFieldException { - Field field = pushGateway.getClass().getDeclaredField("url"); - field.setAccessible(true); - return (URL) field.get(pushGateway); - } + private URL getUrl(PushGateway pushGateway) throws IllegalAccessException, NoSuchFieldException { + Field field = pushGateway.getClass().getDeclaredField("url"); + field.setAccessible(true); + return (URL) field.get(pushGateway); + } - @Test - public void testPush() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("j") - .build(); - pg.push(); - } + @Test + public void testPush() throws IOException { + mockServerClient + .when(request().withMethod("PUT").withPath("/metrics/job/j")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .build(); + pg.push(); + } - @Test - public void testPush200Response() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(200)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("j") - .build(); - pg.push(); - } + @Test + public void testPush200Response() throws IOException { + mockServerClient + .when(request().withMethod("PUT").withPath("/metrics/job/j")) + .respond(response().withStatusCode(200)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .build(); + pg.push(); + } - @Test - public void testNon202ResponseThrows() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(500)); - thrown.expect(IOException.class); - thrown.expectMessage( - "Response code from http://localhost:" - + mockServerRule.getPort() - + "/metrics/job/j was 500"); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("j") - .build(); - pg.push(); - } + @Test + public void testNon202ResponseThrows() throws IOException { + mockServerClient + .when(request().withMethod("PUT").withPath("/metrics/job/j")) + .respond(response().withStatusCode(500)); + thrown.expect(IOException.class); + thrown.expectMessage( + "Response code from http://localhost:" + + mockServerRule.getPort() + + "/metrics/job/j was 500"); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .build(); + pg.push(); + } - @Test - public void testPushCollector() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("j") - .build(); - pg.push(); - } + @Test + public void testPushCollector() throws IOException { + mockServerClient + .when(request().withMethod("PUT").withPath("/metrics/job/j")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .build(); + pg.push(); + } - @Test - public void testPushWithGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j/l/v") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("j") - .groupingKey("l", "v") - .build(); - pg.push(); - } + @Test + public void testPushWithGroupingKey() throws IOException { + mockServerClient + .when(request().withMethod("PUT").withPath("/metrics/job/j/l/v")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .groupingKey("l", "v") + .build(); + pg.push(); + } - @Test - public void testPushWithMultiGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j/l/v/l2/v2") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("j") - .groupingKey("l", "v") - .groupingKey("l2", "v2") - .build(); - pg.push(); - } + @Test + public void testPushWithMultiGroupingKey() throws IOException { + mockServerClient + .when(request().withMethod("PUT").withPath("/metrics/job/j/l/v/l2/v2")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .groupingKey("l", "v") + .groupingKey("l2", "v2") + .build(); + pg.push(); + } - @Test - public void testPushWithEmptyLabelGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j/l/v/l2@base64/=") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("j") - .groupingKey("l", "v") - .groupingKey("l2", "") - .build(); - pg.push(); - } + @Test + public void testPushWithEmptyLabelGroupingKey() throws IOException { + mockServerClient + .when(request().withMethod("PUT").withPath("/metrics/job/j/l/v/l2@base64/=")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .groupingKey("l", "v") + .groupingKey("l2", "") + .build(); + pg.push(); + } - @Test - public void testPushWithGroupingKeyWithSlashes() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job@base64/YS9i/l/v/l2@base64/75-_Lw==") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("a/b") - .groupingKey("l", "v") - .groupingKey("l2", "\uF7FF/") - .build(); - pg.push(); - } + @Test + public void testPushWithGroupingKeyWithSlashes() throws IOException { + mockServerClient + .when( + request().withMethod("PUT").withPath("/metrics/job@base64/YS9i/l/v/l2@base64/75-_Lw==")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("a/b") + .groupingKey("l", "v") + .groupingKey("l2", "\uF7FF/") + .build(); + pg.push(); + } - @Test - public void testPushCollectorWithGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("PUT") - .withPath("/metrics/job/j/l/v") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("j") - .groupingKey("l", "v") - .build(); - pg.push(gauge); - } + @Test + public void testPushCollectorWithGroupingKey() throws IOException { + mockServerClient + .when(request().withMethod("PUT").withPath("/metrics/job/j/l/v")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .groupingKey("l", "v") + .build(); + pg.push(gauge); + } - @Test - public void testPushAdd() throws IOException { - mockServerClient.when( - request() - .withMethod("POST") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("j") - .build(); - pg.pushAdd(); - } + @Test + public void testPushAdd() throws IOException { + mockServerClient + .when(request().withMethod("POST").withPath("/metrics/job/j")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .job("j") + .build(); + pg.pushAdd(); + } - @Test - public void testPushAddCollector() throws IOException { - mockServerClient.when( - request() - .withMethod("POST") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .job("j") - .build(); - pg.pushAdd(gauge); - } + @Test + public void testPushAddCollector() throws IOException { + mockServerClient + .when(request().withMethod("POST").withPath("/metrics/job/j")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder().address("localhost:" + mockServerRule.getPort()).job("j").build(); + pg.pushAdd(gauge); + } - @Test - public void testPushAddWithGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("POST") - .withPath("/metrics/job/j/l/v") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .groupingKey("l", "v") - .job("j") - .build(); - pg.pushAdd(); - } + @Test + public void testPushAddWithGroupingKey() throws IOException { + mockServerClient + .when(request().withMethod("POST").withPath("/metrics/job/j/l/v")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .groupingKey("l", "v") + .job("j") + .build(); + pg.pushAdd(); + } - @Test - public void testPushAddCollectorWithGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("POST") - .withPath("/metrics/job/j/l/v") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .groupingKey("l", "v") - .job("j") - .build(); - pg.pushAdd(gauge); - } + @Test + public void testPushAddCollectorWithGroupingKey() throws IOException { + mockServerClient + .when(request().withMethod("POST").withPath("/metrics/job/j/l/v")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .registry(registry) + .groupingKey("l", "v") + .job("j") + .build(); + pg.pushAdd(gauge); + } - @Test - public void testDelete() throws IOException { - mockServerClient.when( - request() - .withMethod("DELETE") - .withPath("/metrics/job/j") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .job("j") - .build(); - pg.delete(); - } + @Test + public void testDelete() throws IOException { + mockServerClient + .when(request().withMethod("DELETE").withPath("/metrics/job/j")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder().address("localhost:" + mockServerRule.getPort()).job("j").build(); + pg.delete(); + } - @Test - public void testDeleteWithGroupingKey() throws IOException { - mockServerClient.when( - request() - .withMethod("DELETE") - .withPath("/metrics/job/j/l/v") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .job("j") - .groupingKey("l", "v") - .build(); - pg.delete(); - } + @Test + public void testDeleteWithGroupingKey() throws IOException { + mockServerClient + .when(request().withMethod("DELETE").withPath("/metrics/job/j/l/v")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .job("j") + .groupingKey("l", "v") + .build(); + pg.delete(); + } - @Test - public void testInstanceIpGroupingKey() throws IOException { - String ip = InetAddress.getLocalHost().getHostAddress(); - Assert.assertFalse(ip.isEmpty()); - mockServerClient.when( - request() - .withMethod("DELETE") - .withPath("/metrics/job/j/instance/" + ip + "/l/v") - ).respond(response().withStatusCode(202)); - PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .job("j") - .groupingKey("l", "v") - .instanceIpGroupingKey() - .build(); - pg.delete(); - } + @Test + public void testInstanceIpGroupingKey() throws IOException { + String ip = InetAddress.getLocalHost().getHostAddress(); + Assert.assertFalse(ip.isEmpty()); + mockServerClient + .when(request().withMethod("DELETE").withPath("/metrics/job/j/instance/" + ip + "/l/v")) + .respond(response().withStatusCode(202)); + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerRule.getPort()) + .job("j") + .groupingKey("l", "v") + .instanceIpGroupingKey() + .build(); + pg.delete(); + } } diff --git a/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java b/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java index afcfb6cbc..6953b1c6d 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java +++ b/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/HttpExchangeAdapter.java @@ -5,109 +5,108 @@ import io.prometheus.metrics.exporter.common.PrometheusHttpResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - import java.io.IOException; import java.io.OutputStream; -import java.net.URI; import java.util.Enumeration; public class HttpExchangeAdapter implements PrometheusHttpExchange { - private final Request request; - private final Response response; + private final Request request; + private final Response response; - public HttpExchangeAdapter(HttpServletRequest request, HttpServletResponse response) { - this.request = new Request(request); - this.response = new Response(response); - } + public HttpExchangeAdapter(HttpServletRequest request, HttpServletResponse response) { + this.request = new Request(request); + this.response = new Response(response); + } - @Override - public PrometheusHttpRequest getRequest() { - return request; - } + @Override + public PrometheusHttpRequest getRequest() { + return request; + } - @Override - public PrometheusHttpResponse getResponse() { - return response; + @Override + public PrometheusHttpResponse getResponse() { + return response; + } + + @Override + public void handleException(IOException e) throws IOException { + throw e; // leave exception handling to the servlet container + } + + @Override + public void handleException(RuntimeException e) { + throw e; // leave exception handling to the servlet container + } + + @Override + public void close() { + // nothing to do for Servlets. + } + + public static class Request implements PrometheusHttpRequest { + + private final HttpServletRequest request; + + public Request(HttpServletRequest request) { + this.request = request; } @Override - public void handleException(IOException e) throws IOException { - throw e; // leave exception handling to the servlet container + public String getQueryString() { + return request.getQueryString(); } @Override - public void handleException(RuntimeException e) { - throw e; // leave exception handling to the servlet container + public Enumeration getHeaders(String name) { + return request.getHeaders(name); } @Override - public void close() { - // nothing to do for Servlets. + public String getMethod() { + return request.getMethod(); } - public static class Request implements PrometheusHttpRequest { - - private final HttpServletRequest request; - - public Request(HttpServletRequest request) { - this.request = request; - } - - @Override - public String getQueryString() { - return request.getQueryString(); - } - - @Override - public Enumeration getHeaders(String name) { - return request.getHeaders(name); - } - - @Override - public String getMethod() { - return request.getMethod(); - } - - @Override - public String getRequestPath() { - StringBuilder uri = new StringBuilder(); - String contextPath = request.getContextPath(); - if (contextPath.startsWith("/")) { - uri.append(contextPath); - } - String servletPath = request.getServletPath(); - if (servletPath.startsWith("/")) { - uri.append(servletPath); - } - String pathInfo = request.getPathInfo(); - if (pathInfo != null) { - uri.append(pathInfo); - } - return uri.toString(); - } + @Override + public String getRequestPath() { + StringBuilder uri = new StringBuilder(); + String contextPath = request.getContextPath(); + if (contextPath.startsWith("/")) { + uri.append(contextPath); + } + String servletPath = request.getServletPath(); + if (servletPath.startsWith("/")) { + uri.append(servletPath); + } + String pathInfo = request.getPathInfo(); + if (pathInfo != null) { + uri.append(pathInfo); + } + return uri.toString(); } + } - public static class Response implements PrometheusHttpResponse { + public static class Response implements PrometheusHttpResponse { - private final HttpServletResponse response; + private final HttpServletResponse response; - public Response(HttpServletResponse response) { - this.response = response; - } + public Response(HttpServletResponse response) { + this.response = response; + } - @Override - public void setHeader(String name, String value) { - response.setHeader(name, value); - } + @Override + public void setHeader(String name, String value) { + response.setHeader(name, value); + } - @Override - public OutputStream sendHeadersAndGetBody(int statusCode, int contentLength) throws IOException { - if (response.getHeader("Content-Length") == null && contentLength > 0) { - response.setContentLength(contentLength); - } - response.setStatus(statusCode); - return response.getOutputStream(); - } + @Override + public OutputStream sendHeadersAndGetBody(int statusCode, int contentLength) + throws IOException { + if (response.getHeader("Content-Length") == null && contentLength > 0) { + response.setContentLength(contentLength); + } + response.setStatus(statusCode); + return response.getOutputStream(); } + } } diff --git a/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.java b/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.java index 94dcf83eb..28728dc94 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.java +++ b/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.java @@ -6,36 +6,37 @@ import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - import java.io.IOException; /** * Initial example exporter so that we can try the new metrics library out. - *

    - * We'll add a Jakarta servlet, the built-in HTTPServer, etc. soon, and likely move common code into a common module. + * + *

    We'll add a Jakarta servlet, the built-in HTTPServer, etc. soon, and likely move common code + * into a common module. */ public class PrometheusMetricsServlet extends HttpServlet { - private final PrometheusScrapeHandler handler; + private final PrometheusScrapeHandler handler; - public PrometheusMetricsServlet() { - this(PrometheusProperties.get(), PrometheusRegistry.defaultRegistry); - } + public PrometheusMetricsServlet() { + this(PrometheusProperties.get(), PrometheusRegistry.defaultRegistry); + } - public PrometheusMetricsServlet(PrometheusRegistry registry) { - this(PrometheusProperties.get(), registry); - } + public PrometheusMetricsServlet(PrometheusRegistry registry) { + this(PrometheusProperties.get(), registry); + } - public PrometheusMetricsServlet(PrometheusProperties config) { - this(config, PrometheusRegistry.defaultRegistry); - } + public PrometheusMetricsServlet(PrometheusProperties config) { + this(config, PrometheusRegistry.defaultRegistry); + } - public PrometheusMetricsServlet(PrometheusProperties config, PrometheusRegistry registry) { - this.handler = new PrometheusScrapeHandler(config, registry); - } + public PrometheusMetricsServlet(PrometheusProperties config, PrometheusRegistry registry) { + this.handler = new PrometheusScrapeHandler(config, registry); + } - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - handler.handleRequest(new HttpExchangeAdapter(request, response)); - } + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws IOException { + handler.handleRequest(new HttpExchangeAdapter(request, response)); + } } diff --git a/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/HttpExchangeAdapter.java b/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/HttpExchangeAdapter.java index 0073db368..939b4d259 100644 --- a/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/HttpExchangeAdapter.java +++ b/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/HttpExchangeAdapter.java @@ -3,151 +3,143 @@ import io.prometheus.metrics.exporter.common.PrometheusHttpExchange; import io.prometheus.metrics.exporter.common.PrometheusHttpRequest; import io.prometheus.metrics.exporter.common.PrometheusHttpResponse; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.util.Enumeration; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** * This class is an adapter for HTTP exchanges, implementing the PrometheusHttpExchange interface. - * It wraps HttpServletRequest and HttpServletResponse objects into Request and Response inner classes. + * It wraps HttpServletRequest and HttpServletResponse objects into Request and Response inner + * classes. */ public class HttpExchangeAdapter implements PrometheusHttpExchange { - private final Request request; - private final Response response; + private final Request request; + private final Response response; + + /** + * Constructs a new HttpExchangeAdapter with the given HttpServletRequest and HttpServletResponse. + * + * @param request the HttpServletRequest to be adapted + * @param response the HttpServletResponse to be adapted + */ + public HttpExchangeAdapter(HttpServletRequest request, HttpServletResponse response) { + this.request = new Request(request); + this.response = new Response(response); + } + + /** + * Returns the adapted HttpServletRequest. + * + * @return the adapted HttpServletRequest + */ + @Override + public PrometheusHttpRequest getRequest() { + return request; + } + + /** + * Returns the adapted HttpServletResponse. + * + * @return the adapted HttpServletResponse + */ + @Override + public PrometheusHttpResponse getResponse() { + return response; + } + + @Override + public void handleException(IOException e) throws IOException { + throw e; // leave exception handling to the servlet container + } + + @Override + public void handleException(RuntimeException e) { + throw e; // leave exception handling to the servlet container + } + + @Override + public void close() { + // nothing to do for Servlets. + } + + /** This inner class adapts a HttpServletRequest to a PrometheusHttpRequest. */ + public static class Request implements PrometheusHttpRequest { + + private final HttpServletRequest request; /** - * Constructs a new HttpExchangeAdapter with the given HttpServletRequest and HttpServletResponse. + * Constructs a new Request with the given HttpServletRequest. * - * @param request the HttpServletRequest to be adapted - * @param response the HttpServletResponse to be adapted + * @param request the HttpServletRequest to be adapted */ - public HttpExchangeAdapter(HttpServletRequest request, HttpServletResponse response) { - this.request = new Request(request); - this.response = new Response(response); + public Request(HttpServletRequest request) { + this.request = request; } - /** - * Returns the adapted HttpServletRequest. - * - * @return the adapted HttpServletRequest - */ @Override - public PrometheusHttpRequest getRequest() { - return request; + public String getQueryString() { + return request.getQueryString(); } - /** - * Returns the adapted HttpServletResponse. - * - * @return the adapted HttpServletResponse - */ @Override - public PrometheusHttpResponse getResponse() { - return response; + public Enumeration getHeaders(String name) { + return request.getHeaders(name); } @Override - public void handleException(IOException e) throws IOException { - throw e; // leave exception handling to the servlet container + public String getMethod() { + return request.getMethod(); } @Override - public void handleException(RuntimeException e) { - throw e; // leave exception handling to the servlet container + public String getRequestPath() { + StringBuilder uri = new StringBuilder(); + String contextPath = request.getContextPath(); + if (contextPath.startsWith("/")) { + uri.append(contextPath); + } + String servletPath = request.getServletPath(); + if (servletPath.startsWith("/")) { + uri.append(servletPath); + } + String pathInfo = request.getPathInfo(); + if (pathInfo != null) { + uri.append(pathInfo); + } + return uri.toString(); } + } - @Override - public void close() { - // nothing to do for Servlets. - } + /** This inner class adapts a HttpServletResponse to a PrometheusHttpResponse. */ + public static class Response implements PrometheusHttpResponse { + + private final HttpServletResponse response; /** - * This inner class adapts a HttpServletRequest to a PrometheusHttpRequest. + * Constructs a new Response with the given HttpServletResponse. + * + * @param response the HttpServletResponse to be adapted */ - public static class Request implements PrometheusHttpRequest { - - private final HttpServletRequest request; - - /** - * Constructs a new Request with the given HttpServletRequest. - * - * @param request the HttpServletRequest to be adapted - */ - public Request(HttpServletRequest request) { - this.request = request; - } - - @Override - public String getQueryString() { - return request.getQueryString(); - } - - - @Override - public Enumeration getHeaders(String name) { - return request.getHeaders(name); - } - - - @Override - public String getMethod() { - return request.getMethod(); - } - - - @Override - public String getRequestPath() { - StringBuilder uri = new StringBuilder(); - String contextPath = request.getContextPath(); - if (contextPath.startsWith("/")) { - uri.append(contextPath); - } - String servletPath = request.getServletPath(); - if (servletPath.startsWith("/")) { - uri.append(servletPath); - } - String pathInfo = request.getPathInfo(); - if (pathInfo != null) { - uri.append(pathInfo); - } - return uri.toString(); - } + public Response(HttpServletResponse response) { + this.response = response; } - /** - * This inner class adapts a HttpServletResponse to a PrometheusHttpResponse. - */ - public static class Response implements PrometheusHttpResponse { - - private final HttpServletResponse response; - - /** - * Constructs a new Response with the given HttpServletResponse. - * - * @param response the HttpServletResponse to be adapted - */ - public Response(HttpServletResponse response) { - this.response = response; - } - - - @Override - public void setHeader(String name, String value) { - response.setHeader(name, value); - } - - - @Override - public OutputStream sendHeadersAndGetBody(int statusCode, int contentLength) throws IOException { - if (response.getHeader("Content-Length") == null && contentLength > 0) { - response.setContentLength(contentLength); - } - response.setStatus(statusCode); - return response.getOutputStream(); - } + @Override + public void setHeader(String name, String value) { + response.setHeader(name, value); + } + + @Override + public OutputStream sendHeadersAndGetBody(int statusCode, int contentLength) + throws IOException { + if (response.getHeader("Content-Length") == null && contentLength > 0) { + response.setContentLength(contentLength); + } + response.setStatus(statusCode); + return response.getOutputStream(); } -} \ No newline at end of file + } +} diff --git a/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java b/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java index 88564d118..fe81fe96b 100644 --- a/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java +++ b/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java @@ -3,65 +3,64 @@ import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.exporter.common.PrometheusScrapeHandler; import io.prometheus.metrics.model.registry.PrometheusRegistry; - +import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; /** - * This class extends HttpServlet to create a servlet for exporting Prometheus metrics. - * It uses a PrometheusScrapeHandler to handle HTTP GET requests and export metrics. - * The servlet can be configured with custom PrometheusProperties and a PrometheusRegistry. + * This class extends HttpServlet to create a servlet for exporting Prometheus metrics. It uses a + * PrometheusScrapeHandler to handle HTTP GET requests and export metrics. The servlet can be + * configured with custom PrometheusProperties and a PrometheusRegistry. */ public class PrometheusMetricsServlet extends HttpServlet { - private final PrometheusScrapeHandler handler; + private final PrometheusScrapeHandler handler; - /** - * Default constructor. Uses the default PrometheusProperties and PrometheusRegistry. - */ - public PrometheusMetricsServlet() { - this(PrometheusProperties.get(), PrometheusRegistry.defaultRegistry); - } + /** Default constructor. Uses the default PrometheusProperties and PrometheusRegistry. */ + public PrometheusMetricsServlet() { + this(PrometheusProperties.get(), PrometheusRegistry.defaultRegistry); + } - /** - * Constructor with a custom PrometheusRegistry. Uses the default PrometheusProperties. - * - * @param registry the PrometheusRegistry to use - */ - public PrometheusMetricsServlet(PrometheusRegistry registry) { - this(PrometheusProperties.get(), registry); - } + /** + * Constructor with a custom PrometheusRegistry. Uses the default PrometheusProperties. + * + * @param registry the PrometheusRegistry to use + */ + public PrometheusMetricsServlet(PrometheusRegistry registry) { + this(PrometheusProperties.get(), registry); + } - /** - * Constructor with custom PrometheusProperties. Uses the default PrometheusRegistry. - * - * @param config the PrometheusProperties to use - */ - public PrometheusMetricsServlet(PrometheusProperties config) { - this(config, PrometheusRegistry.defaultRegistry); - } + /** + * Constructor with custom PrometheusProperties. Uses the default PrometheusRegistry. + * + * @param config the PrometheusProperties to use + */ + public PrometheusMetricsServlet(PrometheusProperties config) { + this(config, PrometheusRegistry.defaultRegistry); + } - /** - * Constructor with custom PrometheusProperties and PrometheusRegistry. - * - * @param config the PrometheusProperties to use - * @param registry the PrometheusRegistry to use - */ - public PrometheusMetricsServlet(PrometheusProperties config, PrometheusRegistry registry) { - this.handler = new PrometheusScrapeHandler(config, registry); - } + /** + * Constructor with custom PrometheusProperties and PrometheusRegistry. + * + * @param config the PrometheusProperties to use + * @param registry the PrometheusRegistry to use + */ + public PrometheusMetricsServlet(PrometheusProperties config, PrometheusRegistry registry) { + this.handler = new PrometheusScrapeHandler(config, registry); + } - /** - * Handles HTTP GET requests. Exports Prometheus metrics by delegating to the PrometheusScrapeHandler. - * - * @param request the HttpServletRequest - * @param response the HttpServletResponse - * @throws IOException if an I/O error occurs - */ - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - handler.handleRequest(new HttpExchangeAdapter(request, response)); - } -} \ No newline at end of file + /** + * Handles HTTP GET requests. Exports Prometheus metrics by delegating to the + * PrometheusScrapeHandler. + * + * @param request the HttpServletRequest + * @param response the HttpServletResponse + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws IOException { + handler.handleRequest(new HttpExchangeAdapter(request, response)); + } +} diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriter.java index 3db354c56..e693e0c15 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriter.java @@ -1,16 +1,14 @@ package io.prometheus.metrics.expositionformats; import io.prometheus.metrics.model.snapshots.MetricSnapshots; - import java.io.IOException; import java.io.OutputStream; public interface ExpositionFormatWriter { - boolean accepts(String acceptHeader); + boolean accepts(String acceptHeader); + + /** Text formats use UTF-8 encoding. */ + void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException; - /** - * Text formats use UTF-8 encoding. - */ - void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException; - String getContentType(); + String getContentType(); } diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java index f913753cd..01ea9ef40 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java @@ -5,49 +5,50 @@ public class ExpositionFormats { - private final PrometheusProtobufWriter prometheusProtobufWriter; - private final PrometheusTextFormatWriter prometheusTextFormatWriter; - private final OpenMetricsTextFormatWriter openMetricsTextFormatWriter; - - private ExpositionFormats(PrometheusProtobufWriter prometheusProtobufWriter, - PrometheusTextFormatWriter prometheusTextFormatWriter, - OpenMetricsTextFormatWriter openMetricsTextFormatWriter) { - this.prometheusProtobufWriter = prometheusProtobufWriter; - this.prometheusTextFormatWriter = prometheusTextFormatWriter; - this.openMetricsTextFormatWriter = openMetricsTextFormatWriter; + private final PrometheusProtobufWriter prometheusProtobufWriter; + private final PrometheusTextFormatWriter prometheusTextFormatWriter; + private final OpenMetricsTextFormatWriter openMetricsTextFormatWriter; + + private ExpositionFormats( + PrometheusProtobufWriter prometheusProtobufWriter, + PrometheusTextFormatWriter prometheusTextFormatWriter, + OpenMetricsTextFormatWriter openMetricsTextFormatWriter) { + this.prometheusProtobufWriter = prometheusProtobufWriter; + this.prometheusTextFormatWriter = prometheusTextFormatWriter; + this.openMetricsTextFormatWriter = openMetricsTextFormatWriter; + } + + public static ExpositionFormats init() { + return init(PrometheusProperties.get().getExporterProperties()); + } + + public static ExpositionFormats init(ExporterProperties properties) { + return new ExpositionFormats( + new PrometheusProtobufWriter(), + new PrometheusTextFormatWriter(properties.getIncludeCreatedTimestamps()), + new OpenMetricsTextFormatWriter( + properties.getIncludeCreatedTimestamps(), properties.getExemplarsOnAllMetricTypes())); + } + + public ExpositionFormatWriter findWriter(String acceptHeader) { + if (prometheusProtobufWriter.accepts(acceptHeader)) { + return prometheusProtobufWriter; } - - public static ExpositionFormats init() { - return init(PrometheusProperties.get().getExporterProperties()); - } - - public static ExpositionFormats init(ExporterProperties properties) { - return new ExpositionFormats( - new PrometheusProtobufWriter(), - new PrometheusTextFormatWriter(properties.getIncludeCreatedTimestamps()), - new OpenMetricsTextFormatWriter(properties.getIncludeCreatedTimestamps(), properties.getExemplarsOnAllMetricTypes()) - ); - } - - public ExpositionFormatWriter findWriter(String acceptHeader) { - if (prometheusProtobufWriter.accepts(acceptHeader)) { - return prometheusProtobufWriter; - } - if (openMetricsTextFormatWriter.accepts(acceptHeader)) { - return openMetricsTextFormatWriter; - } - return prometheusTextFormatWriter; + if (openMetricsTextFormatWriter.accepts(acceptHeader)) { + return openMetricsTextFormatWriter; } + return prometheusTextFormatWriter; + } - public PrometheusProtobufWriter getPrometheusProtobufWriter() { - return prometheusProtobufWriter; - } + public PrometheusProtobufWriter getPrometheusProtobufWriter() { + return prometheusProtobufWriter; + } - public PrometheusTextFormatWriter getPrometheusTextFormatWriter() { - return prometheusTextFormatWriter; - } + public PrometheusTextFormatWriter getPrometheusTextFormatWriter() { + return prometheusTextFormatWriter; + } - public OpenMetricsTextFormatWriter getOpenMetricsTextFormatWriter() { - return openMetricsTextFormatWriter; - } + public OpenMetricsTextFormatWriter getOpenMetricsTextFormatWriter() { + return openMetricsTextFormatWriter; + } } diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java index dd92391ff..00ac6b9fc 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java @@ -1,5 +1,11 @@ package io.prometheus.metrics.expositionformats; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeDouble; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeEscapedLabelValue; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLabels; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLong; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeTimestamp; + import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.DataPointSnapshot; @@ -17,317 +23,356 @@ import io.prometheus.metrics.model.snapshots.StateSetSnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; - import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.List; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeDouble; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeEscapedLabelValue; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLabels; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLong; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeTimestamp; - /** - * Write the OpenMetrics text format as defined on https://openmetrics.io. + * Write the OpenMetrics text format as defined on https://openmetrics.io. */ public class OpenMetricsTextFormatWriter implements ExpositionFormatWriter { - public static final String CONTENT_TYPE = "application/openmetrics-text; version=1.0.0; charset=utf-8"; - private final boolean createdTimestampsEnabled; - private final boolean exemplarsOnAllMetricTypesEnabled; + public static final String CONTENT_TYPE = + "application/openmetrics-text; version=1.0.0; charset=utf-8"; + private final boolean createdTimestampsEnabled; + private final boolean exemplarsOnAllMetricTypesEnabled; - /** - * @param createdTimestampsEnabled defines if {@code _created} timestamps should be included in the output or not. - */ - public OpenMetricsTextFormatWriter(boolean createdTimestampsEnabled, boolean exemplarsOnAllMetricTypesEnabled) { - this.createdTimestampsEnabled = createdTimestampsEnabled; - this.exemplarsOnAllMetricTypesEnabled = exemplarsOnAllMetricTypesEnabled; - } + /** + * @param createdTimestampsEnabled defines if {@code _created} timestamps should be included in + * the output or not. + */ + public OpenMetricsTextFormatWriter( + boolean createdTimestampsEnabled, boolean exemplarsOnAllMetricTypesEnabled) { + this.createdTimestampsEnabled = createdTimestampsEnabled; + this.exemplarsOnAllMetricTypesEnabled = exemplarsOnAllMetricTypesEnabled; + } - @Override - public boolean accepts(String acceptHeader) { - if (acceptHeader == null) { - return false; - } - return acceptHeader.contains("application/openmetrics-text"); + @Override + public boolean accepts(String acceptHeader) { + if (acceptHeader == null) { + return false; } + return acceptHeader.contains("application/openmetrics-text"); + } - @Override - public String getContentType() { - return CONTENT_TYPE; - } + @Override + public String getContentType() { + return CONTENT_TYPE; + } - public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { - OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); - for (MetricSnapshot snapshot : metricSnapshots) { - if (snapshot.getDataPoints().size() > 0) { - if (snapshot instanceof CounterSnapshot) { - writeCounter(writer, (CounterSnapshot) snapshot); - } else if (snapshot instanceof GaugeSnapshot) { - writeGauge(writer, (GaugeSnapshot) snapshot); - } else if (snapshot instanceof HistogramSnapshot) { - writeHistogram(writer, (HistogramSnapshot) snapshot); - } else if (snapshot instanceof SummarySnapshot) { - writeSummary(writer, (SummarySnapshot) snapshot); - } else if (snapshot instanceof InfoSnapshot) { - writeInfo(writer, (InfoSnapshot) snapshot); - } else if (snapshot instanceof StateSetSnapshot) { - writeStateSet(writer, (StateSetSnapshot) snapshot); - } else if (snapshot instanceof UnknownSnapshot) { - writeUnknown(writer, (UnknownSnapshot) snapshot); - } - } + public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { + OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); + for (MetricSnapshot snapshot : metricSnapshots) { + if (snapshot.getDataPoints().size() > 0) { + if (snapshot instanceof CounterSnapshot) { + writeCounter(writer, (CounterSnapshot) snapshot); + } else if (snapshot instanceof GaugeSnapshot) { + writeGauge(writer, (GaugeSnapshot) snapshot); + } else if (snapshot instanceof HistogramSnapshot) { + writeHistogram(writer, (HistogramSnapshot) snapshot); + } else if (snapshot instanceof SummarySnapshot) { + writeSummary(writer, (SummarySnapshot) snapshot); + } else if (snapshot instanceof InfoSnapshot) { + writeInfo(writer, (InfoSnapshot) snapshot); + } else if (snapshot instanceof StateSetSnapshot) { + writeStateSet(writer, (StateSetSnapshot) snapshot); + } else if (snapshot instanceof UnknownSnapshot) { + writeUnknown(writer, (UnknownSnapshot) snapshot); } - writer.write("# EOF\n"); - writer.flush(); + } } + writer.write("# EOF\n"); + writer.flush(); + } - private void writeCounter(OutputStreamWriter writer, CounterSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "counter", metadata); - for (CounterSnapshot.CounterDataPointSnapshot data : snapshot.getDataPoints()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), "_total", data.getLabels()); - writeDouble(writer, data.getValue()); - writeScrapeTimestampAndExemplar(writer, data, data.getExemplar()); - writeCreated(writer, metadata, data); - } + private void writeCounter(OutputStreamWriter writer, CounterSnapshot snapshot) + throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "counter", metadata); + for (CounterSnapshot.CounterDataPointSnapshot data : snapshot.getDataPoints()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), "_total", data.getLabels()); + writeDouble(writer, data.getValue()); + writeScrapeTimestampAndExemplar(writer, data, data.getExemplar()); + writeCreated(writer, metadata, data); } + } - private void writeGauge(OutputStreamWriter writer, GaugeSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "gauge", metadata); - for (GaugeSnapshot.GaugeDataPointSnapshot data : snapshot.getDataPoints()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels()); - writeDouble(writer, data.getValue()); - if (exemplarsOnAllMetricTypesEnabled) { - writeScrapeTimestampAndExemplar(writer, data, data.getExemplar()); - } else { - writeScrapeTimestampAndExemplar(writer, data, null); - } - } + private void writeGauge(OutputStreamWriter writer, GaugeSnapshot snapshot) throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "gauge", metadata); + for (GaugeSnapshot.GaugeDataPointSnapshot data : snapshot.getDataPoints()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels()); + writeDouble(writer, data.getValue()); + if (exemplarsOnAllMetricTypesEnabled) { + writeScrapeTimestampAndExemplar(writer, data, data.getExemplar()); + } else { + writeScrapeTimestampAndExemplar(writer, data, null); + } } + } - private void writeHistogram(OutputStreamWriter writer, HistogramSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - if (snapshot.isGaugeHistogram()) { - writeMetadata(writer, "gaugehistogram", metadata); - writeClassicHistogramBuckets(writer, metadata, "_gcount", "_gsum", snapshot.getDataPoints()); - } else { - writeMetadata(writer, "histogram", metadata); - writeClassicHistogramBuckets(writer, metadata, "_count", "_sum", snapshot.getDataPoints()); - } - } - - private void writeClassicHistogramBuckets(OutputStreamWriter writer, MetricMetadata metadata, String countSuffix, String sumSuffix, List dataList) throws IOException { - for (HistogramSnapshot.HistogramDataPointSnapshot data : dataList) { - ClassicHistogramBuckets buckets = getClassicBuckets(data); - Exemplars exemplars = data.getExemplars(); - long cumulativeCount = 0; - for (int i = 0; i < buckets.size(); i++) { - cumulativeCount += buckets.getCount(i); - writeNameAndLabels(writer, metadata.getPrometheusName(), "_bucket", data.getLabels(), "le", buckets.getUpperBound(i)); - writeLong(writer, cumulativeCount); - Exemplar exemplar; - if (i == 0) { - exemplar = exemplars.get(Double.NEGATIVE_INFINITY, buckets.getUpperBound(i)); - } else { - exemplar = exemplars.get(buckets.getUpperBound(i - 1), buckets.getUpperBound(i)); - } - writeScrapeTimestampAndExemplar(writer, data, exemplar); - } - // In OpenMetrics format, histogram _count and _sum are either both present or both absent. - if (data.hasCount() && data.hasSum()) { - writeCountAndSum(writer, metadata, data, countSuffix, sumSuffix, exemplars); - } - writeCreated(writer, metadata, data); - } + private void writeHistogram(OutputStreamWriter writer, HistogramSnapshot snapshot) + throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + if (snapshot.isGaugeHistogram()) { + writeMetadata(writer, "gaugehistogram", metadata); + writeClassicHistogramBuckets(writer, metadata, "_gcount", "_gsum", snapshot.getDataPoints()); + } else { + writeMetadata(writer, "histogram", metadata); + writeClassicHistogramBuckets(writer, metadata, "_count", "_sum", snapshot.getDataPoints()); } + } - private ClassicHistogramBuckets getClassicBuckets(HistogramSnapshot.HistogramDataPointSnapshot data) { - if (data.getClassicBuckets().isEmpty()) { - return ClassicHistogramBuckets.of( - new double[]{Double.POSITIVE_INFINITY}, - new long[]{data.getCount()} - ); + private void writeClassicHistogramBuckets( + OutputStreamWriter writer, + MetricMetadata metadata, + String countSuffix, + String sumSuffix, + List dataList) + throws IOException { + for (HistogramSnapshot.HistogramDataPointSnapshot data : dataList) { + ClassicHistogramBuckets buckets = getClassicBuckets(data); + Exemplars exemplars = data.getExemplars(); + long cumulativeCount = 0; + for (int i = 0; i < buckets.size(); i++) { + cumulativeCount += buckets.getCount(i); + writeNameAndLabels( + writer, + metadata.getPrometheusName(), + "_bucket", + data.getLabels(), + "le", + buckets.getUpperBound(i)); + writeLong(writer, cumulativeCount); + Exemplar exemplar; + if (i == 0) { + exemplar = exemplars.get(Double.NEGATIVE_INFINITY, buckets.getUpperBound(i)); } else { - return data.getClassicBuckets(); + exemplar = exemplars.get(buckets.getUpperBound(i - 1), buckets.getUpperBound(i)); } + writeScrapeTimestampAndExemplar(writer, data, exemplar); + } + // In OpenMetrics format, histogram _count and _sum are either both present or both absent. + if (data.hasCount() && data.hasSum()) { + writeCountAndSum(writer, metadata, data, countSuffix, sumSuffix, exemplars); + } + writeCreated(writer, metadata, data); } + } - private void writeSummary(OutputStreamWriter writer, SummarySnapshot snapshot) throws IOException { - boolean metadataWritten = false; - MetricMetadata metadata = snapshot.getMetadata(); - for (SummarySnapshot.SummaryDataPointSnapshot data : snapshot.getDataPoints()) { - if (data.getQuantiles().size() == 0 && !data.hasCount() && !data.hasSum()) { - continue; - } - if (!metadataWritten) { - writeMetadata(writer, "summary", metadata); - metadataWritten = true; - } - Exemplars exemplars = data.getExemplars(); - // Exemplars for summaries are new, and there's no best practice yet which Exemplars to choose for which - // time series. We select exemplars[0] for _count, exemplars[1] for _sum, and exemplars[2...] for the - // quantiles, all indexes modulo exemplars.length. - int exemplarIndex = 1; - for (Quantile quantile : data.getQuantiles()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels(), "quantile", quantile.getQuantile()); - writeDouble(writer, quantile.getValue()); - if (exemplars.size() > 0 && exemplarsOnAllMetricTypesEnabled) { - exemplarIndex = (exemplarIndex + 1) % exemplars.size(); - writeScrapeTimestampAndExemplar(writer, data, exemplars.get(exemplarIndex)); - } else { - writeScrapeTimestampAndExemplar(writer, data, null); - } - } - // Unlike histograms, summaries can have only a count or only a sum according to OpenMetrics. - writeCountAndSum(writer, metadata, data, "_count", "_sum", exemplars); - writeCreated(writer, metadata, data); - } + private ClassicHistogramBuckets getClassicBuckets( + HistogramSnapshot.HistogramDataPointSnapshot data) { + if (data.getClassicBuckets().isEmpty()) { + return ClassicHistogramBuckets.of( + new double[] {Double.POSITIVE_INFINITY}, new long[] {data.getCount()}); + } else { + return data.getClassicBuckets(); } + } - private void writeInfo(OutputStreamWriter writer, InfoSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "info", metadata); - for (InfoSnapshot.InfoDataPointSnapshot data : snapshot.getDataPoints()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), "_info", data.getLabels()); - writer.write("1"); - writeScrapeTimestampAndExemplar(writer, data, null); + private void writeSummary(OutputStreamWriter writer, SummarySnapshot snapshot) + throws IOException { + boolean metadataWritten = false; + MetricMetadata metadata = snapshot.getMetadata(); + for (SummarySnapshot.SummaryDataPointSnapshot data : snapshot.getDataPoints()) { + if (data.getQuantiles().size() == 0 && !data.hasCount() && !data.hasSum()) { + continue; + } + if (!metadataWritten) { + writeMetadata(writer, "summary", metadata); + metadataWritten = true; + } + Exemplars exemplars = data.getExemplars(); + // Exemplars for summaries are new, and there's no best practice yet which Exemplars to choose + // for which + // time series. We select exemplars[0] for _count, exemplars[1] for _sum, and exemplars[2...] + // for the + // quantiles, all indexes modulo exemplars.length. + int exemplarIndex = 1; + for (Quantile quantile : data.getQuantiles()) { + writeNameAndLabels( + writer, + metadata.getPrometheusName(), + null, + data.getLabels(), + "quantile", + quantile.getQuantile()); + writeDouble(writer, quantile.getValue()); + if (exemplars.size() > 0 && exemplarsOnAllMetricTypesEnabled) { + exemplarIndex = (exemplarIndex + 1) % exemplars.size(); + writeScrapeTimestampAndExemplar(writer, data, exemplars.get(exemplarIndex)); + } else { + writeScrapeTimestampAndExemplar(writer, data, null); } + } + // Unlike histograms, summaries can have only a count or only a sum according to OpenMetrics. + writeCountAndSum(writer, metadata, data, "_count", "_sum", exemplars); + writeCreated(writer, metadata, data); } + } - private void writeStateSet(OutputStreamWriter writer, StateSetSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "stateset", metadata); - for (StateSetSnapshot.StateSetDataPointSnapshot data : snapshot.getDataPoints()) { - for (int i = 0; i < data.size(); i++) { - writer.write(metadata.getPrometheusName()); - writer.write('{'); - for (int j = 0; j < data.getLabels().size(); j++) { - if (j > 0) { - writer.write(","); - } - writer.write(data.getLabels().getPrometheusName(j)); - writer.write("=\""); - writeEscapedLabelValue(writer, data.getLabels().getValue(j)); - writer.write("\""); - } - if (!data.getLabels().isEmpty()) { - writer.write(","); - } - writer.write(metadata.getPrometheusName()); - writer.write("=\""); - writeEscapedLabelValue(writer, data.getName(i)); - writer.write("\"} "); - if (data.isTrue(i)) { - writer.write("1"); - } else { - writer.write("0"); - } - writeScrapeTimestampAndExemplar(writer, data, null); - } - } + private void writeInfo(OutputStreamWriter writer, InfoSnapshot snapshot) throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "info", metadata); + for (InfoSnapshot.InfoDataPointSnapshot data : snapshot.getDataPoints()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), "_info", data.getLabels()); + writer.write("1"); + writeScrapeTimestampAndExemplar(writer, data, null); } + } - private void writeUnknown(OutputStreamWriter writer, UnknownSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "unknown", metadata); - for (UnknownSnapshot.UnknownDataPointSnapshot data : snapshot.getDataPoints()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels()); - writeDouble(writer, data.getValue()); - if (exemplarsOnAllMetricTypesEnabled) { - writeScrapeTimestampAndExemplar(writer, data, data.getExemplar()); - } else { - writeScrapeTimestampAndExemplar(writer, data, null); - } + private void writeStateSet(OutputStreamWriter writer, StateSetSnapshot snapshot) + throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "stateset", metadata); + for (StateSetSnapshot.StateSetDataPointSnapshot data : snapshot.getDataPoints()) { + for (int i = 0; i < data.size(); i++) { + writer.write(metadata.getPrometheusName()); + writer.write('{'); + for (int j = 0; j < data.getLabels().size(); j++) { + if (j > 0) { + writer.write(","); + } + writer.write(data.getLabels().getPrometheusName(j)); + writer.write("=\""); + writeEscapedLabelValue(writer, data.getLabels().getValue(j)); + writer.write("\""); } - } - - private void writeCountAndSum(OutputStreamWriter writer, MetricMetadata metadata, DistributionDataPointSnapshot data, String countSuffix, String sumSuffix, Exemplars exemplars) throws IOException { - if (data.hasCount()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), countSuffix, data.getLabels()); - writeLong(writer, data.getCount()); - if (exemplarsOnAllMetricTypesEnabled) { - writeScrapeTimestampAndExemplar(writer, data, exemplars.getLatest()); - } else { - writeScrapeTimestampAndExemplar(writer, data, null); - } + if (!data.getLabels().isEmpty()) { + writer.write(","); } - if (data.hasSum()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), sumSuffix, data.getLabels()); - writeDouble(writer, data.getSum()); - writeScrapeTimestampAndExemplar(writer, data, null); + writer.write(metadata.getPrometheusName()); + writer.write("=\""); + writeEscapedLabelValue(writer, data.getName(i)); + writer.write("\"} "); + if (data.isTrue(i)) { + writer.write("1"); + } else { + writer.write("0"); } + writeScrapeTimestampAndExemplar(writer, data, null); + } } + } - private void writeCreated(OutputStreamWriter writer, MetricMetadata metadata, DataPointSnapshot data) throws IOException { - if (createdTimestampsEnabled && data.hasCreatedTimestamp()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), "_created", data.getLabels()); - writeTimestamp(writer, data.getCreatedTimestampMillis()); - if (data.hasScrapeTimestamp()) { - writer.write(' '); - writeTimestamp(writer, data.getScrapeTimestampMillis()); - } - writer.write('\n'); - } + private void writeUnknown(OutputStreamWriter writer, UnknownSnapshot snapshot) + throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "unknown", metadata); + for (UnknownSnapshot.UnknownDataPointSnapshot data : snapshot.getDataPoints()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels()); + writeDouble(writer, data.getValue()); + if (exemplarsOnAllMetricTypesEnabled) { + writeScrapeTimestampAndExemplar(writer, data, data.getExemplar()); + } else { + writeScrapeTimestampAndExemplar(writer, data, null); + } } + } - private void writeNameAndLabels(OutputStreamWriter writer, String name, String suffix, Labels labels) throws IOException { - writeNameAndLabels(writer, name, suffix, labels, null, 0.0); + private void writeCountAndSum( + OutputStreamWriter writer, + MetricMetadata metadata, + DistributionDataPointSnapshot data, + String countSuffix, + String sumSuffix, + Exemplars exemplars) + throws IOException { + if (data.hasCount()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), countSuffix, data.getLabels()); + writeLong(writer, data.getCount()); + if (exemplarsOnAllMetricTypesEnabled) { + writeScrapeTimestampAndExemplar(writer, data, exemplars.getLatest()); + } else { + writeScrapeTimestampAndExemplar(writer, data, null); + } } + if (data.hasSum()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), sumSuffix, data.getLabels()); + writeDouble(writer, data.getSum()); + writeScrapeTimestampAndExemplar(writer, data, null); + } + } - private void writeNameAndLabels(OutputStreamWriter writer, String name, String suffix, Labels labels, - String additionalLabelName, double additionalLabelValue) throws IOException { - writer.write(name); - if (suffix != null) { - writer.write(suffix); - } - if (!labels.isEmpty() || additionalLabelName != null) { - writeLabels(writer, labels, additionalLabelName, additionalLabelValue); - } + private void writeCreated( + OutputStreamWriter writer, MetricMetadata metadata, DataPointSnapshot data) + throws IOException { + if (createdTimestampsEnabled && data.hasCreatedTimestamp()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), "_created", data.getLabels()); + writeTimestamp(writer, data.getCreatedTimestampMillis()); + if (data.hasScrapeTimestamp()) { writer.write(' '); + writeTimestamp(writer, data.getScrapeTimestampMillis()); + } + writer.write('\n'); } + } - private void writeScrapeTimestampAndExemplar(OutputStreamWriter writer, DataPointSnapshot data, Exemplar exemplar) throws IOException { - if (data.hasScrapeTimestamp()) { - writer.write(' '); - writeTimestamp(writer, data.getScrapeTimestampMillis()); - } - if (exemplar != null) { - writer.write(" # "); - writeLabels(writer, exemplar.getLabels(), null, 0); - writer.write(' '); - writeDouble(writer, exemplar.getValue()); - if (exemplar.hasTimestamp()) { - writer.write(' '); - writeTimestamp(writer, exemplar.getTimestampMillis()); - } - } - writer.write('\n'); + private void writeNameAndLabels( + OutputStreamWriter writer, String name, String suffix, Labels labels) throws IOException { + writeNameAndLabels(writer, name, suffix, labels, null, 0.0); + } + + private void writeNameAndLabels( + OutputStreamWriter writer, + String name, + String suffix, + Labels labels, + String additionalLabelName, + double additionalLabelValue) + throws IOException { + writer.write(name); + if (suffix != null) { + writer.write(suffix); } + if (!labels.isEmpty() || additionalLabelName != null) { + writeLabels(writer, labels, additionalLabelName, additionalLabelValue); + } + writer.write(' '); + } - private void writeMetadata(OutputStreamWriter writer, String typeName, MetricMetadata metadata) throws IOException { - writer.write("# TYPE "); - writer.write(metadata.getPrometheusName()); + private void writeScrapeTimestampAndExemplar( + OutputStreamWriter writer, DataPointSnapshot data, Exemplar exemplar) throws IOException { + if (data.hasScrapeTimestamp()) { + writer.write(' '); + writeTimestamp(writer, data.getScrapeTimestampMillis()); + } + if (exemplar != null) { + writer.write(" # "); + writeLabels(writer, exemplar.getLabels(), null, 0); + writer.write(' '); + writeDouble(writer, exemplar.getValue()); + if (exemplar.hasTimestamp()) { writer.write(' '); - writer.write(typeName); - writer.write('\n'); - if (metadata.getUnit() != null) { - writer.write("# UNIT "); - writer.write(metadata.getPrometheusName()); - writer.write(' '); - writeEscapedLabelValue(writer, metadata.getUnit().toString()); - writer.write('\n'); - } - if (metadata.getHelp() != null && !metadata.getHelp().isEmpty()) { - writer.write("# HELP "); - writer.write(metadata.getPrometheusName()); - writer.write(' '); - writeEscapedLabelValue(writer, metadata.getHelp()); - writer.write('\n'); - } + writeTimestamp(writer, exemplar.getTimestampMillis()); + } + } + writer.write('\n'); + } + + private void writeMetadata(OutputStreamWriter writer, String typeName, MetricMetadata metadata) + throws IOException { + writer.write("# TYPE "); + writer.write(metadata.getPrometheusName()); + writer.write(' '); + writer.write(typeName); + writer.write('\n'); + if (metadata.getUnit() != null) { + writer.write("# UNIT "); + writer.write(metadata.getPrometheusName()); + writer.write(' '); + writeEscapedLabelValue(writer, metadata.getUnit().toString()); + writer.write('\n'); + } + if (metadata.getHelp() != null && !metadata.getHelp().isEmpty()) { + writer.write("# HELP "); + writer.write(metadata.getPrometheusName()); + writer.write(' '); + writeEscapedLabelValue(writer, metadata.getHelp()); + writer.write('\n'); } + } } diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java index e0103059a..1c1535de3 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java @@ -1,16 +1,17 @@ package io.prometheus.metrics.expositionformats; -import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; +import static io.prometheus.metrics.expositionformats.ProtobufUtil.timestampFromMillis; + import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; +import io.prometheus.metrics.model.snapshots.DataPointSnapshot; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.HistogramSnapshot; import io.prometheus.metrics.model.snapshots.InfoSnapshot; import io.prometheus.metrics.model.snapshots.Labels; -import io.prometheus.metrics.model.snapshots.DataPointSnapshot; import io.prometheus.metrics.model.snapshots.MetricMetadata; import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; @@ -19,348 +20,362 @@ import io.prometheus.metrics.model.snapshots.StateSetSnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; - +import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; import java.io.IOException; import java.io.OutputStream; -import static io.prometheus.metrics.expositionformats.ProtobufUtil.timestampFromMillis; - /** - * Write the Prometheus protobuf format as defined in - * github.com/prometheus/client_model. - *

    - * As of today, this is the only exposition format that supports native histograms. + * Write the Prometheus protobuf format as defined in github.com/prometheus/client_model. + * + *

    As of today, this is the only exposition format that supports native histograms. */ public class PrometheusProtobufWriter implements ExpositionFormatWriter { - public static final String CONTENT_TYPE = "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited"; + public static final String CONTENT_TYPE = + "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited"; - @Override - public boolean accepts(String acceptHeader) { - if (acceptHeader == null) { - return false; - } else { - return acceptHeader.contains("application/vnd.google.protobuf") - && acceptHeader.contains("proto=io.prometheus.client.MetricFamily"); - } + @Override + public boolean accepts(String acceptHeader) { + if (acceptHeader == null) { + return false; + } else { + return acceptHeader.contains("application/vnd.google.protobuf") + && acceptHeader.contains("proto=io.prometheus.client.MetricFamily"); } + } - @Override - public String getContentType() { - return CONTENT_TYPE; - } + @Override + public String getContentType() { + return CONTENT_TYPE; + } - public String toDebugString(MetricSnapshots metricSnapshots) { - StringBuilder stringBuilder = new StringBuilder(); - for (MetricSnapshot snapshot : metricSnapshots) { - if (snapshot.getDataPoints().size() > 0) { - stringBuilder.append(TextFormat.printer().printToString(convert(snapshot))); - } - } - return stringBuilder.toString(); + public String toDebugString(MetricSnapshots metricSnapshots) { + StringBuilder stringBuilder = new StringBuilder(); + for (MetricSnapshot snapshot : metricSnapshots) { + if (snapshot.getDataPoints().size() > 0) { + stringBuilder.append(TextFormat.printer().printToString(convert(snapshot))); + } } + return stringBuilder.toString(); + } - @Override - public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { - for (MetricSnapshot snapshot : metricSnapshots) { - if (snapshot.getDataPoints().size() > 0) { - convert(snapshot).writeDelimitedTo(out); - } - } - } - - public Metrics.MetricFamily convert(MetricSnapshot snapshot) { - Metrics.MetricFamily.Builder builder = Metrics.MetricFamily.newBuilder(); - if (snapshot instanceof CounterSnapshot) { - for (CounterDataPointSnapshot data : ((CounterSnapshot) snapshot).getDataPoints()) { - builder.addMetric(convert(data)); - } - setMetadataUnlessEmpty(builder, snapshot.getMetadata(), "_total", Metrics.MetricType.COUNTER); - } else if (snapshot instanceof GaugeSnapshot) { - for (GaugeSnapshot.GaugeDataPointSnapshot data : ((GaugeSnapshot) snapshot).getDataPoints()) { - builder.addMetric(convert(data)); - } - setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.GAUGE); - } else if (snapshot instanceof HistogramSnapshot) { - HistogramSnapshot histogram = (HistogramSnapshot) snapshot; - for (HistogramSnapshot.HistogramDataPointSnapshot data : histogram.getDataPoints()) { - builder.addMetric(convert(data)); - } - Metrics.MetricType type = histogram.isGaugeHistogram() ? Metrics.MetricType.GAUGE_HISTOGRAM : Metrics.MetricType.HISTOGRAM; - setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, type); - } else if (snapshot instanceof SummarySnapshot) { - for (SummarySnapshot.SummaryDataPointSnapshot data : ((SummarySnapshot) snapshot).getDataPoints()) { - if (data.hasCount() || data.hasSum() || data.getQuantiles().size() > 0) { - builder.addMetric(convert(data)); - } - } - setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.SUMMARY); - } else if (snapshot instanceof InfoSnapshot) { - for (InfoSnapshot.InfoDataPointSnapshot data : ((InfoSnapshot) snapshot).getDataPoints()) { - builder.addMetric(convert(data)); - } - setMetadataUnlessEmpty(builder, snapshot.getMetadata(), "_info", Metrics.MetricType.GAUGE); - } else if (snapshot instanceof StateSetSnapshot) { - for (StateSetSnapshot.StateSetDataPointSnapshot data : ((StateSetSnapshot) snapshot).getDataPoints()) { - for (int i = 0; i < data.size(); i++) { - builder.addMetric(convert(data, snapshot.getMetadata().getPrometheusName(), i)); - } - } - setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.GAUGE); - } else if (snapshot instanceof UnknownSnapshot) { - for (UnknownSnapshot.UnknownDataPointSnapshot data : ((UnknownSnapshot) snapshot).getDataPoints()) { - builder.addMetric(convert(data)); - } - setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.UNTYPED); - } - return builder.build(); + @Override + public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { + for (MetricSnapshot snapshot : metricSnapshots) { + if (snapshot.getDataPoints().size() > 0) { + convert(snapshot).writeDelimitedTo(out); + } } + } - private void setMetadataUnlessEmpty(Metrics.MetricFamily.Builder builder, MetricMetadata metadata, String nameSuffix, Metrics.MetricType type) { - if (builder.getMetricCount() == 0) { - return; + public Metrics.MetricFamily convert(MetricSnapshot snapshot) { + Metrics.MetricFamily.Builder builder = Metrics.MetricFamily.newBuilder(); + if (snapshot instanceof CounterSnapshot) { + for (CounterDataPointSnapshot data : ((CounterSnapshot) snapshot).getDataPoints()) { + builder.addMetric(convert(data)); + } + setMetadataUnlessEmpty(builder, snapshot.getMetadata(), "_total", Metrics.MetricType.COUNTER); + } else if (snapshot instanceof GaugeSnapshot) { + for (GaugeSnapshot.GaugeDataPointSnapshot data : ((GaugeSnapshot) snapshot).getDataPoints()) { + builder.addMetric(convert(data)); + } + setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.GAUGE); + } else if (snapshot instanceof HistogramSnapshot) { + HistogramSnapshot histogram = (HistogramSnapshot) snapshot; + for (HistogramSnapshot.HistogramDataPointSnapshot data : histogram.getDataPoints()) { + builder.addMetric(convert(data)); + } + Metrics.MetricType type = + histogram.isGaugeHistogram() + ? Metrics.MetricType.GAUGE_HISTOGRAM + : Metrics.MetricType.HISTOGRAM; + setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, type); + } else if (snapshot instanceof SummarySnapshot) { + for (SummarySnapshot.SummaryDataPointSnapshot data : + ((SummarySnapshot) snapshot).getDataPoints()) { + if (data.hasCount() || data.hasSum() || data.getQuantiles().size() > 0) { + builder.addMetric(convert(data)); } - if (nameSuffix == null) { - builder.setName(metadata.getPrometheusName()); - } else { - builder.setName(metadata.getPrometheusName() + nameSuffix); - } - if (metadata.getHelp() != null) { - builder.setHelp(metadata.getHelp()); + } + setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.SUMMARY); + } else if (snapshot instanceof InfoSnapshot) { + for (InfoSnapshot.InfoDataPointSnapshot data : ((InfoSnapshot) snapshot).getDataPoints()) { + builder.addMetric(convert(data)); + } + setMetadataUnlessEmpty(builder, snapshot.getMetadata(), "_info", Metrics.MetricType.GAUGE); + } else if (snapshot instanceof StateSetSnapshot) { + for (StateSetSnapshot.StateSetDataPointSnapshot data : + ((StateSetSnapshot) snapshot).getDataPoints()) { + for (int i = 0; i < data.size(); i++) { + builder.addMetric(convert(data, snapshot.getMetadata().getPrometheusName(), i)); } - builder.setType(type); + } + setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.GAUGE); + } else if (snapshot instanceof UnknownSnapshot) { + for (UnknownSnapshot.UnknownDataPointSnapshot data : + ((UnknownSnapshot) snapshot).getDataPoints()) { + builder.addMetric(convert(data)); + } + setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.UNTYPED); } + return builder.build(); + } - private Metrics.Metric.Builder convert(CounterDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Counter.Builder counterBuilder = Metrics.Counter.newBuilder(); - counterBuilder.setValue(data.getValue()); - if (data.getExemplar() != null) { - counterBuilder.setExemplar(convert(data.getExemplar())); - } - addLabels(metricBuilder, data.getLabels()); - metricBuilder.setCounter(counterBuilder.build()); - setScrapeTimestamp(metricBuilder, data); - return metricBuilder; + private void setMetadataUnlessEmpty( + Metrics.MetricFamily.Builder builder, + MetricMetadata metadata, + String nameSuffix, + Metrics.MetricType type) { + if (builder.getMetricCount() == 0) { + return; } + if (nameSuffix == null) { + builder.setName(metadata.getPrometheusName()); + } else { + builder.setName(metadata.getPrometheusName() + nameSuffix); + } + if (metadata.getHelp() != null) { + builder.setHelp(metadata.getHelp()); + } + builder.setType(type); + } - private Metrics.Metric.Builder convert(GaugeSnapshot.GaugeDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); - gaugeBuilder.setValue(data.getValue()); - addLabels(metricBuilder, data.getLabels()); - metricBuilder.setGauge(gaugeBuilder); - setScrapeTimestamp(metricBuilder, data); - return metricBuilder; + private Metrics.Metric.Builder convert(CounterDataPointSnapshot data) { + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + Metrics.Counter.Builder counterBuilder = Metrics.Counter.newBuilder(); + counterBuilder.setValue(data.getValue()); + if (data.getExemplar() != null) { + counterBuilder.setExemplar(convert(data.getExemplar())); } + addLabels(metricBuilder, data.getLabels()); + metricBuilder.setCounter(counterBuilder.build()); + setScrapeTimestamp(metricBuilder, data); + return metricBuilder; + } - private Metrics.Metric.Builder convert(HistogramSnapshot.HistogramDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Histogram.Builder histogramBuilder = Metrics.Histogram.newBuilder(); - if (data.hasNativeHistogramData()) { - histogramBuilder.setSchema(data.getNativeSchema()); - histogramBuilder.setZeroCount(data.getNativeZeroCount()); - histogramBuilder.setZeroThreshold(data.getNativeZeroThreshold()); - addBuckets(histogramBuilder, data.getNativeBucketsForPositiveValues(), +1); - addBuckets(histogramBuilder, data.getNativeBucketsForNegativeValues(), -1); + private Metrics.Metric.Builder convert(GaugeSnapshot.GaugeDataPointSnapshot data) { + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); + gaugeBuilder.setValue(data.getValue()); + addLabels(metricBuilder, data.getLabels()); + metricBuilder.setGauge(gaugeBuilder); + setScrapeTimestamp(metricBuilder, data); + return metricBuilder; + } - if (!data.hasClassicHistogramData()) { // native only - // Add a single +Inf bucket for the exemplar. - Exemplar exemplar = data.getExemplars().getLatest(); - if (exemplar != null) { - Metrics.Bucket.Builder bucketBuilder = Metrics.Bucket.newBuilder() - .setCumulativeCount(getNativeCount(data)) - .setUpperBound(Double.POSITIVE_INFINITY); - bucketBuilder.setExemplar(convert(exemplar)); - histogramBuilder.addBucket(bucketBuilder); - } - } - } - if (data.hasClassicHistogramData()) { + private Metrics.Metric.Builder convert(HistogramSnapshot.HistogramDataPointSnapshot data) { + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + Metrics.Histogram.Builder histogramBuilder = Metrics.Histogram.newBuilder(); + if (data.hasNativeHistogramData()) { + histogramBuilder.setSchema(data.getNativeSchema()); + histogramBuilder.setZeroCount(data.getNativeZeroCount()); + histogramBuilder.setZeroThreshold(data.getNativeZeroThreshold()); + addBuckets(histogramBuilder, data.getNativeBucketsForPositiveValues(), +1); + addBuckets(histogramBuilder, data.getNativeBucketsForNegativeValues(), -1); - ClassicHistogramBuckets buckets = data.getClassicBuckets(); - double lowerBound = Double.NEGATIVE_INFINITY; - long cumulativeCount = 0; - for (int i = 0; i < buckets.size(); i++) { - cumulativeCount += buckets.getCount(i); - double upperBound = buckets.getUpperBound(i); - Metrics.Bucket.Builder bucketBuilder = Metrics.Bucket.newBuilder() - .setCumulativeCount(cumulativeCount) - .setUpperBound(upperBound); - Exemplar exemplar = data.getExemplars().get(lowerBound, upperBound); - if (exemplar != null) { - bucketBuilder.setExemplar(convert(exemplar)); - } - histogramBuilder.addBucket(bucketBuilder); - lowerBound = upperBound; - } - } - addLabels(metricBuilder, data.getLabels()); - setScrapeTimestamp(metricBuilder, data); - if (data.hasCount()) { - histogramBuilder.setSampleCount(data.getCount()); + if (!data.hasClassicHistogramData()) { // native only + // Add a single +Inf bucket for the exemplar. + Exemplar exemplar = data.getExemplars().getLatest(); + if (exemplar != null) { + Metrics.Bucket.Builder bucketBuilder = + Metrics.Bucket.newBuilder() + .setCumulativeCount(getNativeCount(data)) + .setUpperBound(Double.POSITIVE_INFINITY); + bucketBuilder.setExemplar(convert(exemplar)); + histogramBuilder.addBucket(bucketBuilder); } - if (data.hasSum()) { - histogramBuilder.setSampleSum(data.getSum()); - } - metricBuilder.setHistogram(histogramBuilder.build()); - return metricBuilder; + } } + if (data.hasClassicHistogramData()) { - private long getNativeCount(HistogramSnapshot.HistogramDataPointSnapshot data) { - if (data.hasCount()) { - return data.getCount(); - } else { - long count = data.getNativeZeroCount(); - for (int i = 0; i < data.getNativeBucketsForPositiveValues().size(); i++) { - count += data.getNativeBucketsForPositiveValues().getCount(i); - } - for (int i = 0; i < data.getNativeBucketsForNegativeValues().size(); i++) { - count += data.getNativeBucketsForNegativeValues().getCount(i); - } - return count; + ClassicHistogramBuckets buckets = data.getClassicBuckets(); + double lowerBound = Double.NEGATIVE_INFINITY; + long cumulativeCount = 0; + for (int i = 0; i < buckets.size(); i++) { + cumulativeCount += buckets.getCount(i); + double upperBound = buckets.getUpperBound(i); + Metrics.Bucket.Builder bucketBuilder = + Metrics.Bucket.newBuilder() + .setCumulativeCount(cumulativeCount) + .setUpperBound(upperBound); + Exemplar exemplar = data.getExemplars().get(lowerBound, upperBound); + if (exemplar != null) { + bucketBuilder.setExemplar(convert(exemplar)); } + histogramBuilder.addBucket(bucketBuilder); + lowerBound = upperBound; + } + } + addLabels(metricBuilder, data.getLabels()); + setScrapeTimestamp(metricBuilder, data); + if (data.hasCount()) { + histogramBuilder.setSampleCount(data.getCount()); + } + if (data.hasSum()) { + histogramBuilder.setSampleSum(data.getSum()); } + metricBuilder.setHistogram(histogramBuilder.build()); + return metricBuilder; + } - private void addBuckets(Metrics.Histogram.Builder histogramBuilder, NativeHistogramBuckets buckets, int sgn) { - if (buckets.size() > 0) { - Metrics.BucketSpan.Builder currentSpan = Metrics.BucketSpan.newBuilder(); - currentSpan.setOffset(buckets.getBucketIndex(0)); - currentSpan.setLength(0); - int previousIndex = currentSpan.getOffset(); - long previousCount = 0; - for (int i = 0; i < buckets.size(); i++) { - if (buckets.getBucketIndex(i) > previousIndex + 1) { - // If the gap between bucketIndex and previousIndex is just 1 or 2, - // we don't start a new span but continue the existing span and add 1 or 2 empty buckets. - if (buckets.getBucketIndex(i) <= previousIndex + 3) { - while (buckets.getBucketIndex(i) > previousIndex + 1) { - currentSpan.setLength(currentSpan.getLength() + 1); - previousIndex++; - if (sgn > 0) { - histogramBuilder.addPositiveDelta(-previousCount); - } else { - histogramBuilder.addNegativeDelta(-previousCount); - } - previousCount = 0; - } - } else { - if (sgn > 0) { - histogramBuilder.addPositiveSpan(currentSpan.build()); - } else { - histogramBuilder.addNegativeSpan(currentSpan.build()); - } - currentSpan = Metrics.BucketSpan.newBuilder(); - currentSpan.setOffset(buckets.getBucketIndex(i) - (previousIndex + 1)); - } - } - currentSpan.setLength(currentSpan.getLength() + 1); - previousIndex = buckets.getBucketIndex(i); - if (sgn > 0) { - histogramBuilder.addPositiveDelta(buckets.getCount(i) - previousCount); - } else { - histogramBuilder.addNegativeDelta(buckets.getCount(i) - previousCount); - } - previousCount = buckets.getCount(i); + private long getNativeCount(HistogramSnapshot.HistogramDataPointSnapshot data) { + if (data.hasCount()) { + return data.getCount(); + } else { + long count = data.getNativeZeroCount(); + for (int i = 0; i < data.getNativeBucketsForPositiveValues().size(); i++) { + count += data.getNativeBucketsForPositiveValues().getCount(i); + } + for (int i = 0; i < data.getNativeBucketsForNegativeValues().size(); i++) { + count += data.getNativeBucketsForNegativeValues().getCount(i); + } + return count; + } + } + + private void addBuckets( + Metrics.Histogram.Builder histogramBuilder, NativeHistogramBuckets buckets, int sgn) { + if (buckets.size() > 0) { + Metrics.BucketSpan.Builder currentSpan = Metrics.BucketSpan.newBuilder(); + currentSpan.setOffset(buckets.getBucketIndex(0)); + currentSpan.setLength(0); + int previousIndex = currentSpan.getOffset(); + long previousCount = 0; + for (int i = 0; i < buckets.size(); i++) { + if (buckets.getBucketIndex(i) > previousIndex + 1) { + // If the gap between bucketIndex and previousIndex is just 1 or 2, + // we don't start a new span but continue the existing span and add 1 or 2 empty buckets. + if (buckets.getBucketIndex(i) <= previousIndex + 3) { + while (buckets.getBucketIndex(i) > previousIndex + 1) { + currentSpan.setLength(currentSpan.getLength() + 1); + previousIndex++; + if (sgn > 0) { + histogramBuilder.addPositiveDelta(-previousCount); + } else { + histogramBuilder.addNegativeDelta(-previousCount); + } + previousCount = 0; } + } else { if (sgn > 0) { - histogramBuilder.addPositiveSpan(currentSpan.build()); + histogramBuilder.addPositiveSpan(currentSpan.build()); } else { - histogramBuilder.addNegativeSpan(currentSpan.build()); + histogramBuilder.addNegativeSpan(currentSpan.build()); } + currentSpan = Metrics.BucketSpan.newBuilder(); + currentSpan.setOffset(buckets.getBucketIndex(i) - (previousIndex + 1)); + } } - } - - private Metrics.Metric.Builder convert(SummarySnapshot.SummaryDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Summary.Builder summaryBuilder = Metrics.Summary.newBuilder(); - if (data.hasCount()) { - summaryBuilder.setSampleCount(data.getCount()); - } - if (data.hasSum()) { - summaryBuilder.setSampleSum(data.getSum()); - } - Quantiles quantiles = data.getQuantiles(); - for (int i = 0; i < quantiles.size(); i++) { - summaryBuilder.addQuantile(Metrics.Quantile.newBuilder() - .setQuantile(quantiles.get(i).getQuantile()) - .setValue(quantiles.get(i).getValue()) - .build()); + currentSpan.setLength(currentSpan.getLength() + 1); + previousIndex = buckets.getBucketIndex(i); + if (sgn > 0) { + histogramBuilder.addPositiveDelta(buckets.getCount(i) - previousCount); + } else { + histogramBuilder.addNegativeDelta(buckets.getCount(i) - previousCount); } - addLabels(metricBuilder, data.getLabels()); - metricBuilder.setSummary(summaryBuilder.build()); - setScrapeTimestamp(metricBuilder, data); - return metricBuilder; + previousCount = buckets.getCount(i); + } + if (sgn > 0) { + histogramBuilder.addPositiveSpan(currentSpan.build()); + } else { + histogramBuilder.addNegativeSpan(currentSpan.build()); + } } + } - private Metrics.Metric.Builder convert(InfoSnapshot.InfoDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); - gaugeBuilder.setValue(1); - addLabels(metricBuilder, data.getLabels()); - metricBuilder.setGauge(gaugeBuilder); - setScrapeTimestamp(metricBuilder, data); - return metricBuilder; + private Metrics.Metric.Builder convert(SummarySnapshot.SummaryDataPointSnapshot data) { + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + Metrics.Summary.Builder summaryBuilder = Metrics.Summary.newBuilder(); + if (data.hasCount()) { + summaryBuilder.setSampleCount(data.getCount()); } - - private Metrics.Metric.Builder convert(StateSetSnapshot.StateSetDataPointSnapshot data, String name, int i) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); - addLabels(metricBuilder, data.getLabels()); - metricBuilder.addLabel(Metrics.LabelPair.newBuilder() - .setName(name) - .setValue(data.getName(i)) - .build()); - if (data.isTrue(i)) { - gaugeBuilder.setValue(1); - } else { - gaugeBuilder.setValue(0); - } - metricBuilder.setGauge(gaugeBuilder); - setScrapeTimestamp(metricBuilder, data); - return metricBuilder; + if (data.hasSum()) { + summaryBuilder.setSampleSum(data.getSum()); } + Quantiles quantiles = data.getQuantiles(); + for (int i = 0; i < quantiles.size(); i++) { + summaryBuilder.addQuantile( + Metrics.Quantile.newBuilder() + .setQuantile(quantiles.get(i).getQuantile()) + .setValue(quantiles.get(i).getValue()) + .build()); + } + addLabels(metricBuilder, data.getLabels()); + metricBuilder.setSummary(summaryBuilder.build()); + setScrapeTimestamp(metricBuilder, data); + return metricBuilder; + } + + private Metrics.Metric.Builder convert(InfoSnapshot.InfoDataPointSnapshot data) { + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); + gaugeBuilder.setValue(1); + addLabels(metricBuilder, data.getLabels()); + metricBuilder.setGauge(gaugeBuilder); + setScrapeTimestamp(metricBuilder, data); + return metricBuilder; + } - private Metrics.Metric.Builder convert(UnknownSnapshot.UnknownDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Untyped.Builder untypedBuilder = Metrics.Untyped.newBuilder(); - untypedBuilder.setValue(data.getValue()); - addLabels(metricBuilder, data.getLabels()); - metricBuilder.setUntyped(untypedBuilder); - return metricBuilder; + private Metrics.Metric.Builder convert( + StateSetSnapshot.StateSetDataPointSnapshot data, String name, int i) { + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); + addLabels(metricBuilder, data.getLabels()); + metricBuilder.addLabel( + Metrics.LabelPair.newBuilder().setName(name).setValue(data.getName(i)).build()); + if (data.isTrue(i)) { + gaugeBuilder.setValue(1); + } else { + gaugeBuilder.setValue(0); } + metricBuilder.setGauge(gaugeBuilder); + setScrapeTimestamp(metricBuilder, data); + return metricBuilder; + } - private void addLabels(Metrics.Metric.Builder metricBuilder, Labels labels) { - for (int i = 0; i < labels.size(); i++) { - metricBuilder.addLabel(Metrics.LabelPair.newBuilder() - .setName(labels.getPrometheusName(i)) - .setValue(labels.getValue(i)) - .build()); - } + private Metrics.Metric.Builder convert(UnknownSnapshot.UnknownDataPointSnapshot data) { + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + Metrics.Untyped.Builder untypedBuilder = Metrics.Untyped.newBuilder(); + untypedBuilder.setValue(data.getValue()); + addLabels(metricBuilder, data.getLabels()); + metricBuilder.setUntyped(untypedBuilder); + return metricBuilder; + } + + private void addLabels(Metrics.Metric.Builder metricBuilder, Labels labels) { + for (int i = 0; i < labels.size(); i++) { + metricBuilder.addLabel( + Metrics.LabelPair.newBuilder() + .setName(labels.getPrometheusName(i)) + .setValue(labels.getValue(i)) + .build()); } + } - private void addLabels(Metrics.Exemplar.Builder metricBuilder, Labels labels) { - for (int i = 0; i < labels.size(); i++) { - metricBuilder.addLabel(Metrics.LabelPair.newBuilder() - .setName(labels.getPrometheusName(i)) - .setValue(labels.getValue(i)) - .build()); - } + private void addLabels(Metrics.Exemplar.Builder metricBuilder, Labels labels) { + for (int i = 0; i < labels.size(); i++) { + metricBuilder.addLabel( + Metrics.LabelPair.newBuilder() + .setName(labels.getPrometheusName(i)) + .setValue(labels.getValue(i)) + .build()); } + } - private Metrics.Exemplar.Builder convert(Exemplar exemplar) { - Metrics.Exemplar.Builder builder = Metrics.Exemplar.newBuilder(); - builder.setValue(exemplar.getValue()); - addLabels(builder, exemplar.getLabels()); - if (exemplar.hasTimestamp()) { - builder.setTimestamp(timestampFromMillis(exemplar.getTimestampMillis())); - } - return builder; + private Metrics.Exemplar.Builder convert(Exemplar exemplar) { + Metrics.Exemplar.Builder builder = Metrics.Exemplar.newBuilder(); + builder.setValue(exemplar.getValue()); + addLabels(builder, exemplar.getLabels()); + if (exemplar.hasTimestamp()) { + builder.setTimestamp(timestampFromMillis(exemplar.getTimestampMillis())); } + return builder; + } - private void setScrapeTimestamp(Metrics.Metric.Builder metricBuilder, DataPointSnapshot data) { - if (data.hasScrapeTimestamp()) { - metricBuilder.setTimestampMs(data.getScrapeTimestampMillis()); - } + private void setScrapeTimestamp(Metrics.Metric.Builder metricBuilder, DataPointSnapshot data) { + if (data.hasScrapeTimestamp()) { + metricBuilder.setTimestampMs(data.getScrapeTimestampMillis()); } + } } diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java index cf9bc3d10..28d049f25 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java @@ -1,12 +1,18 @@ package io.prometheus.metrics.expositionformats; -import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeDouble; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeEscapedLabelValue; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLabels; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLong; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeTimestamp; + import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; +import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import io.prometheus.metrics.model.snapshots.DataPointSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.HistogramSnapshot; import io.prometheus.metrics.model.snapshots.InfoSnapshot; import io.prometheus.metrics.model.snapshots.Labels; -import io.prometheus.metrics.model.snapshots.DataPointSnapshot; import io.prometheus.metrics.model.snapshots.MetricMetadata; import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; @@ -14,334 +20,356 @@ import io.prometheus.metrics.model.snapshots.StateSetSnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; - import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeDouble; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeEscapedLabelValue; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLabels; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLong; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeTimestamp; - /** - * Write the Prometheus text format. This is the default if you view a Prometheus endpoint with your Web browser. + * Write the Prometheus text format. This is the default if you view a Prometheus endpoint with your + * Web browser. */ public class PrometheusTextFormatWriter implements ExpositionFormatWriter { - public static final String CONTENT_TYPE = "text/plain; version=0.0.4; charset=utf-8"; + public static final String CONTENT_TYPE = "text/plain; version=0.0.4; charset=utf-8"; - private final boolean writeCreatedTimestamps; + private final boolean writeCreatedTimestamps; - public PrometheusTextFormatWriter(boolean writeCreatedTimestamps) { - this.writeCreatedTimestamps = writeCreatedTimestamps; - } + public PrometheusTextFormatWriter(boolean writeCreatedTimestamps) { + this.writeCreatedTimestamps = writeCreatedTimestamps; + } - @Override - public boolean accepts(String acceptHeader) { - if (acceptHeader == null) { - return false; - } else { - return acceptHeader.contains("text/plain"); - } + @Override + public boolean accepts(String acceptHeader) { + if (acceptHeader == null) { + return false; + } else { + return acceptHeader.contains("text/plain"); } + } - @Override - public String getContentType() { - return CONTENT_TYPE; - } + @Override + public String getContentType() { + return CONTENT_TYPE; + } - public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { - // See https://prometheus.io/docs/instrumenting/exposition_formats/ - // "unknown", "gauge", "counter", "stateset", "info", "histogram", "gaugehistogram", and "summary". - OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); - for (MetricSnapshot snapshot : metricSnapshots) { - if (snapshot.getDataPoints().size() > 0) { - if (snapshot instanceof CounterSnapshot) { - writeCounter(writer, (CounterSnapshot) snapshot); - } else if (snapshot instanceof GaugeSnapshot) { - writeGauge(writer, (GaugeSnapshot) snapshot); - } else if (snapshot instanceof HistogramSnapshot) { - writeHistogram(writer, (HistogramSnapshot) snapshot); - } else if (snapshot instanceof SummarySnapshot) { - writeSummary(writer, (SummarySnapshot) snapshot); - } else if (snapshot instanceof InfoSnapshot) { - writeInfo(writer, (InfoSnapshot) snapshot); - } else if (snapshot instanceof StateSetSnapshot) { - writeStateSet(writer, (StateSetSnapshot) snapshot); - } else if (snapshot instanceof UnknownSnapshot) { - writeUnknown(writer, (UnknownSnapshot) snapshot); - } - } - } - if (writeCreatedTimestamps) { - for (MetricSnapshot snapshot : metricSnapshots) { - if (snapshot.getDataPoints().size() > 0) { - if (snapshot instanceof CounterSnapshot) { - writeCreated(writer, snapshot); - } else if (snapshot instanceof HistogramSnapshot) { - writeCreated(writer, snapshot); - } else if (snapshot instanceof SummarySnapshot) { - writeCreated(writer, snapshot); - } - } - } + public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { + // See https://prometheus.io/docs/instrumenting/exposition_formats/ + // "unknown", "gauge", "counter", "stateset", "info", "histogram", "gaugehistogram", and + // "summary". + OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); + for (MetricSnapshot snapshot : metricSnapshots) { + if (snapshot.getDataPoints().size() > 0) { + if (snapshot instanceof CounterSnapshot) { + writeCounter(writer, (CounterSnapshot) snapshot); + } else if (snapshot instanceof GaugeSnapshot) { + writeGauge(writer, (GaugeSnapshot) snapshot); + } else if (snapshot instanceof HistogramSnapshot) { + writeHistogram(writer, (HistogramSnapshot) snapshot); + } else if (snapshot instanceof SummarySnapshot) { + writeSummary(writer, (SummarySnapshot) snapshot); + } else if (snapshot instanceof InfoSnapshot) { + writeInfo(writer, (InfoSnapshot) snapshot); + } else if (snapshot instanceof StateSetSnapshot) { + writeStateSet(writer, (StateSetSnapshot) snapshot); + } else if (snapshot instanceof UnknownSnapshot) { + writeUnknown(writer, (UnknownSnapshot) snapshot); } - writer.flush(); - } - - public void writeCreated(OutputStreamWriter writer, MetricSnapshot snapshot) throws IOException { - boolean metadataWritten = false; - MetricMetadata metadata = snapshot.getMetadata(); - for (DataPointSnapshot data : snapshot.getDataPoints()) { - if (data.hasCreatedTimestamp()) { - if (!metadataWritten) { - writeMetadata(writer, "_created", "gauge", metadata); - metadataWritten = true; - } - writeNameAndLabels(writer, metadata.getPrometheusName(), "_created", data.getLabels()); - writeTimestamp(writer, data.getCreatedTimestampMillis()); - writeScrapeTimestampAndNewline(writer, data); - } - } - + } } - - private void writeCounter(OutputStreamWriter writer, CounterSnapshot snapshot) throws IOException { + if (writeCreatedTimestamps) { + for (MetricSnapshot snapshot : metricSnapshots) { if (snapshot.getDataPoints().size() > 0) { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "_total", "counter", metadata); - for (CounterSnapshot.CounterDataPointSnapshot data : snapshot.getDataPoints()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), "_total", data.getLabels()); - writeDouble(writer, data.getValue()); - writeScrapeTimestampAndNewline(writer, data); - } + if (snapshot instanceof CounterSnapshot) { + writeCreated(writer, snapshot); + } else if (snapshot instanceof HistogramSnapshot) { + writeCreated(writer, snapshot); + } else if (snapshot instanceof SummarySnapshot) { + writeCreated(writer, snapshot); + } } + } } + writer.flush(); + } - private void writeGauge(OutputStreamWriter writer, GaugeSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "", "gauge", metadata); - for (GaugeSnapshot.GaugeDataPointSnapshot data : snapshot.getDataPoints()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels()); - writeDouble(writer, data.getValue()); - writeScrapeTimestampAndNewline(writer, data); + public void writeCreated(OutputStreamWriter writer, MetricSnapshot snapshot) throws IOException { + boolean metadataWritten = false; + MetricMetadata metadata = snapshot.getMetadata(); + for (DataPointSnapshot data : snapshot.getDataPoints()) { + if (data.hasCreatedTimestamp()) { + if (!metadataWritten) { + writeMetadata(writer, "_created", "gauge", metadata); + metadataWritten = true; } + writeNameAndLabels(writer, metadata.getPrometheusName(), "_created", data.getLabels()); + writeTimestamp(writer, data.getCreatedTimestampMillis()); + writeScrapeTimestampAndNewline(writer, data); + } } + } - private void writeHistogram(OutputStreamWriter writer, HistogramSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "", "histogram", metadata); - for (HistogramSnapshot.HistogramDataPointSnapshot data : snapshot.getDataPoints()) { - ClassicHistogramBuckets buckets = getClassicBuckets(data); - long cumulativeCount = 0; - for (int i = 0; i < buckets.size(); i++) { - cumulativeCount += buckets.getCount(i); - writeNameAndLabels(writer, metadata.getPrometheusName(), "_bucket", data.getLabels(), "le", buckets.getUpperBound(i)); - writeLong(writer, cumulativeCount); - writeScrapeTimestampAndNewline(writer, data); - } - if (!snapshot.isGaugeHistogram()) { - if (data.hasCount()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), "_count", data.getLabels()); - writeLong(writer, data.getCount()); - writeScrapeTimestampAndNewline(writer, data); - } - if (data.hasSum()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), "_sum", data.getLabels()); - writeDouble(writer, data.getSum()); - writeScrapeTimestampAndNewline(writer, data); - } - } - } - if (snapshot.isGaugeHistogram()) { - writeGaugeCountSum(writer, snapshot, metadata); - } + private void writeCounter(OutputStreamWriter writer, CounterSnapshot snapshot) + throws IOException { + if (snapshot.getDataPoints().size() > 0) { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "_total", "counter", metadata); + for (CounterSnapshot.CounterDataPointSnapshot data : snapshot.getDataPoints()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), "_total", data.getLabels()); + writeDouble(writer, data.getValue()); + writeScrapeTimestampAndNewline(writer, data); + } } + } - private ClassicHistogramBuckets getClassicBuckets(HistogramSnapshot.HistogramDataPointSnapshot data) { - if (data.getClassicBuckets().isEmpty()) { - return ClassicHistogramBuckets.of( - new double[]{Double.POSITIVE_INFINITY}, - new long[]{data.getCount()} - ); - } else { - return data.getClassicBuckets(); - } + private void writeGauge(OutputStreamWriter writer, GaugeSnapshot snapshot) throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "", "gauge", metadata); + for (GaugeSnapshot.GaugeDataPointSnapshot data : snapshot.getDataPoints()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels()); + writeDouble(writer, data.getValue()); + writeScrapeTimestampAndNewline(writer, data); } + } - private void writeGaugeCountSum(OutputStreamWriter writer, HistogramSnapshot snapshot, MetricMetadata metadata) throws IOException { - // Prometheus text format does not support gaugehistogram's _gcount and _gsum. - // So we append _gcount and _gsum as gauge metrics. - boolean metadataWritten = false; - for (HistogramSnapshot.HistogramDataPointSnapshot data : snapshot.getDataPoints()) { - if (data.hasCount()) { - if (!metadataWritten) { - writeMetadata(writer, "_gcount", "gauge", metadata); - metadataWritten = true; - } - writeNameAndLabels(writer, metadata.getPrometheusName(), "_gcount", data.getLabels()); - writeLong(writer, data.getCount()); - writeScrapeTimestampAndNewline(writer, data); - } + private void writeHistogram(OutputStreamWriter writer, HistogramSnapshot snapshot) + throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "", "histogram", metadata); + for (HistogramSnapshot.HistogramDataPointSnapshot data : snapshot.getDataPoints()) { + ClassicHistogramBuckets buckets = getClassicBuckets(data); + long cumulativeCount = 0; + for (int i = 0; i < buckets.size(); i++) { + cumulativeCount += buckets.getCount(i); + writeNameAndLabels( + writer, + metadata.getPrometheusName(), + "_bucket", + data.getLabels(), + "le", + buckets.getUpperBound(i)); + writeLong(writer, cumulativeCount); + writeScrapeTimestampAndNewline(writer, data); + } + if (!snapshot.isGaugeHistogram()) { + if (data.hasCount()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), "_count", data.getLabels()); + writeLong(writer, data.getCount()); + writeScrapeTimestampAndNewline(writer, data); } - metadataWritten = false; - for (HistogramSnapshot.HistogramDataPointSnapshot data : snapshot.getDataPoints()) { - if (data.hasSum()) { - if (!metadataWritten) { - writeMetadata(writer, "_gsum", "gauge", metadata); - metadataWritten = true; - } - writeNameAndLabels(writer, metadata.getPrometheusName(), "_gsum", data.getLabels()); - writeDouble(writer, data.getSum()); - writeScrapeTimestampAndNewline(writer, data); - } + if (data.hasSum()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), "_sum", data.getLabels()); + writeDouble(writer, data.getSum()); + writeScrapeTimestampAndNewline(writer, data); } + } } - - private void writeSummary(OutputStreamWriter writer, SummarySnapshot snapshot) throws IOException { - boolean metadataWritten = false; - MetricMetadata metadata = snapshot.getMetadata(); - for (SummarySnapshot.SummaryDataPointSnapshot data : snapshot.getDataPoints()) { - if (data.getQuantiles().size() == 0 && !data.hasCount() && !data.hasSum()) { - continue; - } - if (!metadataWritten) { - writeMetadata(writer, "", "summary", metadata); - metadataWritten = true; - } - for (Quantile quantile : data.getQuantiles()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels(), "quantile", quantile.getQuantile()); - writeDouble(writer, quantile.getValue()); - writeScrapeTimestampAndNewline(writer, data); - } - if (data.hasCount()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), "_count", data.getLabels()); - writeLong(writer, data.getCount()); - writeScrapeTimestampAndNewline(writer, data); - } - if (data.hasSum()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), "_sum", data.getLabels()); - writeDouble(writer, data.getSum()); - writeScrapeTimestampAndNewline(writer, data); - } - } + if (snapshot.isGaugeHistogram()) { + writeGaugeCountSum(writer, snapshot, metadata); } + } - private void writeInfo(OutputStreamWriter writer, InfoSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "_info", "gauge", metadata); - for (InfoSnapshot.InfoDataPointSnapshot data : snapshot.getDataPoints()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), "_info", data.getLabels()); - writer.write("1"); - writeScrapeTimestampAndNewline(writer, data); - } + private ClassicHistogramBuckets getClassicBuckets( + HistogramSnapshot.HistogramDataPointSnapshot data) { + if (data.getClassicBuckets().isEmpty()) { + return ClassicHistogramBuckets.of( + new double[] {Double.POSITIVE_INFINITY}, new long[] {data.getCount()}); + } else { + return data.getClassicBuckets(); } + } - private void writeStateSet(OutputStreamWriter writer, StateSetSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "", "gauge", metadata); - for (StateSetSnapshot.StateSetDataPointSnapshot data : snapshot.getDataPoints()) { - for (int i = 0; i < data.size(); i++) { - writer.write(metadata.getPrometheusName()); - writer.write('{'); - for (int j = 0; j < data.getLabels().size(); j++) { - if (j > 0) { - writer.write(","); - } - writer.write(data.getLabels().getPrometheusName(j)); - writer.write("=\""); - writeEscapedLabelValue(writer, data.getLabels().getValue(j)); - writer.write("\""); - } - if (!data.getLabels().isEmpty()) { - writer.write(","); - } - writer.write(metadata.getPrometheusName()); - writer.write("=\""); - writeEscapedLabelValue(writer, data.getName(i)); - writer.write("\"} "); - if (data.isTrue(i)) { - writer.write("1"); - } else { - writer.write("0"); - } - writeScrapeTimestampAndNewline(writer, data); - } + private void writeGaugeCountSum( + OutputStreamWriter writer, HistogramSnapshot snapshot, MetricMetadata metadata) + throws IOException { + // Prometheus text format does not support gaugehistogram's _gcount and _gsum. + // So we append _gcount and _gsum as gauge metrics. + boolean metadataWritten = false; + for (HistogramSnapshot.HistogramDataPointSnapshot data : snapshot.getDataPoints()) { + if (data.hasCount()) { + if (!metadataWritten) { + writeMetadata(writer, "_gcount", "gauge", metadata); + metadataWritten = true; } + writeNameAndLabels(writer, metadata.getPrometheusName(), "_gcount", data.getLabels()); + writeLong(writer, data.getCount()); + writeScrapeTimestampAndNewline(writer, data); + } } - - private void writeUnknown(OutputStreamWriter writer, UnknownSnapshot snapshot) throws IOException { - MetricMetadata metadata = snapshot.getMetadata(); - writeMetadata(writer, "", "untyped", metadata); - for (UnknownSnapshot.UnknownDataPointSnapshot data : snapshot.getDataPoints()) { - writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels()); - writeDouble(writer, data.getValue()); - writeScrapeTimestampAndNewline(writer, data); + metadataWritten = false; + for (HistogramSnapshot.HistogramDataPointSnapshot data : snapshot.getDataPoints()) { + if (data.hasSum()) { + if (!metadataWritten) { + writeMetadata(writer, "_gsum", "gauge", metadata); + metadataWritten = true; } + writeNameAndLabels(writer, metadata.getPrometheusName(), "_gsum", data.getLabels()); + writeDouble(writer, data.getSum()); + writeScrapeTimestampAndNewline(writer, data); + } } + } - private void writeNameAndLabels(OutputStreamWriter writer, String name, String suffix, Labels labels) throws IOException { - writeNameAndLabels(writer, name, suffix, labels, null, 0.0); + private void writeSummary(OutputStreamWriter writer, SummarySnapshot snapshot) + throws IOException { + boolean metadataWritten = false; + MetricMetadata metadata = snapshot.getMetadata(); + for (SummarySnapshot.SummaryDataPointSnapshot data : snapshot.getDataPoints()) { + if (data.getQuantiles().size() == 0 && !data.hasCount() && !data.hasSum()) { + continue; + } + if (!metadataWritten) { + writeMetadata(writer, "", "summary", metadata); + metadataWritten = true; + } + for (Quantile quantile : data.getQuantiles()) { + writeNameAndLabels( + writer, + metadata.getPrometheusName(), + null, + data.getLabels(), + "quantile", + quantile.getQuantile()); + writeDouble(writer, quantile.getValue()); + writeScrapeTimestampAndNewline(writer, data); + } + if (data.hasCount()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), "_count", data.getLabels()); + writeLong(writer, data.getCount()); + writeScrapeTimestampAndNewline(writer, data); + } + if (data.hasSum()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), "_sum", data.getLabels()); + writeDouble(writer, data.getSum()); + writeScrapeTimestampAndNewline(writer, data); + } } + } - private void writeNameAndLabels(OutputStreamWriter writer, String name, String suffix, Labels labels, - String additionalLabelName, double additionalLabelValue) throws IOException { - writer.write(name); - if (suffix != null) { - writer.write(suffix); - } - if (!labels.isEmpty() || additionalLabelName != null) { - writeLabels(writer, labels, additionalLabelName, additionalLabelValue); - } - writer.write(' '); + private void writeInfo(OutputStreamWriter writer, InfoSnapshot snapshot) throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "_info", "gauge", metadata); + for (InfoSnapshot.InfoDataPointSnapshot data : snapshot.getDataPoints()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), "_info", data.getLabels()); + writer.write("1"); + writeScrapeTimestampAndNewline(writer, data); } + } - private void writeMetadata(OutputStreamWriter writer, String suffix, String typeString, MetricMetadata metadata) throws IOException { - if (metadata.getHelp() != null && !metadata.getHelp().isEmpty()) { - writer.write("# HELP "); - writer.write(metadata.getPrometheusName()); - if (suffix != null) { - writer.write(suffix); - } - writer.write(' '); - writeEscapedHelp(writer, metadata.getHelp()); - writer.write('\n'); + private void writeStateSet(OutputStreamWriter writer, StateSetSnapshot snapshot) + throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "", "gauge", metadata); + for (StateSetSnapshot.StateSetDataPointSnapshot data : snapshot.getDataPoints()) { + for (int i = 0; i < data.size(); i++) { + writer.write(metadata.getPrometheusName()); + writer.write('{'); + for (int j = 0; j < data.getLabels().size(); j++) { + if (j > 0) { + writer.write(","); + } + writer.write(data.getLabels().getPrometheusName(j)); + writer.write("=\""); + writeEscapedLabelValue(writer, data.getLabels().getValue(j)); + writer.write("\""); + } + if (!data.getLabels().isEmpty()) { + writer.write(","); } - writer.write("# TYPE "); writer.write(metadata.getPrometheusName()); - if (suffix != null) { - writer.write(suffix); + writer.write("=\""); + writeEscapedLabelValue(writer, data.getName(i)); + writer.write("\"} "); + if (data.isTrue(i)) { + writer.write("1"); + } else { + writer.write("0"); } - writer.write(' '); - writer.write(typeString); - writer.write('\n'); + writeScrapeTimestampAndNewline(writer, data); + } } + } - private void writeEscapedHelp(Writer writer, String s) throws IOException { - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - switch (c) { - case '\\': - writer.append("\\\\"); - break; - case '\n': - writer.append("\\n"); - break; - default: - writer.append(c); - } - } + private void writeUnknown(OutputStreamWriter writer, UnknownSnapshot snapshot) + throws IOException { + MetricMetadata metadata = snapshot.getMetadata(); + writeMetadata(writer, "", "untyped", metadata); + for (UnknownSnapshot.UnknownDataPointSnapshot data : snapshot.getDataPoints()) { + writeNameAndLabels(writer, metadata.getPrometheusName(), null, data.getLabels()); + writeDouble(writer, data.getValue()); + writeScrapeTimestampAndNewline(writer, data); } + } - private void writeScrapeTimestampAndNewline(OutputStreamWriter writer, DataPointSnapshot data) throws IOException { - if (data.hasScrapeTimestamp()) { - writer.write(' '); - writeTimestamp(writer, data.getScrapeTimestampMillis()); - } - writer.write('\n'); + private void writeNameAndLabels( + OutputStreamWriter writer, String name, String suffix, Labels labels) throws IOException { + writeNameAndLabels(writer, name, suffix, labels, null, 0.0); + } + + private void writeNameAndLabels( + OutputStreamWriter writer, + String name, + String suffix, + Labels labels, + String additionalLabelName, + double additionalLabelValue) + throws IOException { + writer.write(name); + if (suffix != null) { + writer.write(suffix); + } + if (!labels.isEmpty() || additionalLabelName != null) { + writeLabels(writer, labels, additionalLabelName, additionalLabelValue); + } + writer.write(' '); + } + + private void writeMetadata( + OutputStreamWriter writer, String suffix, String typeString, MetricMetadata metadata) + throws IOException { + if (metadata.getHelp() != null && !metadata.getHelp().isEmpty()) { + writer.write("# HELP "); + writer.write(metadata.getPrometheusName()); + if (suffix != null) { + writer.write(suffix); + } + writer.write(' '); + writeEscapedHelp(writer, metadata.getHelp()); + writer.write('\n'); + } + writer.write("# TYPE "); + writer.write(metadata.getPrometheusName()); + if (suffix != null) { + writer.write(suffix); + } + writer.write(' '); + writer.write(typeString); + writer.write('\n'); + } + + private void writeEscapedHelp(Writer writer, String s) throws IOException { + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + switch (c) { + case '\\': + writer.append("\\\\"); + break; + case '\n': + writer.append("\\n"); + break; + default: + writer.append(c); + } + } + } + + private void writeScrapeTimestampAndNewline(OutputStreamWriter writer, DataPointSnapshot data) + throws IOException { + if (data.hasScrapeTimestamp()) { + writer.write(' '); + writeTimestamp(writer, data.getScrapeTimestampMillis()); } + writer.write('\n'); + } } diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java index ad3a28828..fee5d8eb1 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java @@ -4,10 +4,10 @@ public class ProtobufUtil { - static Timestamp timestampFromMillis(long timestampMillis) { - return Timestamp.newBuilder() - .setSeconds(timestampMillis / 1000L) - .setNanos((int) (timestampMillis % 1000L * 1000000L)) - .build(); - } + static Timestamp timestampFromMillis(long timestampMillis) { + return Timestamp.newBuilder() + .setSeconds(timestampMillis / 1000L) + .setNanos((int) (timestampMillis % 1000L * 1000000L)) + .build(); + } } diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java index 423fa6692..54daaaa3e 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java @@ -1,82 +1,84 @@ package io.prometheus.metrics.expositionformats; import io.prometheus.metrics.model.snapshots.Labels; - import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; - public class TextFormatUtil { - static void writeLong(OutputStreamWriter writer, long value) throws IOException { - writer.append(Long.toString(value)); - } + static void writeLong(OutputStreamWriter writer, long value) throws IOException { + writer.append(Long.toString(value)); + } - static void writeDouble(OutputStreamWriter writer, double d) throws IOException { - if (d == Double.POSITIVE_INFINITY) { - writer.write("+Inf"); - } else if (d == Double.NEGATIVE_INFINITY) { - writer.write("-Inf"); - } else { - writer.write(Double.toString(d)); - // FloatingDecimal.getBinaryToASCIIConverter(d).appendTo(writer); - } + static void writeDouble(OutputStreamWriter writer, double d) throws IOException { + if (d == Double.POSITIVE_INFINITY) { + writer.write("+Inf"); + } else if (d == Double.NEGATIVE_INFINITY) { + writer.write("-Inf"); + } else { + writer.write(Double.toString(d)); + // FloatingDecimal.getBinaryToASCIIConverter(d).appendTo(writer); } + } - static void writeTimestamp(OutputStreamWriter writer, long timestampMs) throws IOException { - writer.write(Long.toString(timestampMs / 1000L)); - writer.write("."); - long ms = timestampMs % 1000; - if (ms < 100) { - writer.write("0"); - } - if (ms < 10) { - writer.write("0"); - } - writer.write(Long.toString(ms)); + static void writeTimestamp(OutputStreamWriter writer, long timestampMs) throws IOException { + writer.write(Long.toString(timestampMs / 1000L)); + writer.write("."); + long ms = timestampMs % 1000; + if (ms < 100) { + writer.write("0"); } + if (ms < 10) { + writer.write("0"); + } + writer.write(Long.toString(ms)); + } - static void writeEscapedLabelValue(Writer writer, String s) throws IOException { - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - switch (c) { - case '\\': - writer.append("\\\\"); - break; - case '\"': - writer.append("\\\""); - break; - case '\n': - writer.append("\\n"); - break; - default: - writer.append(c); - } - } + static void writeEscapedLabelValue(Writer writer, String s) throws IOException { + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + switch (c) { + case '\\': + writer.append("\\\\"); + break; + case '\"': + writer.append("\\\""); + break; + case '\n': + writer.append("\\n"); + break; + default: + writer.append(c); + } } + } - static void writeLabels(OutputStreamWriter writer, Labels labels, String additionalLabelName, double additionalLabelValue) throws IOException { - writer.write('{'); - for (int i = 0; i < labels.size(); i++) { - if (i > 0) { - writer.write(","); - } - writer.write(labels.getPrometheusName(i)); - writer.write("=\""); - writeEscapedLabelValue(writer, labels.getValue(i)); - writer.write("\""); - } - if (additionalLabelName != null) { - if (!labels.isEmpty()) { - writer.write(","); - } - writer.write(additionalLabelName); - writer.write("=\""); - writeDouble(writer, additionalLabelValue); - writer.write("\""); - } - writer.write('}'); + static void writeLabels( + OutputStreamWriter writer, + Labels labels, + String additionalLabelName, + double additionalLabelValue) + throws IOException { + writer.write('{'); + for (int i = 0; i < labels.size(); i++) { + if (i > 0) { + writer.write(","); + } + writer.write(labels.getPrometheusName(i)); + writer.write("=\""); + writeEscapedLabelValue(writer, labels.getValue(i)); + writer.write("\""); + } + if (additionalLabelName != null) { + if (!labels.isEmpty()) { + writer.write(","); + } + writer.write(additionalLabelName); + writer.write("=\""); + writeDouble(writer, additionalLabelValue); + writer.write("\""); } + writer.write('}'); + } } diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index 09600eafd..1ce3f2840 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -1,1938 +1,2766 @@ package io.prometheus.metrics.expositionformats; -import io.prometheus.metrics.model.snapshots.*; -import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; +import io.prometheus.metrics.model.snapshots.*; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot.SummaryDataPointSnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot.UnknownDataPointSnapshot; -import org.junit.Assert; -import org.junit.Test; - +import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; import java.io.ByteArrayOutputStream; import java.io.IOException; +import org.junit.Assert; +import org.junit.Test; public class ExpositionFormatsTest { - private final String exemplar1String = "{env=\"prod\",span_id=\"12345\",trace_id=\"abcde\"} 1.7 1672850685.829"; - private final String exemplar2String = "{env=\"dev\",span_id=\"23456\",trace_id=\"bcdef\"} 2.4 1672850685.830"; - private final String exemplarWithDotsString = "{some_exemplar_key=\"some value\"} 3.0 1690298864.383"; + private final String exemplar1String = + "{env=\"prod\",span_id=\"12345\",trace_id=\"abcde\"} 1.7 1672850685.829"; + private final String exemplar2String = + "{env=\"dev\",span_id=\"23456\",trace_id=\"bcdef\"} 2.4 1672850685.830"; + private final String exemplarWithDotsString = + "{some_exemplar_key=\"some value\"} 3.0 1690298864.383"; - private final String exemplar1protoString = "exemplar { " + - "label { name: \"env\" value: \"prod\" } " + - "label { name: \"span_id\" value: \"12345\" } " + - "label { name: \"trace_id\" value: \"abcde\" } " + - "value: 1.7 " + - "timestamp { seconds: 1672850685 nanos: 829000000 } }"; + private final String exemplar1protoString = + "exemplar { " + + "label { name: \"env\" value: \"prod\" } " + + "label { name: \"span_id\" value: \"12345\" } " + + "label { name: \"trace_id\" value: \"abcde\" } " + + "value: 1.7 " + + "timestamp { seconds: 1672850685 nanos: 829000000 } }"; - private final String exemplar2protoString = "exemplar { " + - "label { name: \"env\" value: \"dev\" } " + - "label { name: \"span_id\" value: \"23456\" } " + - "label { name: \"trace_id\" value: \"bcdef\" } " + - "value: 2.4 " + - "timestamp { seconds: 1672850685 nanos: 830000000 } }"; + private final String exemplar2protoString = + "exemplar { " + + "label { name: \"env\" value: \"dev\" } " + + "label { name: \"span_id\" value: \"23456\" } " + + "label { name: \"trace_id\" value: \"bcdef\" } " + + "value: 2.4 " + + "timestamp { seconds: 1672850685 nanos: 830000000 } }"; - private final String exemplarWithDotsProtoString = "exemplar { " + - "label { name: \"some_exemplar_key\" value: \"some value\" } " + - "value: 3.0 " + - "timestamp { seconds: 1690298864 nanos: 383000000 } }"; + private final String exemplarWithDotsProtoString = + "exemplar { " + + "label { name: \"some_exemplar_key\" value: \"some value\" } " + + "value: 3.0 " + + "timestamp { seconds: 1690298864 nanos: 383000000 } }"; - private final String createdTimestamp1s = "1672850385.800"; - private final long createdTimestamp1 = (long) (1000 * Double.parseDouble(createdTimestamp1s)); - private final String createdTimestamp2s = "1672850285.000"; - private final long createdTimestamp2 = (long) (1000 * Double.parseDouble(createdTimestamp2s)); - private final String scrapeTimestamp1s = "1672850685.829"; - private final long scrapeTimestamp1 = (long) (1000 * Double.parseDouble(scrapeTimestamp1s)); - private final String scrapeTimestamp2s = "1672850585.820"; - private final long scrapeTimestamp2 = (long) (1000 * Double.parseDouble(scrapeTimestamp2s)); + private final String createdTimestamp1s = "1672850385.800"; + private final long createdTimestamp1 = (long) (1000 * Double.parseDouble(createdTimestamp1s)); + private final String createdTimestamp2s = "1672850285.000"; + private final long createdTimestamp2 = (long) (1000 * Double.parseDouble(createdTimestamp2s)); + private final String scrapeTimestamp1s = "1672850685.829"; + private final long scrapeTimestamp1 = (long) (1000 * Double.parseDouble(scrapeTimestamp1s)); + private final String scrapeTimestamp2s = "1672850585.820"; + private final long scrapeTimestamp2 = (long) (1000 * Double.parseDouble(scrapeTimestamp2s)); - private final Exemplar exemplar1 = Exemplar.builder() - .spanId("12345") - .traceId("abcde") - .labels(Labels.of("env", "prod")) - .value(1.7) - .timestampMillis(1672850685829L) - .build(); + private final Exemplar exemplar1 = + Exemplar.builder() + .spanId("12345") + .traceId("abcde") + .labels(Labels.of("env", "prod")) + .value(1.7) + .timestampMillis(1672850685829L) + .build(); - private final Exemplar exemplar2 = Exemplar.builder() - .spanId("23456") - .traceId("bcdef") - .labels(Labels.of("env", "dev")) - .value(2.4) - .timestampMillis(1672850685830L) - .build(); + private final Exemplar exemplar2 = + Exemplar.builder() + .spanId("23456") + .traceId("bcdef") + .labels(Labels.of("env", "dev")) + .value(2.4) + .timestampMillis(1672850685830L) + .build(); - private final Exemplar exemplarWithDots = Exemplar.builder() - .labels(Labels.of("some.exemplar.key", "some value")) - .value(3.0) - .timestampMillis(1690298864383L) - .build(); + private final Exemplar exemplarWithDots = + Exemplar.builder() + .labels(Labels.of("some.exemplar.key", "some value")) + .value(3.0) + .timestampMillis(1690298864383L) + .build(); - @Test - public void testCounterComplete() throws IOException { - String openMetricsText = "" + - "# TYPE service_time_seconds counter\n" + - "# UNIT service_time_seconds seconds\n" + - "# HELP service_time_seconds total time spent serving\n" + - "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "service_time_seconds_created{path=\"/hello\",status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "service_time_seconds_total{path=\"/hello\",status=\"500\"} 0.9 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "service_time_seconds_created{path=\"/hello\",status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP service_time_seconds_total total time spent serving\n" + - "# TYPE service_time_seconds_total counter\n" + - "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " + scrapeTimestamp1s + "\n" + - "service_time_seconds_total{path=\"/hello\",status=\"500\"} 0.9 " + scrapeTimestamp2s + "\n" + - "# HELP service_time_seconds_created total time spent serving\n" + - "# TYPE service_time_seconds_created gauge\n" + - "service_time_seconds_created{path=\"/hello\",status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "service_time_seconds_created{path=\"/hello\",status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n"; - String openMetricsTextWithoutCreated = "" + - "# TYPE service_time_seconds counter\n" + - "# UNIT service_time_seconds seconds\n" + - "# HELP service_time_seconds total time spent serving\n" + - "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "service_time_seconds_total{path=\"/hello\",status=\"500\"} 0.9 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "# EOF\n"; - String prometheusTextWithoutCreated = "" + - "# HELP service_time_seconds_total total time spent serving\n" + - "# TYPE service_time_seconds_total counter\n" + - "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " + scrapeTimestamp1s + "\n" + - "service_time_seconds_total{path=\"/hello\",status=\"500\"} 0.9 " + scrapeTimestamp2s + "\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"service_time_seconds_total\" " + - "help: \"total time spent serving\" " + - "type: COUNTER " + - "metric { " + - "label { name: \"path\" value: \"/hello\" } " + - "label { name: \"status\" value: \"200\" } " + - "counter { " + - "value: 0.8 " + - exemplar1protoString + " " + - "} " + - "timestamp_ms: 1672850685829 " + - "} " + - "metric { " + - "label { name: \"path\" value: \"/hello\" } " + - "label { name: \"status\" value: \"500\" } " + - "counter { " + - "value: 0.9 " + - exemplar2protoString + " " + - "} " + - "timestamp_ms: 1672850585820 " + - "}"; - //@formatter:on + @Test + public void testCounterComplete() throws IOException { + String openMetricsText = + "" + + "# TYPE service_time_seconds counter\n" + + "# UNIT service_time_seconds seconds\n" + + "# HELP service_time_seconds total time spent serving\n" + + "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "service_time_seconds_created{path=\"/hello\",status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "service_time_seconds_total{path=\"/hello\",status=\"500\"} 0.9 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "service_time_seconds_created{path=\"/hello\",status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP service_time_seconds_total total time spent serving\n" + + "# TYPE service_time_seconds_total counter\n" + + "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " + + scrapeTimestamp1s + + "\n" + + "service_time_seconds_total{path=\"/hello\",status=\"500\"} 0.9 " + + scrapeTimestamp2s + + "\n" + + "# HELP service_time_seconds_created total time spent serving\n" + + "# TYPE service_time_seconds_created gauge\n" + + "service_time_seconds_created{path=\"/hello\",status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "service_time_seconds_created{path=\"/hello\",status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n"; + String openMetricsTextWithoutCreated = + "" + + "# TYPE service_time_seconds counter\n" + + "# UNIT service_time_seconds seconds\n" + + "# HELP service_time_seconds total time spent serving\n" + + "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "service_time_seconds_total{path=\"/hello\",status=\"500\"} 0.9 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "# EOF\n"; + String prometheusTextWithoutCreated = + "" + + "# HELP service_time_seconds_total total time spent serving\n" + + "# TYPE service_time_seconds_total counter\n" + + "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " + + scrapeTimestamp1s + + "\n" + + "service_time_seconds_total{path=\"/hello\",status=\"500\"} 0.9 " + + scrapeTimestamp2s + + "\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"service_time_seconds_total\" " + + "help: \"total time spent serving\" " + + "type: COUNTER " + + "metric { " + + "label { name: \"path\" value: \"/hello\" } " + + "label { name: \"status\" value: \"200\" } " + + "counter { " + + "value: 0.8 " + + exemplar1protoString + + " " + + "} " + + "timestamp_ms: 1672850685829 " + + "} " + + "metric { " + + "label { name: \"path\" value: \"/hello\" } " + + "label { name: \"status\" value: \"500\" } " + + "counter { " + + "value: 0.9 " + + exemplar2protoString + + " " + + "} " + + "timestamp_ms: 1672850585820 " + + "}"; + // @formatter:on - CounterSnapshot counter = CounterSnapshot.builder() - .name("service_time_seconds") - .help("total time spent serving") - .unit(Unit.SECONDS) - .dataPoint(CounterDataPointSnapshot.builder() - .value(0.8) - .labels(Labels.builder() - .label("path", "/hello") - .label("status", "200") - .build()) - .exemplar(exemplar1) - .createdTimestampMillis(createdTimestamp1) - .scrapeTimestampMillis(scrapeTimestamp1) - .build()) - .dataPoint(CounterDataPointSnapshot.builder() - .value(0.9) - .labels(Labels.builder() - .label("path", "/hello") - .label("status", "500") - .build()) - .exemplar(exemplar2) - .createdTimestampMillis(createdTimestamp2) - .scrapeTimestampMillis(scrapeTimestamp2) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, counter); - assertPrometheusText(prometheusText, counter); - assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, counter); - assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, counter); - assertPrometheusProtobuf(prometheusProtobuf, counter); - } + CounterSnapshot counter = + CounterSnapshot.builder() + .name("service_time_seconds") + .help("total time spent serving") + .unit(Unit.SECONDS) + .dataPoint( + CounterDataPointSnapshot.builder() + .value(0.8) + .labels(Labels.builder().label("path", "/hello").label("status", "200").build()) + .exemplar(exemplar1) + .createdTimestampMillis(createdTimestamp1) + .scrapeTimestampMillis(scrapeTimestamp1) + .build()) + .dataPoint( + CounterDataPointSnapshot.builder() + .value(0.9) + .labels(Labels.builder().label("path", "/hello").label("status", "500").build()) + .exemplar(exemplar2) + .createdTimestampMillis(createdTimestamp2) + .scrapeTimestampMillis(scrapeTimestamp2) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, counter); + assertPrometheusText(prometheusText, counter); + assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, counter); + assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, counter); + assertPrometheusProtobuf(prometheusProtobuf, counter); + } - @Test - public void testCounterMinimal() throws IOException { - String openMetricsText = "" + - "# TYPE my_counter counter\n" + - "my_counter_total 1.1\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE my_counter_total counter\n" + - "my_counter_total 1.1\n"; - String prometheusProtobuf = "" + - "name: \"my_counter_total\" type: COUNTER metric { counter { value: 1.1 } }"; - CounterSnapshot counter = CounterSnapshot.builder() - .name("my_counter") - .dataPoint(CounterDataPointSnapshot.builder().value(1.1).build()) - .build(); - assertOpenMetricsText(openMetricsText, counter); - assertPrometheusText(prometheusText, counter); - assertOpenMetricsTextWithoutCreated(openMetricsText, counter); - assertPrometheusTextWithoutCreated(prometheusText, counter); - assertPrometheusProtobuf(prometheusProtobuf, counter); - } + @Test + public void testCounterMinimal() throws IOException { + String openMetricsText = + "" + "# TYPE my_counter counter\n" + "my_counter_total 1.1\n" + "# EOF\n"; + String prometheusText = "" + "# TYPE my_counter_total counter\n" + "my_counter_total 1.1\n"; + String prometheusProtobuf = + "" + "name: \"my_counter_total\" type: COUNTER metric { counter { value: 1.1 } }"; + CounterSnapshot counter = + CounterSnapshot.builder() + .name("my_counter") + .dataPoint(CounterDataPointSnapshot.builder().value(1.1).build()) + .build(); + assertOpenMetricsText(openMetricsText, counter); + assertPrometheusText(prometheusText, counter); + assertOpenMetricsTextWithoutCreated(openMetricsText, counter); + assertPrometheusTextWithoutCreated(prometheusText, counter); + assertPrometheusProtobuf(prometheusProtobuf, counter); + } - @Test - public void testCounterWithDots() throws IOException { - String openMetricsText = "" + - "# TYPE my_request_count counter\n" + - "my_request_count_total{http_path=\"/hello\"} 3.0 # " + exemplarWithDotsString + "\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE my_request_count_total counter\n" + - "my_request_count_total{http_path=\"/hello\"} 3.0\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"my_request_count_total\" " + - "type: COUNTER " + - "metric { " + - "label { name: \"http_path\" value: \"/hello\" } " + - "counter { " + - "value: 3.0 " + exemplarWithDotsProtoString + " " + - "} " + - "}"; - //@formatter:on + @Test + public void testCounterWithDots() throws IOException { + String openMetricsText = + "" + + "# TYPE my_request_count counter\n" + + "my_request_count_total{http_path=\"/hello\"} 3.0 # " + + exemplarWithDotsString + + "\n" + + "# EOF\n"; + String prometheusText = + "" + + "# TYPE my_request_count_total counter\n" + + "my_request_count_total{http_path=\"/hello\"} 3.0\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"my_request_count_total\" " + + "type: COUNTER " + + "metric { " + + "label { name: \"http_path\" value: \"/hello\" } " + + "counter { " + + "value: 3.0 " + + exemplarWithDotsProtoString + + " " + + "} " + + "}"; + // @formatter:on - CounterSnapshot counter = CounterSnapshot.builder() - .name("my.request.count") - .dataPoint(CounterDataPointSnapshot.builder() - .value(3.0) - .labels(Labels.builder() - .label("http.path", "/hello") - .build()) - .exemplar(exemplarWithDots) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, counter); - assertPrometheusText(prometheusText, counter); - assertPrometheusProtobuf(prometheusProtobuf, counter); - } + CounterSnapshot counter = + CounterSnapshot.builder() + .name("my.request.count") + .dataPoint( + CounterDataPointSnapshot.builder() + .value(3.0) + .labels(Labels.builder().label("http.path", "/hello").build()) + .exemplar(exemplarWithDots) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, counter); + assertPrometheusText(prometheusText, counter); + assertPrometheusProtobuf(prometheusProtobuf, counter); + } - @Test - public void testGaugeComplete() throws IOException { - String openMetricsText = "" + - "# TYPE disk_usage_ratio gauge\n" + - "# UNIT disk_usage_ratio ratio\n" + - "# HELP disk_usage_ratio percentage used\n" + - "disk_usage_ratio{device=\"/dev/sda1\"} 0.2 " + scrapeTimestamp1s + "\n" + - "disk_usage_ratio{device=\"/dev/sda2\"} 0.7 " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String openMetricsTextWithExemplarsOnAllTimeSeries = "" + - "# TYPE disk_usage_ratio gauge\n" + - "# UNIT disk_usage_ratio ratio\n" + - "# HELP disk_usage_ratio percentage used\n" + - "disk_usage_ratio{device=\"/dev/sda1\"} 0.2 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "disk_usage_ratio{device=\"/dev/sda2\"} 0.7 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP disk_usage_ratio percentage used\n" + - "# TYPE disk_usage_ratio gauge\n" + - "disk_usage_ratio{device=\"/dev/sda1\"} 0.2 " + scrapeTimestamp1s + "\n" + - "disk_usage_ratio{device=\"/dev/sda2\"} 0.7 " + scrapeTimestamp2s + "\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"disk_usage_ratio\" " + - "help: \"percentage used\" " + - "type: GAUGE " + - "metric { " + - "label { name: \"device\" value: \"/dev/sda1\" } " + - "gauge { value: 0.2 } " + - "timestamp_ms: 1672850685829 " + - "} metric { " + - "label { name: \"device\" value: \"/dev/sda2\" } " + - "gauge { value: 0.7 } " + - "timestamp_ms: 1672850585820 " + - "}"; - //@formatter:on - GaugeSnapshot gauge = GaugeSnapshot.builder() - .name("disk_usage_ratio") - .help("percentage used") - .unit(new Unit("ratio")) - .dataPoint(GaugeDataPointSnapshot.builder() - .value(0.7) - .labels(Labels.builder() - .label("device", "/dev/sda2") - .build()) - .exemplar(exemplar2) - .scrapeTimestampMillis(scrapeTimestamp2) - .build()) - .dataPoint(GaugeDataPointSnapshot.builder() - .value(0.2) - .labels(Labels.builder() - .label("device", "/dev/sda1") - .build()) - .exemplar(exemplar1) - .scrapeTimestampMillis(scrapeTimestamp1) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, gauge); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, gauge); - assertPrometheusText(prometheusText, gauge); - assertOpenMetricsTextWithoutCreated(openMetricsText, gauge); - assertPrometheusTextWithoutCreated(prometheusText, gauge); - assertPrometheusProtobuf(prometheusProtobuf, gauge); - } + @Test + public void testGaugeComplete() throws IOException { + String openMetricsText = + "" + + "# TYPE disk_usage_ratio gauge\n" + + "# UNIT disk_usage_ratio ratio\n" + + "# HELP disk_usage_ratio percentage used\n" + + "disk_usage_ratio{device=\"/dev/sda1\"} 0.2 " + + scrapeTimestamp1s + + "\n" + + "disk_usage_ratio{device=\"/dev/sda2\"} 0.7 " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = + "" + + "# TYPE disk_usage_ratio gauge\n" + + "# UNIT disk_usage_ratio ratio\n" + + "# HELP disk_usage_ratio percentage used\n" + + "disk_usage_ratio{device=\"/dev/sda1\"} 0.2 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "disk_usage_ratio{device=\"/dev/sda2\"} 0.7 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP disk_usage_ratio percentage used\n" + + "# TYPE disk_usage_ratio gauge\n" + + "disk_usage_ratio{device=\"/dev/sda1\"} 0.2 " + + scrapeTimestamp1s + + "\n" + + "disk_usage_ratio{device=\"/dev/sda2\"} 0.7 " + + scrapeTimestamp2s + + "\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"disk_usage_ratio\" " + + "help: \"percentage used\" " + + "type: GAUGE " + + "metric { " + + "label { name: \"device\" value: \"/dev/sda1\" } " + + "gauge { value: 0.2 } " + + "timestamp_ms: 1672850685829 " + + "} metric { " + + "label { name: \"device\" value: \"/dev/sda2\" } " + + "gauge { value: 0.7 } " + + "timestamp_ms: 1672850585820 " + + "}"; + // @formatter:on + GaugeSnapshot gauge = + GaugeSnapshot.builder() + .name("disk_usage_ratio") + .help("percentage used") + .unit(new Unit("ratio")) + .dataPoint( + GaugeDataPointSnapshot.builder() + .value(0.7) + .labels(Labels.builder().label("device", "/dev/sda2").build()) + .exemplar(exemplar2) + .scrapeTimestampMillis(scrapeTimestamp2) + .build()) + .dataPoint( + GaugeDataPointSnapshot.builder() + .value(0.2) + .labels(Labels.builder().label("device", "/dev/sda1").build()) + .exemplar(exemplar1) + .scrapeTimestampMillis(scrapeTimestamp1) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, gauge); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsTextWithExemplarsOnAllTimeSeries, gauge); + assertPrometheusText(prometheusText, gauge); + assertOpenMetricsTextWithoutCreated(openMetricsText, gauge); + assertPrometheusTextWithoutCreated(prometheusText, gauge); + assertPrometheusProtobuf(prometheusProtobuf, gauge); + } - @Test - public void testGaugeMinimal() throws IOException { - String openMetricsText = "" + - "# TYPE temperature_centigrade gauge\n" + - "temperature_centigrade 22.3\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE temperature_centigrade gauge\n" + - "temperature_centigrade 22.3\n"; - String prometheusProtobuf = "" + - "name: \"temperature_centigrade\" type: GAUGE metric { gauge { value: 22.3 } }"; - GaugeSnapshot gauge = GaugeSnapshot.builder() - .name("temperature_centigrade") - .dataPoint(GaugeDataPointSnapshot.builder() - .value(22.3) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, gauge); - assertPrometheusText(prometheusText, gauge); - assertOpenMetricsTextWithoutCreated(openMetricsText, gauge); - assertPrometheusTextWithoutCreated(prometheusText, gauge); - assertPrometheusProtobuf(prometheusProtobuf, gauge); - } + @Test + public void testGaugeMinimal() throws IOException { + String openMetricsText = + "" + "# TYPE temperature_centigrade gauge\n" + "temperature_centigrade 22.3\n" + "# EOF\n"; + String prometheusText = + "" + "# TYPE temperature_centigrade gauge\n" + "temperature_centigrade 22.3\n"; + String prometheusProtobuf = + "" + "name: \"temperature_centigrade\" type: GAUGE metric { gauge { value: 22.3 } }"; + GaugeSnapshot gauge = + GaugeSnapshot.builder() + .name("temperature_centigrade") + .dataPoint(GaugeDataPointSnapshot.builder().value(22.3).build()) + .build(); + assertOpenMetricsText(openMetricsText, gauge); + assertPrometheusText(prometheusText, gauge); + assertOpenMetricsTextWithoutCreated(openMetricsText, gauge); + assertPrometheusTextWithoutCreated(prometheusText, gauge); + assertPrometheusProtobuf(prometheusProtobuf, gauge); + } - @Test - public void testGaugeWithDots() throws IOException { - String openMetricsText = "" + - "# TYPE my_temperature_celsius gauge\n" + - "# UNIT my_temperature_celsius celsius\n" + - "# HELP my_temperature_celsius Temperature\n" + - "my_temperature_celsius{location_id=\"data-center-1\"} 23.0\n" + - "# EOF\n"; - String openMetricsTextWithExemplarsOnAllTimeSeries = "" + - "# TYPE my_temperature_celsius gauge\n" + - "# UNIT my_temperature_celsius celsius\n" + - "# HELP my_temperature_celsius Temperature\n" + - "my_temperature_celsius{location_id=\"data-center-1\"} 23.0 # " + exemplarWithDotsString + "\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP my_temperature_celsius Temperature\n" + - "# TYPE my_temperature_celsius gauge\n" + - "my_temperature_celsius{location_id=\"data-center-1\"} 23.0\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"my_temperature_celsius\" " + - "help: \"Temperature\" " + - "type: GAUGE " + - "metric { " + - "label { name: \"location_id\" value: \"data-center-1\" } " + - "gauge { " + - "value: 23.0 " + - "} " + - "}"; - //@formatter:on + @Test + public void testGaugeWithDots() throws IOException { + String openMetricsText = + "" + + "# TYPE my_temperature_celsius gauge\n" + + "# UNIT my_temperature_celsius celsius\n" + + "# HELP my_temperature_celsius Temperature\n" + + "my_temperature_celsius{location_id=\"data-center-1\"} 23.0\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = + "" + + "# TYPE my_temperature_celsius gauge\n" + + "# UNIT my_temperature_celsius celsius\n" + + "# HELP my_temperature_celsius Temperature\n" + + "my_temperature_celsius{location_id=\"data-center-1\"} 23.0 # " + + exemplarWithDotsString + + "\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP my_temperature_celsius Temperature\n" + + "# TYPE my_temperature_celsius gauge\n" + + "my_temperature_celsius{location_id=\"data-center-1\"} 23.0\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"my_temperature_celsius\" " + + "help: \"Temperature\" " + + "type: GAUGE " + + "metric { " + + "label { name: \"location_id\" value: \"data-center-1\" } " + + "gauge { " + + "value: 23.0 " + + "} " + + "}"; + // @formatter:on - GaugeSnapshot gauge = GaugeSnapshot.builder() - .name("my.temperature.celsius") - .help("Temperature") - .unit(Unit.CELSIUS) - .dataPoint(GaugeDataPointSnapshot.builder() - .value(23.0) - .labels(Labels.builder() - .label("location.id", "data-center-1") - .build()) - .exemplar(exemplarWithDots) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, gauge); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, gauge); - assertPrometheusText(prometheusText, gauge); - assertPrometheusProtobuf(prometheusProtobuf, gauge); - } + GaugeSnapshot gauge = + GaugeSnapshot.builder() + .name("my.temperature.celsius") + .help("Temperature") + .unit(Unit.CELSIUS) + .dataPoint( + GaugeDataPointSnapshot.builder() + .value(23.0) + .labels(Labels.builder().label("location.id", "data-center-1").build()) + .exemplar(exemplarWithDots) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, gauge); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsTextWithExemplarsOnAllTimeSeries, gauge); + assertPrometheusText(prometheusText, gauge); + assertPrometheusProtobuf(prometheusProtobuf, gauge); + } - @Test - public void testSummaryComplete() throws IOException { - String openMetricsText = "" + - "# TYPE http_request_duration_seconds summary\n" + - "# UNIT http_request_duration_seconds seconds\n" + - "# HELP http_request_duration_seconds request duration\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_count{status=\"200\"} 3 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds_count{status=\"500\"} 7 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String openMetricsTextWithExemplarsOnAllTimeSeries = "" + - "# TYPE http_request_duration_seconds summary\n" + - "# UNIT http_request_duration_seconds seconds\n" + - "# HELP http_request_duration_seconds request duration\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "http_request_duration_seconds_count{status=\"200\"} 3 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "http_request_duration_seconds_count{status=\"500\"} 7 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP http_request_duration_seconds request duration\n" + - "# TYPE http_request_duration_seconds summary\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_count{status=\"200\"} 3 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds_count{status=\"500\"} 7 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + scrapeTimestamp2s + "\n" + - "# HELP http_request_duration_seconds_created request duration\n" + - "# TYPE http_request_duration_seconds_created gauge\n" + - "http_request_duration_seconds_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n"; - String openMetricsTextWithoutCreated = "" + - "# TYPE http_request_duration_seconds summary\n" + - "# UNIT http_request_duration_seconds seconds\n" + - "# HELP http_request_duration_seconds request duration\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_count{status=\"200\"} 3 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds_count{status=\"500\"} 7 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String prometheusTextWithoutCreated = "" + - "# HELP http_request_duration_seconds request duration\n" + - "# TYPE http_request_duration_seconds summary\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_count{status=\"200\"} 3 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + scrapeTimestamp1s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds_count{status=\"500\"} 7 " + scrapeTimestamp2s + "\n" + - "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + scrapeTimestamp2s + "\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"http_request_duration_seconds\" " + - "help: \"request duration\" " + - "type: SUMMARY " + - "metric { " + - "label { name: \"status\" value: \"200\" } " + - "summary { " + - "sample_count: 3 " + - "sample_sum: 1.2 " + - "quantile { quantile: 0.5 value: 225.3 } " + - "quantile { quantile: 0.9 value: 240.7 } " + - "quantile { quantile: 0.95 value: 245.1 } " + - "} " + - "timestamp_ms: 1672850685829 " + - "} metric { " + - "label { name: \"status\" value: \"500\" } " + - "summary { " + - "sample_count: 7 " + - "sample_sum: 2.2 " + - "quantile { quantile: 0.5 value: 225.3 } " + - "quantile { quantile: 0.9 value: 240.7 } " + - "quantile { quantile: 0.95 value: 245.1 } " + - "} " + "" + - "timestamp_ms: 1672850585820 " + - "}"; - //@formatter:on - SummarySnapshot summary = SummarySnapshot.builder() - .name("http_request_duration_seconds") - .help("request duration") - .unit(Unit.SECONDS) - .dataPoint(SummaryDataPointSnapshot.builder() - .count(7) - .sum(2.2) - .quantiles(Quantiles.builder() - .quantile(0.5, 225.3) - .quantile(0.9, 240.7) - .quantile(0.95, 245.1) - .build()) - .labels(Labels.builder() - .label("status", "500") - .build()) - .exemplars(Exemplars.of(exemplar2)) - .createdTimestampMillis(createdTimestamp2) - .scrapeTimestampMillis(scrapeTimestamp2) - .build()) - .dataPoint(SummaryDataPointSnapshot.builder() - .count(3) - .sum(1.2) - .quantiles(Quantiles.builder() - .quantile(0.5, 225.3) - .quantile(0.9, 240.7) - .quantile(0.95, 245.1) - .build()) - .labels(Labels.builder() - .label("status", "200") - .build()) - .exemplars(Exemplars.of(exemplar1)) - .createdTimestampMillis(createdTimestamp1) - .scrapeTimestampMillis(scrapeTimestamp1) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, summary); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, summary); - assertPrometheusText(prometheusText, summary); - assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, summary); - assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, summary); - assertPrometheusProtobuf(prometheusProtobuf, summary); - } + @Test + public void testSummaryComplete() throws IOException { + String openMetricsText = + "" + + "# TYPE http_request_duration_seconds summary\n" + + "# UNIT http_request_duration_seconds seconds\n" + + "# HELP http_request_duration_seconds request duration\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_count{status=\"200\"} 3 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_created{status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds_count{status=\"500\"} 7 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds_created{status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = + "" + + "# TYPE http_request_duration_seconds summary\n" + + "# UNIT http_request_duration_seconds seconds\n" + + "# HELP http_request_duration_seconds request duration\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "http_request_duration_seconds_count{status=\"200\"} 3 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_created{status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "http_request_duration_seconds_count{status=\"500\"} 7 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds_created{status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP http_request_duration_seconds request duration\n" + + "# TYPE http_request_duration_seconds summary\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_count{status=\"200\"} 3 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds_count{status=\"500\"} 7 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + + scrapeTimestamp2s + + "\n" + + "# HELP http_request_duration_seconds_created request duration\n" + + "# TYPE http_request_duration_seconds_created gauge\n" + + "http_request_duration_seconds_created{status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_created{status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n"; + String openMetricsTextWithoutCreated = + "" + + "# TYPE http_request_duration_seconds summary\n" + + "# UNIT http_request_duration_seconds seconds\n" + + "# HELP http_request_duration_seconds request duration\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_count{status=\"200\"} 3 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds_count{status=\"500\"} 7 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String prometheusTextWithoutCreated = + "" + + "# HELP http_request_duration_seconds request duration\n" + + "# TYPE http_request_duration_seconds summary\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.9\"} 240.7 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"200\",quantile=\"0.95\"} 245.1 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_count{status=\"200\"} 3 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds_sum{status=\"200\"} 1.2 " + + scrapeTimestamp1s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.5\"} 225.3 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.9\"} 240.7 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds{status=\"500\",quantile=\"0.95\"} 245.1 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds_count{status=\"500\"} 7 " + + scrapeTimestamp2s + + "\n" + + "http_request_duration_seconds_sum{status=\"500\"} 2.2 " + + scrapeTimestamp2s + + "\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"http_request_duration_seconds\" " + + "help: \"request duration\" " + + "type: SUMMARY " + + "metric { " + + "label { name: \"status\" value: \"200\" } " + + "summary { " + + "sample_count: 3 " + + "sample_sum: 1.2 " + + "quantile { quantile: 0.5 value: 225.3 } " + + "quantile { quantile: 0.9 value: 240.7 } " + + "quantile { quantile: 0.95 value: 245.1 } " + + "} " + + "timestamp_ms: 1672850685829 " + + "} metric { " + + "label { name: \"status\" value: \"500\" } " + + "summary { " + + "sample_count: 7 " + + "sample_sum: 2.2 " + + "quantile { quantile: 0.5 value: 225.3 } " + + "quantile { quantile: 0.9 value: 240.7 } " + + "quantile { quantile: 0.95 value: 245.1 } " + + "} " + + "" + + "timestamp_ms: 1672850585820 " + + "}"; + // @formatter:on + SummarySnapshot summary = + SummarySnapshot.builder() + .name("http_request_duration_seconds") + .help("request duration") + .unit(Unit.SECONDS) + .dataPoint( + SummaryDataPointSnapshot.builder() + .count(7) + .sum(2.2) + .quantiles( + Quantiles.builder() + .quantile(0.5, 225.3) + .quantile(0.9, 240.7) + .quantile(0.95, 245.1) + .build()) + .labels(Labels.builder().label("status", "500").build()) + .exemplars(Exemplars.of(exemplar2)) + .createdTimestampMillis(createdTimestamp2) + .scrapeTimestampMillis(scrapeTimestamp2) + .build()) + .dataPoint( + SummaryDataPointSnapshot.builder() + .count(3) + .sum(1.2) + .quantiles( + Quantiles.builder() + .quantile(0.5, 225.3) + .quantile(0.9, 240.7) + .quantile(0.95, 245.1) + .build()) + .labels(Labels.builder().label("status", "200").build()) + .exemplars(Exemplars.of(exemplar1)) + .createdTimestampMillis(createdTimestamp1) + .scrapeTimestampMillis(scrapeTimestamp1) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, summary); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsTextWithExemplarsOnAllTimeSeries, summary); + assertPrometheusText(prometheusText, summary); + assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, summary); + assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, summary); + assertPrometheusProtobuf(prometheusProtobuf, summary); + } - @Test - public void testSummaryWithoutQuantiles() throws IOException { - String openMetricsText = "" + - "# TYPE latency_seconds summary\n" + - "# UNIT latency_seconds seconds\n" + - "# HELP latency_seconds latency\n" + - "latency_seconds_count 3\n" + - "latency_seconds_sum 1.2\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP latency_seconds latency\n" + - "# TYPE latency_seconds summary\n" + - "latency_seconds_count 3\n" + - "latency_seconds_sum 1.2\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"latency_seconds\" " + - "help: \"latency\" " + - "type: SUMMARY " + - "metric { " + - "summary { " + - "sample_count: 3 " + - "sample_sum: 1.2 " + - "} " + - "}"; - //@formatter:on - SummarySnapshot summary = SummarySnapshot.builder() - .name("latency_seconds") - .help("latency") - .unit(Unit.SECONDS) - .dataPoint(SummaryDataPointSnapshot.builder() - .count(3) - .sum(1.2) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, summary); - assertPrometheusText(prometheusText, summary); - assertOpenMetricsTextWithoutCreated(openMetricsText, summary); - assertPrometheusTextWithoutCreated(prometheusText, summary); - assertPrometheusProtobuf(prometheusProtobuf, summary); - } + @Test + public void testSummaryWithoutQuantiles() throws IOException { + String openMetricsText = + "" + + "# TYPE latency_seconds summary\n" + + "# UNIT latency_seconds seconds\n" + + "# HELP latency_seconds latency\n" + + "latency_seconds_count 3\n" + + "latency_seconds_sum 1.2\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP latency_seconds latency\n" + + "# TYPE latency_seconds summary\n" + + "latency_seconds_count 3\n" + + "latency_seconds_sum 1.2\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"latency_seconds\" " + + "help: \"latency\" " + + "type: SUMMARY " + + "metric { " + + "summary { " + + "sample_count: 3 " + + "sample_sum: 1.2 " + + "} " + + "}"; + // @formatter:on + SummarySnapshot summary = + SummarySnapshot.builder() + .name("latency_seconds") + .help("latency") + .unit(Unit.SECONDS) + .dataPoint(SummaryDataPointSnapshot.builder().count(3).sum(1.2).build()) + .build(); + assertOpenMetricsText(openMetricsText, summary); + assertPrometheusText(prometheusText, summary); + assertOpenMetricsTextWithoutCreated(openMetricsText, summary); + assertPrometheusTextWithoutCreated(prometheusText, summary); + assertPrometheusProtobuf(prometheusProtobuf, summary); + } - @Test - public void testSummaryNoCountAndSum() throws IOException { - String openMetricsText = "" + - "# TYPE latency_seconds summary\n" + - "latency_seconds{quantile=\"0.95\"} 200.0\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE latency_seconds summary\n" + - "latency_seconds{quantile=\"0.95\"} 200.0\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"latency_seconds\" " + - "type: SUMMARY " + - "metric { " + - "summary { " + - "quantile { quantile: 0.95 value: 200.0 } " + - "} " + - "}"; - //@formatter:on - SummarySnapshot summary = SummarySnapshot.builder() - .name("latency_seconds") - .dataPoint(SummaryDataPointSnapshot.builder() - .quantiles(Quantiles.builder().quantile(0.95, 200.0).build()) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, summary); - assertPrometheusText(prometheusText, summary); - assertOpenMetricsTextWithoutCreated(openMetricsText, summary); - assertPrometheusTextWithoutCreated(prometheusText, summary); - assertPrometheusProtobuf(prometheusProtobuf, summary); - } + @Test + public void testSummaryNoCountAndSum() throws IOException { + String openMetricsText = + "" + + "# TYPE latency_seconds summary\n" + + "latency_seconds{quantile=\"0.95\"} 200.0\n" + + "# EOF\n"; + String prometheusText = + "" + "# TYPE latency_seconds summary\n" + "latency_seconds{quantile=\"0.95\"} 200.0\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"latency_seconds\" " + + "type: SUMMARY " + + "metric { " + + "summary { " + + "quantile { quantile: 0.95 value: 200.0 } " + + "} " + + "}"; + // @formatter:on + SummarySnapshot summary = + SummarySnapshot.builder() + .name("latency_seconds") + .dataPoint( + SummaryDataPointSnapshot.builder() + .quantiles(Quantiles.builder().quantile(0.95, 200.0).build()) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, summary); + assertPrometheusText(prometheusText, summary); + assertOpenMetricsTextWithoutCreated(openMetricsText, summary); + assertPrometheusTextWithoutCreated(prometheusText, summary); + assertPrometheusProtobuf(prometheusProtobuf, summary); + } - @Test - public void testSummaryJustCount() throws IOException { - String openMetricsText = "" + - "# TYPE latency_seconds summary\n" + - "latency_seconds_count 1\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE latency_seconds summary\n" + - "latency_seconds_count 1\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"latency_seconds\" " + - "type: SUMMARY " + - "metric { " + - "summary { " + - "sample_count: 1 " + - "} " + - "}"; - //@formatter:on - SummarySnapshot summary = SummarySnapshot.builder() - .name("latency_seconds") - .dataPoint(SummaryDataPointSnapshot.builder() - .count(1) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, summary); - assertPrometheusText(prometheusText, summary); - assertOpenMetricsTextWithoutCreated(openMetricsText, summary); - assertPrometheusTextWithoutCreated(prometheusText, summary); - assertPrometheusProtobuf(prometheusProtobuf, summary); - } + @Test + public void testSummaryJustCount() throws IOException { + String openMetricsText = + "" + "# TYPE latency_seconds summary\n" + "latency_seconds_count 1\n" + "# EOF\n"; + String prometheusText = "" + "# TYPE latency_seconds summary\n" + "latency_seconds_count 1\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"latency_seconds\" " + + "type: SUMMARY " + + "metric { " + + "summary { " + + "sample_count: 1 " + + "} " + + "}"; + // @formatter:on + SummarySnapshot summary = + SummarySnapshot.builder() + .name("latency_seconds") + .dataPoint(SummaryDataPointSnapshot.builder().count(1).build()) + .build(); + assertOpenMetricsText(openMetricsText, summary); + assertPrometheusText(prometheusText, summary); + assertOpenMetricsTextWithoutCreated(openMetricsText, summary); + assertPrometheusTextWithoutCreated(prometheusText, summary); + assertPrometheusProtobuf(prometheusProtobuf, summary); + } - @Test - public void testSummaryJustSum() throws IOException { - String openMetricsText = "" + - "# TYPE latency_seconds summary\n" + - "latency_seconds_sum 12.3\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE latency_seconds summary\n" + - "latency_seconds_sum 12.3\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"latency_seconds\" " + - "type: SUMMARY " + - "metric { " + - "summary { " + - "sample_sum: 12.3 " + - "} " + - "}"; - //@formatter:on - SummarySnapshot summary = SummarySnapshot.builder() - .name("latency_seconds") - .dataPoint(SummaryDataPointSnapshot.builder() - .sum(12.3) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, summary); - assertPrometheusText(prometheusText, summary); - assertOpenMetricsTextWithoutCreated(openMetricsText, summary); - assertPrometheusTextWithoutCreated(prometheusText, summary); - assertPrometheusProtobuf(prometheusProtobuf, summary); - } + @Test + public void testSummaryJustSum() throws IOException { + String openMetricsText = + "" + "# TYPE latency_seconds summary\n" + "latency_seconds_sum 12.3\n" + "# EOF\n"; + String prometheusText = "" + "# TYPE latency_seconds summary\n" + "latency_seconds_sum 12.3\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"latency_seconds\" " + + "type: SUMMARY " + + "metric { " + + "summary { " + + "sample_sum: 12.3 " + + "} " + + "}"; + // @formatter:on + SummarySnapshot summary = + SummarySnapshot.builder() + .name("latency_seconds") + .dataPoint(SummaryDataPointSnapshot.builder().sum(12.3).build()) + .build(); + assertOpenMetricsText(openMetricsText, summary); + assertPrometheusText(prometheusText, summary); + assertOpenMetricsTextWithoutCreated(openMetricsText, summary); + assertPrometheusTextWithoutCreated(prometheusText, summary); + assertPrometheusProtobuf(prometheusProtobuf, summary); + } - @Test - public void testSummaryEmptyData() throws IOException { - // SummaryData can be present but empty (no count, no sum, no quantiles). - // This should be treated like no data is present. - SummarySnapshot summary = SummarySnapshot.builder() - .name("latency_seconds") - .help("latency") - .unit(Unit.SECONDS) - .dataPoint(SummaryDataPointSnapshot.builder().build()) - .build(); - assertOpenMetricsText("# EOF\n", summary); - assertPrometheusText("", summary); - assertOpenMetricsTextWithoutCreated("# EOF\n", summary); - assertPrometheusTextWithoutCreated("", summary); - assertPrometheusProtobuf("", summary); - } + @Test + public void testSummaryEmptyData() throws IOException { + // SummaryData can be present but empty (no count, no sum, no quantiles). + // This should be treated like no data is present. + SummarySnapshot summary = + SummarySnapshot.builder() + .name("latency_seconds") + .help("latency") + .unit(Unit.SECONDS) + .dataPoint(SummaryDataPointSnapshot.builder().build()) + .build(); + assertOpenMetricsText("# EOF\n", summary); + assertPrometheusText("", summary); + assertOpenMetricsTextWithoutCreated("# EOF\n", summary); + assertPrometheusTextWithoutCreated("", summary); + assertPrometheusProtobuf("", summary); + } - @Test - public void testSummaryEmptyAndNonEmpty() throws IOException { - String openMetricsText = "" + - "# TYPE latency_seconds summary\n" + - "latency_seconds_count{path=\"/v2\"} 2\n" + - "latency_seconds_sum{path=\"/v2\"} 10.7\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE latency_seconds summary\n" + - "latency_seconds_count{path=\"/v2\"} 2\n" + - "latency_seconds_sum{path=\"/v2\"} 10.7\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"latency_seconds\" " + - "type: SUMMARY " + - "metric { " + - "label { name: \"path\" value: \"/v2\" } " + - "summary { " + - "sample_count: 2 " + - "sample_sum: 10.7 " + - "} " + - "}"; - //@formatter:on - SummarySnapshot summary = SummarySnapshot.builder() - .name("latency_seconds") - .dataPoint(SummaryDataPointSnapshot.builder() - .labels(Labels.of("path", "/v1")) - .build()) - .dataPoint(SummaryDataPointSnapshot.builder() - .labels(Labels.of("path", "/v2")) - .count(2) - .sum(10.7) - .build()) - .dataPoint(SummaryDataPointSnapshot.builder() - .labels(Labels.of("path", "/v3")) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, summary); - assertPrometheusText(prometheusText, summary); - assertOpenMetricsTextWithoutCreated(openMetricsText, summary); - assertPrometheusTextWithoutCreated(prometheusText, summary); - assertPrometheusProtobuf(prometheusProtobuf, summary); - } + @Test + public void testSummaryEmptyAndNonEmpty() throws IOException { + String openMetricsText = + "" + + "# TYPE latency_seconds summary\n" + + "latency_seconds_count{path=\"/v2\"} 2\n" + + "latency_seconds_sum{path=\"/v2\"} 10.7\n" + + "# EOF\n"; + String prometheusText = + "" + + "# TYPE latency_seconds summary\n" + + "latency_seconds_count{path=\"/v2\"} 2\n" + + "latency_seconds_sum{path=\"/v2\"} 10.7\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"latency_seconds\" " + + "type: SUMMARY " + + "metric { " + + "label { name: \"path\" value: \"/v2\" } " + + "summary { " + + "sample_count: 2 " + + "sample_sum: 10.7 " + + "} " + + "}"; + // @formatter:on + SummarySnapshot summary = + SummarySnapshot.builder() + .name("latency_seconds") + .dataPoint(SummaryDataPointSnapshot.builder().labels(Labels.of("path", "/v1")).build()) + .dataPoint( + SummaryDataPointSnapshot.builder() + .labels(Labels.of("path", "/v2")) + .count(2) + .sum(10.7) + .build()) + .dataPoint(SummaryDataPointSnapshot.builder().labels(Labels.of("path", "/v3")).build()) + .build(); + assertOpenMetricsText(openMetricsText, summary); + assertPrometheusText(prometheusText, summary); + assertOpenMetricsTextWithoutCreated(openMetricsText, summary); + assertPrometheusTextWithoutCreated(prometheusText, summary); + assertPrometheusProtobuf(prometheusProtobuf, summary); + } - @Test - public void testSummaryWithDots() throws IOException { - String openMetricsText = "" + - "# TYPE my_request_duration_seconds summary\n" + - "# UNIT my_request_duration_seconds seconds\n" + - "# HELP my_request_duration_seconds Request duration in seconds\n" + - "my_request_duration_seconds_count{http_path=\"/hello\"} 1\n" + - "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n" + - "# EOF\n"; - String openMetricsTextWithExemplarsOnAllTimeSeries = "" + - "# TYPE my_request_duration_seconds summary\n" + - "# UNIT my_request_duration_seconds seconds\n" + - "# HELP my_request_duration_seconds Request duration in seconds\n" + - "my_request_duration_seconds_count{http_path=\"/hello\"} 1 # " + exemplarWithDotsString + "\n" + - "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP my_request_duration_seconds Request duration in seconds\n" + - "# TYPE my_request_duration_seconds summary\n" + - "my_request_duration_seconds_count{http_path=\"/hello\"} 1\n" + - "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"my_request_duration_seconds\" " + - "help: \"Request duration in seconds\" " + - "type: SUMMARY " + - "metric { " + - "label { name: \"http_path\" value: \"/hello\" } " + - "summary { sample_count: 1 sample_sum: 0.03 } " + - "}"; - //@formatter:on + @Test + public void testSummaryWithDots() throws IOException { + String openMetricsText = + "" + + "# TYPE my_request_duration_seconds summary\n" + + "# UNIT my_request_duration_seconds seconds\n" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 1\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = + "" + + "# TYPE my_request_duration_seconds summary\n" + + "# UNIT my_request_duration_seconds seconds\n" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 1 # " + + exemplarWithDotsString + + "\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "# TYPE my_request_duration_seconds summary\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 1\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"my_request_duration_seconds\" " + + "help: \"Request duration in seconds\" " + + "type: SUMMARY " + + "metric { " + + "label { name: \"http_path\" value: \"/hello\" } " + + "summary { sample_count: 1 sample_sum: 0.03 } " + + "}"; + // @formatter:on - SummarySnapshot summary = SummarySnapshot.builder() - .name("my.request.duration.seconds") - .help("Request duration in seconds") - .unit(Unit.SECONDS) - .dataPoint(SummaryDataPointSnapshot.builder() - .count(1) - .sum(0.03) - .labels(Labels.builder() - .label("http.path", "/hello") - .build()) - .exemplars(Exemplars.of(exemplarWithDots)) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, summary); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, summary); - assertPrometheusText(prometheusText, summary); - assertPrometheusProtobuf(prometheusProtobuf, summary); - } + SummarySnapshot summary = + SummarySnapshot.builder() + .name("my.request.duration.seconds") + .help("Request duration in seconds") + .unit(Unit.SECONDS) + .dataPoint( + SummaryDataPointSnapshot.builder() + .count(1) + .sum(0.03) + .labels(Labels.builder().label("http.path", "/hello").build()) + .exemplars(Exemplars.of(exemplarWithDots)) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, summary); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsTextWithExemplarsOnAllTimeSeries, summary); + assertPrometheusText(prometheusText, summary); + assertPrometheusProtobuf(prometheusProtobuf, summary); + } - @Test - public void testClassicHistogramComplete() throws Exception { - String openMetricsText = "" + - "# TYPE response_size_bytes histogram\n" + - "# UNIT response_size_bytes bytes\n" + - "# HELP response_size_bytes help\n" + - "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"200\"} 3 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_sum{status=\"200\"} 4.1 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + scrapeTimestamp2s + " # " + exemplar1String + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"500\"} 5 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String openMetricsTextWithExemplarsOnAllTimeSeries = "" + - "# TYPE response_size_bytes histogram\n" + - "# UNIT response_size_bytes bytes\n" + - "# HELP response_size_bytes help\n" + - "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"200\"} 3 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "response_size_bytes_sum{status=\"200\"} 4.1 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + scrapeTimestamp2s + " # " + exemplar1String + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"500\"} 5 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP response_size_bytes help\n" + - "# TYPE response_size_bytes histogram\n" + - "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_count{status=\"200\"} 3 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_sum{status=\"200\"} 4.1 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_count{status=\"500\"} 5 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + - "# HELP response_size_bytes_created help\n" + - "# TYPE response_size_bytes_created gauge\n" + - "response_size_bytes_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "response_size_bytes_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n"; - String openMetricsTextWithoutCreated = "" + - "# TYPE response_size_bytes histogram\n" + - "# UNIT response_size_bytes bytes\n" + - "# HELP response_size_bytes help\n" + - "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"200\"} 3 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_sum{status=\"200\"} 4.1 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + scrapeTimestamp2s + " # " + exemplar1String + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"500\"} 5 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String prometheusTextWithoutCreated = "" + - "# HELP response_size_bytes help\n" + - "# TYPE response_size_bytes histogram\n" + - "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_count{status=\"200\"} 3 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_sum{status=\"200\"} 4.1 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_count{status=\"500\"} 5 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"response_size_bytes\" " + - "help: \"help\" " + - "type: HISTOGRAM " + - "metric { " + - "label { name: \"status\" value: \"200\" } " + - "timestamp_ms: 1672850685829 " + - "histogram { " + - "sample_count: 3 " + - "sample_sum: 4.1 " + - "bucket { " + - "cumulative_count: 2 " + - "upper_bound: 2.2 " + - exemplar1protoString + " " + - "} bucket { " + - "cumulative_count: 3 " + - "upper_bound: Infinity " + - exemplar2protoString + " " + - "} " + - "} " + - "} metric { " + - "label { name: \"status\" value: \"500\" } " + - "timestamp_ms: 1672850585820 " + - "histogram { " + - "sample_count: 5 " + - "sample_sum: 3.2 " + - "bucket { " + - "cumulative_count: 3 " + - "upper_bound: 1.0 " + - "} bucket { " + - "cumulative_count: 5 " + - "upper_bound: 2.2 " + - exemplar1protoString + " " + - "} bucket { " + - "cumulative_count: 5 " + - "upper_bound: Infinity " + - exemplar2protoString + " " + - "} " + - "} " + - "}"; - //@formatter:on - HistogramSnapshot histogram = HistogramSnapshot.builder() - .name("response_size_bytes") - .help("help") - .unit(Unit.BYTES) - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .sum(3.2) - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(1.0, 3) - .bucket(2.2, 2) - .bucket(Double.POSITIVE_INFINITY, 0) - .build()) - .labels(Labels.of("status", "500")) - .exemplars(Exemplars.of(exemplar1, exemplar2)) - .createdTimestampMillis(createdTimestamp2) - .scrapeTimestampMillis(scrapeTimestamp2) - .build()) - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .sum(4.1) - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(2.2, 2) - .bucket(Double.POSITIVE_INFINITY, 1) - .build()) - .labels(Labels.of("status", "200")) - .exemplars(Exemplars.of(exemplar1, exemplar2)) - .createdTimestampMillis(createdTimestamp1) - .scrapeTimestampMillis(scrapeTimestamp1) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, histogram); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, histogram); - assertPrometheusText(prometheusText, histogram); - assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, histogram); - assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, histogram); - assertPrometheusProtobuf(prometheusProtobuf, histogram); - } + @Test + public void testClassicHistogramComplete() throws Exception { + String openMetricsText = + "" + + "# TYPE response_size_bytes histogram\n" + + "# UNIT response_size_bytes bytes\n" + + "# HELP response_size_bytes help\n" + + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"200\"} 3 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.1 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_created{status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + + scrapeTimestamp2s + + " # " + + exemplar1String + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"500\"} 5 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_created{status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = + "" + + "# TYPE response_size_bytes histogram\n" + + "# UNIT response_size_bytes bytes\n" + + "# HELP response_size_bytes help\n" + + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"200\"} 3 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.1 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_created{status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + + scrapeTimestamp2s + + " # " + + exemplar1String + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"500\"} 5 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_created{status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP response_size_bytes help\n" + + "# TYPE response_size_bytes histogram\n" + + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_count{status=\"200\"} 3 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.1 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_count{status=\"500\"} 5 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + + scrapeTimestamp2s + + "\n" + + "# HELP response_size_bytes_created help\n" + + "# TYPE response_size_bytes_created gauge\n" + + "response_size_bytes_created{status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_created{status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n"; + String openMetricsTextWithoutCreated = + "" + + "# TYPE response_size_bytes histogram\n" + + "# UNIT response_size_bytes bytes\n" + + "# HELP response_size_bytes help\n" + + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"200\"} 3 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.1 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + + scrapeTimestamp2s + + " # " + + exemplar1String + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"500\"} 5 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String prometheusTextWithoutCreated = + "" + + "# HELP response_size_bytes help\n" + + "# TYPE response_size_bytes histogram\n" + + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 3 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_count{status=\"200\"} 3 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.1 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"1.0\"} 3 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"2.2\"} 5 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 5 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_count{status=\"500\"} 5 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + + scrapeTimestamp2s + + "\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"response_size_bytes\" " + + "help: \"help\" " + + "type: HISTOGRAM " + + "metric { " + + "label { name: \"status\" value: \"200\" } " + + "timestamp_ms: 1672850685829 " + + "histogram { " + + "sample_count: 3 " + + "sample_sum: 4.1 " + + "bucket { " + + "cumulative_count: 2 " + + "upper_bound: 2.2 " + + exemplar1protoString + + " " + + "} bucket { " + + "cumulative_count: 3 " + + "upper_bound: Infinity " + + exemplar2protoString + + " " + + "} " + + "} " + + "} metric { " + + "label { name: \"status\" value: \"500\" } " + + "timestamp_ms: 1672850585820 " + + "histogram { " + + "sample_count: 5 " + + "sample_sum: 3.2 " + + "bucket { " + + "cumulative_count: 3 " + + "upper_bound: 1.0 " + + "} bucket { " + + "cumulative_count: 5 " + + "upper_bound: 2.2 " + + exemplar1protoString + + " " + + "} bucket { " + + "cumulative_count: 5 " + + "upper_bound: Infinity " + + exemplar2protoString + + " " + + "} " + + "} " + + "}"; + // @formatter:on + HistogramSnapshot histogram = + HistogramSnapshot.builder() + .name("response_size_bytes") + .help("help") + .unit(Unit.BYTES) + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .sum(3.2) + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(1.0, 3) + .bucket(2.2, 2) + .bucket(Double.POSITIVE_INFINITY, 0) + .build()) + .labels(Labels.of("status", "500")) + .exemplars(Exemplars.of(exemplar1, exemplar2)) + .createdTimestampMillis(createdTimestamp2) + .scrapeTimestampMillis(scrapeTimestamp2) + .build()) + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .sum(4.1) + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(2.2, 2) + .bucket(Double.POSITIVE_INFINITY, 1) + .build()) + .labels(Labels.of("status", "200")) + .exemplars(Exemplars.of(exemplar1, exemplar2)) + .createdTimestampMillis(createdTimestamp1) + .scrapeTimestampMillis(scrapeTimestamp1) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, histogram); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsTextWithExemplarsOnAllTimeSeries, histogram); + assertPrometheusText(prometheusText, histogram); + assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, histogram); + assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, histogram); + assertPrometheusProtobuf(prometheusProtobuf, histogram); + } - @Test - public void testClassicHistogramMinimal() throws Exception { - // In OpenMetrics a histogram can have a _count if and only if it has a _sum. - // In Prometheus format, a histogram can have a _count without a _sum. - String openMetricsText = "" + - "# TYPE request_latency_seconds histogram\n" + - "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE request_latency_seconds histogram\n" + - "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + - "request_latency_seconds_count 2\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"request_latency_seconds\" " + - "type: HISTOGRAM " + - "metric { " + - "histogram { " + - "sample_count: 2 " + - "bucket { " + - "cumulative_count: 2 " + - "upper_bound: Infinity " + - "} " + - "} " + - "}"; - //@formatter:on - HistogramSnapshot histogram = HistogramSnapshot.builder() - .name("request_latency_seconds") - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(Double.POSITIVE_INFINITY, 2) - .build()) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, histogram); - assertPrometheusText(prometheusText, histogram); - assertOpenMetricsTextWithoutCreated(openMetricsText, histogram); - assertPrometheusTextWithoutCreated(prometheusText, histogram); - assertPrometheusProtobuf(prometheusProtobuf, histogram); - } + @Test + public void testClassicHistogramMinimal() throws Exception { + // In OpenMetrics a histogram can have a _count if and only if it has a _sum. + // In Prometheus format, a histogram can have a _count without a _sum. + String openMetricsText = + "" + + "# TYPE request_latency_seconds histogram\n" + + "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + + "# EOF\n"; + String prometheusText = + "" + + "# TYPE request_latency_seconds histogram\n" + + "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + + "request_latency_seconds_count 2\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"request_latency_seconds\" " + + "type: HISTOGRAM " + + "metric { " + + "histogram { " + + "sample_count: 2 " + + "bucket { " + + "cumulative_count: 2 " + + "upper_bound: Infinity " + + "} " + + "} " + + "}"; + // @formatter:on + HistogramSnapshot histogram = + HistogramSnapshot.builder() + .name("request_latency_seconds") + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(Double.POSITIVE_INFINITY, 2) + .build()) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, histogram); + assertPrometheusText(prometheusText, histogram); + assertOpenMetricsTextWithoutCreated(openMetricsText, histogram); + assertPrometheusTextWithoutCreated(prometheusText, histogram); + assertPrometheusProtobuf(prometheusProtobuf, histogram); + } - @Test - public void testClassicHistogramCountAndSum() throws Exception { - String openMetricsText = "" + - "# TYPE request_latency_seconds histogram\n" + - "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + - "request_latency_seconds_count 2\n" + - "request_latency_seconds_sum 3.2\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE request_latency_seconds histogram\n" + - "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + - "request_latency_seconds_count 2\n" + - "request_latency_seconds_sum 3.2\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"request_latency_seconds\" " + - "type: HISTOGRAM " + - "metric { " + - "histogram { " + - "sample_count: 2 " + - "sample_sum: 3.2 " + - "bucket { " + - "cumulative_count: 2 " + - "upper_bound: Infinity " + - "} " + - "} " + - "}"; - //@formatter:on - HistogramSnapshot histogram = HistogramSnapshot.builder() - .name("request_latency_seconds") - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .sum(3.2) - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(Double.POSITIVE_INFINITY, 2) - .build()) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, histogram); - assertPrometheusText(prometheusText, histogram); - assertOpenMetricsTextWithoutCreated(openMetricsText, histogram); - assertPrometheusTextWithoutCreated(prometheusText, histogram); - assertPrometheusProtobuf(prometheusProtobuf, histogram); - } + @Test + public void testClassicHistogramCountAndSum() throws Exception { + String openMetricsText = + "" + + "# TYPE request_latency_seconds histogram\n" + + "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + + "request_latency_seconds_count 2\n" + + "request_latency_seconds_sum 3.2\n" + + "# EOF\n"; + String prometheusText = + "" + + "# TYPE request_latency_seconds histogram\n" + + "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + + "request_latency_seconds_count 2\n" + + "request_latency_seconds_sum 3.2\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"request_latency_seconds\" " + + "type: HISTOGRAM " + + "metric { " + + "histogram { " + + "sample_count: 2 " + + "sample_sum: 3.2 " + + "bucket { " + + "cumulative_count: 2 " + + "upper_bound: Infinity " + + "} " + + "} " + + "}"; + // @formatter:on + HistogramSnapshot histogram = + HistogramSnapshot.builder() + .name("request_latency_seconds") + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .sum(3.2) + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(Double.POSITIVE_INFINITY, 2) + .build()) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, histogram); + assertPrometheusText(prometheusText, histogram); + assertOpenMetricsTextWithoutCreated(openMetricsText, histogram); + assertPrometheusTextWithoutCreated(prometheusText, histogram); + assertPrometheusProtobuf(prometheusProtobuf, histogram); + } - @Test - public void testClassicGaugeHistogramComplete() throws IOException { - String openMetricsText = "" + - "# TYPE cache_size_bytes gaugehistogram\n" + - "# UNIT cache_size_bytes bytes\n" + - "# HELP cache_size_bytes number of bytes in the cache\n" + - "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "cache_size_bytes_gcount{db=\"items\"} 4 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_gsum{db=\"items\"} 17.0 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_created{db=\"items\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + scrapeTimestamp2s + " # " + exemplar1String + "\n" + - "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "cache_size_bytes_gcount{db=\"options\"} 4 " + scrapeTimestamp2s + "\n" + - "cache_size_bytes_gsum{db=\"options\"} 18.0 " + scrapeTimestamp2s + "\n" + - "cache_size_bytes_created{db=\"options\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String openMetricsTextWithExemplarsOnAllTimeSeries = "" + - "# TYPE cache_size_bytes gaugehistogram\n" + - "# UNIT cache_size_bytes bytes\n" + - "# HELP cache_size_bytes number of bytes in the cache\n" + - "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "cache_size_bytes_gcount{db=\"items\"} 4 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "cache_size_bytes_gsum{db=\"items\"} 17.0 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_created{db=\"items\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + scrapeTimestamp2s + " # " + exemplar1String + "\n" + - "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "cache_size_bytes_gcount{db=\"options\"} 4 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "cache_size_bytes_gsum{db=\"options\"} 18.0 " + scrapeTimestamp2s + "\n" + - "cache_size_bytes_created{db=\"options\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP cache_size_bytes number of bytes in the cache\n" + - "# TYPE cache_size_bytes histogram\n" + - "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + scrapeTimestamp2s + "\n" + - "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + scrapeTimestamp2s + "\n" + - "# HELP cache_size_bytes_gcount number of bytes in the cache\n" + - "# TYPE cache_size_bytes_gcount gauge\n" + - "cache_size_bytes_gcount{db=\"items\"} 4 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_gcount{db=\"options\"} 4 " + scrapeTimestamp2s + "\n" + - "# HELP cache_size_bytes_gsum number of bytes in the cache\n" + - "# TYPE cache_size_bytes_gsum gauge\n" + - "cache_size_bytes_gsum{db=\"items\"} 17.0 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_gsum{db=\"options\"} 18.0 " + scrapeTimestamp2s + "\n" + - "# HELP cache_size_bytes_created number of bytes in the cache\n" + - "# TYPE cache_size_bytes_created gauge\n" + - "cache_size_bytes_created{db=\"items\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_created{db=\"options\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n"; - String openMetricsTextWithoutCreated = "" + - "# TYPE cache_size_bytes gaugehistogram\n" + - "# UNIT cache_size_bytes bytes\n" + - "# HELP cache_size_bytes number of bytes in the cache\n" + - "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "cache_size_bytes_gcount{db=\"items\"} 4 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_gsum{db=\"items\"} 17.0 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + scrapeTimestamp2s + " # " + exemplar1String + "\n" + - "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "cache_size_bytes_gcount{db=\"options\"} 4 " + scrapeTimestamp2s + "\n" + - "cache_size_bytes_gsum{db=\"options\"} 18.0 " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String prometheusTextWithoutCreated = "" + - "# HELP cache_size_bytes number of bytes in the cache\n" + - "# TYPE cache_size_bytes histogram\n" + - "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + scrapeTimestamp2s + "\n" + - "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + scrapeTimestamp2s + "\n" + - "# HELP cache_size_bytes_gcount number of bytes in the cache\n" + - "# TYPE cache_size_bytes_gcount gauge\n" + - "cache_size_bytes_gcount{db=\"items\"} 4 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_gcount{db=\"options\"} 4 " + scrapeTimestamp2s + "\n" + - "# HELP cache_size_bytes_gsum number of bytes in the cache\n" + - "# TYPE cache_size_bytes_gsum gauge\n" + - "cache_size_bytes_gsum{db=\"items\"} 17.0 " + scrapeTimestamp1s + "\n" + - "cache_size_bytes_gsum{db=\"options\"} 18.0 " + scrapeTimestamp2s + "\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"cache_size_bytes\" " + - "help: \"number of bytes in the cache\" " + - "type: GAUGE_HISTOGRAM " + - "metric { " + - "label { name: \"db\" value: \"items\" } " + - "timestamp_ms: 1672850685829 " + - "histogram { " + - "sample_count: 4 " + - "sample_sum: 17.0 " + - "bucket { " + - "cumulative_count: 3 " + - "upper_bound: 2.0 " + - exemplar1protoString + " " + - "} bucket { " + - "cumulative_count: 4 " + - "upper_bound: Infinity " + - exemplar2protoString + " " + - "} " + - "} " + - "} metric { " + - "label { name: \"db\" value: \"options\" } " + - "timestamp_ms: 1672850585820 " + - "histogram { " + - "sample_count: 4 " + - "sample_sum: 18.0 " + - "bucket { " + - "cumulative_count: 4 " + - "upper_bound: 2.0 " + - exemplar1protoString + " " + - "} bucket { " + - "cumulative_count: 4 " + - "upper_bound: Infinity " + - exemplar2protoString + " " + - "} " + - "} " + - "}"; - //@formatter:on - HistogramSnapshot gaugeHistogram = HistogramSnapshot.builder() - .gaugeHistogram(true) - .name("cache_size_bytes") - .help("number of bytes in the cache") - .unit(Unit.BYTES) - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .sum(17) - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(2.0, 3) - .bucket(Double.POSITIVE_INFINITY, 1) - .build()) - .labels(Labels.of("db", "items")) - .exemplars(Exemplars.of(exemplar1, exemplar2)) - .createdTimestampMillis(createdTimestamp1) - .scrapeTimestampMillis(scrapeTimestamp1) - .build()) - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .sum(18) - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(2.0, 4) - .bucket(Double.POSITIVE_INFINITY, 0) - .build() - ) - .labels(Labels.of("db", "options")) - .exemplars(Exemplars.of(exemplar1, exemplar2)) - .createdTimestampMillis(createdTimestamp2) - .scrapeTimestampMillis(scrapeTimestamp2) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, gaugeHistogram); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, gaugeHistogram); - assertPrometheusText(prometheusText, gaugeHistogram); - assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, gaugeHistogram); - assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, gaugeHistogram); - assertPrometheusProtobuf(prometheusProtobuf, gaugeHistogram); - } + @Test + public void testClassicGaugeHistogramComplete() throws IOException { + String openMetricsText = + "" + + "# TYPE cache_size_bytes gaugehistogram\n" + + "# UNIT cache_size_bytes bytes\n" + + "# HELP cache_size_bytes number of bytes in the cache\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "cache_size_bytes_gcount{db=\"items\"} 4 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_gsum{db=\"items\"} 17.0 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_created{db=\"items\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + + scrapeTimestamp2s + + " # " + + exemplar1String + + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "cache_size_bytes_gcount{db=\"options\"} 4 " + + scrapeTimestamp2s + + "\n" + + "cache_size_bytes_gsum{db=\"options\"} 18.0 " + + scrapeTimestamp2s + + "\n" + + "cache_size_bytes_created{db=\"options\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = + "" + + "# TYPE cache_size_bytes gaugehistogram\n" + + "# UNIT cache_size_bytes bytes\n" + + "# HELP cache_size_bytes number of bytes in the cache\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "cache_size_bytes_gcount{db=\"items\"} 4 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "cache_size_bytes_gsum{db=\"items\"} 17.0 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_created{db=\"items\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + + scrapeTimestamp2s + + " # " + + exemplar1String + + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "cache_size_bytes_gcount{db=\"options\"} 4 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "cache_size_bytes_gsum{db=\"options\"} 18.0 " + + scrapeTimestamp2s + + "\n" + + "cache_size_bytes_created{db=\"options\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP cache_size_bytes number of bytes in the cache\n" + + "# TYPE cache_size_bytes histogram\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + + scrapeTimestamp2s + + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + + scrapeTimestamp2s + + "\n" + + "# HELP cache_size_bytes_gcount number of bytes in the cache\n" + + "# TYPE cache_size_bytes_gcount gauge\n" + + "cache_size_bytes_gcount{db=\"items\"} 4 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_gcount{db=\"options\"} 4 " + + scrapeTimestamp2s + + "\n" + + "# HELP cache_size_bytes_gsum number of bytes in the cache\n" + + "# TYPE cache_size_bytes_gsum gauge\n" + + "cache_size_bytes_gsum{db=\"items\"} 17.0 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_gsum{db=\"options\"} 18.0 " + + scrapeTimestamp2s + + "\n" + + "# HELP cache_size_bytes_created number of bytes in the cache\n" + + "# TYPE cache_size_bytes_created gauge\n" + + "cache_size_bytes_created{db=\"items\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_created{db=\"options\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n"; + String openMetricsTextWithoutCreated = + "" + + "# TYPE cache_size_bytes gaugehistogram\n" + + "# UNIT cache_size_bytes bytes\n" + + "# HELP cache_size_bytes number of bytes in the cache\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "cache_size_bytes_gcount{db=\"items\"} 4 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_gsum{db=\"items\"} 17.0 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + + scrapeTimestamp2s + + " # " + + exemplar1String + + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "cache_size_bytes_gcount{db=\"options\"} 4 " + + scrapeTimestamp2s + + "\n" + + "cache_size_bytes_gsum{db=\"options\"} 18.0 " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String prometheusTextWithoutCreated = + "" + + "# HELP cache_size_bytes number of bytes in the cache\n" + + "# TYPE cache_size_bytes histogram\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_bucket{db=\"items\",le=\"+Inf\"} 4 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"2.0\"} 4 " + + scrapeTimestamp2s + + "\n" + + "cache_size_bytes_bucket{db=\"options\",le=\"+Inf\"} 4 " + + scrapeTimestamp2s + + "\n" + + "# HELP cache_size_bytes_gcount number of bytes in the cache\n" + + "# TYPE cache_size_bytes_gcount gauge\n" + + "cache_size_bytes_gcount{db=\"items\"} 4 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_gcount{db=\"options\"} 4 " + + scrapeTimestamp2s + + "\n" + + "# HELP cache_size_bytes_gsum number of bytes in the cache\n" + + "# TYPE cache_size_bytes_gsum gauge\n" + + "cache_size_bytes_gsum{db=\"items\"} 17.0 " + + scrapeTimestamp1s + + "\n" + + "cache_size_bytes_gsum{db=\"options\"} 18.0 " + + scrapeTimestamp2s + + "\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"cache_size_bytes\" " + + "help: \"number of bytes in the cache\" " + + "type: GAUGE_HISTOGRAM " + + "metric { " + + "label { name: \"db\" value: \"items\" } " + + "timestamp_ms: 1672850685829 " + + "histogram { " + + "sample_count: 4 " + + "sample_sum: 17.0 " + + "bucket { " + + "cumulative_count: 3 " + + "upper_bound: 2.0 " + + exemplar1protoString + + " " + + "} bucket { " + + "cumulative_count: 4 " + + "upper_bound: Infinity " + + exemplar2protoString + + " " + + "} " + + "} " + + "} metric { " + + "label { name: \"db\" value: \"options\" } " + + "timestamp_ms: 1672850585820 " + + "histogram { " + + "sample_count: 4 " + + "sample_sum: 18.0 " + + "bucket { " + + "cumulative_count: 4 " + + "upper_bound: 2.0 " + + exemplar1protoString + + " " + + "} bucket { " + + "cumulative_count: 4 " + + "upper_bound: Infinity " + + exemplar2protoString + + " " + + "} " + + "} " + + "}"; + // @formatter:on + HistogramSnapshot gaugeHistogram = + HistogramSnapshot.builder() + .gaugeHistogram(true) + .name("cache_size_bytes") + .help("number of bytes in the cache") + .unit(Unit.BYTES) + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .sum(17) + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(2.0, 3) + .bucket(Double.POSITIVE_INFINITY, 1) + .build()) + .labels(Labels.of("db", "items")) + .exemplars(Exemplars.of(exemplar1, exemplar2)) + .createdTimestampMillis(createdTimestamp1) + .scrapeTimestampMillis(scrapeTimestamp1) + .build()) + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .sum(18) + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(2.0, 4) + .bucket(Double.POSITIVE_INFINITY, 0) + .build()) + .labels(Labels.of("db", "options")) + .exemplars(Exemplars.of(exemplar1, exemplar2)) + .createdTimestampMillis(createdTimestamp2) + .scrapeTimestampMillis(scrapeTimestamp2) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, gaugeHistogram); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsTextWithExemplarsOnAllTimeSeries, gaugeHistogram); + assertPrometheusText(prometheusText, gaugeHistogram); + assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, gaugeHistogram); + assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, gaugeHistogram); + assertPrometheusProtobuf(prometheusProtobuf, gaugeHistogram); + } - @Test - public void testClassicGaugeHistogramMinimal() throws IOException { - // In OpenMetrics a histogram can have a _count if and only if it has a _sum. - // In Prometheus format, a histogram can have a _count without a _sum. - String openMetricsText = "" + - "# TYPE queue_size_bytes gaugehistogram\n" + - "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE queue_size_bytes histogram\n" + - "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + - "# TYPE queue_size_bytes_gcount gauge\n" + - "queue_size_bytes_gcount 130\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"queue_size_bytes\" " + - "type: GAUGE_HISTOGRAM " + - "metric { " + - "histogram { " + - "sample_count: 130 " + - "bucket { " + - "cumulative_count: 130 " + - "upper_bound: Infinity " + - "} " + - "} " + - "}"; - //@formatter:on - HistogramSnapshot gaugeHistogram = HistogramSnapshot.builder() - .gaugeHistogram(true) - .name("queue_size_bytes") - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(Double.POSITIVE_INFINITY, 130) - .build()) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, gaugeHistogram); - assertPrometheusText(prometheusText, gaugeHistogram); - assertOpenMetricsTextWithoutCreated(openMetricsText, gaugeHistogram); - assertPrometheusTextWithoutCreated(prometheusText, gaugeHistogram); - assertPrometheusProtobuf(prometheusProtobuf, gaugeHistogram); - } + @Test + public void testClassicGaugeHistogramMinimal() throws IOException { + // In OpenMetrics a histogram can have a _count if and only if it has a _sum. + // In Prometheus format, a histogram can have a _count without a _sum. + String openMetricsText = + "" + + "# TYPE queue_size_bytes gaugehistogram\n" + + "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + + "# EOF\n"; + String prometheusText = + "" + + "# TYPE queue_size_bytes histogram\n" + + "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + + "# TYPE queue_size_bytes_gcount gauge\n" + + "queue_size_bytes_gcount 130\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"queue_size_bytes\" " + + "type: GAUGE_HISTOGRAM " + + "metric { " + + "histogram { " + + "sample_count: 130 " + + "bucket { " + + "cumulative_count: 130 " + + "upper_bound: Infinity " + + "} " + + "} " + + "}"; + // @formatter:on + HistogramSnapshot gaugeHistogram = + HistogramSnapshot.builder() + .gaugeHistogram(true) + .name("queue_size_bytes") + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(Double.POSITIVE_INFINITY, 130) + .build()) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, gaugeHistogram); + assertPrometheusText(prometheusText, gaugeHistogram); + assertOpenMetricsTextWithoutCreated(openMetricsText, gaugeHistogram); + assertPrometheusTextWithoutCreated(prometheusText, gaugeHistogram); + assertPrometheusProtobuf(prometheusProtobuf, gaugeHistogram); + } - @Test - public void testClassicGaugeHistogramCountAndSum() throws IOException { - String openMetricsText = "" + - "# TYPE queue_size_bytes gaugehistogram\n" + - "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + - "queue_size_bytes_gcount 130\n" + - "queue_size_bytes_gsum 27000.0\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE queue_size_bytes histogram\n" + - "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + - "# TYPE queue_size_bytes_gcount gauge\n" + - "queue_size_bytes_gcount 130\n" + - "# TYPE queue_size_bytes_gsum gauge\n" + - "queue_size_bytes_gsum 27000.0\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"queue_size_bytes\" " + - "type: GAUGE_HISTOGRAM " + - "metric { " + - "histogram { " + - "sample_count: 130 " + - "sample_sum: 27000.0 " + - "bucket { " + - "cumulative_count: 130 " + - "upper_bound: Infinity " + - "} " + - "} " + - "}"; - //@formatter:on - HistogramSnapshot gaugeHistogram = HistogramSnapshot.builder() - .gaugeHistogram(true) - .name("queue_size_bytes") - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .sum(27000) - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(Double.POSITIVE_INFINITY, 130) - .build()) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, gaugeHistogram); - assertPrometheusText(prometheusText, gaugeHistogram); - assertOpenMetricsTextWithoutCreated(openMetricsText, gaugeHistogram); - assertPrometheusTextWithoutCreated(prometheusText, gaugeHistogram); - assertPrometheusProtobuf(prometheusProtobuf, gaugeHistogram); - } + @Test + public void testClassicGaugeHistogramCountAndSum() throws IOException { + String openMetricsText = + "" + + "# TYPE queue_size_bytes gaugehistogram\n" + + "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + + "queue_size_bytes_gcount 130\n" + + "queue_size_bytes_gsum 27000.0\n" + + "# EOF\n"; + String prometheusText = + "" + + "# TYPE queue_size_bytes histogram\n" + + "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + + "# TYPE queue_size_bytes_gcount gauge\n" + + "queue_size_bytes_gcount 130\n" + + "# TYPE queue_size_bytes_gsum gauge\n" + + "queue_size_bytes_gsum 27000.0\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"queue_size_bytes\" " + + "type: GAUGE_HISTOGRAM " + + "metric { " + + "histogram { " + + "sample_count: 130 " + + "sample_sum: 27000.0 " + + "bucket { " + + "cumulative_count: 130 " + + "upper_bound: Infinity " + + "} " + + "} " + + "}"; + // @formatter:on + HistogramSnapshot gaugeHistogram = + HistogramSnapshot.builder() + .gaugeHistogram(true) + .name("queue_size_bytes") + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .sum(27000) + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(Double.POSITIVE_INFINITY, 130) + .build()) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, gaugeHistogram); + assertPrometheusText(prometheusText, gaugeHistogram); + assertOpenMetricsTextWithoutCreated(openMetricsText, gaugeHistogram); + assertPrometheusTextWithoutCreated(prometheusText, gaugeHistogram); + assertPrometheusProtobuf(prometheusProtobuf, gaugeHistogram); + } - @Test - public void testClassicHistogramWithDots() throws IOException { - String openMetricsText = "" + - "# TYPE my_request_duration_seconds histogram\n" + - "# UNIT my_request_duration_seconds seconds\n" + - "# HELP my_request_duration_seconds Request duration in seconds\n" + - "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 130 # " + exemplarWithDotsString + "\n" + - "my_request_duration_seconds_count{http_path=\"/hello\"} 130\n" + - "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n" + - "# EOF\n"; - String openMetricsTextWithExemplarsOnAllTimeSeries = "" + - "# TYPE my_request_duration_seconds histogram\n" + - "# UNIT my_request_duration_seconds seconds\n" + - "# HELP my_request_duration_seconds Request duration in seconds\n" + - "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 130 # " + exemplarWithDotsString + "\n" + - "my_request_duration_seconds_count{http_path=\"/hello\"} 130 # " + exemplarWithDotsString + "\n" + - "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP my_request_duration_seconds Request duration in seconds\n" + - "# TYPE my_request_duration_seconds histogram\n" + - "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 130\n" + - "my_request_duration_seconds_count{http_path=\"/hello\"} 130\n" + - "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"my_request_duration_seconds\" " + - "help: \"Request duration in seconds\" " + - "type: HISTOGRAM " + - "metric { " + - "label { name: \"http_path\" value: \"/hello\" } " + - "histogram { " + - "sample_count: 130 " + - "sample_sum: 0.01 " + - "bucket { cumulative_count: 130 upper_bound: Infinity " + exemplarWithDotsProtoString + " } " + - "} " + - "}"; - //@formatter:on + @Test + public void testClassicHistogramWithDots() throws IOException { + String openMetricsText = + "" + + "# TYPE my_request_duration_seconds histogram\n" + + "# UNIT my_request_duration_seconds seconds\n" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 130 # " + + exemplarWithDotsString + + "\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 130\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = + "" + + "# TYPE my_request_duration_seconds histogram\n" + + "# UNIT my_request_duration_seconds seconds\n" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 130 # " + + exemplarWithDotsString + + "\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 130 # " + + exemplarWithDotsString + + "\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "# TYPE my_request_duration_seconds histogram\n" + + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 130\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 130\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"my_request_duration_seconds\" " + + "help: \"Request duration in seconds\" " + + "type: HISTOGRAM " + + "metric { " + + "label { name: \"http_path\" value: \"/hello\" } " + + "histogram { " + + "sample_count: 130 " + + "sample_sum: 0.01 " + + "bucket { cumulative_count: 130 upper_bound: Infinity " + + exemplarWithDotsProtoString + + " } " + + "} " + + "}"; + // @formatter:on - HistogramSnapshot histogram = HistogramSnapshot.builder() - .name("my.request.duration.seconds") - .help("Request duration in seconds") - .unit(Unit.SECONDS) - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .sum(0.01) - .labels(Labels.builder() - .label("http.path", "/hello") - .build()) - .classicHistogramBuckets(ClassicHistogramBuckets.builder() - .bucket(Double.POSITIVE_INFINITY, 130) - .build()) - .exemplars(Exemplars.of(exemplarWithDots)) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, histogram); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, histogram); - assertPrometheusText(prometheusText, histogram); - assertPrometheusProtobuf(prometheusProtobuf, histogram); - } + HistogramSnapshot histogram = + HistogramSnapshot.builder() + .name("my.request.duration.seconds") + .help("Request duration in seconds") + .unit(Unit.SECONDS) + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .sum(0.01) + .labels(Labels.builder().label("http.path", "/hello").build()) + .classicHistogramBuckets( + ClassicHistogramBuckets.builder() + .bucket(Double.POSITIVE_INFINITY, 130) + .build()) + .exemplars(Exemplars.of(exemplarWithDots)) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, histogram); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsTextWithExemplarsOnAllTimeSeries, histogram); + assertPrometheusText(prometheusText, histogram); + assertPrometheusProtobuf(prometheusProtobuf, histogram); + } - @Test - public void testNativeHistogramComplete() throws IOException { - String openMetricsText = "" + - "# TYPE response_size_bytes histogram\n" + - "# UNIT response_size_bytes bytes\n" + - "# HELP response_size_bytes help\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"200\"} 2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_sum{status=\"200\"} 4.2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"500\"} 55 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String openMetricsTextWithExemplarsOnAllTimeSeries = "" + - "# TYPE response_size_bytes histogram\n" + - "# UNIT response_size_bytes bytes\n" + - "# HELP response_size_bytes help\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"200\"} 2 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "response_size_bytes_sum{status=\"200\"} 4.2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"500\"} 55 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP response_size_bytes help\n" + - "# TYPE response_size_bytes histogram\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_count{status=\"200\"} 2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_sum{status=\"200\"} 4.2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_count{status=\"500\"} 55 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + - "# HELP response_size_bytes_created help\n" + - "# TYPE response_size_bytes_created gauge\n" + - "response_size_bytes_created{status=\"200\"} " + createdTimestamp1s + " " + scrapeTimestamp1s + "\n" + - "response_size_bytes_created{status=\"500\"} " + createdTimestamp2s + " " + scrapeTimestamp2s + "\n"; - String openMetricsTextWithoutCreated = "" + - "# TYPE response_size_bytes histogram\n" + - "# UNIT response_size_bytes bytes\n" + - "# HELP response_size_bytes help\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"200\"} 2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_sum{status=\"200\"} 4.2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "response_size_bytes_count{status=\"500\"} 55 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String prometheusTextWithoutCreated = "" + - "# HELP response_size_bytes help\n" + - "# TYPE response_size_bytes histogram\n" + - "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_count{status=\"200\"} 2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_sum{status=\"200\"} 4.2 " + scrapeTimestamp1s + "\n" + - "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_count{status=\"500\"} 55 " + scrapeTimestamp2s + "\n" + - "response_size_bytes_sum{status=\"500\"} 3.2 " + scrapeTimestamp2s + "\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"response_size_bytes\" " + - "help: \"help\" " + - "type: HISTOGRAM " + - "metric { " + - "label { name: \"status\" value: \"200\" } " + - "timestamp_ms: 1672850685829 " + - "histogram { " + - "sample_count: 2 " + - "sample_sum: 4.2 " + - "bucket { cumulative_count: 2 upper_bound: Infinity " + exemplar2protoString + " } " + - "schema: 5 " + - "zero_threshold: 0.0 " + - "zero_count: 0 " + - "positive_span { offset: 0 length: 1 } " + - "positive_delta: 2 " + - "} " + - "} metric { " + - "label { name: \"status\" value: \"500\" } " + - "timestamp_ms: 1672850585820 " + - "histogram { " + - "sample_count: 55 " + // bucket counts + zero count - "sample_sum: 3.2 " + - "bucket { cumulative_count: 55 upper_bound: Infinity " + exemplar2protoString + " } " + - "schema: 5 " + - "zero_threshold: 0.0 " + - "zero_count: 1 " + - "negative_span { offset: 0 length: 1 } " + - "negative_span { offset: 9 length: 1 } " + - "negative_delta: 1 " + - "negative_delta: -1 " + // span with count 0 - "positive_span { offset: 2 length: 3 } " + // span with 3 buckets (indexes 2-4) - "positive_span { offset: 7 length: 1 } " + // span with 1 bucket (index 12) - "positive_span { offset: 9 length: 4 } " + // span with gap of size 1 (indexes 22-25) - "positive_span { offset: 6 length: 5 } " + // span with gap of size 2 (indexes 32-36) - "positive_span { offset: 4 length: 2 } " + // span with gap of size 3 part 1 (indexes 41-42) - "positive_span { offset: 3 length: 2 } " + // span with gap of size 3 part 2 (indexes 46-47) - "positive_delta: 3 " + // index 2, count 3 - "positive_delta: 2 " + // index 3, count 5 - "positive_delta: -1 " + // index 4, count 4 - "positive_delta: 2 " + // index 12, count 6 - "positive_delta: -4 " + // index 22, count 2 - "positive_delta: -2 " + // index 23, gap - "positive_delta: 1 " + // index 24, count 1 - "positive_delta: 2 " + // index 25, count 3 - "positive_delta: 1 " + // index 32, count 4 - "positive_delta: -1 " + // index 33, count 3 - "positive_delta: -3 " + // index 34, gap - "positive_delta: 0 " + // index 35, gap - "positive_delta: 7 " + // index 36, count 7 - "positive_delta: -4 " + // index 41, count 3 - "positive_delta: 6 " + // index 42, count 9 - "positive_delta: -7 " + // index 46, count 2 - "positive_delta: -1 " + // index 47, count 1 - "} " + - "}"; - //@formatter:on - HistogramSnapshot nativeHistogram = HistogramSnapshot.builder() - .name("response_size_bytes") - .help("help") - .unit(Unit.BYTES) - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .sum(3.2) - .nativeSchema(5) - .nativeZeroCount(1) - .nativeBucketsForPositiveValues(NativeHistogramBuckets.builder() - // span with 3 buckets - .bucket(2, 3) - .bucket(3, 5) - .bucket(4, 4) - // span with just 1 bucket - .bucket(12, 6) - // span with gap of size 1 - .bucket(22, 2) - .bucket(24, 1) - .bucket(25, 3) - // span with gap of size 2 - .bucket(32, 4) - .bucket(33, 3) - .bucket(36, 7) - // span with gap of size 3 - .bucket(41, 3) - .bucket(42, 9) - .bucket(46, 2) - .bucket(47, 1) - .build()) - .nativeBucketsForNegativeValues(NativeHistogramBuckets.builder() - .bucket(0, 1) - .bucket(10, 0) // bucket with count 0 - .build()) - .labels(Labels.of("status", "500")) - .exemplars(Exemplars.of(exemplar1, exemplar2)) - .createdTimestampMillis(createdTimestamp2) - .scrapeTimestampMillis(scrapeTimestamp2) - .build()) - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .sum(4.2) - .nativeSchema(5) - .nativeBucketsForPositiveValues(NativeHistogramBuckets.builder() - .bucket(0, 2) - .build()) - .labels(Labels.of("status", "200")) - .exemplars(Exemplars.of(exemplar1, exemplar2)) - .createdTimestampMillis(createdTimestamp1) - .scrapeTimestampMillis(scrapeTimestamp1) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, nativeHistogram); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, nativeHistogram); - assertPrometheusText(prometheusText, nativeHistogram); - assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, nativeHistogram); - assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, nativeHistogram); - assertPrometheusProtobuf(prometheusProtobuf, nativeHistogram); - } + @Test + public void testNativeHistogramComplete() throws IOException { + String openMetricsText = + "" + + "# TYPE response_size_bytes histogram\n" + + "# UNIT response_size_bytes bytes\n" + + "# HELP response_size_bytes help\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"200\"} 2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_created{status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"500\"} 55 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_created{status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = + "" + + "# TYPE response_size_bytes histogram\n" + + "# UNIT response_size_bytes bytes\n" + + "# HELP response_size_bytes help\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"200\"} 2 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_created{status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"500\"} 55 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_created{status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP response_size_bytes help\n" + + "# TYPE response_size_bytes histogram\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_count{status=\"200\"} 2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_count{status=\"500\"} 55 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + + scrapeTimestamp2s + + "\n" + + "# HELP response_size_bytes_created help\n" + + "# TYPE response_size_bytes_created gauge\n" + + "response_size_bytes_created{status=\"200\"} " + + createdTimestamp1s + + " " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_created{status=\"500\"} " + + createdTimestamp2s + + " " + + scrapeTimestamp2s + + "\n"; + String openMetricsTextWithoutCreated = + "" + + "# TYPE response_size_bytes histogram\n" + + "# UNIT response_size_bytes bytes\n" + + "# HELP response_size_bytes help\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + + scrapeTimestamp1s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"200\"} 2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "response_size_bytes_count{status=\"500\"} 55 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String prometheusTextWithoutCreated = + "" + + "# HELP response_size_bytes help\n" + + "# TYPE response_size_bytes histogram\n" + + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_count{status=\"200\"} 2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_sum{status=\"200\"} 4.2 " + + scrapeTimestamp1s + + "\n" + + "response_size_bytes_bucket{status=\"500\",le=\"+Inf\"} 55 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_count{status=\"500\"} 55 " + + scrapeTimestamp2s + + "\n" + + "response_size_bytes_sum{status=\"500\"} 3.2 " + + scrapeTimestamp2s + + "\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"response_size_bytes\" " + + "help: \"help\" " + + "type: HISTOGRAM " + + "metric { " + + "label { name: \"status\" value: \"200\" } " + + "timestamp_ms: 1672850685829 " + + "histogram { " + + "sample_count: 2 " + + "sample_sum: 4.2 " + + "bucket { cumulative_count: 2 upper_bound: Infinity " + + exemplar2protoString + + " } " + + "schema: 5 " + + "zero_threshold: 0.0 " + + "zero_count: 0 " + + "positive_span { offset: 0 length: 1 } " + + "positive_delta: 2 " + + "} " + + "} metric { " + + "label { name: \"status\" value: \"500\" } " + + "timestamp_ms: 1672850585820 " + + "histogram { " + + "sample_count: 55 " + + // bucket counts + zero count + "sample_sum: 3.2 " + + "bucket { cumulative_count: 55 upper_bound: Infinity " + + exemplar2protoString + + " } " + + "schema: 5 " + + "zero_threshold: 0.0 " + + "zero_count: 1 " + + "negative_span { offset: 0 length: 1 } " + + "negative_span { offset: 9 length: 1 } " + + "negative_delta: 1 " + + "negative_delta: -1 " + + // span with count 0 + "positive_span { offset: 2 length: 3 } " + + // span with 3 buckets (indexes 2-4) + "positive_span { offset: 7 length: 1 } " + + // span with 1 bucket (index 12) + "positive_span { offset: 9 length: 4 } " + + // span with gap of size 1 (indexes 22-25) + "positive_span { offset: 6 length: 5 } " + + // span with gap of size 2 (indexes 32-36) + "positive_span { offset: 4 length: 2 } " + + // span with gap of size 3 part 1 (indexes 41-42) + "positive_span { offset: 3 length: 2 } " + + // span with gap of size 3 part 2 (indexes 46-47) + "positive_delta: 3 " + + // index 2, count 3 + "positive_delta: 2 " + + // index 3, count 5 + "positive_delta: -1 " + + // index 4, count 4 + "positive_delta: 2 " + + // index 12, count 6 + "positive_delta: -4 " + + // index 22, count 2 + "positive_delta: -2 " + + // index 23, gap + "positive_delta: 1 " + + // index 24, count 1 + "positive_delta: 2 " + + // index 25, count 3 + "positive_delta: 1 " + + // index 32, count 4 + "positive_delta: -1 " + + // index 33, count 3 + "positive_delta: -3 " + + // index 34, gap + "positive_delta: 0 " + + // index 35, gap + "positive_delta: 7 " + + // index 36, count 7 + "positive_delta: -4 " + + // index 41, count 3 + "positive_delta: 6 " + + // index 42, count 9 + "positive_delta: -7 " + + // index 46, count 2 + "positive_delta: -1 " + + // index 47, count 1 + "} " + + "}"; + // @formatter:on + HistogramSnapshot nativeHistogram = + HistogramSnapshot.builder() + .name("response_size_bytes") + .help("help") + .unit(Unit.BYTES) + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .sum(3.2) + .nativeSchema(5) + .nativeZeroCount(1) + .nativeBucketsForPositiveValues( + NativeHistogramBuckets.builder() + // span with 3 buckets + .bucket(2, 3) + .bucket(3, 5) + .bucket(4, 4) + // span with just 1 bucket + .bucket(12, 6) + // span with gap of size 1 + .bucket(22, 2) + .bucket(24, 1) + .bucket(25, 3) + // span with gap of size 2 + .bucket(32, 4) + .bucket(33, 3) + .bucket(36, 7) + // span with gap of size 3 + .bucket(41, 3) + .bucket(42, 9) + .bucket(46, 2) + .bucket(47, 1) + .build()) + .nativeBucketsForNegativeValues( + NativeHistogramBuckets.builder() + .bucket(0, 1) + .bucket(10, 0) // bucket with count 0 + .build()) + .labels(Labels.of("status", "500")) + .exemplars(Exemplars.of(exemplar1, exemplar2)) + .createdTimestampMillis(createdTimestamp2) + .scrapeTimestampMillis(scrapeTimestamp2) + .build()) + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .sum(4.2) + .nativeSchema(5) + .nativeBucketsForPositiveValues( + NativeHistogramBuckets.builder().bucket(0, 2).build()) + .labels(Labels.of("status", "200")) + .exemplars(Exemplars.of(exemplar1, exemplar2)) + .createdTimestampMillis(createdTimestamp1) + .scrapeTimestampMillis(scrapeTimestamp1) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, nativeHistogram); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsTextWithExemplarsOnAllTimeSeries, nativeHistogram); + assertPrometheusText(prometheusText, nativeHistogram); + assertOpenMetricsTextWithoutCreated(openMetricsTextWithoutCreated, nativeHistogram); + assertPrometheusTextWithoutCreated(prometheusTextWithoutCreated, nativeHistogram); + assertPrometheusProtobuf(prometheusProtobuf, nativeHistogram); + } - @Test - public void testNativeHistogramMinimal() throws IOException { - String openMetricsText = "" + - "# TYPE latency_seconds histogram\n" + - "latency_seconds_bucket{le=\"+Inf\"} 0\n" + - "# EOF\n"; - String prometheusText = "" + - "# TYPE latency_seconds histogram\n" + - "latency_seconds_bucket{le=\"+Inf\"} 0\n" + - "latency_seconds_count 0\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"latency_seconds\" " + - "type: HISTOGRAM " + - "metric { " + - "histogram { " + - "sample_count: 0 " + - "schema: 5 " + - "zero_threshold: 0.0 " + - "zero_count: 0 " + - "} " + - "}"; - //@formatter:on - HistogramSnapshot nativeHistogram = HistogramSnapshot.builder() - .name("latency_seconds") - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .nativeSchema(5) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, nativeHistogram); - assertPrometheusText(prometheusText, nativeHistogram); - assertPrometheusProtobuf(prometheusProtobuf, nativeHistogram); - } + @Test + public void testNativeHistogramMinimal() throws IOException { + String openMetricsText = + "" + + "# TYPE latency_seconds histogram\n" + + "latency_seconds_bucket{le=\"+Inf\"} 0\n" + + "# EOF\n"; + String prometheusText = + "" + + "# TYPE latency_seconds histogram\n" + + "latency_seconds_bucket{le=\"+Inf\"} 0\n" + + "latency_seconds_count 0\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"latency_seconds\" " + + "type: HISTOGRAM " + + "metric { " + + "histogram { " + + "sample_count: 0 " + + "schema: 5 " + + "zero_threshold: 0.0 " + + "zero_count: 0 " + + "} " + + "}"; + // @formatter:on + HistogramSnapshot nativeHistogram = + HistogramSnapshot.builder() + .name("latency_seconds") + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder().nativeSchema(5).build()) + .build(); + assertOpenMetricsText(openMetricsText, nativeHistogram); + assertPrometheusText(prometheusText, nativeHistogram); + assertPrometheusProtobuf(prometheusProtobuf, nativeHistogram); + } - @Test - public void testNativeHistogramWithDots() throws IOException { - String openMetricsText = "" + - "# TYPE my_request_duration_seconds histogram\n" + - "# UNIT my_request_duration_seconds seconds\n" + - "# HELP my_request_duration_seconds Request duration in seconds\n" + - "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 4 # " + exemplarWithDotsString + "\n" + - "my_request_duration_seconds_count{http_path=\"/hello\"} 4\n" + - "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n" + - "# EOF\n"; - String openMetricsTextWithExemplarsOnAllTimeSeries = "" + - "# TYPE my_request_duration_seconds histogram\n" + - "# UNIT my_request_duration_seconds seconds\n" + - "# HELP my_request_duration_seconds Request duration in seconds\n" + - "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 4 # " + exemplarWithDotsString + "\n" + - "my_request_duration_seconds_count{http_path=\"/hello\"} 4 # " + exemplarWithDotsString + "\n" + - "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP my_request_duration_seconds Request duration in seconds\n" + - "# TYPE my_request_duration_seconds histogram\n" + - "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 4\n" + - "my_request_duration_seconds_count{http_path=\"/hello\"} 4\n" + - "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"my_request_duration_seconds\" " + - "help: \"Request duration in seconds\" " + - "type: HISTOGRAM " + - "metric { " + - "label { name: \"http_path\" value: \"/hello\" } " + - "histogram { " + - "sample_count: 4 " + - "sample_sum: 3.2 " + - "bucket { cumulative_count: 4 upper_bound: Infinity " + exemplarWithDotsProtoString + " } " + - "schema: 5 " + - "zero_threshold: 0.0 " + - "zero_count: 1 " + - "positive_span { offset: 2 length: 1 } " + - "positive_delta: 3 " + - "} " + - "}"; - //@formatter:on + @Test + public void testNativeHistogramWithDots() throws IOException { + String openMetricsText = + "" + + "# TYPE my_request_duration_seconds histogram\n" + + "# UNIT my_request_duration_seconds seconds\n" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 4 # " + + exemplarWithDotsString + + "\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 4\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n" + + "# EOF\n"; + String openMetricsTextWithExemplarsOnAllTimeSeries = + "" + + "# TYPE my_request_duration_seconds histogram\n" + + "# UNIT my_request_duration_seconds seconds\n" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 4 # " + + exemplarWithDotsString + + "\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 4 # " + + exemplarWithDotsString + + "\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP my_request_duration_seconds Request duration in seconds\n" + + "# TYPE my_request_duration_seconds histogram\n" + + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 4\n" + + "my_request_duration_seconds_count{http_path=\"/hello\"} 4\n" + + "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"my_request_duration_seconds\" " + + "help: \"Request duration in seconds\" " + + "type: HISTOGRAM " + + "metric { " + + "label { name: \"http_path\" value: \"/hello\" } " + + "histogram { " + + "sample_count: 4 " + + "sample_sum: 3.2 " + + "bucket { cumulative_count: 4 upper_bound: Infinity " + + exemplarWithDotsProtoString + + " } " + + "schema: 5 " + + "zero_threshold: 0.0 " + + "zero_count: 1 " + + "positive_span { offset: 2 length: 1 } " + + "positive_delta: 3 " + + "} " + + "}"; + // @formatter:on - HistogramSnapshot histogram = HistogramSnapshot.builder() - .name("my.request.duration.seconds") - .help("Request duration in seconds") - .unit(Unit.SECONDS) - .dataPoint(HistogramSnapshot.HistogramDataPointSnapshot.builder() - .labels(Labels.builder() - .label("http.path", "/hello") - .build()) - .sum(3.2) - .nativeSchema(5) - .nativeZeroCount(1) - .nativeBucketsForPositiveValues(NativeHistogramBuckets.builder() - .bucket(2, 3) - .build() - ) - .exemplars(Exemplars.of(exemplarWithDots)) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, histogram); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsTextWithExemplarsOnAllTimeSeries, histogram); - assertPrometheusText(prometheusText, histogram); - assertPrometheusProtobuf(prometheusProtobuf, histogram); - } - // TODO: Gauge Native Histogram + HistogramSnapshot histogram = + HistogramSnapshot.builder() + .name("my.request.duration.seconds") + .help("Request duration in seconds") + .unit(Unit.SECONDS) + .dataPoint( + HistogramSnapshot.HistogramDataPointSnapshot.builder() + .labels(Labels.builder().label("http.path", "/hello").build()) + .sum(3.2) + .nativeSchema(5) + .nativeZeroCount(1) + .nativeBucketsForPositiveValues( + NativeHistogramBuckets.builder().bucket(2, 3).build()) + .exemplars(Exemplars.of(exemplarWithDots)) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, histogram); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsTextWithExemplarsOnAllTimeSeries, histogram); + assertPrometheusText(prometheusText, histogram); + assertPrometheusProtobuf(prometheusProtobuf, histogram); + } - @Test - public void testInfo() throws IOException { - String openMetrics = "" + - "# TYPE version info\n" + - "# HELP version version information\n" + - "version_info{version=\"1.2.3\"} 1\n" + - "# EOF\n"; - String prometheus = "" + - "# HELP version_info version information\n" + - "# TYPE version_info gauge\n" + - "version_info{version=\"1.2.3\"} 1\n"; - InfoSnapshot info = InfoSnapshot.builder() - .name("version") - .help("version information") - .dataPoint(InfoSnapshot.InfoDataPointSnapshot.builder() - .labels(Labels.of("version", "1.2.3")) - .build()) - .build(); - assertOpenMetricsText(openMetrics, info); - assertPrometheusText(prometheus, info); - assertOpenMetricsTextWithoutCreated(openMetrics, info); - assertPrometheusTextWithoutCreated(prometheus, info); - } + // TODO: Gauge Native Histogram - @Test - public void testInfoWithDots() throws IOException { - String openMetricsText = "" + - "# TYPE jvm_status info\n" + - "# HELP jvm_status JVM status info\n" + - "jvm_status_info{jvm_version=\"1.2.3\"} 1\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP jvm_status_info JVM status info\n" + - "# TYPE jvm_status_info gauge\n" + - "jvm_status_info{jvm_version=\"1.2.3\"} 1\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"jvm_status_info\" " + - "help: \"JVM status info\" " + - "type: GAUGE " + - "metric { " + "" + - "label { name: \"jvm_version\" value: \"1.2.3\" } " + - "gauge { value: 1.0 } " + - "}"; - //@formatter:on - InfoSnapshot info = InfoSnapshot.builder() - .name("jvm.status") - .help("JVM status info") - .dataPoint(InfoSnapshot.InfoDataPointSnapshot.builder() - .labels(Labels.of("jvm.version", "1.2.3")) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, info); - assertPrometheusText(prometheusText, info); - assertPrometheusProtobuf(prometheusProtobuf, info); - } + @Test + public void testInfo() throws IOException { + String openMetrics = + "" + + "# TYPE version info\n" + + "# HELP version version information\n" + + "version_info{version=\"1.2.3\"} 1\n" + + "# EOF\n"; + String prometheus = + "" + + "# HELP version_info version information\n" + + "# TYPE version_info gauge\n" + + "version_info{version=\"1.2.3\"} 1\n"; + InfoSnapshot info = + InfoSnapshot.builder() + .name("version") + .help("version information") + .dataPoint( + InfoSnapshot.InfoDataPointSnapshot.builder() + .labels(Labels.of("version", "1.2.3")) + .build()) + .build(); + assertOpenMetricsText(openMetrics, info); + assertPrometheusText(prometheus, info); + assertOpenMetricsTextWithoutCreated(openMetrics, info); + assertPrometheusTextWithoutCreated(prometheus, info); + } - @Test - public void testStateSetComplete() throws IOException { - String openMetrics = "" + - "# TYPE state stateset\n" + - "# HELP state complete state set example\n" + - "state{env=\"dev\",state=\"state1\"} 1 " + scrapeTimestamp1s + "\n" + - "state{env=\"dev\",state=\"state2\"} 0 " + scrapeTimestamp1s + "\n" + - "state{env=\"prod\",state=\"state1\"} 0 " + scrapeTimestamp2s + "\n" + - "state{env=\"prod\",state=\"state2\"} 1 " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String prometheus = "" + - "# HELP state complete state set example\n" + - "# TYPE state gauge\n" + - "state{env=\"dev\",state=\"state1\"} 1 " + scrapeTimestamp1s + "\n" + - "state{env=\"dev\",state=\"state2\"} 0 " + scrapeTimestamp1s + "\n" + - "state{env=\"prod\",state=\"state1\"} 0 " + scrapeTimestamp2s + "\n" + - "state{env=\"prod\",state=\"state2\"} 1 " + scrapeTimestamp2s + "\n"; - StateSetSnapshot stateSet = StateSetSnapshot.builder() - .name("state") - .help("complete state set example") - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .labels(Labels.of("env", "prod")) - .state("state1", false) - .state("state2", true) - .scrapeTimestampMillis(scrapeTimestamp2) - .build()) - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .labels(Labels.of("env", "dev")) - .state("state2", false) - .state("state1", true) - .scrapeTimestampMillis(scrapeTimestamp1) - .build()) - .build(); - assertOpenMetricsText(openMetrics, stateSet); - assertPrometheusText(prometheus, stateSet); - assertOpenMetricsTextWithoutCreated(openMetrics, stateSet); - assertPrometheusTextWithoutCreated(prometheus, stateSet); - } + @Test + public void testInfoWithDots() throws IOException { + String openMetricsText = + "" + + "# TYPE jvm_status info\n" + + "# HELP jvm_status JVM status info\n" + + "jvm_status_info{jvm_version=\"1.2.3\"} 1\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP jvm_status_info JVM status info\n" + + "# TYPE jvm_status_info gauge\n" + + "jvm_status_info{jvm_version=\"1.2.3\"} 1\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"jvm_status_info\" " + + "help: \"JVM status info\" " + + "type: GAUGE " + + "metric { " + + "" + + "label { name: \"jvm_version\" value: \"1.2.3\" } " + + "gauge { value: 1.0 } " + + "}"; + // @formatter:on + InfoSnapshot info = + InfoSnapshot.builder() + .name("jvm.status") + .help("JVM status info") + .dataPoint( + InfoSnapshot.InfoDataPointSnapshot.builder() + .labels(Labels.of("jvm.version", "1.2.3")) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, info); + assertPrometheusText(prometheusText, info); + assertPrometheusProtobuf(prometheusProtobuf, info); + } - @Test - public void testStateSetMinimal() throws IOException { - String openMetrics = "" + - "# TYPE state stateset\n" + - "state{state=\"a\"} 1\n" + - "state{state=\"bb\"} 0\n" + - "# EOF\n"; - String prometheus = "" + - "# TYPE state gauge\n" + - "state{state=\"a\"} 1\n" + - "state{state=\"bb\"} 0\n"; - StateSetSnapshot stateSet = StateSetSnapshot.builder() - .name("state") - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .state("a", true) - .state("bb", false) - .build()) - .build(); - assertOpenMetricsText(openMetrics, stateSet); - assertPrometheusText(prometheus, stateSet); - assertOpenMetricsTextWithoutCreated(openMetrics, stateSet); - assertPrometheusTextWithoutCreated(prometheus, stateSet); - } + @Test + public void testStateSetComplete() throws IOException { + String openMetrics = + "" + + "# TYPE state stateset\n" + + "# HELP state complete state set example\n" + + "state{env=\"dev\",state=\"state1\"} 1 " + + scrapeTimestamp1s + + "\n" + + "state{env=\"dev\",state=\"state2\"} 0 " + + scrapeTimestamp1s + + "\n" + + "state{env=\"prod\",state=\"state1\"} 0 " + + scrapeTimestamp2s + + "\n" + + "state{env=\"prod\",state=\"state2\"} 1 " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String prometheus = + "" + + "# HELP state complete state set example\n" + + "# TYPE state gauge\n" + + "state{env=\"dev\",state=\"state1\"} 1 " + + scrapeTimestamp1s + + "\n" + + "state{env=\"dev\",state=\"state2\"} 0 " + + scrapeTimestamp1s + + "\n" + + "state{env=\"prod\",state=\"state1\"} 0 " + + scrapeTimestamp2s + + "\n" + + "state{env=\"prod\",state=\"state2\"} 1 " + + scrapeTimestamp2s + + "\n"; + StateSetSnapshot stateSet = + StateSetSnapshot.builder() + .name("state") + .help("complete state set example") + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .labels(Labels.of("env", "prod")) + .state("state1", false) + .state("state2", true) + .scrapeTimestampMillis(scrapeTimestamp2) + .build()) + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .labels(Labels.of("env", "dev")) + .state("state2", false) + .state("state1", true) + .scrapeTimestampMillis(scrapeTimestamp1) + .build()) + .build(); + assertOpenMetricsText(openMetrics, stateSet); + assertPrometheusText(prometheus, stateSet); + assertOpenMetricsTextWithoutCreated(openMetrics, stateSet); + assertPrometheusTextWithoutCreated(prometheus, stateSet); + } - @Test - public void testStateSetWithDots() throws IOException { - String openMetricsText = "" + - "# TYPE my_application_state stateset\n" + - "# HELP my_application_state My application state\n" + - "my_application_state{data_center=\"us east\",my_application_state=\"feature.enabled\"} 1\n" + - "my_application_state{data_center=\"us east\",my_application_state=\"is.alpha.version\"} 0\n" + - "# EOF\n"; - String prometheusText = "" + - "# HELP my_application_state My application state\n" + - "# TYPE my_application_state gauge\n" + - "my_application_state{data_center=\"us east\",my_application_state=\"feature.enabled\"} 1\n" + - "my_application_state{data_center=\"us east\",my_application_state=\"is.alpha.version\"} 0\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"my_application_state\" " + - "help: \"My application state\" " + - "type: GAUGE " + - "metric { " + - "label { name: \"data_center\" value: \"us east\" } " + - "label { name: \"my_application_state\" value: \"feature.enabled\" } " + - "gauge { value: 1.0 } " + - "} metric { " + - "label { name: \"data_center\" value: \"us east\" } " + - "label { name: \"my_application_state\" value: \"is.alpha.version\" } " + - "gauge { value: 0.0 } " + - "}"; - //@formatter:on - StateSetSnapshot stateSet = StateSetSnapshot.builder() - .name("my.application.state") - .help("My application state") - .dataPoint(StateSetSnapshot.StateSetDataPointSnapshot.builder() - .labels(Labels.of("data.center", "us east")) - .state("feature.enabled", true) - .state("is.alpha.version", false) - .build()) - .build(); - assertOpenMetricsText(openMetricsText, stateSet); - assertPrometheusText(prometheusText, stateSet); - assertPrometheusProtobuf(prometheusProtobuf, stateSet); - } + @Test + public void testStateSetMinimal() throws IOException { + String openMetrics = + "" + + "# TYPE state stateset\n" + + "state{state=\"a\"} 1\n" + + "state{state=\"bb\"} 0\n" + + "# EOF\n"; + String prometheus = + "" + "# TYPE state gauge\n" + "state{state=\"a\"} 1\n" + "state{state=\"bb\"} 0\n"; + StateSetSnapshot stateSet = + StateSetSnapshot.builder() + .name("state") + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .state("a", true) + .state("bb", false) + .build()) + .build(); + assertOpenMetricsText(openMetrics, stateSet); + assertPrometheusText(prometheus, stateSet); + assertOpenMetricsTextWithoutCreated(openMetrics, stateSet); + assertPrometheusTextWithoutCreated(prometheus, stateSet); + } - @Test - public void testUnknownComplete() throws IOException { - String openMetrics = "" + - "# TYPE my_special_thing_bytes unknown\n" + - "# UNIT my_special_thing_bytes bytes\n" + - "# HELP my_special_thing_bytes help message\n" + - "my_special_thing_bytes{env=\"dev\"} 0.2 " + scrapeTimestamp1s + "\n" + - "my_special_thing_bytes{env=\"prod\"} 0.7 " + scrapeTimestamp2s + "\n" + - "# EOF\n"; - String openMetricsWithExemplarsOnAllTimeSeries = "" + - "# TYPE my_special_thing_bytes unknown\n" + - "# UNIT my_special_thing_bytes bytes\n" + - "# HELP my_special_thing_bytes help message\n" + - "my_special_thing_bytes{env=\"dev\"} 0.2 " + scrapeTimestamp1s + " # " + exemplar1String + "\n" + - "my_special_thing_bytes{env=\"prod\"} 0.7 " + scrapeTimestamp2s + " # " + exemplar2String + "\n" + - "# EOF\n"; - String prometheus = "" + - "# HELP my_special_thing_bytes help message\n" + - "# TYPE my_special_thing_bytes untyped\n" + - "my_special_thing_bytes{env=\"dev\"} 0.2 " + scrapeTimestamp1s + "\n" + - "my_special_thing_bytes{env=\"prod\"} 0.7 " + scrapeTimestamp2s + "\n"; - UnknownSnapshot unknown = UnknownSnapshot.builder() - .name("my_special_thing_bytes") - .help("help message") - .unit(Unit.BYTES) - .dataPoint(UnknownDataPointSnapshot.builder() - .value(0.7) - .labels(Labels.of("env", "prod")) - .exemplar(exemplar2) - .scrapeTimestampMillis(scrapeTimestamp2) - .build()) - .dataPoint(UnknownDataPointSnapshot.builder() - .value(0.2) - .labels(Labels.of("env", "dev")) - .exemplar(exemplar1) - .scrapeTimestampMillis(scrapeTimestamp1) - .build()) - .build(); - assertOpenMetricsText(openMetrics, unknown); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsWithExemplarsOnAllTimeSeries, unknown); - assertPrometheusText(prometheus, unknown); - assertOpenMetricsTextWithoutCreated(openMetrics, unknown); - assertPrometheusTextWithoutCreated(prometheus, unknown); - } + @Test + public void testStateSetWithDots() throws IOException { + String openMetricsText = + "" + + "# TYPE my_application_state stateset\n" + + "# HELP my_application_state My application state\n" + + "my_application_state{data_center=\"us east\",my_application_state=\"feature.enabled\"} 1\n" + + "my_application_state{data_center=\"us east\",my_application_state=\"is.alpha.version\"} 0\n" + + "# EOF\n"; + String prometheusText = + "" + + "# HELP my_application_state My application state\n" + + "# TYPE my_application_state gauge\n" + + "my_application_state{data_center=\"us east\",my_application_state=\"feature.enabled\"} 1\n" + + "my_application_state{data_center=\"us east\",my_application_state=\"is.alpha.version\"} 0\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"my_application_state\" " + + "help: \"My application state\" " + + "type: GAUGE " + + "metric { " + + "label { name: \"data_center\" value: \"us east\" } " + + "label { name: \"my_application_state\" value: \"feature.enabled\" } " + + "gauge { value: 1.0 } " + + "} metric { " + + "label { name: \"data_center\" value: \"us east\" } " + + "label { name: \"my_application_state\" value: \"is.alpha.version\" } " + + "gauge { value: 0.0 } " + + "}"; + // @formatter:on + StateSetSnapshot stateSet = + StateSetSnapshot.builder() + .name("my.application.state") + .help("My application state") + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .labels(Labels.of("data.center", "us east")) + .state("feature.enabled", true) + .state("is.alpha.version", false) + .build()) + .build(); + assertOpenMetricsText(openMetricsText, stateSet); + assertPrometheusText(prometheusText, stateSet); + assertPrometheusProtobuf(prometheusProtobuf, stateSet); + } - @Test - public void testUnknownMinimal() throws IOException { - String openMetrics = "" + - "# TYPE other unknown\n" + - "other 22.3\n" + - "# EOF\n"; - String prometheus = "" + - "# TYPE other untyped\n" + - "other 22.3\n"; - UnknownSnapshot unknown = UnknownSnapshot.builder() - .name("other") - .dataPoint(UnknownDataPointSnapshot.builder() - .value(22.3) - .build()) - .build(); - assertOpenMetricsText(openMetrics, unknown); - assertPrometheusText(prometheus, unknown); - assertOpenMetricsTextWithoutCreated(openMetrics, unknown); - assertPrometheusTextWithoutCreated(prometheus, unknown); - } + @Test + public void testUnknownComplete() throws IOException { + String openMetrics = + "" + + "# TYPE my_special_thing_bytes unknown\n" + + "# UNIT my_special_thing_bytes bytes\n" + + "# HELP my_special_thing_bytes help message\n" + + "my_special_thing_bytes{env=\"dev\"} 0.2 " + + scrapeTimestamp1s + + "\n" + + "my_special_thing_bytes{env=\"prod\"} 0.7 " + + scrapeTimestamp2s + + "\n" + + "# EOF\n"; + String openMetricsWithExemplarsOnAllTimeSeries = + "" + + "# TYPE my_special_thing_bytes unknown\n" + + "# UNIT my_special_thing_bytes bytes\n" + + "# HELP my_special_thing_bytes help message\n" + + "my_special_thing_bytes{env=\"dev\"} 0.2 " + + scrapeTimestamp1s + + " # " + + exemplar1String + + "\n" + + "my_special_thing_bytes{env=\"prod\"} 0.7 " + + scrapeTimestamp2s + + " # " + + exemplar2String + + "\n" + + "# EOF\n"; + String prometheus = + "" + + "# HELP my_special_thing_bytes help message\n" + + "# TYPE my_special_thing_bytes untyped\n" + + "my_special_thing_bytes{env=\"dev\"} 0.2 " + + scrapeTimestamp1s + + "\n" + + "my_special_thing_bytes{env=\"prod\"} 0.7 " + + scrapeTimestamp2s + + "\n"; + UnknownSnapshot unknown = + UnknownSnapshot.builder() + .name("my_special_thing_bytes") + .help("help message") + .unit(Unit.BYTES) + .dataPoint( + UnknownDataPointSnapshot.builder() + .value(0.7) + .labels(Labels.of("env", "prod")) + .exemplar(exemplar2) + .scrapeTimestampMillis(scrapeTimestamp2) + .build()) + .dataPoint( + UnknownDataPointSnapshot.builder() + .value(0.2) + .labels(Labels.of("env", "dev")) + .exemplar(exemplar1) + .scrapeTimestampMillis(scrapeTimestamp1) + .build()) + .build(); + assertOpenMetricsText(openMetrics, unknown); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsWithExemplarsOnAllTimeSeries, unknown); + assertPrometheusText(prometheus, unknown); + assertOpenMetricsTextWithoutCreated(openMetrics, unknown); + assertPrometheusTextWithoutCreated(prometheus, unknown); + } - @Test - public void testUnknownWithDots() throws IOException { - String openMetrics = "" + - "# TYPE some_unknown_metric_bytes unknown\n" + - "# UNIT some_unknown_metric_bytes bytes\n" + - "# HELP some_unknown_metric_bytes help message\n" + - "some_unknown_metric_bytes{test_env=\"7\"} 0.7\n" + - "# EOF\n"; - String openMetricsWithExemplarsOnAllTimeSeries = "" + - "# TYPE some_unknown_metric_bytes unknown\n" + - "# UNIT some_unknown_metric_bytes bytes\n" + - "# HELP some_unknown_metric_bytes help message\n" + - "some_unknown_metric_bytes{test_env=\"7\"} 0.7 # " + exemplarWithDotsString + "\n" + - "# EOF\n"; - String prometheus = "" + - "# HELP some_unknown_metric_bytes help message\n" + - "# TYPE some_unknown_metric_bytes untyped\n" + - "some_unknown_metric_bytes{test_env=\"7\"} 0.7\n"; - String prometheusProtobuf = "" + - //@formatter:off - "name: \"some_unknown_metric_bytes\" " + - "help: \"help message\" " + - "type: UNTYPED " + - "metric { " + - "label { name: \"test_env\" value: \"7\" } " + - "untyped { value: 0.7 } " + - "}"; - //@formatter:on - UnknownSnapshot unknown = UnknownSnapshot.builder() - .name(PrometheusNaming.sanitizeMetricName("some.unknown.metric", Unit.BYTES)) - .help("help message") - .unit(Unit.BYTES) - .dataPoint(UnknownDataPointSnapshot.builder() - .value(0.7) - .labels(Labels.of("test.env", "7")) - .exemplar(exemplarWithDots) - .build()) - .build(); - assertOpenMetricsText(openMetrics, unknown); - assertOpenMetricsTextWithExemplarsOnAllTimeSeries(openMetricsWithExemplarsOnAllTimeSeries, unknown); - assertPrometheusText(prometheus, unknown); - assertPrometheusProtobuf(prometheusProtobuf, unknown); - } + @Test + public void testUnknownMinimal() throws IOException { + String openMetrics = "" + "# TYPE other unknown\n" + "other 22.3\n" + "# EOF\n"; + String prometheus = "" + "# TYPE other untyped\n" + "other 22.3\n"; + UnknownSnapshot unknown = + UnknownSnapshot.builder() + .name("other") + .dataPoint(UnknownDataPointSnapshot.builder().value(22.3).build()) + .build(); + assertOpenMetricsText(openMetrics, unknown); + assertPrometheusText(prometheus, unknown); + assertOpenMetricsTextWithoutCreated(openMetrics, unknown); + assertPrometheusTextWithoutCreated(prometheus, unknown); + } - @Test - public void testHelpEscape() throws IOException { - String openMetrics = "" + - "# TYPE test counter\n" + - "# HELP test Some text and \\n some \\\" escaping\n" + - "test_total 1.0\n" + - "# EOF\n"; - String prometheus = "" + - "# HELP test_total Some text and \\n some \" escaping\n" + - "# TYPE test_total counter\n" + - "test_total 1.0\n"; - CounterSnapshot counter = CounterSnapshot.builder() - .name("test") - .help("Some text and \n some \" escaping") // example from https://openMetrics.io - .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) - .build(); - assertOpenMetricsText(openMetrics, counter); - assertPrometheusText(prometheus, counter); - assertOpenMetricsTextWithoutCreated(openMetrics, counter); - assertPrometheusTextWithoutCreated(prometheus, counter); - } + @Test + public void testUnknownWithDots() throws IOException { + String openMetrics = + "" + + "# TYPE some_unknown_metric_bytes unknown\n" + + "# UNIT some_unknown_metric_bytes bytes\n" + + "# HELP some_unknown_metric_bytes help message\n" + + "some_unknown_metric_bytes{test_env=\"7\"} 0.7\n" + + "# EOF\n"; + String openMetricsWithExemplarsOnAllTimeSeries = + "" + + "# TYPE some_unknown_metric_bytes unknown\n" + + "# UNIT some_unknown_metric_bytes bytes\n" + + "# HELP some_unknown_metric_bytes help message\n" + + "some_unknown_metric_bytes{test_env=\"7\"} 0.7 # " + + exemplarWithDotsString + + "\n" + + "# EOF\n"; + String prometheus = + "" + + "# HELP some_unknown_metric_bytes help message\n" + + "# TYPE some_unknown_metric_bytes untyped\n" + + "some_unknown_metric_bytes{test_env=\"7\"} 0.7\n"; + String prometheusProtobuf = + "" + + + // @formatter:off + "name: \"some_unknown_metric_bytes\" " + + "help: \"help message\" " + + "type: UNTYPED " + + "metric { " + + "label { name: \"test_env\" value: \"7\" } " + + "untyped { value: 0.7 } " + + "}"; + // @formatter:on + UnknownSnapshot unknown = + UnknownSnapshot.builder() + .name(PrometheusNaming.sanitizeMetricName("some.unknown.metric", Unit.BYTES)) + .help("help message") + .unit(Unit.BYTES) + .dataPoint( + UnknownDataPointSnapshot.builder() + .value(0.7) + .labels(Labels.of("test.env", "7")) + .exemplar(exemplarWithDots) + .build()) + .build(); + assertOpenMetricsText(openMetrics, unknown); + assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + openMetricsWithExemplarsOnAllTimeSeries, unknown); + assertPrometheusText(prometheus, unknown); + assertPrometheusProtobuf(prometheusProtobuf, unknown); + } - @Test - public void testLabelValueEscape() throws IOException { - String openMetrics = "" + - "# TYPE test counter\n" + - "test_total{a=\"x\",b=\"escaping\\\" example \\n \"} 1.0\n" + - "# EOF\n"; - String prometheus = "" + - "# TYPE test_total counter\n" + - "test_total{a=\"x\",b=\"escaping\\\" example \\n \"} 1.0\n"; - CounterSnapshot counter = CounterSnapshot.builder() - .name("test") - .dataPoint(CounterDataPointSnapshot.builder() - // example from https://openMetrics.io - .labels(Labels.of("a", "x", "b", "escaping\" example \n ")) - .value(1.0) - .build()) - .build(); - assertOpenMetricsText(openMetrics, counter); - assertPrometheusText(prometheus, counter); - } + @Test + public void testHelpEscape() throws IOException { + String openMetrics = + "" + + "# TYPE test counter\n" + + "# HELP test Some text and \\n some \\\" escaping\n" + + "test_total 1.0\n" + + "# EOF\n"; + String prometheus = + "" + + "# HELP test_total Some text and \\n some \" escaping\n" + + "# TYPE test_total counter\n" + + "test_total 1.0\n"; + CounterSnapshot counter = + CounterSnapshot.builder() + .name("test") + .help("Some text and \n some \" escaping") // example from https://openMetrics.io + .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) + .build(); + assertOpenMetricsText(openMetrics, counter); + assertPrometheusText(prometheus, counter); + assertOpenMetricsTextWithoutCreated(openMetrics, counter); + assertPrometheusTextWithoutCreated(prometheus, counter); + } + + @Test + public void testLabelValueEscape() throws IOException { + String openMetrics = + "" + + "# TYPE test counter\n" + + "test_total{a=\"x\",b=\"escaping\\\" example \\n \"} 1.0\n" + + "# EOF\n"; + String prometheus = + "" + + "# TYPE test_total counter\n" + + "test_total{a=\"x\",b=\"escaping\\\" example \\n \"} 1.0\n"; + CounterSnapshot counter = + CounterSnapshot.builder() + .name("test") + .dataPoint( + CounterDataPointSnapshot.builder() + // example from https://openMetrics.io + .labels(Labels.of("a", "x", "b", "escaping\" example \n ")) + .value(1.0) + .build()) + .build(); + assertOpenMetricsText(openMetrics, counter); + assertPrometheusText(prometheus, counter); + } - private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) throws IOException { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, false); - writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expected, out.toString()); - } + private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, false); + writer.write(out, MetricSnapshots.of(snapshot)); + Assert.assertEquals(expected, out.toString()); + } - private void assertOpenMetricsTextWithExemplarsOnAllTimeSeries(String expected, MetricSnapshot snapshot) throws IOException { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); - writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expected, out.toString()); - } + private void assertOpenMetricsTextWithExemplarsOnAllTimeSeries( + String expected, MetricSnapshot snapshot) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + writer.write(out, MetricSnapshots.of(snapshot)); + Assert.assertEquals(expected, out.toString()); + } - private void assertOpenMetricsTextWithoutCreated(String expected, MetricSnapshot snapshot) throws IOException { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, false); - writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expected, out.toString()); - } + private void assertOpenMetricsTextWithoutCreated(String expected, MetricSnapshot snapshot) + throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, false); + writer.write(out, MetricSnapshots.of(snapshot)); + Assert.assertEquals(expected, out.toString()); + } - private void assertPrometheusText(String expected, MetricSnapshot snapshot) throws IOException { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(true); - writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expected, out.toString()); - } + private void assertPrometheusText(String expected, MetricSnapshot snapshot) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(true); + writer.write(out, MetricSnapshots.of(snapshot)); + Assert.assertEquals(expected, out.toString()); + } - private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot snapshot) throws IOException { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(false); - writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expected, out.toString()); - } + private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot snapshot) + throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(false); + writer.write(out, MetricSnapshots.of(snapshot)); + Assert.assertEquals(expected, out.toString()); + } - private void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { - PrometheusProtobufWriter writer = new PrometheusProtobufWriter(); - Metrics.MetricFamily protobufData = writer.convert(snapshot); - String actual = TextFormat.printer().shortDebugString(protobufData); - Assert.assertEquals(expected, actual); - } + private void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { + PrometheusProtobufWriter writer = new PrometheusProtobufWriter(); + Metrics.MetricFamily protobufData = writer.convert(snapshot); + String actual = TextFormat.printer().shortDebugString(protobufData); + Assert.assertEquals(expected, actual); + } } diff --git a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java index 985a15711..69b852a41 100644 --- a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java +++ b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java @@ -10,19 +10,18 @@ import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import io.prometheus.metrics.model.snapshots.SummarySnapshot; - import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; - /** * Collect metrics from Caffeine's com.github.benmanes.caffeine.cache.Cache. + * *

    - *

    {@code
      *
    + * 
    {@code
      * // Note that `recordStats()` is required to gather non-zero statistics
      * Cache cache = Caffeine.newBuilder().recordStats().build();
      * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector().register();
    @@ -32,7 +31,8 @@
      *
      * Exposed metrics are labeled with the provided cache name.
      *
    - * With the example above, sample metric names would be:
    + * 

    With the example above, sample metric names would be: + * *

      *     caffeine_cache_hit_total{cache="mycache"} 10.0
      *     caffeine_cache_miss_total{cache="mycache"} 3.0
    @@ -42,191 +42,183 @@
      * 
    * * Additionally, if the cache includes a loader, the following metrics would be provided: + * *
      *     caffeine_cache_load_failure_total{cache="mycache"} 2.0
      *     caffeine_cache_loads_total{cache="mycache"} 7.0
      *     caffeine_cache_load_duration_seconds_count{cache="mycache"} 7.0
      *     caffeine_cache_load_duration_seconds_sum{cache="mycache"} 0.0034
      * 
    - * */ public class CacheMetricsCollector implements MultiCollector { - private static final double NANOSECONDS_PER_SECOND = 1_000_000_000.0; - - protected final ConcurrentMap children = new ConcurrentHashMap(); - - /** - * Add or replace the cache with the given name. - *

    - * Any references any previous cache with this name is invalidated. - * - * @param cacheName The name of the cache, will be the metrics label value - * @param cache The cache being monitored - */ - public void addCache(String cacheName, Cache cache) { - children.put(cacheName, cache); - } - - /** - * Add or replace the cache with the given name. - *

    - * Any references any previous cache with this name is invalidated. - * - * @param cacheName The name of the cache, will be the metrics label value - * @param cache The cache being monitored - */ - public void addCache(String cacheName, AsyncCache cache) { - children.put(cacheName, cache.synchronous()); - } - - /** - * Remove the cache with the given name. - *

    - * Any references to the cache are invalidated. - * - * @param cacheName cache to be removed - */ - public Cache removeCache(String cacheName) { - return children.remove(cacheName); - } - - /** - * Remove all caches. - *

    - * Any references to all caches are invalidated. - */ - public void clear(){ - children.clear(); - } - - @Override - public MetricSnapshots collect() { - final MetricSnapshots.Builder metricSnapshotsBuilder = MetricSnapshots.builder(); - final List labelNames = Arrays.asList("cache"); - - final CounterSnapshot.Builder cacheHitTotal = CounterSnapshot.builder() - .name("caffeine_cache_hit") - .help("Cache hit totals"); - - final CounterSnapshot.Builder cacheMissTotal = CounterSnapshot.builder() - .name("caffeine_cache_miss") - .help("Cache miss totals"); - - final CounterSnapshot.Builder cacheRequestsTotal = CounterSnapshot.builder() + private static final double NANOSECONDS_PER_SECOND = 1_000_000_000.0; + + protected final ConcurrentMap children = new ConcurrentHashMap(); + + /** + * Add or replace the cache with the given name. + * + *

    Any references any previous cache with this name is invalidated. + * + * @param cacheName The name of the cache, will be the metrics label value + * @param cache The cache being monitored + */ + public void addCache(String cacheName, Cache cache) { + children.put(cacheName, cache); + } + + /** + * Add or replace the cache with the given name. + * + *

    Any references any previous cache with this name is invalidated. + * + * @param cacheName The name of the cache, will be the metrics label value + * @param cache The cache being monitored + */ + public void addCache(String cacheName, AsyncCache cache) { + children.put(cacheName, cache.synchronous()); + } + + /** + * Remove the cache with the given name. + * + *

    Any references to the cache are invalidated. + * + * @param cacheName cache to be removed + */ + public Cache removeCache(String cacheName) { + return children.remove(cacheName); + } + + /** + * Remove all caches. + * + *

    Any references to all caches are invalidated. + */ + public void clear() { + children.clear(); + } + + @Override + public MetricSnapshots collect() { + final MetricSnapshots.Builder metricSnapshotsBuilder = MetricSnapshots.builder(); + final List labelNames = Arrays.asList("cache"); + + final CounterSnapshot.Builder cacheHitTotal = + CounterSnapshot.builder().name("caffeine_cache_hit").help("Cache hit totals"); + + final CounterSnapshot.Builder cacheMissTotal = + CounterSnapshot.builder().name("caffeine_cache_miss").help("Cache miss totals"); + + final CounterSnapshot.Builder cacheRequestsTotal = + CounterSnapshot.builder() .name("caffeine_cache_requests") .help("Cache request totals, hits + misses"); - final CounterSnapshot.Builder cacheEvictionTotal = CounterSnapshot.builder() + final CounterSnapshot.Builder cacheEvictionTotal = + CounterSnapshot.builder() .name("caffeine_cache_eviction") .help("Cache eviction totals, doesn't include manually removed entries"); - final GaugeSnapshot.Builder cacheEvictionWeight = GaugeSnapshot.builder() + final GaugeSnapshot.Builder cacheEvictionWeight = + GaugeSnapshot.builder() .name("caffeine_cache_eviction_weight") .help("Cache eviction weight"); - final CounterSnapshot.Builder cacheLoadFailure = CounterSnapshot.builder() - .name("caffeine_cache_load_failure") - .help("Cache load failures"); + final CounterSnapshot.Builder cacheLoadFailure = + CounterSnapshot.builder().name("caffeine_cache_load_failure").help("Cache load failures"); - final CounterSnapshot.Builder cacheLoadTotal = CounterSnapshot.builder() + final CounterSnapshot.Builder cacheLoadTotal = + CounterSnapshot.builder() .name("caffeine_cache_loads") .help("Cache loads: both success and failures"); - final GaugeSnapshot.Builder cacheSize = GaugeSnapshot.builder() - .name("caffeine_cache_estimated_size") - .help("Estimated cache size"); + final GaugeSnapshot.Builder cacheSize = + GaugeSnapshot.builder().name("caffeine_cache_estimated_size").help("Estimated cache size"); - final SummarySnapshot.Builder cacheLoadSummary = SummarySnapshot.builder() + final SummarySnapshot.Builder cacheLoadSummary = + SummarySnapshot.builder() .name("caffeine_cache_load_duration_seconds") .help("Cache load duration: both success and failures"); - for (final Map.Entry c: children.entrySet()) { - final List cacheName = Arrays.asList(c.getKey()); - final Labels labels = Labels.of(labelNames, cacheName); - - final CacheStats stats = c.getValue().stats(); - - try { - cacheEvictionWeight.dataPoint( - GaugeSnapshot.GaugeDataPointSnapshot.builder() - .labels(labels) - .value(stats.evictionWeight()) - .build() - ); - } catch (Exception e) { - // EvictionWeight metric is unavailable, newer version of Caffeine is needed. - } - - cacheHitTotal.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.hitCount()) - .build() - ); - - cacheMissTotal.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.missCount()) - .build() - ); - - cacheRequestsTotal.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.requestCount()) - .build() - ); - - cacheEvictionTotal.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.evictionCount()) - .build() - ); - - cacheSize.dataPoint( - GaugeSnapshot.GaugeDataPointSnapshot.builder() - .labels(labels) - .value(c.getValue().estimatedSize()) - .build() - ); - - if (c.getValue() instanceof LoadingCache) { - cacheLoadFailure.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.loadFailureCount()) - .build() - ); - - cacheLoadTotal.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.loadCount()) - .build() - ); - - cacheLoadSummary.dataPoint( - SummarySnapshot.SummaryDataPointSnapshot.builder() - .labels(labels) - .count(stats.loadCount()) - .sum(stats.totalLoadTime() / NANOSECONDS_PER_SECOND) - .build() - ); - } - } - - return metricSnapshotsBuilder - .metricSnapshot(cacheHitTotal.build()) - .metricSnapshot(cacheMissTotal.build()) - .metricSnapshot(cacheRequestsTotal.build()) - .metricSnapshot(cacheEvictionTotal.build()) - .metricSnapshot(cacheEvictionWeight.build()) - .metricSnapshot(cacheLoadFailure.build()) - .metricSnapshot(cacheLoadTotal.build()) - .metricSnapshot(cacheSize.build()) - .metricSnapshot(cacheLoadSummary.build()) - .build(); + for (final Map.Entry c : children.entrySet()) { + final List cacheName = Arrays.asList(c.getKey()); + final Labels labels = Labels.of(labelNames, cacheName); + + final CacheStats stats = c.getValue().stats(); + + try { + cacheEvictionWeight.dataPoint( + GaugeSnapshot.GaugeDataPointSnapshot.builder() + .labels(labels) + .value(stats.evictionWeight()) + .build()); + } catch (Exception e) { + // EvictionWeight metric is unavailable, newer version of Caffeine is needed. + } + + cacheHitTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.hitCount()) + .build()); + + cacheMissTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.missCount()) + .build()); + + cacheRequestsTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.requestCount()) + .build()); + + cacheEvictionTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.evictionCount()) + .build()); + + cacheSize.dataPoint( + GaugeSnapshot.GaugeDataPointSnapshot.builder() + .labels(labels) + .value(c.getValue().estimatedSize()) + .build()); + + if (c.getValue() instanceof LoadingCache) { + cacheLoadFailure.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.loadFailureCount()) + .build()); + + cacheLoadTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.loadCount()) + .build()); + + cacheLoadSummary.dataPoint( + SummarySnapshot.SummaryDataPointSnapshot.builder() + .labels(labels) + .count(stats.loadCount()) + .sum(stats.totalLoadTime() / NANOSECONDS_PER_SECOND) + .build()); + } } + + return metricSnapshotsBuilder + .metricSnapshot(cacheHitTotal.build()) + .metricSnapshot(cacheMissTotal.build()) + .metricSnapshot(cacheRequestsTotal.build()) + .metricSnapshot(cacheEvictionTotal.build()) + .metricSnapshot(cacheEvictionWeight.build()) + .metricSnapshot(cacheLoadFailure.build()) + .metricSnapshot(cacheLoadTotal.build()) + .metricSnapshot(cacheSize.build()) + .metricSnapshot(cacheLoadSummary.build()) + .build(); + } } diff --git a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java index 86f7ed185..acbfe3e1e 100644 --- a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java +++ b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java @@ -1,5 +1,11 @@ package io.prometheus.metrics.instrumentation.caffeine; +import static org.assertj.core.api.Java6Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.CacheLoader; import com.github.benmanes.caffeine.cache.Caffeine; @@ -10,144 +16,143 @@ import io.prometheus.metrics.model.snapshots.DataPointSnapshot; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.SummarySnapshot; -import org.junit.Test; - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; import java.util.concurrent.Executor; - -import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import org.junit.Test; public class CacheMetricsCollectorTest { - @Test - public void cacheExposesMetricsForHitMissAndEviction() { - final Cache cache = Caffeine.newBuilder().maximumSize(2).recordStats().executor(new Executor() { - @Override - public void execute(Runnable command) { - // Run cleanup in same thread, to remove async behavior with evictions - command.run(); - } - }).build(); - - final CacheMetricsCollector collector = new CacheMetricsCollector(); - collector.addCache("users", cache); - - final PrometheusRegistry registry = new PrometheusRegistry(); - registry.register(collector); - - cache.getIfPresent("user1"); - cache.getIfPresent("user1"); - cache.put("user1", "First User"); - cache.getIfPresent("user1"); - - // Add to cache to trigger eviction. - cache.put("user2", "Second User"); - cache.put("user3", "Third User"); - cache.put("user4", "Fourth User"); - - assertCounterMetric(registry, "caffeine_cache_hit", "users", 1.0); - assertCounterMetric(registry, "caffeine_cache_miss", "users", 2.0); - assertCounterMetric(registry, "caffeine_cache_requests", "users", 3.0); - assertCounterMetric(registry, "caffeine_cache_eviction", "users", 2.0); - - final String expected = "# TYPE caffeine_cache_estimated_size gauge\n" + - "# HELP caffeine_cache_estimated_size Estimated cache size\n" + - "caffeine_cache_estimated_size{cache=\"users\"} 2.0\n" + - "# TYPE caffeine_cache_eviction counter\n" + - "# HELP caffeine_cache_eviction Cache eviction totals, doesn't include manually removed entries\n" + - "caffeine_cache_eviction_total{cache=\"users\"} 2.0\n" + - "# TYPE caffeine_cache_eviction_weight gauge\n" + - "# HELP caffeine_cache_eviction_weight Cache eviction weight\n" + - "caffeine_cache_eviction_weight{cache=\"users\"} 2.0\n" + - "# TYPE caffeine_cache_hit counter\n" + - "# HELP caffeine_cache_hit Cache hit totals\n" + - "caffeine_cache_hit_total{cache=\"users\"} 1.0\n" + - "# TYPE caffeine_cache_miss counter\n" + - "# HELP caffeine_cache_miss Cache miss totals\n" + - "caffeine_cache_miss_total{cache=\"users\"} 2.0\n" + - "# TYPE caffeine_cache_requests counter\n" + - "# HELP caffeine_cache_requests Cache request totals, hits + misses\n" + - "caffeine_cache_requests_total{cache=\"users\"} 3.0\n" + - "# EOF\n"; - - assertEquals(expected, convertToOpenMetricsFormat(registry)); - } - - @SuppressWarnings("unchecked") - @Test - public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { - final CacheLoader loader = mock(CacheLoader.class); - when(loader.load(anyString())) - .thenReturn("First User") - .thenThrow(new RuntimeException("Seconds time fails")) - .thenReturn("Third User"); - - final LoadingCache cache = Caffeine.newBuilder().recordStats().build(loader); - final CacheMetricsCollector collector = new CacheMetricsCollector(); - - collector.addCache("loadingusers", cache); - - final PrometheusRegistry registry = new PrometheusRegistry(); - registry.register(collector); - - cache.get("user1"); - cache.get("user1"); - try { - cache.get("user2"); - } catch (Exception e) { - // ignoring. - } - cache.get("user3"); - - assertCounterMetric(registry, "caffeine_cache_hit", "loadingusers", 1.0); - assertCounterMetric(registry, "caffeine_cache_miss", "loadingusers", 3.0); - - assertCounterMetric(registry, "caffeine_cache_load_failure", "loadingusers", 1.0); - assertCounterMetric(registry, "caffeine_cache_loads", "loadingusers", 3.0); - - final SummarySnapshot.SummaryDataPointSnapshot loadDuration = (SummarySnapshot.SummaryDataPointSnapshot) getDataPointSnapshot( - registry, - "caffeine_cache_load_duration_seconds", - "loadingusers" - ); - - assertEquals(3, loadDuration.getCount()); - assertThat(loadDuration.getSum()).isGreaterThan(0); - } - - private void assertCounterMetric(PrometheusRegistry registry, String name, String cacheName, double value) { - final CounterSnapshot.CounterDataPointSnapshot dataPointSnapshot = - (CounterSnapshot.CounterDataPointSnapshot) getDataPointSnapshot(registry, name, cacheName); - - assertEquals(value, dataPointSnapshot.getValue(), 0); - } - - private DataPointSnapshot getDataPointSnapshot(PrometheusRegistry registry, String name, String cacheName) - { - final Labels labels = Labels.of(new String[]{"cache"}, new String[]{cacheName}); - - return registry.scrape(name::equals).stream() - .flatMap(metricSnapshot -> metricSnapshot.getDataPoints().stream()) - .filter(dataPoint -> dataPoint.getLabels().equals(labels)) - .findFirst() - .get(); + @Test + public void cacheExposesMetricsForHitMissAndEviction() { + final Cache cache = + Caffeine.newBuilder() + .maximumSize(2) + .recordStats() + .executor( + new Executor() { + @Override + public void execute(Runnable command) { + // Run cleanup in same thread, to remove async behavior with evictions + command.run(); + } + }) + .build(); + + final CacheMetricsCollector collector = new CacheMetricsCollector(); + collector.addCache("users", cache); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + cache.getIfPresent("user1"); + cache.getIfPresent("user1"); + cache.put("user1", "First User"); + cache.getIfPresent("user1"); + + // Add to cache to trigger eviction. + cache.put("user2", "Second User"); + cache.put("user3", "Third User"); + cache.put("user4", "Fourth User"); + + assertCounterMetric(registry, "caffeine_cache_hit", "users", 1.0); + assertCounterMetric(registry, "caffeine_cache_miss", "users", 2.0); + assertCounterMetric(registry, "caffeine_cache_requests", "users", 3.0); + assertCounterMetric(registry, "caffeine_cache_eviction", "users", 2.0); + + final String expected = + "# TYPE caffeine_cache_estimated_size gauge\n" + + "# HELP caffeine_cache_estimated_size Estimated cache size\n" + + "caffeine_cache_estimated_size{cache=\"users\"} 2.0\n" + + "# TYPE caffeine_cache_eviction counter\n" + + "# HELP caffeine_cache_eviction Cache eviction totals, doesn't include manually removed entries\n" + + "caffeine_cache_eviction_total{cache=\"users\"} 2.0\n" + + "# TYPE caffeine_cache_eviction_weight gauge\n" + + "# HELP caffeine_cache_eviction_weight Cache eviction weight\n" + + "caffeine_cache_eviction_weight{cache=\"users\"} 2.0\n" + + "# TYPE caffeine_cache_hit counter\n" + + "# HELP caffeine_cache_hit Cache hit totals\n" + + "caffeine_cache_hit_total{cache=\"users\"} 1.0\n" + + "# TYPE caffeine_cache_miss counter\n" + + "# HELP caffeine_cache_miss Cache miss totals\n" + + "caffeine_cache_miss_total{cache=\"users\"} 2.0\n" + + "# TYPE caffeine_cache_requests counter\n" + + "# HELP caffeine_cache_requests Cache request totals, hits + misses\n" + + "caffeine_cache_requests_total{cache=\"users\"} 3.0\n" + + "# EOF\n"; + + assertEquals(expected, convertToOpenMetricsFormat(registry)); + } + + @SuppressWarnings("unchecked") + @Test + public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { + final CacheLoader loader = mock(CacheLoader.class); + when(loader.load(anyString())) + .thenReturn("First User") + .thenThrow(new RuntimeException("Seconds time fails")) + .thenReturn("Third User"); + + final LoadingCache cache = Caffeine.newBuilder().recordStats().build(loader); + final CacheMetricsCollector collector = new CacheMetricsCollector(); + + collector.addCache("loadingusers", cache); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + cache.get("user1"); + cache.get("user1"); + try { + cache.get("user2"); + } catch (Exception e) { + // ignoring. } - - private String convertToOpenMetricsFormat(PrometheusRegistry registry) { - final ByteArrayOutputStream out = new ByteArrayOutputStream(); - final OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); - try { - writer.write(out, registry.scrape()); - return out.toString(StandardCharsets.UTF_8.name()); - } catch (IOException e) { - throw new UncheckedIOException(e); - } + cache.get("user3"); + + assertCounterMetric(registry, "caffeine_cache_hit", "loadingusers", 1.0); + assertCounterMetric(registry, "caffeine_cache_miss", "loadingusers", 3.0); + + assertCounterMetric(registry, "caffeine_cache_load_failure", "loadingusers", 1.0); + assertCounterMetric(registry, "caffeine_cache_loads", "loadingusers", 3.0); + + final SummarySnapshot.SummaryDataPointSnapshot loadDuration = + (SummarySnapshot.SummaryDataPointSnapshot) + getDataPointSnapshot(registry, "caffeine_cache_load_duration_seconds", "loadingusers"); + + assertEquals(3, loadDuration.getCount()); + assertThat(loadDuration.getSum()).isGreaterThan(0); + } + + private void assertCounterMetric( + PrometheusRegistry registry, String name, String cacheName, double value) { + final CounterSnapshot.CounterDataPointSnapshot dataPointSnapshot = + (CounterSnapshot.CounterDataPointSnapshot) getDataPointSnapshot(registry, name, cacheName); + + assertEquals(value, dataPointSnapshot.getValue(), 0); + } + + private DataPointSnapshot getDataPointSnapshot( + PrometheusRegistry registry, String name, String cacheName) { + final Labels labels = Labels.of(new String[] {"cache"}, new String[] {cacheName}); + + return registry.scrape(name::equals).stream() + .flatMap(metricSnapshot -> metricSnapshot.getDataPoints().stream()) + .filter(dataPoint -> dataPoint.getLabels().equals(labels)) + .findFirst() + .get(); + } + + private String convertToOpenMetricsFormat(PrometheusRegistry registry) { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + try { + writer.write(out, registry.scrape()); + return out.toString(StandardCharsets.UTF_8.name()); + } catch (IOException e) { + throw new UncheckedIOException(e); } + } } diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java index ec2bfa2e4..c87f4aa90 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java @@ -1,221 +1,252 @@ package io.prometheus.metrics.instrumentation.dropwizard5; -import io.dropwizard.metrics5.Timer; import io.dropwizard.metrics5.*; +import io.dropwizard.metrics5.Timer; import io.prometheus.metrics.instrumentation.dropwizard5.labels.CustomLabelMapper; import io.prometheus.metrics.model.registry.MultiCollector; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.*; - import java.util.*; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; -/** - * Collect Dropwizard metrics from a MetricRegistry. - */ +/** Collect Dropwizard metrics from a MetricRegistry. */ public class DropwizardExports implements MultiCollector { - private static final Logger LOGGER = Logger.getLogger(DropwizardExports.class.getName()); - private final MetricRegistry registry; - private final MetricFilter metricFilter; - private final Optional labelMapper; - - /** - * Creates a new DropwizardExports and {@link MetricFilter#ALL}. - * - * @param registry a metric registry to export in prometheus. - */ - public DropwizardExports(MetricRegistry registry) { - super(); - this.registry = registry; - this.metricFilter = MetricFilter.ALL; - this.labelMapper = Optional.empty(); + private static final Logger LOGGER = Logger.getLogger(DropwizardExports.class.getName()); + private final MetricRegistry registry; + private final MetricFilter metricFilter; + private final Optional labelMapper; + + /** + * Creates a new DropwizardExports and {@link MetricFilter#ALL}. + * + * @param registry a metric registry to export in prometheus. + */ + public DropwizardExports(MetricRegistry registry) { + super(); + this.registry = registry; + this.metricFilter = MetricFilter.ALL; + this.labelMapper = Optional.empty(); + } + + /** + * Creates a new DropwizardExports with a custom {@link MetricFilter}. + * + * @param registry a metric registry to export in prometheus. + * @param metricFilter a custom metric filter. + */ + public DropwizardExports(MetricRegistry registry, MetricFilter metricFilter) { + this.registry = registry; + this.metricFilter = metricFilter; + this.labelMapper = Optional.empty(); + } + + /** + * @param registry a metric registry to export in prometheus. + * @param metricFilter a custom metric filter. + * @param labelMapper a labelMapper to use to map labels. + */ + public DropwizardExports( + MetricRegistry registry, MetricFilter metricFilter, CustomLabelMapper labelMapper) { + this.registry = registry; + this.metricFilter = metricFilter; + this.labelMapper = Optional.ofNullable(labelMapper); + } + + private static String getHelpMessage(String metricName, Metric metric) { + return String.format( + "Generated from Dropwizard metric import (metric=%s, type=%s)", + metricName, metric.getClass().getName()); + } + + private MetricMetadata getMetricMetaData(String metricName, Metric metric) { + String name = labelMapper.isPresent() ? labelMapper.get().getName(metricName) : metricName; + return new MetricMetadata( + PrometheusNaming.sanitizeMetricName(name), getHelpMessage(metricName, metric)); + } + + /** + * Export counter as Prometheus Gauge. + */ + MetricSnapshot fromCounter(String dropwizardName, Counter counter) { + MetricMetadata metadata = getMetricMetaData(dropwizardName, counter); + CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder = + CounterSnapshot.CounterDataPointSnapshot.builder() + .value(Long.valueOf(counter.getCount()).doubleValue()); + labelMapper.map( + mapper -> + dataPointBuilder.labels( + mapper.getLabels( + dropwizardName, Collections.emptyList(), Collections.emptyList()))); + return new CounterSnapshot(metadata, Collections.singletonList(dataPointBuilder.build())); + } + + /** Export gauge as a prometheus gauge. */ + MetricSnapshot fromGauge(String dropwizardName, Gauge gauge) { + Object obj = gauge.getValue(); + double value; + if (obj instanceof Number) { + value = ((Number) obj).doubleValue(); + } else if (obj instanceof Boolean) { + value = ((Boolean) obj) ? 1 : 0; + } else { + LOGGER.log( + Level.FINE, + String.format( + "Invalid type for Gauge %s: %s", + PrometheusNaming.sanitizeMetricName(dropwizardName), + obj == null ? "null" : obj.getClass().getName())); + return null; } - - /** - * Creates a new DropwizardExports with a custom {@link MetricFilter}. - * - * @param registry a metric registry to export in prometheus. - * @param metricFilter a custom metric filter. - */ - public DropwizardExports(MetricRegistry registry, MetricFilter metricFilter) { - this.registry = registry; - this.metricFilter = metricFilter; - this.labelMapper = Optional.empty(); + MetricMetadata metadata = getMetricMetaData(dropwizardName, gauge); + GaugeSnapshot.GaugeDataPointSnapshot.Builder dataPointBuilder = + GaugeSnapshot.GaugeDataPointSnapshot.builder().value(value); + labelMapper.map( + mapper -> + dataPointBuilder.labels( + mapper.getLabels( + dropwizardName, Collections.emptyList(), Collections.emptyList()))); + return new GaugeSnapshot(metadata, Collections.singletonList(dataPointBuilder.build())); + } + + /** + * Export a histogram snapshot as a prometheus SUMMARY. + * + * @param dropwizardName metric name. + * @param snapshot the histogram snapshot. + * @param count the total sample count for this snapshot. + * @param factor a factor to apply to histogram values. + */ + MetricSnapshot fromSnapshotAndCount( + String dropwizardName, Snapshot snapshot, long count, double factor, String helpMessage) { + Quantiles quantiles = + Quantiles.builder() + .quantile(0.5, snapshot.getMedian() * factor) + .quantile(0.75, snapshot.get75thPercentile() * factor) + .quantile(0.95, snapshot.get95thPercentile() * factor) + .quantile(0.98, snapshot.get98thPercentile() * factor) + .quantile(0.99, snapshot.get99thPercentile() * factor) + .quantile(0.999, snapshot.get999thPercentile() * factor) + .build(); + + MetricMetadata metadata = + new MetricMetadata(PrometheusNaming.sanitizeMetricName(dropwizardName), helpMessage); + SummarySnapshot.SummaryDataPointSnapshot.Builder dataPointBuilder = + SummarySnapshot.SummaryDataPointSnapshot.builder().quantiles(quantiles).count(count); + labelMapper.map( + mapper -> + dataPointBuilder.labels( + mapper.getLabels( + dropwizardName, Collections.emptyList(), Collections.emptyList()))); + return new SummarySnapshot(metadata, Collections.singletonList(dataPointBuilder.build())); + } + + /** Convert histogram snapshot. */ + MetricSnapshot fromHistogram(String dropwizardName, Histogram histogram) { + return fromSnapshotAndCount( + dropwizardName, + histogram.getSnapshot(), + histogram.getCount(), + 1.0, + getHelpMessage(dropwizardName, histogram)); + } + + /** Export Dropwizard Timer as a histogram. Use TIME_UNIT as time unit. */ + MetricSnapshot fromTimer(String dropwizardName, Timer timer) { + return fromSnapshotAndCount( + dropwizardName, + timer.getSnapshot(), + timer.getCount(), + 1.0D / TimeUnit.SECONDS.toNanos(1L), + getHelpMessage(dropwizardName, timer)); + } + + /** Export a Meter as a prometheus COUNTER. */ + MetricSnapshot fromMeter(String dropwizardName, Meter meter) { + MetricMetadata metadata = getMetricMetaData(dropwizardName + "_total", meter); + CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder = + CounterSnapshot.CounterDataPointSnapshot.builder().value(meter.getCount()); + labelMapper.map( + mapper -> + dataPointBuilder.labels( + mapper.getLabels( + dropwizardName, Collections.emptyList(), Collections.emptyList()))); + return new CounterSnapshot(metadata, Collections.singletonList(dataPointBuilder.build())); + } + + @Override + public MetricSnapshots collect() { + MetricSnapshots.Builder metricSnapshots = MetricSnapshots.builder(); + for (SortedMap.Entry entry : registry.getGauges(metricFilter).entrySet()) { + Optional.ofNullable(fromGauge(entry.getKey().getKey(), entry.getValue())) + .map(metricSnapshots::metricSnapshot); } - - /** - * @param registry a metric registry to export in prometheus. - * @param metricFilter a custom metric filter. - * @param labelMapper a labelMapper to use to map labels. - */ - public DropwizardExports(MetricRegistry registry, MetricFilter metricFilter, CustomLabelMapper labelMapper) { - this.registry = registry; - this.metricFilter = metricFilter; - this.labelMapper = Optional.ofNullable(labelMapper); + for (SortedMap.Entry entry : + registry.getCounters(metricFilter).entrySet()) { + metricSnapshots.metricSnapshot(fromCounter(entry.getKey().getKey(), entry.getValue())); } - - private static String getHelpMessage(String metricName, Metric metric) { - return String.format("Generated from Dropwizard metric import (metric=%s, type=%s)", - metricName, metric.getClass().getName()); + for (SortedMap.Entry entry : + registry.getHistograms(metricFilter).entrySet()) { + metricSnapshots.metricSnapshot(fromHistogram(entry.getKey().getKey(), entry.getValue())); } - - private MetricMetadata getMetricMetaData(String metricName, Metric metric) { - String name = labelMapper.isPresent() ? labelMapper.get().getName(metricName) : metricName; - return new MetricMetadata(PrometheusNaming.sanitizeMetricName(name), getHelpMessage(metricName, metric)); + for (SortedMap.Entry entry : registry.getTimers(metricFilter).entrySet()) { + metricSnapshots.metricSnapshot(fromTimer(entry.getKey().getKey(), entry.getValue())); } - - /** - * Export counter as Prometheus Gauge. - */ - MetricSnapshot fromCounter(String dropwizardName, Counter counter) { - MetricMetadata metadata = getMetricMetaData(dropwizardName, counter); - CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder().value(Long.valueOf(counter.getCount()).doubleValue()); - labelMapper.map(mapper -> dataPointBuilder.labels(mapper.getLabels(dropwizardName, Collections.emptyList(), Collections.emptyList()))); - return new CounterSnapshot(metadata, Collections.singletonList(dataPointBuilder.build())); + for (SortedMap.Entry entry : registry.getMeters(metricFilter).entrySet()) { + metricSnapshots.metricSnapshot(fromMeter(entry.getKey().getKey(), entry.getValue())); } + return metricSnapshots.build(); + } - /** - * Export gauge as a prometheus gauge. - */ - MetricSnapshot fromGauge(String dropwizardName, Gauge gauge) { - Object obj = gauge.getValue(); - double value; - if (obj instanceof Number) { - value = ((Number) obj).doubleValue(); - } else if (obj instanceof Boolean) { - value = ((Boolean) obj) ? 1 : 0; - } else { - LOGGER.log(Level.FINE, String.format("Invalid type for Gauge %s: %s", PrometheusNaming.sanitizeMetricName(dropwizardName), - obj == null ? "null" : obj.getClass().getName())); - return null; - } - MetricMetadata metadata = getMetricMetaData(dropwizardName, gauge); - GaugeSnapshot.GaugeDataPointSnapshot.Builder dataPointBuilder = GaugeSnapshot.GaugeDataPointSnapshot.builder().value(value); - labelMapper.map(mapper -> dataPointBuilder.labels(mapper.getLabels(dropwizardName, Collections.emptyList(), Collections.emptyList()))); - return new GaugeSnapshot(metadata, Collections.singletonList(dataPointBuilder.build())); - } + public static Builder builder() { + return new Builder(); + } - /** - * Export a histogram snapshot as a prometheus SUMMARY. - * - * @param dropwizardName metric name. - * @param snapshot the histogram snapshot. - * @param count the total sample count for this snapshot. - * @param factor a factor to apply to histogram values. - */ - MetricSnapshot fromSnapshotAndCount(String dropwizardName, Snapshot snapshot, long count, double factor, String helpMessage) { - Quantiles quantiles = Quantiles.builder() - .quantile(0.5, snapshot.getMedian() * factor) - .quantile(0.75, snapshot.get75thPercentile() * factor) - .quantile(0.95, snapshot.get95thPercentile() * factor) - .quantile(0.98, snapshot.get98thPercentile() * factor) - .quantile(0.99, snapshot.get99thPercentile() * factor) - .quantile(0.999, snapshot.get999thPercentile() * factor) - .build(); - - MetricMetadata metadata = new MetricMetadata(PrometheusNaming.sanitizeMetricName(dropwizardName), helpMessage); - SummarySnapshot.SummaryDataPointSnapshot.Builder dataPointBuilder = SummarySnapshot.SummaryDataPointSnapshot.builder().quantiles(quantiles).count(count); - labelMapper.map(mapper -> dataPointBuilder.labels(mapper.getLabels(dropwizardName, Collections.emptyList(), Collections.emptyList()))); - return new SummarySnapshot(metadata, Collections.singletonList(dataPointBuilder.build())); - } + // Builder class for DropwizardExports + public static class Builder { + private MetricRegistry registry; + private MetricFilter metricFilter; + private CustomLabelMapper labelMapper; - /** - * Convert histogram snapshot. - */ - MetricSnapshot fromHistogram(String dropwizardName, Histogram histogram) { - return fromSnapshotAndCount(dropwizardName, histogram.getSnapshot(), histogram.getCount(), 1.0, - getHelpMessage(dropwizardName, histogram)); + private Builder() { + this.metricFilter = MetricFilter.ALL; } - /** - * Export Dropwizard Timer as a histogram. Use TIME_UNIT as time unit. - */ - MetricSnapshot fromTimer(String dropwizardName, Timer timer) { - return fromSnapshotAndCount(dropwizardName, timer.getSnapshot(), timer.getCount(), - 1.0D / TimeUnit.SECONDS.toNanos(1L), getHelpMessage(dropwizardName, timer)); + public Builder dropwizardRegistry(MetricRegistry registry) { + this.registry = registry; + return this; } - /** - * Export a Meter as a prometheus COUNTER. - */ - MetricSnapshot fromMeter(String dropwizardName, Meter meter) { - MetricMetadata metadata = getMetricMetaData(dropwizardName + "_total", meter); - CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder().value(meter.getCount()); - labelMapper.map(mapper -> dataPointBuilder.labels(mapper.getLabels(dropwizardName, Collections.emptyList(), Collections.emptyList()))); - return new CounterSnapshot(metadata, Collections.singletonList(dataPointBuilder.build())); + public Builder metricFilter(MetricFilter metricFilter) { + this.metricFilter = metricFilter; + return this; } - @Override - public MetricSnapshots collect() { - MetricSnapshots.Builder metricSnapshots = MetricSnapshots.builder(); - for (SortedMap.Entry entry : registry.getGauges(metricFilter).entrySet()) { - Optional.ofNullable(fromGauge(entry.getKey().getKey(), entry.getValue())).map(metricSnapshots::metricSnapshot); - } - for (SortedMap.Entry entry : registry.getCounters(metricFilter).entrySet()) { - metricSnapshots.metricSnapshot(fromCounter(entry.getKey().getKey(), entry.getValue())); - } - for (SortedMap.Entry entry : registry.getHistograms(metricFilter).entrySet()) { - metricSnapshots.metricSnapshot(fromHistogram(entry.getKey().getKey(), entry.getValue())); - } - for (SortedMap.Entry entry : registry.getTimers(metricFilter).entrySet()) { - metricSnapshots.metricSnapshot(fromTimer(entry.getKey().getKey(), entry.getValue())); - } - for (SortedMap.Entry entry : registry.getMeters(metricFilter).entrySet()) { - metricSnapshots.metricSnapshot(fromMeter(entry.getKey().getKey(), entry.getValue())); - } - return metricSnapshots.build(); + public Builder customLabelMapper(CustomLabelMapper labelMapper) { + this.labelMapper = labelMapper; + return this; } - public static Builder builder() { - return new Builder(); + DropwizardExports build() { + if (registry == null) { + throw new IllegalArgumentException("MetricRegistry must be set"); + } + if (labelMapper == null) { + return new DropwizardExports(registry, metricFilter); + } else { + return new DropwizardExports(registry, metricFilter, labelMapper); + } } - //Builder class for DropwizardExports - public static class Builder { - private MetricRegistry registry; - private MetricFilter metricFilter; - private CustomLabelMapper labelMapper; - - private Builder() { - this.metricFilter = MetricFilter.ALL; - } - - public Builder dropwizardRegistry(MetricRegistry registry) { - this.registry = registry; - return this; - } - - public Builder metricFilter(MetricFilter metricFilter) { - this.metricFilter = metricFilter; - return this; - } - - public Builder customLabelMapper(CustomLabelMapper labelMapper) { - this.labelMapper = labelMapper; - return this; - } - - DropwizardExports build() { - if (registry == null) { - throw new IllegalArgumentException("MetricRegistry must be set"); - } - if (labelMapper == null) { - return new DropwizardExports(registry, metricFilter); - } else { - return new DropwizardExports(registry, metricFilter, labelMapper); - } - } - - public void register() { - register(PrometheusRegistry.defaultRegistry); - } - - public void register(PrometheusRegistry registry) { - DropwizardExports dropwizardExports = build(); - registry.register(dropwizardExports); - } + public void register() { + register(PrometheusRegistry.defaultRegistry); } -} \ No newline at end of file + public void register(PrometheusRegistry registry) { + DropwizardExports dropwizardExports = build(); + registry.register(dropwizardExports); + } + } +} diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java index db5f6a64f..af45769cc 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapper.java @@ -1,117 +1,120 @@ package io.prometheus.metrics.instrumentation.dropwizard5.labels; import io.prometheus.metrics.model.snapshots.Labels; - import java.util.ArrayList; import java.util.List; import java.util.Map; /** - * A LabelMapper to allow Dropwizard metrics to be translated to Prometheus metrics including custom labels and names. - * Prometheus metric name and labels are extracted from the Dropwizard name based on the provided list of {@link MapperConfig}s. - * The FIRST matching config will be used. + * A LabelMapper to allow Dropwizard metrics to be translated to Prometheus metrics including custom + * labels and names. Prometheus metric name and labels are extracted from the Dropwizard name based + * on the provided list of {@link MapperConfig}s. The FIRST matching config will be used. */ -public class CustomLabelMapper { - private final List compiledMapperConfigs; - - public CustomLabelMapper(final List mapperConfigs) { - if (mapperConfigs == null || mapperConfigs.isEmpty()) { - throw new IllegalArgumentException("CustomLabelMapper needs some mapper configs!"); - } - - this.compiledMapperConfigs = new ArrayList(mapperConfigs.size()); - for (MapperConfig config : mapperConfigs) { - this.compiledMapperConfigs.add(new CompiledMapperConfig(config)); - } +public class CustomLabelMapper { + private final List compiledMapperConfigs; + + public CustomLabelMapper(final List mapperConfigs) { + if (mapperConfigs == null || mapperConfigs.isEmpty()) { + throw new IllegalArgumentException("CustomLabelMapper needs some mapper configs!"); } - public String getName(final String dropwizardName){ - if (dropwizardName == null) { - throw new IllegalArgumentException("Dropwizard metric name cannot be null"); - } - - CompiledMapperConfig matchingConfig = null; - for (CompiledMapperConfig config : this.compiledMapperConfigs) { - if (config.pattern.matches(dropwizardName)) { - matchingConfig = config; - break; - } - } - - if (matchingConfig != null) { - final Map params = matchingConfig.pattern.extractParameters(dropwizardName); - final NameAndLabels nameAndLabels = getNameAndLabels(matchingConfig.mapperConfig, params); - return nameAndLabels.name; - } - - return dropwizardName; + this.compiledMapperConfigs = new ArrayList(mapperConfigs.size()); + for (MapperConfig config : mapperConfigs) { + this.compiledMapperConfigs.add(new CompiledMapperConfig(config)); } + } + public String getName(final String dropwizardName) { + if (dropwizardName == null) { + throw new IllegalArgumentException("Dropwizard metric name cannot be null"); + } + + CompiledMapperConfig matchingConfig = null; + for (CompiledMapperConfig config : this.compiledMapperConfigs) { + if (config.pattern.matches(dropwizardName)) { + matchingConfig = config; + break; + } + } - public Labels getLabels(final String dropwizardName, final List additionalLabelNames, final List additionalLabelValues){ - if (dropwizardName == null) { - throw new IllegalArgumentException("Dropwizard metric name cannot be null"); - } - - CompiledMapperConfig matchingConfig = null; - for (CompiledMapperConfig config : this.compiledMapperConfigs) { - if (config.pattern.matches(dropwizardName)) { - matchingConfig = config; - break; - } - } - - if (matchingConfig != null) { - final Map params = matchingConfig.pattern.extractParameters(dropwizardName); - final NameAndLabels nameAndLabels = getNameAndLabels(matchingConfig.mapperConfig, params); - nameAndLabels.labelNames.addAll(additionalLabelNames); - nameAndLabels.labelValues.addAll(additionalLabelValues); - return Labels.of(nameAndLabels.labelNames, nameAndLabels.labelValues); - } - - return Labels.of(additionalLabelNames, additionalLabelValues); + if (matchingConfig != null) { + final Map params = matchingConfig.pattern.extractParameters(dropwizardName); + final NameAndLabels nameAndLabels = getNameAndLabels(matchingConfig.mapperConfig, params); + return nameAndLabels.name; } - protected NameAndLabels getNameAndLabels(final MapperConfig config, final Map parameters) { - final String metricName = formatTemplate(config.getName(), parameters); - final List labels = new ArrayList(config.getLabels().size()); - final List labelValues = new ArrayList(config.getLabels().size()); - for (Map.Entry entry : config.getLabels().entrySet()) { - labels.add(entry.getKey()); - labelValues.add(formatTemplate(entry.getValue(), parameters)); - } + return dropwizardName; + } - return new NameAndLabels(metricName, labels, labelValues); + public Labels getLabels( + final String dropwizardName, + final List additionalLabelNames, + final List additionalLabelValues) { + if (dropwizardName == null) { + throw new IllegalArgumentException("Dropwizard metric name cannot be null"); } - private String formatTemplate(final String template, final Map params) { - String result = template; - for (Map.Entry entry : params.entrySet()) { - result = result.replace(entry.getKey(), entry.getValue()); - } + CompiledMapperConfig matchingConfig = null; + for (CompiledMapperConfig config : this.compiledMapperConfigs) { + if (config.pattern.matches(dropwizardName)) { + matchingConfig = config; + break; + } + } + + if (matchingConfig != null) { + final Map params = matchingConfig.pattern.extractParameters(dropwizardName); + final NameAndLabels nameAndLabels = getNameAndLabels(matchingConfig.mapperConfig, params); + nameAndLabels.labelNames.addAll(additionalLabelNames); + nameAndLabels.labelValues.addAll(additionalLabelValues); + return Labels.of(nameAndLabels.labelNames, nameAndLabels.labelValues); + } - return result; + return Labels.of(additionalLabelNames, additionalLabelValues); + } + + protected NameAndLabels getNameAndLabels( + final MapperConfig config, final Map parameters) { + final String metricName = formatTemplate(config.getName(), parameters); + final List labels = new ArrayList(config.getLabels().size()); + final List labelValues = new ArrayList(config.getLabels().size()); + for (Map.Entry entry : config.getLabels().entrySet()) { + labels.add(entry.getKey()); + labelValues.add(formatTemplate(entry.getValue(), parameters)); } - static class CompiledMapperConfig { - final MapperConfig mapperConfig; - final GraphiteNamePattern pattern; + return new NameAndLabels(metricName, labels, labelValues); + } - CompiledMapperConfig(final MapperConfig mapperConfig) { - this.mapperConfig = mapperConfig; - this.pattern = new GraphiteNamePattern(mapperConfig.getMatch()); - } + private String formatTemplate(final String template, final Map params) { + String result = template; + for (Map.Entry entry : params.entrySet()) { + result = result.replace(entry.getKey(), entry.getValue()); } - static class NameAndLabels { - final String name; - final List labelNames; - final List labelValues; + return result; + } - NameAndLabels(final String name, final List labelNames, final List labelValues) { - this.name = name; - this.labelNames = labelNames; - this.labelValues = labelValues; - } + static class CompiledMapperConfig { + final MapperConfig mapperConfig; + final GraphiteNamePattern pattern; + + CompiledMapperConfig(final MapperConfig mapperConfig) { + this.mapperConfig = mapperConfig; + this.pattern = new GraphiteNamePattern(mapperConfig.getMatch()); + } + } + + static class NameAndLabels { + final String name; + final List labelNames; + final List labelValues; + + NameAndLabels( + final String name, final List labelNames, final List labelValues) { + this.name = name; + this.labelNames = labelNames; + this.labelValues = labelValues; } + } } diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePattern.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePattern.java index 4823c736f..bd37fe04c 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePattern.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePattern.java @@ -1,94 +1,95 @@ package io.prometheus.metrics.instrumentation.dropwizard5.labels; +import static io.prometheus.metrics.instrumentation.dropwizard5.labels.MapperConfig.METRIC_GLOB_REGEX; + import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import static io.prometheus.metrics.instrumentation.dropwizard5.labels.MapperConfig.METRIC_GLOB_REGEX; - /** - * GraphiteNamePattern is initialised with a simplified glob pattern that only allows '*' as special character. - * Examples of valid patterns: + * GraphiteNamePattern is initialised with a simplified glob pattern that only allows '*' as special + * character. Examples of valid patterns: + * *

      - *
    • org.test.controller.gather.status.400
    • - *
    • org.test.controller.gather.status.*
    • - *
    • org.test.controller.*.status.*
    • - *
    • *.test.controller.*.status.*
    • + *
    • org.test.controller.gather.status.400 + *
    • org.test.controller.gather.status.* + *
    • org.test.controller.*.status.* + *
    • *.test.controller.*.status.* *
    - *

    - * It contains logic to match a metric name and to extract named parameters from it. + * + *

    It contains logic to match a metric name and to extract named parameters from it. */ class GraphiteNamePattern { - private static final Pattern VALIDATION_PATTERN = Pattern.compile(METRIC_GLOB_REGEX); + private static final Pattern VALIDATION_PATTERN = Pattern.compile(METRIC_GLOB_REGEX); - private Pattern pattern; - private String patternStr; + private Pattern pattern; + private String patternStr; - /** - * Creates a new GraphiteNamePattern from the given simplified glob pattern. - * - * @param pattern The glob style pattern to be used. - */ - GraphiteNamePattern(final String pattern) throws IllegalArgumentException { - if (!VALIDATION_PATTERN.matcher(pattern).matches()) { - throw new IllegalArgumentException(String.format("Provided pattern [%s] does not matches [%s]", pattern, METRIC_GLOB_REGEX)); - } - initializePattern(pattern); + /** + * Creates a new GraphiteNamePattern from the given simplified glob pattern. + * + * @param pattern The glob style pattern to be used. + */ + GraphiteNamePattern(final String pattern) throws IllegalArgumentException { + if (!VALIDATION_PATTERN.matcher(pattern).matches()) { + throw new IllegalArgumentException( + String.format("Provided pattern [%s] does not matches [%s]", pattern, METRIC_GLOB_REGEX)); } + initializePattern(pattern); + } - /** - * Matches the metric name against the pattern. - * - * @param metricName The metric name to be tested. - * @return {@code true} if the name is matched, {@code false} otherwise. - */ - boolean matches(final String metricName) { - return metricName != null && pattern.matcher(metricName).matches(); - } - - /** - * Extracts parameters from the given metric name based on the pattern. - * The resulting map has keys named as '${n}' where n is the 0 based position in the pattern. - * E.g.: - * pattern: org.test.controller.*.status.* - * extractParameters("org.test.controller.gather.status.400") -> - * {${0} -> "gather", ${1} -> "400"} - * - * @param metricName The metric name to extract parameters from. - * @return A parameter map where keys are named '${n}' where n is 0 based parameter position in the pattern. - */ - Map extractParameters(final String metricName) { - final Matcher matcher = this.pattern.matcher(metricName); - final Map params = new HashMap(); - if (matcher.find()) { - for (int i = 1; i <= matcher.groupCount(); i++) { - params.put(String.format("${%d}", i - 1), matcher.group(i)); - } - } + /** + * Matches the metric name against the pattern. + * + * @param metricName The metric name to be tested. + * @return {@code true} if the name is matched, {@code false} otherwise. + */ + boolean matches(final String metricName) { + return metricName != null && pattern.matcher(metricName).matches(); + } - return params; + /** + * Extracts parameters from the given metric name based on the pattern. The resulting map has keys + * named as '${n}' where n is the 0 based position in the pattern. E.g.: pattern: + * org.test.controller.*.status.* extractParameters("org.test.controller.gather.status.400") -> + * {${0} -> "gather", ${1} -> "400"} + * + * @param metricName The metric name to extract parameters from. + * @return A parameter map where keys are named '${n}' where n is 0 based parameter position in + * the pattern. + */ + Map extractParameters(final String metricName) { + final Matcher matcher = this.pattern.matcher(metricName); + final Map params = new HashMap(); + if (matcher.find()) { + for (int i = 1; i <= matcher.groupCount(); i++) { + params.put(String.format("${%d}", i - 1), matcher.group(i)); + } } - /** - * Turns the GLOB pattern into a REGEX. - * - * @param pattern The pattern to use - */ - private void initializePattern(final String pattern) { - final String[] split = pattern.split(Pattern.quote("*"), -1); - final StringBuilder escapedPattern = new StringBuilder(Pattern.quote(split[0])); - for (int i = 1; i < split.length; i++) { - String quoted = Pattern.quote(split[i]); - escapedPattern.append("([^.]*)").append(quoted); - } + return params; + } - final String regex = "^" + escapedPattern.toString() + "$"; - this.patternStr = regex; - this.pattern = Pattern.compile(regex); + /** + * Turns the GLOB pattern into a REGEX. + * + * @param pattern The pattern to use + */ + private void initializePattern(final String pattern) { + final String[] split = pattern.split(Pattern.quote("*"), -1); + final StringBuilder escapedPattern = new StringBuilder(Pattern.quote(split[0])); + for (int i = 1; i < split.length; i++) { + String quoted = Pattern.quote(split[i]); + escapedPattern.append("([^.]*)").append(quoted); } - String getPatternString() { - return this.patternStr; - } + final String regex = "^" + escapedPattern.toString() + "$"; + this.patternStr = regex; + this.pattern = Pattern.compile(regex); + } + + String getPatternString() { + return this.patternStr; + } } diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java index c1eb1ae08..19e52d788 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java @@ -5,155 +5,143 @@ import java.util.regex.Pattern; /** - * POJO containing info on how to map a graphite metric to a prometheus one. - * Example mapping in yaml format: - *

    - * match: test.dispatcher.*.*.* - * name: dispatcher_events_total - * labels: - * action: ${1} - * outcome: ${2}_out - * processor: ${0} - * status: ${1}_${2} - *

    - * Dropwizard metrics that match the "match" pattern will be further processed to have a new name and new labels based on this config. + * POJO containing info on how to map a graphite metric to a prometheus one. Example mapping in yaml + * format: + * + *

    match: test.dispatcher.*.*.* name: dispatcher_events_total labels: action: ${1} outcome: + * ${2}_out processor: ${0} status: ${1}_${2} + * + *

    Dropwizard metrics that match the "match" pattern will be further processed to have a new name + * and new labels based on this config. */ public class MapperConfig { - // each part of the metric name between dots - private static final String METRIC_PART_REGEX = "[a-zA-Z_0-9](-?[a-zA-Z0-9_])+"; - // Simplified GLOB: we can have "*." at the beginning and "*" only at the end - static final String METRIC_GLOB_REGEX = "^(\\*\\.|" + METRIC_PART_REGEX + "\\.)+(\\*|" + METRIC_PART_REGEX + ")$"; - // Labels validation. - private static final String LABEL_REGEX = "^[a-zA-Z_][a-zA-Z0-9_]+$"; - private static final Pattern MATCH_EXPRESSION_PATTERN = Pattern.compile(METRIC_GLOB_REGEX); - private static final Pattern LABEL_PATTERN = Pattern.compile(LABEL_REGEX); - - /** - * Regex used to match incoming metric name. - * Uses a simplified glob syntax where only '*' are allowed. - * E.g: - * org.company.controller.*.status.* - * Will be used to match - * org.company.controller.controller1.status.200 - * and - * org.company.controller.controller2.status.400 - */ - private String match; - - /** - * New metric name. Can contain placeholders to be replaced with actual values from the incoming metric name. - * Placeholders are in the ${n} format where n is the zero based index of the group to extract from the original metric name. - * E.g.: - * match: test.dispatcher.*.*.* - * name: dispatcher_events_total_${1} - *

    - * A metric "test.dispatcher.old.test.yay" will be converted in a new metric with name "dispatcher_events_total_test" - */ - private String name; - - /** - * Labels to be extracted from the metric name. - * They should contain placeholders to be replaced with actual values from the incoming metric name. - * Placeholders are in the ${n} format where n is the zero based index of the group to extract from the original metric name. - * E.g.: - * match: test.dispatcher.*.* - * name: dispatcher_events_total_${0} - * labels: - * label1: ${1}_t - *

    - * A metric "test.dispatcher.sp1.yay" will be converted in a new metric with name "dispatcher_events_total_sp1" with label {label1: yay_t} - *

    - * Label names have to match the regex ^[a-zA-Z_][a-zA-Z0-9_]+$ - */ - - private Map labels = new HashMap(); - - public MapperConfig() { - // empty constructor + // each part of the metric name between dots + private static final String METRIC_PART_REGEX = "[a-zA-Z_0-9](-?[a-zA-Z0-9_])+"; + // Simplified GLOB: we can have "*." at the beginning and "*" only at the end + static final String METRIC_GLOB_REGEX = + "^(\\*\\.|" + METRIC_PART_REGEX + "\\.)+(\\*|" + METRIC_PART_REGEX + ")$"; + // Labels validation. + private static final String LABEL_REGEX = "^[a-zA-Z_][a-zA-Z0-9_]+$"; + private static final Pattern MATCH_EXPRESSION_PATTERN = Pattern.compile(METRIC_GLOB_REGEX); + private static final Pattern LABEL_PATTERN = Pattern.compile(LABEL_REGEX); + + /** + * Regex used to match incoming metric name. Uses a simplified glob syntax where only '*' are + * allowed. E.g: org.company.controller.*.status.* Will be used to match + * org.company.controller.controller1.status.200 and org.company.controller.controller2.status.400 + */ + private String match; + + /** + * New metric name. Can contain placeholders to be replaced with actual values from the incoming + * metric name. Placeholders are in the ${n} format where n is the zero based index of the group + * to extract from the original metric name. E.g.: match: test.dispatcher.*.*.* name: + * dispatcher_events_total_${1} + * + *

    A metric "test.dispatcher.old.test.yay" will be converted in a new metric with name + * "dispatcher_events_total_test" + */ + private String name; + + /** + * Labels to be extracted from the metric name. They should contain placeholders to be replaced + * with actual values from the incoming metric name. Placeholders are in the ${n} format where n + * is the zero based index of the group to extract from the original metric name. E.g.: match: + * test.dispatcher.*.* name: dispatcher_events_total_${0} labels: label1: ${1}_t + * + *

    A metric "test.dispatcher.sp1.yay" will be converted in a new metric with name + * "dispatcher_events_total_sp1" with label {label1: yay_t} + * + *

    Label names have to match the regex ^[a-zA-Z_][a-zA-Z0-9_]+$ + */ + private Map labels = new HashMap(); + + public MapperConfig() { + // empty constructor + } + + // for tests + MapperConfig(final String match) { + validateMatch(match); + this.match = match; + } + + public MapperConfig(final String match, final String name, final Map labels) { + this.name = name; + validateMatch(match); + this.match = match; + validateLabels(labels); + this.labels = labels; + } + + @Override + public String toString() { + return String.format("MapperConfig{match=%s, name=%s, labels=%s}", match, name, labels); + } + + public String getMatch() { + return match; + } + + public void setMatch(final String match) { + validateMatch(match); + this.match = match; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public Map getLabels() { + return labels; + } + + public void setLabels(final Map labels) { + validateLabels(labels); + this.labels = labels; + } + + private void validateMatch(final String match) { + if (!MATCH_EXPRESSION_PATTERN.matcher(match).matches()) { + throw new IllegalArgumentException( + String.format( + "Match expression [%s] does not match required pattern %s", + match, MATCH_EXPRESSION_PATTERN)); } - - // for tests - MapperConfig(final String match) { - validateMatch(match); - this.match = match; - } - - public MapperConfig(final String match, final String name, final Map labels) { - this.name = name; - validateMatch(match); - this.match = match; - validateLabels(labels); - this.labels = labels; - } - - @Override - public String toString() { - return String.format("MapperConfig{match=%s, name=%s, labels=%s}", match, name, labels); - } - - public String getMatch() { - return match; - } - - public void setMatch(final String match) { - validateMatch(match); - this.match = match; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - - } - - public Map getLabels() { - return labels; - } - - public void setLabels(final Map labels) { - validateLabels(labels); - this.labels = labels; - } - - private void validateMatch(final String match) - { - if (!MATCH_EXPRESSION_PATTERN.matcher(match).matches()) { - throw new IllegalArgumentException(String.format("Match expression [%s] does not match required pattern %s", match, MATCH_EXPRESSION_PATTERN)); + } + + private void validateLabels(final Map labels) { + if (labels != null) { + for (final String key : labels.keySet()) { + if (!LABEL_PATTERN.matcher(key).matches()) { + throw new IllegalArgumentException( + String.format("Label [%s] does not match required pattern %s", match, LABEL_PATTERN)); } + } } - - private void validateLabels(final Map labels) - { - if (labels != null) { - for (final String key : labels.keySet()) { - if (!LABEL_PATTERN.matcher(key).matches()) { - throw new IllegalArgumentException(String.format("Label [%s] does not match required pattern %s", match, LABEL_PATTERN)); - } - } - - } - } - - @Override - public boolean equals(final Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - final MapperConfig that = (MapperConfig) o; - - if (match != null ? !match.equals(that.match) : that.match != null) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - return labels != null ? labels.equals(that.labels) : that.labels == null; - } - - @Override - public int hashCode() { - int result = match != null ? match.hashCode() : 0; - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (labels != null ? labels.hashCode() : 0); - return result; - } + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final MapperConfig that = (MapperConfig) o; + + if (match != null ? !match.equals(that.match) : that.match != null) return false; + if (name != null ? !name.equals(that.name) : that.name != null) return false; + return labels != null ? labels.equals(that.labels) : that.labels == null; + } + + @Override + public int hashCode() { + int result = match != null ? match.hashCode() : 0; + result = 31 * result + (name != null ? name.hashCode() : 0); + result = 31 * result + (labels != null ? labels.hashCode() : 0); + return result; + } } diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java index 6fbbb68b1..0473329ce 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java @@ -1,298 +1,313 @@ package io.prometheus.metrics.instrumentation.dropwizard5; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import io.dropwizard.metrics5.*; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import io.prometheus.metrics.model.snapshots.Quantiles; import io.prometheus.metrics.model.snapshots.SummarySnapshot; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.concurrent.TimeUnit; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; public class DropwizardExportsTest { - private PrometheusRegistry registry = new PrometheusRegistry(); - private MetricRegistry metricRegistry; - - - @Before - public void setUp() { - metricRegistry = new MetricRegistry(); - DropwizardExports.builder().dropwizardRegistry(metricRegistry).register(registry); - } - - - @Test - public void testCounter() { - metricRegistry.counter("foo.bar").inc(1); - String expected = "# TYPE foo_bar counter\n" + - "# HELP foo_bar Generated from Dropwizard metric import (metric=foo.bar, type=io.dropwizard.metrics5.Counter)\n" + - "foo_bar_total 1.0\n" + - "# EOF\n"; - - assertEquals(expected, convertToOpenMetricsFormat()); - } - - @Test - public void testGauge() { - Gauge integerGauge = new Gauge() { - @Override - public Integer getValue() { - return 1234; - } + private PrometheusRegistry registry = new PrometheusRegistry(); + private MetricRegistry metricRegistry; + + @Before + public void setUp() { + metricRegistry = new MetricRegistry(); + DropwizardExports.builder().dropwizardRegistry(metricRegistry).register(registry); + } + + @Test + public void testCounter() { + metricRegistry.counter("foo.bar").inc(1); + String expected = + "# TYPE foo_bar counter\n" + + "# HELP foo_bar Generated from Dropwizard metric import (metric=foo.bar, type=io.dropwizard.metrics5.Counter)\n" + + "foo_bar_total 1.0\n" + + "# EOF\n"; + + assertEquals(expected, convertToOpenMetricsFormat()); + } + + @Test + public void testGauge() { + Gauge integerGauge = + new Gauge() { + @Override + public Integer getValue() { + return 1234; + } }; - Gauge doubleGauge = new Gauge() { - @Override - public Double getValue() { - return 1.234D; - } + Gauge doubleGauge = + new Gauge() { + @Override + public Double getValue() { + return 1.234D; + } }; - Gauge longGauge = new Gauge() { - @Override - public Long getValue() { - return 1234L; - } + Gauge longGauge = + new Gauge() { + @Override + public Long getValue() { + return 1234L; + } }; - Gauge floatGauge = new Gauge() { - @Override - public Float getValue() { - return 0.1234F; - } + Gauge floatGauge = + new Gauge() { + @Override + public Float getValue() { + return 0.1234F; + } }; - Gauge booleanGauge = new Gauge() { - @Override - public Boolean getValue() { - return true; - } + Gauge booleanGauge = + new Gauge() { + @Override + public Boolean getValue() { + return true; + } }; - metricRegistry.register("double.gauge", doubleGauge); - metricRegistry.register("long.gauge", longGauge); - metricRegistry.register("integer.gauge", integerGauge); - metricRegistry.register("float.gauge", floatGauge); - metricRegistry.register("boolean.gauge", booleanGauge); - - String expected = "# TYPE boolean_gauge gauge\n" + - "# HELP boolean_gauge Generated from Dropwizard metric import (metric=boolean.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$5)\n" + - "boolean_gauge 1.0\n" + - "# TYPE double_gauge gauge\n" + - "# HELP double_gauge Generated from Dropwizard metric import (metric=double.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$2)\n" + - "double_gauge 1.234\n" + - "# TYPE float_gauge gauge\n" + - "# HELP float_gauge Generated from Dropwizard metric import (metric=float.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$4)\n" + - "float_gauge 0.1234000027179718\n" + - "# TYPE integer_gauge gauge\n" + - "# HELP integer_gauge Generated from Dropwizard metric import (metric=integer.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$1)\n" + - "integer_gauge 1234.0\n" + - "# TYPE long_gauge gauge\n" + - "# HELP long_gauge Generated from Dropwizard metric import (metric=long.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$3)\n" + - "long_gauge 1234.0\n" + - "# EOF\n"; - - assertEquals(expected, convertToOpenMetricsFormat()); - } - - @Test - public void testInvalidGaugeType() { - Gauge invalidGauge = new Gauge() { - @Override - public String getValue() { - return "foobar"; - } + metricRegistry.register("double.gauge", doubleGauge); + metricRegistry.register("long.gauge", longGauge); + metricRegistry.register("integer.gauge", integerGauge); + metricRegistry.register("float.gauge", floatGauge); + metricRegistry.register("boolean.gauge", booleanGauge); + + String expected = + "# TYPE boolean_gauge gauge\n" + + "# HELP boolean_gauge Generated from Dropwizard metric import (metric=boolean.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$5)\n" + + "boolean_gauge 1.0\n" + + "# TYPE double_gauge gauge\n" + + "# HELP double_gauge Generated from Dropwizard metric import (metric=double.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$2)\n" + + "double_gauge 1.234\n" + + "# TYPE float_gauge gauge\n" + + "# HELP float_gauge Generated from Dropwizard metric import (metric=float.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$4)\n" + + "float_gauge 0.1234000027179718\n" + + "# TYPE integer_gauge gauge\n" + + "# HELP integer_gauge Generated from Dropwizard metric import (metric=integer.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$1)\n" + + "integer_gauge 1234.0\n" + + "# TYPE long_gauge gauge\n" + + "# HELP long_gauge Generated from Dropwizard metric import (metric=long.gauge, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$3)\n" + + "long_gauge 1234.0\n" + + "# EOF\n"; + + assertEquals(expected, convertToOpenMetricsFormat()); + } + + @Test + public void testInvalidGaugeType() { + Gauge invalidGauge = + new Gauge() { + @Override + public String getValue() { + return "foobar"; + } }; - metricRegistry.register("invalid_gauge", invalidGauge); + metricRegistry.register("invalid_gauge", invalidGauge); - String expected = "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat()); - } + String expected = "# EOF\n"; + assertEquals(expected, convertToOpenMetricsFormat()); + } - @Test - public void testGaugeReturningNullValue() { - Gauge invalidGauge = new Gauge() { - @Override - public String getValue() { - return null; - } + @Test + public void testGaugeReturningNullValue() { + Gauge invalidGauge = + new Gauge() { + @Override + public String getValue() { + return null; + } }; - metricRegistry.register("invalid_gauge", invalidGauge); - String expected = "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat()); + metricRegistry.register("invalid_gauge", invalidGauge); + String expected = "# EOF\n"; + assertEquals(expected, convertToOpenMetricsFormat()); + } + + @Test + public void testHistogram() throws IOException { + // just test the standard mapper + final MetricRegistry metricRegistry = new MetricRegistry(); + PrometheusRegistry pmRegistry = new PrometheusRegistry(); + DropwizardExports.builder().dropwizardRegistry(metricRegistry).register(pmRegistry); + + Histogram hist = metricRegistry.histogram("hist"); + int i = 0; + while (i < 100) { + hist.update(i); + i += 1; } - @Test - public void testHistogram() throws IOException { - // just test the standard mapper - final MetricRegistry metricRegistry = new MetricRegistry(); - PrometheusRegistry pmRegistry = new PrometheusRegistry(); - DropwizardExports.builder().dropwizardRegistry(metricRegistry).register(pmRegistry); - - Histogram hist = metricRegistry.histogram("hist"); - int i = 0; - while (i < 100) { - hist.update(i); - i += 1; - } - - // The result should look like this - // - // # TYPE hist summary - // # HELP hist Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram) - // hist{quantile="0.5"} 49.0 - // hist{quantile="0.75"} 74.0 - // hist{quantile="0.95"} 94.0 - // hist{quantile="0.98"} 97.0 - // hist{quantile="0.99"} 98.0 - // hist{quantile="0.999"} 99.0 - // hist_count 100 - // # EOF - // - // However, Dropwizard uses a random reservoir sampling algorithm, so the values could as well be off-by-one - // - // # TYPE hist summary - // # HELP hist Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram) - // hist{quantile="0.5"} 50.0 - // hist{quantile="0.75"} 75.0 - // hist{quantile="0.95"} 95.0 - // hist{quantile="0.98"} 98.0 - // hist{quantile="0.99"} 99.0 - // hist{quantile="0.999"} 99.0 - // hist_count 100 - // # EOF - // - // The following asserts the values, but allows an error of 1.0 for quantile values. - - MetricSnapshots snapshots = pmRegistry.scrape(name -> name.equals("hist")); - Assert.assertEquals(1, snapshots.size()); - SummarySnapshot snapshot = (SummarySnapshot) snapshots.get(0); - Assert.assertEquals("hist", snapshot.getMetadata().getName()); - Assert.assertEquals("Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram)", snapshot.getMetadata().getHelp()); - Assert.assertEquals(1, snapshot.getDataPoints().size()); - SummarySnapshot.SummaryDataPointSnapshot dataPoint = snapshot.getDataPoints().get(0); - Assert.assertTrue(dataPoint.hasCount()); - Assert.assertEquals(100, dataPoint.getCount()); - Assert.assertFalse(dataPoint.hasSum()); - Quantiles quantiles = dataPoint.getQuantiles(); - Assert.assertEquals(6, quantiles.size()); - Assert.assertEquals(0.5, quantiles.get(0).getQuantile(), 0.0); - Assert.assertEquals(49.0, quantiles.get(0).getValue(), 1.0); - Assert.assertEquals(0.75, quantiles.get(1).getQuantile(), 0.0); - Assert.assertEquals(74.0, quantiles.get(1).getValue(), 1.0); - Assert.assertEquals(0.95, quantiles.get(2).getQuantile(), 0.0); - Assert.assertEquals(94.0, quantiles.get(2).getValue(), 1.0); - Assert.assertEquals(0.98, quantiles.get(3).getQuantile(), 0.0); - Assert.assertEquals(97.0, quantiles.get(3).getValue(), 1.0); - Assert.assertEquals(0.99, quantiles.get(4).getQuantile(), 0.0); - Assert.assertEquals(98.0, quantiles.get(4).getValue(), 1.0); - Assert.assertEquals(0.999, quantiles.get(5).getQuantile(), 0.0); - Assert.assertEquals(99.0, quantiles.get(5).getValue(), 1.0); + // The result should look like this + // + // # TYPE hist summary + // # HELP hist Generated from Dropwizard metric import (metric=hist, + // type=io.dropwizard.metrics5.Histogram) + // hist{quantile="0.5"} 49.0 + // hist{quantile="0.75"} 74.0 + // hist{quantile="0.95"} 94.0 + // hist{quantile="0.98"} 97.0 + // hist{quantile="0.99"} 98.0 + // hist{quantile="0.999"} 99.0 + // hist_count 100 + // # EOF + // + // However, Dropwizard uses a random reservoir sampling algorithm, so the values could as well + // be off-by-one + // + // # TYPE hist summary + // # HELP hist Generated from Dropwizard metric import (metric=hist, + // type=io.dropwizard.metrics5.Histogram) + // hist{quantile="0.5"} 50.0 + // hist{quantile="0.75"} 75.0 + // hist{quantile="0.95"} 95.0 + // hist{quantile="0.98"} 98.0 + // hist{quantile="0.99"} 99.0 + // hist{quantile="0.999"} 99.0 + // hist_count 100 + // # EOF + // + // The following asserts the values, but allows an error of 1.0 for quantile values. + + MetricSnapshots snapshots = pmRegistry.scrape(name -> name.equals("hist")); + Assert.assertEquals(1, snapshots.size()); + SummarySnapshot snapshot = (SummarySnapshot) snapshots.get(0); + Assert.assertEquals("hist", snapshot.getMetadata().getName()); + Assert.assertEquals( + "Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram)", + snapshot.getMetadata().getHelp()); + Assert.assertEquals(1, snapshot.getDataPoints().size()); + SummarySnapshot.SummaryDataPointSnapshot dataPoint = snapshot.getDataPoints().get(0); + Assert.assertTrue(dataPoint.hasCount()); + Assert.assertEquals(100, dataPoint.getCount()); + Assert.assertFalse(dataPoint.hasSum()); + Quantiles quantiles = dataPoint.getQuantiles(); + Assert.assertEquals(6, quantiles.size()); + Assert.assertEquals(0.5, quantiles.get(0).getQuantile(), 0.0); + Assert.assertEquals(49.0, quantiles.get(0).getValue(), 1.0); + Assert.assertEquals(0.75, quantiles.get(1).getQuantile(), 0.0); + Assert.assertEquals(74.0, quantiles.get(1).getValue(), 1.0); + Assert.assertEquals(0.95, quantiles.get(2).getQuantile(), 0.0); + Assert.assertEquals(94.0, quantiles.get(2).getValue(), 1.0); + Assert.assertEquals(0.98, quantiles.get(3).getQuantile(), 0.0); + Assert.assertEquals(97.0, quantiles.get(3).getValue(), 1.0); + Assert.assertEquals(0.99, quantiles.get(4).getQuantile(), 0.0); + Assert.assertEquals(98.0, quantiles.get(4).getValue(), 1.0); + Assert.assertEquals(0.999, quantiles.get(5).getQuantile(), 0.0); + Assert.assertEquals(99.0, quantiles.get(5).getValue(), 1.0); + } + + @Test + public void testMeter() { + Meter meter = metricRegistry.meter("meter"); + meter.mark(); + meter.mark(); + + String expected = + "# TYPE meter counter\n" + + "# HELP meter Generated from Dropwizard metric import (metric=meter_total, type=io.dropwizard.metrics5.Meter)\n" + + "meter_total 2.0\n" + + "# EOF\n"; + assertEquals(expected, convertToOpenMetricsFormat()); + } + + @Test + public void testTimer() throws InterruptedException { + final MetricRegistry metricRegistry = new MetricRegistry(); + DropwizardExports exports = new DropwizardExports(metricRegistry); + Timer t = metricRegistry.timer("timer"); + Timer.Context time = t.time(); + Thread.sleep(100L); + long timeSpentNanos = time.stop(); + double timeSpentMillis = TimeUnit.NANOSECONDS.toMillis(timeSpentNanos); + System.out.println(timeSpentMillis); + + SummarySnapshot.SummaryDataPointSnapshot dataPointSnapshot = + (SummarySnapshot.SummaryDataPointSnapshot) + exports.collect().stream().flatMap(i -> i.getDataPoints().stream()).findFirst().get(); + // We slept for 1Ms so we ensure that all timers are above 1ms: + assertTrue(dataPointSnapshot.getQuantiles().size() > 1); + dataPointSnapshot + .getQuantiles() + .forEach( + i -> { + System.out.println(i.getQuantile() + " : " + i.getValue()); + assertTrue(i.getValue() > timeSpentMillis / 1000d); + }); + assertEquals(1, dataPointSnapshot.getCount()); + } + + @Test + public void testThatMetricHelpUsesOriginalDropwizardName() { + + metricRegistry.timer("my.application.namedTimer1"); + metricRegistry.counter("my.application.namedCounter1"); + metricRegistry.meter("my.application.namedMeter1"); + metricRegistry.histogram("my.application.namedHistogram1"); + metricRegistry.register("my.application.namedGauge1", new ExampleDoubleGauge()); + + String expected = + "# TYPE my_application_namedCounter1 counter\n" + + "# HELP my_application_namedCounter1 Generated from Dropwizard metric import (metric=my.application.namedCounter1, type=io.dropwizard.metrics5.Counter)\n" + + "my_application_namedCounter1_total 0.0\n" + + "# TYPE my_application_namedGauge1 gauge\n" + + "# HELP my_application_namedGauge1 Generated from Dropwizard metric import (metric=my.application.namedGauge1, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$ExampleDoubleGauge)\n" + + "my_application_namedGauge1 0.0\n" + + "# TYPE my_application_namedHistogram1 summary\n" + + "# HELP my_application_namedHistogram1 Generated from Dropwizard metric import (metric=my.application.namedHistogram1, type=io.dropwizard.metrics5.Histogram)\n" + + "my_application_namedHistogram1{quantile=\"0.5\"} 0.0\n" + + "my_application_namedHistogram1{quantile=\"0.75\"} 0.0\n" + + "my_application_namedHistogram1{quantile=\"0.95\"} 0.0\n" + + "my_application_namedHistogram1{quantile=\"0.98\"} 0.0\n" + + "my_application_namedHistogram1{quantile=\"0.99\"} 0.0\n" + + "my_application_namedHistogram1{quantile=\"0.999\"} 0.0\n" + + "my_application_namedHistogram1_count 0\n" + + "# TYPE my_application_namedMeter1 counter\n" + + "# HELP my_application_namedMeter1 Generated from Dropwizard metric import (metric=my.application.namedMeter1_total, type=io.dropwizard.metrics5.Meter)\n" + + "my_application_namedMeter1_total 0.0\n" + + "# TYPE my_application_namedTimer1 summary\n" + + "# HELP my_application_namedTimer1 Generated from Dropwizard metric import (metric=my.application.namedTimer1, type=io.dropwizard.metrics5.Timer)\n" + + "my_application_namedTimer1{quantile=\"0.5\"} 0.0\n" + + "my_application_namedTimer1{quantile=\"0.75\"} 0.0\n" + + "my_application_namedTimer1{quantile=\"0.95\"} 0.0\n" + + "my_application_namedTimer1{quantile=\"0.98\"} 0.0\n" + + "my_application_namedTimer1{quantile=\"0.99\"} 0.0\n" + + "my_application_namedTimer1{quantile=\"0.999\"} 0.0\n" + + "my_application_namedTimer1_count 0\n" + + "# EOF\n"; + assertEquals(expected, convertToOpenMetricsFormat()); + } + + private static class ExampleDoubleGauge implements Gauge { + @Override + public Double getValue() { + return 0.0; } - - @Test - public void testMeter() { - Meter meter = metricRegistry.meter("meter"); - meter.mark(); - meter.mark(); - - String expected = "# TYPE meter counter\n" + - "# HELP meter Generated from Dropwizard metric import (metric=meter_total, type=io.dropwizard.metrics5.Meter)\n" + - "meter_total 2.0\n" + - "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat()); - + } + + private String convertToOpenMetricsFormat(PrometheusRegistry _registry) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + try { + writer.write(out, _registry.scrape()); + return out.toString(StandardCharsets.UTF_8.name()); + } catch (IOException e) { + throw new RuntimeException(e); } + } - @Test - public void testTimer() throws InterruptedException { - final MetricRegistry metricRegistry = new MetricRegistry(); - DropwizardExports exports = new DropwizardExports(metricRegistry); - Timer t = metricRegistry.timer("timer"); - Timer.Context time = t.time(); - Thread.sleep(100L); - long timeSpentNanos = time.stop(); - double timeSpentMillis = TimeUnit.NANOSECONDS.toMillis(timeSpentNanos); - System.out.println(timeSpentMillis); - - SummarySnapshot.SummaryDataPointSnapshot dataPointSnapshot = (SummarySnapshot.SummaryDataPointSnapshot) exports.collect().stream().flatMap(i -> i.getDataPoints().stream()).findFirst().get(); - // We slept for 1Ms so we ensure that all timers are above 1ms: - assertTrue(dataPointSnapshot.getQuantiles().size() > 1); - dataPointSnapshot.getQuantiles().forEach( i-> { - System.out.println(i.getQuantile() + " : " + i.getValue()); - assertTrue(i.getValue() > timeSpentMillis/1000d); - }); - assertEquals(1, dataPointSnapshot.getCount()); - } - - @Test - public void testThatMetricHelpUsesOriginalDropwizardName() { - - metricRegistry.timer("my.application.namedTimer1"); - metricRegistry.counter("my.application.namedCounter1"); - metricRegistry.meter("my.application.namedMeter1"); - metricRegistry.histogram("my.application.namedHistogram1"); - metricRegistry.register("my.application.namedGauge1", new ExampleDoubleGauge()); - - String expected = "# TYPE my_application_namedCounter1 counter\n" + - "# HELP my_application_namedCounter1 Generated from Dropwizard metric import (metric=my.application.namedCounter1, type=io.dropwizard.metrics5.Counter)\n" + - "my_application_namedCounter1_total 0.0\n" + - "# TYPE my_application_namedGauge1 gauge\n" + - "# HELP my_application_namedGauge1 Generated from Dropwizard metric import (metric=my.application.namedGauge1, type=io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExportsTest$ExampleDoubleGauge)\n" + - "my_application_namedGauge1 0.0\n" + - "# TYPE my_application_namedHistogram1 summary\n" + - "# HELP my_application_namedHistogram1 Generated from Dropwizard metric import (metric=my.application.namedHistogram1, type=io.dropwizard.metrics5.Histogram)\n" + - "my_application_namedHistogram1{quantile=\"0.5\"} 0.0\n" + - "my_application_namedHistogram1{quantile=\"0.75\"} 0.0\n" + - "my_application_namedHistogram1{quantile=\"0.95\"} 0.0\n" + - "my_application_namedHistogram1{quantile=\"0.98\"} 0.0\n" + - "my_application_namedHistogram1{quantile=\"0.99\"} 0.0\n" + - "my_application_namedHistogram1{quantile=\"0.999\"} 0.0\n" + - "my_application_namedHistogram1_count 0\n" + - "# TYPE my_application_namedMeter1 counter\n" + - "# HELP my_application_namedMeter1 Generated from Dropwizard metric import (metric=my.application.namedMeter1_total, type=io.dropwizard.metrics5.Meter)\n" + - "my_application_namedMeter1_total 0.0\n" + - "# TYPE my_application_namedTimer1 summary\n" + - "# HELP my_application_namedTimer1 Generated from Dropwizard metric import (metric=my.application.namedTimer1, type=io.dropwizard.metrics5.Timer)\n" + - "my_application_namedTimer1{quantile=\"0.5\"} 0.0\n" + - "my_application_namedTimer1{quantile=\"0.75\"} 0.0\n" + - "my_application_namedTimer1{quantile=\"0.95\"} 0.0\n" + - "my_application_namedTimer1{quantile=\"0.98\"} 0.0\n" + - "my_application_namedTimer1{quantile=\"0.99\"} 0.0\n" + - "my_application_namedTimer1{quantile=\"0.999\"} 0.0\n" + - "my_application_namedTimer1_count 0\n" + - "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat()); - } - - - private static class ExampleDoubleGauge implements Gauge { - @Override - public Double getValue() { - return 0.0; - } - } - - private String convertToOpenMetricsFormat(PrometheusRegistry _registry) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); - try { - writer.write(out, _registry.scrape()); - return out.toString(StandardCharsets.UTF_8.name()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - private String convertToOpenMetricsFormat() { - return convertToOpenMetricsFormat(registry); - } + private String convertToOpenMetricsFormat() { + return convertToOpenMetricsFormat(registry); + } } diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java index d5003332c..5d1950111 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java @@ -1,213 +1,214 @@ package io.prometheus.metrics.instrumentation.dropwizard5.labels; +import static org.junit.Assert.assertEquals; + import io.dropwizard.metrics5.MetricFilter; import io.dropwizard.metrics5.MetricRegistry; -import io.prometheus.metrics.core.metrics.Counter; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; import io.prometheus.metrics.instrumentation.dropwizard5.DropwizardExports; -import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import org.junit.Before; -import org.junit.Test; - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.*; - -import static org.junit.Assert.assertEquals; +import org.junit.Before; +import org.junit.Test; public class CustomLabelMapperTest { - private MetricRegistry metricRegistry; - - - @Before - public void setUp() { - metricRegistry = new MetricRegistry(); - } - - @Test(expected = IllegalArgumentException.class) - public void test_WHEN_EmptyConfig_THEN_Fail() { - final CustomLabelMapper converter = new CustomLabelMapper(Collections.emptyList()); - } - - @Test - public void test_WHEN_NoMatches_THEN_ShouldReturnDefaultSample() { - final List mapperConfigs = Arrays.asList( - new MapperConfig("client-nope.*.*.*"), - new MapperConfig("*.client-nope.*.*.*"), - new MapperConfig("not.even.this.*.*.*") - ); - final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); - DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper); - - metricRegistry.counter("app.okhttpclient.client.HttpClient.service.total").inc(1); - System.out.println(convertToOpenMetricsFormat(dropwizardExports.collect())); - - String expected = "# TYPE app_okhttpclient_client_HttpClient_service counter\n" + - "# HELP app_okhttpclient_client_HttpClient_service Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.service.total, type=io.dropwizard.metrics5.Counter)\n" + - "app_okhttpclient_client_HttpClient_service_total 1.0\n" + - "# EOF\n"; - - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + private MetricRegistry metricRegistry; + + @Before + public void setUp() { + metricRegistry = new MetricRegistry(); + } + + @Test(expected = IllegalArgumentException.class) + public void test_WHEN_EmptyConfig_THEN_Fail() { + final CustomLabelMapper converter = + new CustomLabelMapper(Collections.emptyList()); + } + + @Test + public void test_WHEN_NoMatches_THEN_ShouldReturnDefaultSample() { + final List mapperConfigs = + Arrays.asList( + new MapperConfig("client-nope.*.*.*"), + new MapperConfig("*.client-nope.*.*.*"), + new MapperConfig("not.even.this.*.*.*")); + final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); + DropwizardExports dropwizardExports = + new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper); + + metricRegistry.counter("app.okhttpclient.client.HttpClient.service.total").inc(1); + System.out.println(convertToOpenMetricsFormat(dropwizardExports.collect())); + + String expected = + "# TYPE app_okhttpclient_client_HttpClient_service counter\n" + + "# HELP app_okhttpclient_client_HttpClient_service Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.service.total, type=io.dropwizard.metrics5.Counter)\n" + + "app_okhttpclient_client_HttpClient_service_total 1.0\n" + + "# EOF\n"; + + assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + } + + @Test + public void test_WHEN_OneMatch_THEN_ShouldReturnConverted() { + final Map labels = new HashMap(); + labels.put("service", "${0}"); + final MapperConfig mapperConfig = + new MapperConfig( + "app.okhttpclient.client.HttpClient.*.total", + "app.okhttpclient.client.HttpClient.total", + labels); + final List mapperConfigs = + Arrays.asList( + new MapperConfig("client-nope.*.*.*"), + mapperConfig, + new MapperConfig("not.even.this.*.*.*")); + final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); + DropwizardExports dropwizardExports = + new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper); + + metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.total").inc(1); + + String expected = + "# TYPE app_okhttpclient_client_HttpClient counter\n" + + "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" + + "app_okhttpclient_client_HttpClient_total{service=\"greatService\"} 1.0\n" + + "# EOF\n"; + assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + } + + @Test + public void test_WHEN_MoreMatches_THEN_ShouldReturnFirstOne() { + final Map labels = new HashMap(); + labels.put("service", "${0}"); + final MapperConfig mapperConfig = + new MapperConfig( + "app.okhttpclient.client.HttpClient.*.total", + "app.okhttpclient.client.HttpClient.total", + labels); + final List mapperConfigs = + Arrays.asList( + new MapperConfig("client-nope.*.*.*"), + mapperConfig, + new MapperConfig("app.okhttpclient.client.HttpClient.*.*") // this matches as well + ); + final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); + DropwizardExports dropwizardExports = + new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper); + + metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.total").inc(1); + + String expected = + "# TYPE app_okhttpclient_client_HttpClient counter\n" + + "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" + + "app_okhttpclient_client_HttpClient_total{service=\"greatService\"} 1.0\n" + + "# EOF\n"; + assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + } + + @Test + public void test_WHEN_MoreMatchesReverseOrder_THEN_ShouldReturnFirstOne() { + final Map labels = new LinkedHashMap(); + labels.put("service", "${0}"); + labels.put("status", "${1}"); + final MapperConfig mapperConfig = + new MapperConfig( + "app.okhttpclient.client.HttpClient.*.*", "app.okhttpclient.client.HttpClient", labels); + + final MapperConfig mapperConfig2 = + new MapperConfig( + "app.okhttpclient.client.HttpClient.*.*", + "app.okhttpclient.client.HttpClient2", + labels); + + final List mapperConfigs = + Arrays.asList( + new MapperConfig("client-nope.*.*.*"), + mapperConfig, + mapperConfig2 // this matches as well + ); + + final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); + DropwizardExports dropwizardExports = + new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper); + metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.400").inc(1); + + String expected = + "# TYPE app_okhttpclient_client_HttpClient counter\n" + + "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" + + "app_okhttpclient_client_HttpClient_total{service=\"greatService\",status=\"400\"} 1.0\n" + + "# EOF\n"; + assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + } + + @Test + public void test_WHEN_MoreToFormatInLabelsAndName_THEN_ShouldReturnCorrectSample() { + final Map labels = new LinkedHashMap(); + labels.put("service", "${0}_${1}"); + labels.put("status", "s_${1}"); + final MapperConfig mapperConfig = + new MapperConfig( + "app.okhttpclient.client.HttpClient.*.*", + "app.okhttpclient.client.HttpClient.${0}", + labels); + final List mapperConfigs = + Arrays.asList( + new MapperConfig("client-nope.*.*.*"), + mapperConfig, + new MapperConfig("app.okhttpclient.client.HttpClient.*.*") // this matches as well + ); + + final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); + DropwizardExports dropwizardExports = + new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper); + metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.400").inc(1); + System.out.println(convertToOpenMetricsFormat(dropwizardExports.collect())); + + String expected = + "# TYPE app_okhttpclient_client_HttpClient_greatService counter\n" + + "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" + + "app_okhttpclient_client_HttpClient_greatService_total{service=\"greatService_400\",status=\"s_400\"} 1.0\n" + + "# EOF\n"; + assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + } + + @Test + public void test_WHEN_AdditionalLabels_THEN_ShouldReturnCorrectSample() { + final Map labels = new LinkedHashMap(); + labels.put("service", "${0}"); + labels.put("status", "s_${1}"); + labels.put("client", "sampleClient"); + final MapperConfig mapperConfig = + new MapperConfig( + "app.okhttpclient.client.HttpClient.*.*", + "app.okhttpclient.client.HttpClient.${0}", + labels); + final List mapperConfigs = + Arrays.asList(new MapperConfig("client-nope.*.*.*"), mapperConfig); + + final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); + DropwizardExports dropwizardExports = + new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper); + metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.400").inc(1); + + String expected = + "# TYPE app_okhttpclient_client_HttpClient_greatService counter\n" + + "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" + + "app_okhttpclient_client_HttpClient_greatService_total{client=\"sampleClient\",service=\"greatService\",status=\"s_400\"} 1.0\n" + + "# EOF\n"; + assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + } + + private String convertToOpenMetricsFormat(MetricSnapshots snapshots) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + try { + writer.write(out, snapshots); + return out.toString(StandardCharsets.UTF_8.name()); + } catch (IOException e) { + throw new RuntimeException(e); } - - @Test - public void test_WHEN_OneMatch_THEN_ShouldReturnConverted() { - final Map labels = new HashMap(); - labels.put("service", "${0}"); - final MapperConfig mapperConfig = new MapperConfig( - "app.okhttpclient.client.HttpClient.*.total", - "app.okhttpclient.client.HttpClient.total", - labels - ); - final List mapperConfigs = Arrays.asList( - new MapperConfig("client-nope.*.*.*"), - mapperConfig, - new MapperConfig("not.even.this.*.*.*") - ); - final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); - DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper); - - metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.total").inc(1); - - String expected = "# TYPE app_okhttpclient_client_HttpClient counter\n" + - "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" + - "app_okhttpclient_client_HttpClient_total{service=\"greatService\"} 1.0\n" + - "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); - } - - @Test - public void test_WHEN_MoreMatches_THEN_ShouldReturnFirstOne() { - final Map labels = new HashMap(); - labels.put("service", "${0}"); - final MapperConfig mapperConfig = new MapperConfig( - "app.okhttpclient.client.HttpClient.*.total", - "app.okhttpclient.client.HttpClient.total", - labels - ); - final List mapperConfigs = Arrays.asList( - new MapperConfig("client-nope.*.*.*"), - mapperConfig, - new MapperConfig("app.okhttpclient.client.HttpClient.*.*") // this matches as well - ); - final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); - DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper); - - metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.total").inc(1); - - - String expected = "# TYPE app_okhttpclient_client_HttpClient counter\n" + - "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" + - "app_okhttpclient_client_HttpClient_total{service=\"greatService\"} 1.0\n" + - "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); - } - - @Test - public void test_WHEN_MoreMatchesReverseOrder_THEN_ShouldReturnFirstOne() { - final Map labels = new LinkedHashMap(); - labels.put("service", "${0}"); - labels.put("status", "${1}"); - final MapperConfig mapperConfig = new MapperConfig( - "app.okhttpclient.client.HttpClient.*.*", - "app.okhttpclient.client.HttpClient", - labels - ); - - final MapperConfig mapperConfig2 = new MapperConfig( - "app.okhttpclient.client.HttpClient.*.*", - "app.okhttpclient.client.HttpClient2", - labels - ); - - final List mapperConfigs = Arrays.asList( - new MapperConfig("client-nope.*.*.*"), - mapperConfig, - mapperConfig2 // this matches as well - ); - - final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); - DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry, MetricFilter.ALL, labelMapper); - metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.400").inc(1); - - String expected = "# TYPE app_okhttpclient_client_HttpClient counter\n" + - "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" + - "app_okhttpclient_client_HttpClient_total{service=\"greatService\",status=\"400\"} 1.0\n" + - "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); - - } - - @Test - public void test_WHEN_MoreToFormatInLabelsAndName_THEN_ShouldReturnCorrectSample() { - final Map labels = new LinkedHashMap(); - labels.put("service", "${0}_${1}"); - labels.put("status", "s_${1}"); - final MapperConfig mapperConfig = new MapperConfig( - "app.okhttpclient.client.HttpClient.*.*", - "app.okhttpclient.client.HttpClient.${0}", - labels - ); - final List mapperConfigs = Arrays.asList( - new MapperConfig("client-nope.*.*.*"), - mapperConfig, - new MapperConfig("app.okhttpclient.client.HttpClient.*.*") // this matches as well - ); - - - final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); - DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry,MetricFilter.ALL, labelMapper); - metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.400").inc(1); - System.out.println(convertToOpenMetricsFormat(dropwizardExports.collect())); - - - String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService counter\n" + - "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" + - "app_okhttpclient_client_HttpClient_greatService_total{service=\"greatService_400\",status=\"s_400\"} 1.0\n" + - "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); - } - - - @Test - public void test_WHEN_AdditionalLabels_THEN_ShouldReturnCorrectSample() { - final Map labels = new LinkedHashMap(); - labels.put("service", "${0}"); - labels.put("status", "s_${1}"); - labels.put("client", "sampleClient"); - final MapperConfig mapperConfig = new MapperConfig( - "app.okhttpclient.client.HttpClient.*.*", - "app.okhttpclient.client.HttpClient.${0}", - labels - ); - final List mapperConfigs = Arrays.asList( - new MapperConfig("client-nope.*.*.*"), - mapperConfig - ); - - final CustomLabelMapper labelMapper = new CustomLabelMapper(mapperConfigs); - DropwizardExports dropwizardExports = new DropwizardExports(metricRegistry,MetricFilter.ALL, labelMapper); - metricRegistry.counter("app.okhttpclient.client.HttpClient.greatService.400").inc(1); - - String expected = "# TYPE app_okhttpclient_client_HttpClient_greatService counter\n" + - "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" + - "app_okhttpclient_client_HttpClient_greatService_total{client=\"sampleClient\",service=\"greatService\",status=\"s_400\"} 1.0\n" + - "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); - } - - - private String convertToOpenMetricsFormat(MetricSnapshots snapshots) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); - try { - writer.write(out, snapshots); - return out.toString(StandardCharsets.UTF_8.name()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - + } } diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java index 5b704e6bd..9e8316d0b 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java @@ -1,144 +1,147 @@ package io.prometheus.metrics.instrumentation.dropwizard5.labels; -import org.assertj.core.api.Assertions; -import org.junit.Test; - import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.assertj.core.api.Assertions; +import org.junit.Test; public class GraphiteNamePatternTest { - @Test(expected = IllegalArgumentException.class) - public void createNew_WHEN_InvalidPattern_THEN_ShouldThrowException() { - final List invalidPatterns = Arrays.asList( - "", - "a", - "1org", - "1org.", - "org.", - "org.**", - "org.**", - "org.company-", - "org.company-.", - "org.company-*", - "org.company.**", - "org.company.**-", - "org.com*pany.*", - "org.test.contr.oller.gather.status..400", - "org.test.controller.gather.status..400" - ); - final GraphiteNamePattern graphiteNamePattern = new GraphiteNamePattern(""); - for (String pattern : invalidPatterns) { - try { - new GraphiteNamePattern(pattern); - - Assertions.failBecauseExceptionWasNotThrown(IllegalArgumentException.class); - } catch (IllegalArgumentException e) { - Assertions.assertThat(e).hasMessageContaining(pattern); - } - } + @Test(expected = IllegalArgumentException.class) + public void createNew_WHEN_InvalidPattern_THEN_ShouldThrowException() { + final List invalidPatterns = + Arrays.asList( + "", + "a", + "1org", + "1org.", + "org.", + "org.**", + "org.**", + "org.company-", + "org.company-.", + "org.company-*", + "org.company.**", + "org.company.**-", + "org.com*pany.*", + "org.test.contr.oller.gather.status..400", + "org.test.controller.gather.status..400"); + final GraphiteNamePattern graphiteNamePattern = new GraphiteNamePattern(""); + for (String pattern : invalidPatterns) { + try { + new GraphiteNamePattern(pattern); + + Assertions.failBecauseExceptionWasNotThrown(IllegalArgumentException.class); + } catch (IllegalArgumentException e) { + Assertions.assertThat(e).hasMessageContaining(pattern); + } } - - @Test - public void createNew_WHEN_ValidPattern_THEN_ShouldCreateThePatternSuccessfully() { - final List validPatterns = Arrays.asList( - "org.test.controller.gather.status.400", - "org.test.controller.*.status.400", - "org.test.controller.*.status.*", - "*.test.controller.*.status.*", - "*.test.controller-1.*.status.*", - "*.amazing-test.controller-1.*.status.*" - - ); - for (String pattern : validPatterns) { - new GraphiteNamePattern(pattern); - } + } + + @Test + public void createNew_WHEN_ValidPattern_THEN_ShouldCreateThePatternSuccessfully() { + final List validPatterns = + Arrays.asList( + "org.test.controller.gather.status.400", + "org.test.controller.*.status.400", + "org.test.controller.*.status.*", + "*.test.controller.*.status.*", + "*.test.controller-1.*.status.*", + "*.amazing-test.controller-1.*.status.*"); + for (String pattern : validPatterns) { + new GraphiteNamePattern(pattern); } - - @Test - public void createNew_WHEN_ValidPattern_THEN_ShouldInitInternalPatternSuccessfully() { - final Map validPatterns = new HashMap(); - validPatterns.put("org.test.controller.gather.status.400", "^\\Qorg.test.controller.gather.status.400\\E$"); - validPatterns.put("org.test.controller.*.status.400", "^\\Qorg.test.controller.\\E([^.]*)\\Q.status.400\\E$"); - validPatterns.put("org.test.controller.*.status.*", "^\\Qorg.test.controller.\\E([^.]*)\\Q.status.\\E([^.]*)\\Q\\E$"); - validPatterns.put("*.test.controller.*.status.*", "^\\Q\\E([^.]*)\\Q.test.controller.\\E([^.]*)\\Q.status.\\E([^.]*)\\Q\\E$"); - - for (Map.Entry expected : validPatterns.entrySet()) { - final GraphiteNamePattern pattern = new GraphiteNamePattern(expected.getKey()); - Assertions.assertThat(pattern.getPatternString()).isEqualTo(expected.getValue()); - } + } + + @Test + public void createNew_WHEN_ValidPattern_THEN_ShouldInitInternalPatternSuccessfully() { + final Map validPatterns = new HashMap(); + validPatterns.put( + "org.test.controller.gather.status.400", "^\\Qorg.test.controller.gather.status.400\\E$"); + validPatterns.put( + "org.test.controller.*.status.400", "^\\Qorg.test.controller.\\E([^.]*)\\Q.status.400\\E$"); + validPatterns.put( + "org.test.controller.*.status.*", + "^\\Qorg.test.controller.\\E([^.]*)\\Q.status.\\E([^.]*)\\Q\\E$"); + validPatterns.put( + "*.test.controller.*.status.*", + "^\\Q\\E([^.]*)\\Q.test.controller.\\E([^.]*)\\Q.status.\\E([^.]*)\\Q\\E$"); + + for (Map.Entry expected : validPatterns.entrySet()) { + final GraphiteNamePattern pattern = new GraphiteNamePattern(expected.getKey()); + Assertions.assertThat(pattern.getPatternString()).isEqualTo(expected.getValue()); } - - @Test - public void match_WHEN_NotMatchingMetricNameProvided_THEN_ShouldNotMatch() { - final GraphiteNamePattern pattern = new GraphiteNamePattern("org.test.controller.*.status.*"); - final List notMatchingMetricNamed = Arrays.asList( - "org.test.controller.status.400", - "", - null - ); - - for (String metricName : notMatchingMetricNamed) { - Assertions.assertThat(pattern.matches(metricName)).as("Matching [%s] against [%s]", metricName, pattern.getPatternString()).isFalse(); - } + } + + @Test + public void match_WHEN_NotMatchingMetricNameProvided_THEN_ShouldNotMatch() { + final GraphiteNamePattern pattern = new GraphiteNamePattern("org.test.controller.*.status.*"); + final List notMatchingMetricNamed = + Arrays.asList("org.test.controller.status.400", "", null); + + for (String metricName : notMatchingMetricNamed) { + Assertions.assertThat(pattern.matches(metricName)) + .as("Matching [%s] against [%s]", metricName, pattern.getPatternString()) + .isFalse(); } - - @Test - public void match_WHEN_MatchingMetricNameProvided_THEN_ShouldMatch() { - final GraphiteNamePattern pattern = new GraphiteNamePattern("org.test.controller.*.status.*"); - final List matchingMetricNamed = Arrays.asList( - "org.test.controller.gather.status.400", - "org.test.controller.gather2.status.500", - "org.test.controller.gather1.status.", - "org.test.controller.*.status.*", - "org.test.controller..status.*" - ); - - for (String metricName : matchingMetricNamed) { - Assertions.assertThat(pattern.matches(metricName)).as("Matching [%s] against [%s]", metricName, pattern.getPatternString()).isTrue(); - } - } - - @Test - public void extractParameters() { - GraphiteNamePattern pattern; - Map expected = new HashMap(); - expected.put("${0}", "gather"); - expected.put("${1}", "400"); - pattern = new GraphiteNamePattern("org.test.controller.*.status.*"); - Assertions.assertThat(pattern.extractParameters("org.test.controller.gather.status.400")) - .isEqualTo(expected); - - expected = new HashMap(); - expected.put("${0}", "org"); - expected.put("${1}", "gather"); - expected.put("${2}", "400"); - pattern = new GraphiteNamePattern("*.test.controller.*.status.*"); - Assertions.assertThat(pattern.extractParameters("org.test.controller.gather.status.400")) - .isEqualTo(expected); - } - - @Test - public void extractParameters_WHEN_emptyStringInDottedMetricsName_THEN_ShouldReturnEmptyString() { - GraphiteNamePattern pattern; - Map expected = new HashMap(); - expected.put("${0}", ""); - expected.put("${1}", "400"); - pattern = new GraphiteNamePattern("org.test.controller.*.status.*"); - Assertions.assertThat(pattern.extractParameters("org.test.controller..status.400")) - .isEqualTo(expected); - - } - - @Test - public void extractParameters_WHEN_moreDots_THEN_ShouldReturnNoMatches() { - GraphiteNamePattern pattern; - pattern = new GraphiteNamePattern("org.test.controller.*.status.*"); - Assertions.assertThat(pattern.extractParameters("org.test.controller...status.400")) - .isEqualTo(Collections.emptyMap()); - + } + + @Test + public void match_WHEN_MatchingMetricNameProvided_THEN_ShouldMatch() { + final GraphiteNamePattern pattern = new GraphiteNamePattern("org.test.controller.*.status.*"); + final List matchingMetricNamed = + Arrays.asList( + "org.test.controller.gather.status.400", + "org.test.controller.gather2.status.500", + "org.test.controller.gather1.status.", + "org.test.controller.*.status.*", + "org.test.controller..status.*"); + + for (String metricName : matchingMetricNamed) { + Assertions.assertThat(pattern.matches(metricName)) + .as("Matching [%s] against [%s]", metricName, pattern.getPatternString()) + .isTrue(); } -} \ No newline at end of file + } + + @Test + public void extractParameters() { + GraphiteNamePattern pattern; + Map expected = new HashMap(); + expected.put("${0}", "gather"); + expected.put("${1}", "400"); + pattern = new GraphiteNamePattern("org.test.controller.*.status.*"); + Assertions.assertThat(pattern.extractParameters("org.test.controller.gather.status.400")) + .isEqualTo(expected); + + expected = new HashMap(); + expected.put("${0}", "org"); + expected.put("${1}", "gather"); + expected.put("${2}", "400"); + pattern = new GraphiteNamePattern("*.test.controller.*.status.*"); + Assertions.assertThat(pattern.extractParameters("org.test.controller.gather.status.400")) + .isEqualTo(expected); + } + + @Test + public void extractParameters_WHEN_emptyStringInDottedMetricsName_THEN_ShouldReturnEmptyString() { + GraphiteNamePattern pattern; + Map expected = new HashMap(); + expected.put("${0}", ""); + expected.put("${1}", "400"); + pattern = new GraphiteNamePattern("org.test.controller.*.status.*"); + Assertions.assertThat(pattern.extractParameters("org.test.controller..status.400")) + .isEqualTo(expected); + } + + @Test + public void extractParameters_WHEN_moreDots_THEN_ShouldReturnNoMatches() { + GraphiteNamePattern pattern; + pattern = new GraphiteNamePattern("org.test.controller.*.status.*"); + Assertions.assertThat(pattern.extractParameters("org.test.controller...status.400")) + .isEqualTo(Collections.emptyMap()); + } +} diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java index 03d244b89..7bf7b6520 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java @@ -1,57 +1,58 @@ package io.prometheus.metrics.instrumentation.dropwizard5.labels; -import org.junit.Test; +import static org.junit.Assert.assertEquals; import java.util.Collections; import java.util.HashMap; import java.util.Map; - -import static org.junit.Assert.assertEquals; +import org.junit.Test; public class MapperConfigTest { - @Test - public void setMatch_WHEN_ExpressionMatchesPattern_AllGood() { - final MapperConfig mapperConfig = new MapperConfig(); - mapperConfig.setMatch("com.company.meter.*"); - assertEquals("com.company.meter.*", mapperConfig.getMatch()); - } - - @Test(expected = IllegalArgumentException.class) - public void setMatch_WHEN_ExpressionDoesnNotMatchPattern_ThrowException() { - final MapperConfig mapperConfig = new MapperConfig(); - mapperConfig.setMatch("com.company.meter.**.yay"); - } - - @Test - public void setLabels_WHEN_ExpressionMatchesPattern_AllGood() { - final MapperConfig mapperConfig = new MapperConfig(); - final Map labels = new HashMap(); - labels.put("valid", "${0}"); - mapperConfig.setLabels(labels); - assertEquals(labels, mapperConfig.getLabels()); - } - - @Test(expected = IllegalArgumentException.class) - public void setLabels_WHEN_ExpressionDoesnNotMatchPattern_ThrowException() { - final MapperConfig mapperConfig = new MapperConfig(); - final Map labels = new HashMap(); - labels.put("valid", "${0}"); - labels.put("not valid", "${0}"); - mapperConfig.setLabels(labels); - } - - @Test - public void toString_WHEN_EmptyConfig_AllGood() { - final MapperConfig mapperConfig = new MapperConfig(); - assertEquals("MapperConfig{match=null, name=null, labels={}}", mapperConfig.toString()); - } - - @Test - public void toString_WHEN_FullyConfigured_AllGood() { - final MapperConfig mapperConfig = new MapperConfig(); - mapperConfig.setMatch("com.company.meter.*.foo"); - mapperConfig.setName("foo"); - mapperConfig.setLabels(Collections.singletonMap("type", "${0}")); - assertEquals("MapperConfig{match=com.company.meter.*.foo, name=foo, labels={type=${0}}}", mapperConfig.toString()); - } + @Test + public void setMatch_WHEN_ExpressionMatchesPattern_AllGood() { + final MapperConfig mapperConfig = new MapperConfig(); + mapperConfig.setMatch("com.company.meter.*"); + assertEquals("com.company.meter.*", mapperConfig.getMatch()); + } + + @Test(expected = IllegalArgumentException.class) + public void setMatch_WHEN_ExpressionDoesnNotMatchPattern_ThrowException() { + final MapperConfig mapperConfig = new MapperConfig(); + mapperConfig.setMatch("com.company.meter.**.yay"); + } + + @Test + public void setLabels_WHEN_ExpressionMatchesPattern_AllGood() { + final MapperConfig mapperConfig = new MapperConfig(); + final Map labels = new HashMap(); + labels.put("valid", "${0}"); + mapperConfig.setLabels(labels); + assertEquals(labels, mapperConfig.getLabels()); + } + + @Test(expected = IllegalArgumentException.class) + public void setLabels_WHEN_ExpressionDoesnNotMatchPattern_ThrowException() { + final MapperConfig mapperConfig = new MapperConfig(); + final Map labels = new HashMap(); + labels.put("valid", "${0}"); + labels.put("not valid", "${0}"); + mapperConfig.setLabels(labels); + } + + @Test + public void toString_WHEN_EmptyConfig_AllGood() { + final MapperConfig mapperConfig = new MapperConfig(); + assertEquals("MapperConfig{match=null, name=null, labels={}}", mapperConfig.toString()); + } + + @Test + public void toString_WHEN_FullyConfigured_AllGood() { + final MapperConfig mapperConfig = new MapperConfig(); + mapperConfig.setMatch("com.company.meter.*.foo"); + mapperConfig.setName("foo"); + mapperConfig.setLabels(Collections.singletonMap("type", "${0}")); + assertEquals( + "MapperConfig{match=com.company.meter.*.foo, name=foo, labels={type=${0}}}", + mapperConfig.toString()); + } } diff --git a/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java index 71ffea01c..5e17338b7 100644 --- a/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java +++ b/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java @@ -9,7 +9,6 @@ import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import io.prometheus.metrics.model.snapshots.SummarySnapshot; - import java.util.Arrays; import java.util.List; import java.util.Map; @@ -18,9 +17,10 @@ /** * Collect metrics from Guava's com.google.common.cache.Cache. + * *

    - *

    {@code
      *
    + * 
    {@code
      * // Note that `recordStats()` is required to gather non-zero statistics
      * Cache cache = CacheBuilder.newBuilder().recordStats().build();
      * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector().register();
    @@ -30,7 +30,8 @@
      *
      * Exposed metrics are labeled with the provided cache name.
      *
    - * With the example above, sample metric names would be:
    + * 

    With the example above, sample metric names would be: + * *

      *     guava_cache_hit_total{cache="mycache"} 10.0
      *     guava_cache_miss_total{cache="mycache"} 3.0
    @@ -40,164 +41,154 @@
      * 
    * * Additionally, if the cache includes a loader, the following metrics would be provided: + * *
      *     guava_cache_load_failure_total{cache="mycache"} 2.0
      *     guava_cache_loads_total{cache="mycache"} 7.0
      *     guava_cache_load_duration_seconds_count{cache="mycache"} 7.0
      *     guava_cache_load_duration_seconds_sum{cache="mycache"} 0.0034
      * 
    - * */ public class CacheMetricsCollector implements MultiCollector { - private static final double NANOSECONDS_PER_SECOND = 1_000_000_000.0; - - protected final ConcurrentMap children = new ConcurrentHashMap<>(); - - /** - * Add or replace the cache with the given name. - *

    - * Any references any previous cache with this name is invalidated. - * - * @param cacheName The name of the cache, will be the metrics label value - * @param cache The cache being monitored - */ - public void addCache(String cacheName, Cache cache) { - children.put(cacheName, cache); - } - - /** - * Remove the cache with the given name. - *

    - * Any references to the cache are invalidated. - * - * @param cacheName cache to be removed - */ - public Cache removeCache(String cacheName) { - return children.remove(cacheName); - } - - /** - * Remove all caches. - *

    - * Any references to all caches are invalidated. - */ - public void clear(){ - children.clear(); - } - - @Override - public MetricSnapshots collect() { - final MetricSnapshots.Builder metricSnapshotsBuilder = MetricSnapshots.builder(); - final List labelNames = Arrays.asList("cache"); - - final CounterSnapshot.Builder cacheHitTotal = CounterSnapshot.builder() - .name("guava_cache_hit") - .help("Cache hit totals"); - - final CounterSnapshot.Builder cacheMissTotal = CounterSnapshot.builder() - .name("guava_cache_miss") - .help("Cache miss totals"); - - final CounterSnapshot.Builder cacheRequestsTotal = CounterSnapshot.builder() - .name("guava_cache_requests") - .help("Cache request totals"); - - final CounterSnapshot.Builder cacheEvictionTotal = CounterSnapshot.builder() + private static final double NANOSECONDS_PER_SECOND = 1_000_000_000.0; + + protected final ConcurrentMap children = new ConcurrentHashMap<>(); + + /** + * Add or replace the cache with the given name. + * + *

    Any references any previous cache with this name is invalidated. + * + * @param cacheName The name of the cache, will be the metrics label value + * @param cache The cache being monitored + */ + public void addCache(String cacheName, Cache cache) { + children.put(cacheName, cache); + } + + /** + * Remove the cache with the given name. + * + *

    Any references to the cache are invalidated. + * + * @param cacheName cache to be removed + */ + public Cache removeCache(String cacheName) { + return children.remove(cacheName); + } + + /** + * Remove all caches. + * + *

    Any references to all caches are invalidated. + */ + public void clear() { + children.clear(); + } + + @Override + public MetricSnapshots collect() { + final MetricSnapshots.Builder metricSnapshotsBuilder = MetricSnapshots.builder(); + final List labelNames = Arrays.asList("cache"); + + final CounterSnapshot.Builder cacheHitTotal = + CounterSnapshot.builder().name("guava_cache_hit").help("Cache hit totals"); + + final CounterSnapshot.Builder cacheMissTotal = + CounterSnapshot.builder().name("guava_cache_miss").help("Cache miss totals"); + + final CounterSnapshot.Builder cacheRequestsTotal = + CounterSnapshot.builder().name("guava_cache_requests").help("Cache request totals"); + + final CounterSnapshot.Builder cacheEvictionTotal = + CounterSnapshot.builder() .name("guava_cache_eviction") .help("Cache eviction totals, doesn't include manually removed entries"); - final CounterSnapshot.Builder cacheLoadFailure = CounterSnapshot.builder() - .name("guava_cache_load_failure") - .help("Cache load failures"); + final CounterSnapshot.Builder cacheLoadFailure = + CounterSnapshot.builder().name("guava_cache_load_failure").help("Cache load failures"); - final CounterSnapshot.Builder cacheLoadTotal = CounterSnapshot.builder() + final CounterSnapshot.Builder cacheLoadTotal = + CounterSnapshot.builder() .name("guava_cache_loads") .help("Cache loads: both success and failures"); - final GaugeSnapshot.Builder cacheSize = GaugeSnapshot.builder() - .name("guava_cache_size") - .help("Cache size"); + final GaugeSnapshot.Builder cacheSize = + GaugeSnapshot.builder().name("guava_cache_size").help("Cache size"); - final SummarySnapshot.Builder cacheLoadSummary = SummarySnapshot.builder() + final SummarySnapshot.Builder cacheLoadSummary = + SummarySnapshot.builder() .name("guava_cache_load_duration_seconds") .help("Cache load duration: both success and failures"); - for (final Map.Entry c: children.entrySet()) { - final List cacheName = Arrays.asList(c.getKey()); - final Labels labels = Labels.of(labelNames, cacheName); - - final CacheStats stats = c.getValue().stats(); - - cacheHitTotal.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.hitCount()) - .build() - ); - - cacheMissTotal.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.missCount()) - .build() - ); - - cacheRequestsTotal.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.requestCount()) - .build() - ); - - cacheEvictionTotal.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.evictionCount()) - .build() - ); - - cacheSize.dataPoint( - GaugeSnapshot.GaugeDataPointSnapshot.builder() - .labels(labels) - .value(c.getValue().size()) - .build() - ); - - if (c.getValue() instanceof LoadingCache) { - cacheLoadFailure.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.loadExceptionCount()) - .build() - ); - - cacheLoadTotal.dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(labels) - .value(stats.loadCount()) - .build() - ); - - cacheLoadSummary.dataPoint( - SummarySnapshot.SummaryDataPointSnapshot.builder() - .labels(labels) - .count(stats.loadCount()) - .sum(stats.totalLoadTime() / NANOSECONDS_PER_SECOND) - .build() - ); - } - } - - metricSnapshotsBuilder.metricSnapshot(cacheHitTotal.build()); - metricSnapshotsBuilder.metricSnapshot(cacheMissTotal.build()); - metricSnapshotsBuilder.metricSnapshot(cacheRequestsTotal.build()); - metricSnapshotsBuilder.metricSnapshot(cacheEvictionTotal.build()); - metricSnapshotsBuilder.metricSnapshot(cacheLoadFailure.build()); - metricSnapshotsBuilder.metricSnapshot(cacheLoadTotal.build()); - metricSnapshotsBuilder.metricSnapshot(cacheSize.build()); - metricSnapshotsBuilder.metricSnapshot(cacheLoadSummary.build()); - - return metricSnapshotsBuilder.build(); + for (final Map.Entry c : children.entrySet()) { + final List cacheName = Arrays.asList(c.getKey()); + final Labels labels = Labels.of(labelNames, cacheName); + + final CacheStats stats = c.getValue().stats(); + + cacheHitTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.hitCount()) + .build()); + + cacheMissTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.missCount()) + .build()); + + cacheRequestsTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.requestCount()) + .build()); + + cacheEvictionTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.evictionCount()) + .build()); + + cacheSize.dataPoint( + GaugeSnapshot.GaugeDataPointSnapshot.builder() + .labels(labels) + .value(c.getValue().size()) + .build()); + + if (c.getValue() instanceof LoadingCache) { + cacheLoadFailure.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.loadExceptionCount()) + .build()); + + cacheLoadTotal.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.loadCount()) + .build()); + + cacheLoadSummary.dataPoint( + SummarySnapshot.SummaryDataPointSnapshot.builder() + .labels(labels) + .count(stats.loadCount()) + .sum(stats.totalLoadTime() / NANOSECONDS_PER_SECOND) + .build()); + } } + + metricSnapshotsBuilder.metricSnapshot(cacheHitTotal.build()); + metricSnapshotsBuilder.metricSnapshot(cacheMissTotal.build()); + metricSnapshotsBuilder.metricSnapshot(cacheRequestsTotal.build()); + metricSnapshotsBuilder.metricSnapshot(cacheEvictionTotal.build()); + metricSnapshotsBuilder.metricSnapshot(cacheLoadFailure.build()); + metricSnapshotsBuilder.metricSnapshot(cacheLoadTotal.build()); + metricSnapshotsBuilder.metricSnapshot(cacheSize.build()); + metricSnapshotsBuilder.metricSnapshot(cacheLoadSummary.build()); + + return metricSnapshotsBuilder.build(); + } } diff --git a/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java b/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java index 41b3bba8d..96de845a8 100644 --- a/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java +++ b/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java @@ -1,5 +1,11 @@ package io.prometheus.metrics.instrumentation.guava; +import static org.assertj.core.api.Java6Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; @@ -10,133 +16,128 @@ import io.prometheus.metrics.model.snapshots.DataPointSnapshot; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.SummarySnapshot; -import org.junit.Test; - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; - -import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import org.junit.Test; public class CacheMetricsCollectorTest { - @Test - public void cacheExposesMetricsForHitMissAndEviction() { - final Cache cache = CacheBuilder.newBuilder().maximumSize(2).recordStats().build(); - - final CacheMetricsCollector collector = new CacheMetricsCollector(); - collector.addCache("users", cache); - - final PrometheusRegistry registry = new PrometheusRegistry(); - registry.register(collector); - - cache.getIfPresent("user1"); - cache.getIfPresent("user1"); - cache.put("user1", "First User"); - cache.getIfPresent("user1"); - - // Add to cache to trigger eviction. - cache.put("user2", "Second User"); - cache.put("user3", "Third User"); - cache.put("user4", "Fourth User"); - - assertCounterMetric(registry, "guava_cache_hit", "users", 1.0); - assertCounterMetric(registry, "guava_cache_miss", "users", 2.0); - assertCounterMetric(registry, "guava_cache_requests", "users", 3.0); - assertCounterMetric(registry, "guava_cache_eviction", "users", 2.0); - - final String expected = "# TYPE guava_cache_eviction counter\n" + - "# HELP guava_cache_eviction Cache eviction totals, doesn't include manually removed entries\n" + - "guava_cache_eviction_total{cache=\"users\"} 2.0\n" + - "# TYPE guava_cache_hit counter\n" + - "# HELP guava_cache_hit Cache hit totals\n" + - "guava_cache_hit_total{cache=\"users\"} 1.0\n" + - "# TYPE guava_cache_miss counter\n" + - "# HELP guava_cache_miss Cache miss totals\n" + - "guava_cache_miss_total{cache=\"users\"} 2.0\n" + - "# TYPE guava_cache_requests counter\n" + - "# HELP guava_cache_requests Cache request totals\n" + - "guava_cache_requests_total{cache=\"users\"} 3.0\n" + - "# TYPE guava_cache_size gauge\n" + - "# HELP guava_cache_size Cache size\n" + - "guava_cache_size{cache=\"users\"} 2.0\n" + - "# EOF\n"; - - assertEquals(expected, convertToOpenMetricsFormat(registry)); - } - - @SuppressWarnings("unchecked") - @Test - public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { - final CacheLoader loader = mock(CacheLoader.class); - when(loader.load(anyString())) - .thenReturn("First User") - .thenThrow(new RuntimeException("Seconds time fails")) - .thenReturn("Third User"); - - final LoadingCache cache = CacheBuilder.newBuilder().recordStats().build(loader); - final CacheMetricsCollector collector = new CacheMetricsCollector(); - collector.addCache("loadingusers", cache); - - final PrometheusRegistry registry = new PrometheusRegistry(); - registry.register(collector); - - cache.get("user1"); - cache.get("user1"); - try { - cache.get("user2"); - } catch (Exception e) { - // ignoring. - } - cache.get("user3"); - - assertCounterMetric(registry, "guava_cache_hit", "loadingusers", 1.0); - assertCounterMetric(registry, "guava_cache_miss", "loadingusers", 3.0); - - assertCounterMetric(registry, "guava_cache_load_failure", "loadingusers", 1.0); - assertCounterMetric(registry, "guava_cache_loads", "loadingusers", 3.0); - - final SummarySnapshot.SummaryDataPointSnapshot loadDuration = (SummarySnapshot.SummaryDataPointSnapshot) getDataPointSnapshot( - registry, - "guava_cache_load_duration_seconds", - "loadingusers" - ); - - assertEquals(3, loadDuration.getCount()); - assertThat(loadDuration.getSum()).isGreaterThan(0); - } - - private void assertCounterMetric(PrometheusRegistry registry, String name, String cacheName, double value) { - final CounterSnapshot.CounterDataPointSnapshot dataPointSnapshot = - (CounterSnapshot.CounterDataPointSnapshot) getDataPointSnapshot(registry, name, cacheName); - - assertEquals(value, dataPointSnapshot.getValue(), 0); - } - - private DataPointSnapshot getDataPointSnapshot(PrometheusRegistry registry, String name, String cacheName) - { - final Labels labels = Labels.of(new String[]{"cache"}, new String[]{cacheName}); - - return registry.scrape(name::equals).stream() - .flatMap(metricSnapshot -> metricSnapshot.getDataPoints().stream()) - .filter(dataPoint -> dataPoint.getLabels().equals(labels)) - .findFirst() - .get(); + @Test + public void cacheExposesMetricsForHitMissAndEviction() { + final Cache cache = + CacheBuilder.newBuilder().maximumSize(2).recordStats().build(); + + final CacheMetricsCollector collector = new CacheMetricsCollector(); + collector.addCache("users", cache); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + cache.getIfPresent("user1"); + cache.getIfPresent("user1"); + cache.put("user1", "First User"); + cache.getIfPresent("user1"); + + // Add to cache to trigger eviction. + cache.put("user2", "Second User"); + cache.put("user3", "Third User"); + cache.put("user4", "Fourth User"); + + assertCounterMetric(registry, "guava_cache_hit", "users", 1.0); + assertCounterMetric(registry, "guava_cache_miss", "users", 2.0); + assertCounterMetric(registry, "guava_cache_requests", "users", 3.0); + assertCounterMetric(registry, "guava_cache_eviction", "users", 2.0); + + final String expected = + "# TYPE guava_cache_eviction counter\n" + + "# HELP guava_cache_eviction Cache eviction totals, doesn't include manually removed entries\n" + + "guava_cache_eviction_total{cache=\"users\"} 2.0\n" + + "# TYPE guava_cache_hit counter\n" + + "# HELP guava_cache_hit Cache hit totals\n" + + "guava_cache_hit_total{cache=\"users\"} 1.0\n" + + "# TYPE guava_cache_miss counter\n" + + "# HELP guava_cache_miss Cache miss totals\n" + + "guava_cache_miss_total{cache=\"users\"} 2.0\n" + + "# TYPE guava_cache_requests counter\n" + + "# HELP guava_cache_requests Cache request totals\n" + + "guava_cache_requests_total{cache=\"users\"} 3.0\n" + + "# TYPE guava_cache_size gauge\n" + + "# HELP guava_cache_size Cache size\n" + + "guava_cache_size{cache=\"users\"} 2.0\n" + + "# EOF\n"; + + assertEquals(expected, convertToOpenMetricsFormat(registry)); + } + + @SuppressWarnings("unchecked") + @Test + public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { + final CacheLoader loader = mock(CacheLoader.class); + when(loader.load(anyString())) + .thenReturn("First User") + .thenThrow(new RuntimeException("Seconds time fails")) + .thenReturn("Third User"); + + final LoadingCache cache = + CacheBuilder.newBuilder().recordStats().build(loader); + final CacheMetricsCollector collector = new CacheMetricsCollector(); + collector.addCache("loadingusers", cache); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + cache.get("user1"); + cache.get("user1"); + try { + cache.get("user2"); + } catch (Exception e) { + // ignoring. } - - private String convertToOpenMetricsFormat(PrometheusRegistry registry) { - final ByteArrayOutputStream out = new ByteArrayOutputStream(); - final OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); - try { - writer.write(out, registry.scrape()); - return out.toString(StandardCharsets.UTF_8.name()); - } catch (IOException e) { - throw new UncheckedIOException(e); - } + cache.get("user3"); + + assertCounterMetric(registry, "guava_cache_hit", "loadingusers", 1.0); + assertCounterMetric(registry, "guava_cache_miss", "loadingusers", 3.0); + + assertCounterMetric(registry, "guava_cache_load_failure", "loadingusers", 1.0); + assertCounterMetric(registry, "guava_cache_loads", "loadingusers", 3.0); + + final SummarySnapshot.SummaryDataPointSnapshot loadDuration = + (SummarySnapshot.SummaryDataPointSnapshot) + getDataPointSnapshot(registry, "guava_cache_load_duration_seconds", "loadingusers"); + + assertEquals(3, loadDuration.getCount()); + assertThat(loadDuration.getSum()).isGreaterThan(0); + } + + private void assertCounterMetric( + PrometheusRegistry registry, String name, String cacheName, double value) { + final CounterSnapshot.CounterDataPointSnapshot dataPointSnapshot = + (CounterSnapshot.CounterDataPointSnapshot) getDataPointSnapshot(registry, name, cacheName); + + assertEquals(value, dataPointSnapshot.getValue(), 0); + } + + private DataPointSnapshot getDataPointSnapshot( + PrometheusRegistry registry, String name, String cacheName) { + final Labels labels = Labels.of(new String[] {"cache"}, new String[] {cacheName}); + + return registry.scrape(name::equals).stream() + .flatMap(metricSnapshot -> metricSnapshot.getDataPoints().stream()) + .filter(dataPoint -> dataPoint.getLabels().equals(labels)) + .findFirst() + .get(); + } + + private String convertToOpenMetricsFormat(PrometheusRegistry registry) { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + try { + writer.write(out, registry.scrape()); + return out.toString(StandardCharsets.UTF_8.name()); + } catch (IOException e) { + throw new UncheckedIOException(e); } + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetrics.java index 9c8cddb46..ad047f1ba 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetrics.java @@ -4,21 +4,26 @@ import io.prometheus.metrics.core.metrics.GaugeWithCallback; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.Unit; - import java.lang.management.BufferPoolMXBean; import java.lang.management.ManagementFactory; import java.util.List; /** - * JVM Buffer Pool metrics. The {@link JvmBufferPoolMetrics} are registered as part of the {@link JvmMetrics} like this: + * JVM Buffer Pool metrics. The {@link JvmBufferPoolMetrics} are registered as part of the {@link + * JvmMetrics} like this: + * *

    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    + * * However, if you want only the {@link JvmBufferPoolMetrics} you can also register them directly: + * *
    {@code
    - *   JvmBufferPoolMetrics.builder().register();
    + * JvmBufferPoolMetrics.builder().register();
      * }
    + * * Example metrics being exported: + * *
      * # HELP jvm_buffer_pool_capacity_bytes Bytes capacity of a given JVM buffer pool.
      * # TYPE jvm_buffer_pool_capacity_bytes gauge
    @@ -36,91 +41,93 @@
      */
     public class JvmBufferPoolMetrics {
     
    -    private static final String JVM_BUFFER_POOL_USED_BYTES = "jvm_buffer_pool_used_bytes";
    -    private static final String JVM_BUFFER_POOL_CAPACITY_BYTES = "jvm_buffer_pool_capacity_bytes";
    -    private static final String JVM_BUFFER_POOL_USED_BUFFERS = "jvm_buffer_pool_used_buffers";
    +  private static final String JVM_BUFFER_POOL_USED_BYTES = "jvm_buffer_pool_used_bytes";
    +  private static final String JVM_BUFFER_POOL_CAPACITY_BYTES = "jvm_buffer_pool_capacity_bytes";
    +  private static final String JVM_BUFFER_POOL_USED_BUFFERS = "jvm_buffer_pool_used_buffers";
    +
    +  private final PrometheusProperties config;
    +  private final List bufferPoolBeans;
    +
    +  private JvmBufferPoolMetrics(
    +      List bufferPoolBeans, PrometheusProperties config) {
    +    this.config = config;
    +    this.bufferPoolBeans = bufferPoolBeans;
    +  }
    +
    +  private void register(PrometheusRegistry registry) {
    +
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_BUFFER_POOL_USED_BYTES)
    +        .help("Used bytes of a given JVM buffer pool.")
    +        .unit(Unit.BYTES)
    +        .labelNames("pool")
    +        .callback(
    +            callback -> {
    +              for (BufferPoolMXBean pool : bufferPoolBeans) {
    +                callback.call(pool.getMemoryUsed(), pool.getName());
    +              }
    +            })
    +        .register(registry);
    +
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_BUFFER_POOL_CAPACITY_BYTES)
    +        .help("Bytes capacity of a given JVM buffer pool.")
    +        .unit(Unit.BYTES)
    +        .labelNames("pool")
    +        .callback(
    +            callback -> {
    +              for (BufferPoolMXBean pool : bufferPoolBeans) {
    +                callback.call(pool.getTotalCapacity(), pool.getName());
    +              }
    +            })
    +        .register(registry);
    +
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_BUFFER_POOL_USED_BUFFERS)
    +        .help("Used buffers of a given JVM buffer pool.")
    +        .labelNames("pool")
    +        .callback(
    +            callback -> {
    +              for (BufferPoolMXBean pool : bufferPoolBeans) {
    +                callback.call(pool.getCount(), pool.getName());
    +              }
    +            })
    +        .register(registry);
    +  }
    +
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
    +
    +  public static Builder builder(PrometheusProperties config) {
    +    return new Builder(config);
    +  }
    +
    +  public static class Builder {
     
         private final PrometheusProperties config;
    -    private final List bufferPoolBeans;
    -
    -    private JvmBufferPoolMetrics(List bufferPoolBeans, PrometheusProperties config) {
    -        this.config = config;
    -        this.bufferPoolBeans = bufferPoolBeans;
    -    }
    +    private List bufferPoolBeans;
     
    -    private void register(PrometheusRegistry registry) {
    -
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_BUFFER_POOL_USED_BYTES)
    -                .help("Used bytes of a given JVM buffer pool.")
    -                .unit(Unit.BYTES)
    -                .labelNames("pool")
    -                .callback(callback -> {
    -                    for (BufferPoolMXBean pool : bufferPoolBeans) {
    -                        callback.call(pool.getMemoryUsed(), pool.getName());
    -                    }
    -                })
    -                .register(registry);
    -
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_BUFFER_POOL_CAPACITY_BYTES)
    -                .help("Bytes capacity of a given JVM buffer pool.")
    -                .unit(Unit.BYTES)
    -                .labelNames("pool")
    -                .callback(callback -> {
    -                    for (BufferPoolMXBean pool : bufferPoolBeans) {
    -                        callback.call(pool.getTotalCapacity(), pool.getName());
    -                    }
    -                })
    -                .register(registry);
    -
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_BUFFER_POOL_USED_BUFFERS)
    -                .help("Used buffers of a given JVM buffer pool.")
    -                .labelNames("pool")
    -                .callback(callback -> {
    -                    for (BufferPoolMXBean pool : bufferPoolBeans) {
    -                        callback.call(pool.getCount(), pool.getName());
    -                    }
    -                })
    -                .register(registry);
    +    private Builder(PrometheusProperties config) {
    +      this.config = config;
         }
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    +    /** Package private. For testing only. */
    +    Builder bufferPoolBeans(List bufferPoolBeans) {
    +      this.bufferPoolBeans = bufferPoolBeans;
    +      return this;
         }
     
    -    public static Builder builder(PrometheusProperties config) {
    -        return new Builder(config);
    +    public void register() {
    +      register(PrometheusRegistry.defaultRegistry);
         }
     
    -    public static class Builder {
    -
    -        private final PrometheusProperties config;
    -        private List bufferPoolBeans;
    -
    -        private Builder(PrometheusProperties config) {
    -            this.config = config;
    -        }
    -
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder bufferPoolBeans(List bufferPoolBeans) {
    -            this.bufferPoolBeans = bufferPoolBeans;
    -            return this;
    -        }
    -
    -        public void register() {
    -            register(PrometheusRegistry.defaultRegistry);
    -        }
    -
    -        public void register(PrometheusRegistry registry) {
    -            List bufferPoolBeans = this.bufferPoolBeans;
    -            if (bufferPoolBeans == null) {
    -                bufferPoolBeans = ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
    -            }
    -            new JvmBufferPoolMetrics(bufferPoolBeans, config).register(registry);
    -        }
    +    public void register(PrometheusRegistry registry) {
    +      List bufferPoolBeans = this.bufferPoolBeans;
    +      if (bufferPoolBeans == null) {
    +        bufferPoolBeans = ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
    +      }
    +      new JvmBufferPoolMetrics(bufferPoolBeans, config).register(registry);
         }
    +  }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.java
    index 69d3c4ecd..f87618f63 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.java
    @@ -4,20 +4,25 @@
     import io.prometheus.metrics.core.metrics.CounterWithCallback;
     import io.prometheus.metrics.core.metrics.GaugeWithCallback;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
    -
     import java.lang.management.ClassLoadingMXBean;
     import java.lang.management.ManagementFactory;
     
     /**
    - * JVM Class Loading metrics. The {@link JvmClassLoadingMetrics} are registered as part of the {@link JvmMetrics} like this:
    + * JVM Class Loading metrics. The {@link JvmClassLoadingMetrics} are registered as part of the
    + * {@link JvmMetrics} like this:
    + *
      * 
    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    + * * However, if you want only the {@link JvmClassLoadingMetrics} you can also register them directly: + * *
    {@code
    - *   JvmClassLoadingMetrics.builder().register();
    + * JvmClassLoadingMetrics.builder().register();
      * }
    + * * Example metrics being exported: + * *
      * # HELP jvm_classes_currently_loaded The number of classes that are currently loaded in the JVM
      * # TYPE jvm_classes_currently_loaded gauge
    @@ -32,71 +37,74 @@
      */
     public class JvmClassLoadingMetrics {
     
    -    private static final String JVM_CLASSES_CURRENTLY_LOADED = "jvm_classes_currently_loaded";
    -    private static final String JVM_CLASSES_LOADED_TOTAL = "jvm_classes_loaded_total";
    -    private static final String JVM_CLASSES_UNLOADED_TOTAL = "jvm_classes_unloaded_total";
    +  private static final String JVM_CLASSES_CURRENTLY_LOADED = "jvm_classes_currently_loaded";
    +  private static final String JVM_CLASSES_LOADED_TOTAL = "jvm_classes_loaded_total";
    +  private static final String JVM_CLASSES_UNLOADED_TOTAL = "jvm_classes_unloaded_total";
     
    -    private final PrometheusProperties config;
    -    private final ClassLoadingMXBean classLoadingBean;
    +  private final PrometheusProperties config;
    +  private final ClassLoadingMXBean classLoadingBean;
     
    -    private JvmClassLoadingMetrics(ClassLoadingMXBean classLoadingBean, PrometheusProperties config) {
    -        this.classLoadingBean = classLoadingBean;
    -        this.config = config;
    -    }
    +  private JvmClassLoadingMetrics(ClassLoadingMXBean classLoadingBean, PrometheusProperties config) {
    +    this.classLoadingBean = classLoadingBean;
    +    this.config = config;
    +  }
     
    -    private void register(PrometheusRegistry registry) {
    -
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_CLASSES_CURRENTLY_LOADED)
    -                .help("The number of classes that are currently loaded in the JVM")
    -                .callback(callback -> callback.call(classLoadingBean.getLoadedClassCount()))
    -                .register(registry);
    -
    -        CounterWithCallback.builder(config)
    -                .name(JVM_CLASSES_LOADED_TOTAL)
    -                .help("The total number of classes that have been loaded since the JVM has started execution")
    -                .callback(callback -> callback.call(classLoadingBean.getTotalLoadedClassCount()))
    -                .register(registry);
    -
    -        CounterWithCallback.builder(config)
    -                .name(JVM_CLASSES_UNLOADED_TOTAL)
    -                .help("The total number of classes that have been unloaded since the JVM has started execution")
    -                .callback(callback -> callback.call(classLoadingBean.getUnloadedClassCount()))
    -                .register(registry);
    -    }
    +  private void register(PrometheusRegistry registry) {
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    -    }
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_CLASSES_CURRENTLY_LOADED)
    +        .help("The number of classes that are currently loaded in the JVM")
    +        .callback(callback -> callback.call(classLoadingBean.getLoadedClassCount()))
    +        .register(registry);
     
    -    public static Builder builder(PrometheusProperties config) {
    -        return new Builder(config);
    -    }
    +    CounterWithCallback.builder(config)
    +        .name(JVM_CLASSES_LOADED_TOTAL)
    +        .help(
    +            "The total number of classes that have been loaded since the JVM has started execution")
    +        .callback(callback -> callback.call(classLoadingBean.getTotalLoadedClassCount()))
    +        .register(registry);
     
    -    public static class Builder {
    +    CounterWithCallback.builder(config)
    +        .name(JVM_CLASSES_UNLOADED_TOTAL)
    +        .help(
    +            "The total number of classes that have been unloaded since the JVM has started execution")
    +        .callback(callback -> callback.call(classLoadingBean.getUnloadedClassCount()))
    +        .register(registry);
    +  }
     
    -        private final PrometheusProperties config;
    -        private ClassLoadingMXBean classLoadingBean;
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
     
    -        private Builder(PrometheusProperties config) {
    -            this.config = config;
    -        }
    +  public static Builder builder(PrometheusProperties config) {
    +    return new Builder(config);
    +  }
     
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder classLoadingBean(ClassLoadingMXBean classLoadingBean) {
    -            this.classLoadingBean = classLoadingBean;
    -            return this;
    -        }
    +  public static class Builder {
     
    -        public void register() {
    -            register(PrometheusRegistry.defaultRegistry);
    -        }
    +    private final PrometheusProperties config;
    +    private ClassLoadingMXBean classLoadingBean;
    +
    +    private Builder(PrometheusProperties config) {
    +      this.config = config;
    +    }
    +
    +    /** Package private. For testing only. */
    +    Builder classLoadingBean(ClassLoadingMXBean classLoadingBean) {
    +      this.classLoadingBean = classLoadingBean;
    +      return this;
    +    }
    +
    +    public void register() {
    +      register(PrometheusRegistry.defaultRegistry);
    +    }
     
    -        public void register(PrometheusRegistry registry) {
    -            ClassLoadingMXBean classLoadingBean = this.classLoadingBean != null ? this.classLoadingBean : ManagementFactory.getClassLoadingMXBean();
    -            new JvmClassLoadingMetrics(classLoadingBean, config).register(registry);
    -        }
    +    public void register(PrometheusRegistry registry) {
    +      ClassLoadingMXBean classLoadingBean =
    +          this.classLoadingBean != null
    +              ? this.classLoadingBean
    +              : ManagementFactory.getClassLoadingMXBean();
    +      new JvmClassLoadingMetrics(classLoadingBean, config).register(registry);
         }
    +  }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetrics.java
    index 0fbebf46e..308b00877 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetrics.java
    @@ -1,25 +1,30 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
    +import static io.prometheus.metrics.model.snapshots.Unit.millisToSeconds;
    +
     import io.prometheus.metrics.config.PrometheusProperties;
     import io.prometheus.metrics.core.metrics.CounterWithCallback;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
     import io.prometheus.metrics.model.snapshots.Unit;
    -
     import java.lang.management.CompilationMXBean;
     import java.lang.management.ManagementFactory;
     
    -import static io.prometheus.metrics.model.snapshots.Unit.millisToSeconds;
    -
     /**
    - * JVM Compilation metrics. The {@link JvmCompilationMetrics} are registered as part of the {@link JvmMetrics} like this:
    + * JVM Compilation metrics. The {@link JvmCompilationMetrics} are registered as part of the {@link
    + * JvmMetrics} like this:
    + *
      * 
    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    + * * However, if you want only the {@link JvmCompilationMetrics} you can also register them directly: + * *
    {@code
    - *   JvmCompilationMetrics.builder().register();
    + * JvmCompilationMetrics.builder().register();
      * }
    + * * Example metrics being exported: + * *
      * # HELP jvm_compilation_time_seconds_total The total time in seconds taken for HotSpot class compilation
      * # TYPE jvm_compilation_time_seconds_total counter
    @@ -28,62 +33,65 @@
      */
     public class JvmCompilationMetrics {
     
    -    private static final String JVM_COMPILATION_TIME_SECONDS_TOTAL = "jvm_compilation_time_seconds_total";
    -
    -    private final PrometheusProperties config;
    -    private final CompilationMXBean compilationBean;
    +  private static final String JVM_COMPILATION_TIME_SECONDS_TOTAL =
    +      "jvm_compilation_time_seconds_total";
     
    -    private JvmCompilationMetrics(CompilationMXBean compilationBean, PrometheusProperties config) {
    -        this.compilationBean = compilationBean;
    -        this.config = config;
    -    }
    +  private final PrometheusProperties config;
    +  private final CompilationMXBean compilationBean;
     
    -    private void register(PrometheusRegistry registry) {
    +  private JvmCompilationMetrics(CompilationMXBean compilationBean, PrometheusProperties config) {
    +    this.compilationBean = compilationBean;
    +    this.config = config;
    +  }
     
    -        if (compilationBean == null || !compilationBean.isCompilationTimeMonitoringSupported()) {
    -            return;
    -        }
    +  private void register(PrometheusRegistry registry) {
     
    -        CounterWithCallback.builder(config)
    -                .name(JVM_COMPILATION_TIME_SECONDS_TOTAL)
    -                .help("The total time in seconds taken for HotSpot class compilation")
    -                .unit(Unit.SECONDS)
    -                .callback(callback -> callback.call(millisToSeconds(compilationBean.getTotalCompilationTime())))
    -                .register(registry);
    +    if (compilationBean == null || !compilationBean.isCompilationTimeMonitoringSupported()) {
    +      return;
         }
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    -    }
    +    CounterWithCallback.builder(config)
    +        .name(JVM_COMPILATION_TIME_SECONDS_TOTAL)
    +        .help("The total time in seconds taken for HotSpot class compilation")
    +        .unit(Unit.SECONDS)
    +        .callback(
    +            callback -> callback.call(millisToSeconds(compilationBean.getTotalCompilationTime())))
    +        .register(registry);
    +  }
     
    -    public static Builder builder(PrometheusProperties config) {
    -        return new Builder(config);
    -    }
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
     
    -    public static class Builder {
    +  public static Builder builder(PrometheusProperties config) {
    +    return new Builder(config);
    +  }
     
    -        private final PrometheusProperties config;
    -        private CompilationMXBean compilationBean;
    +  public static class Builder {
     
    -        private Builder(PrometheusProperties config) {
    -            this.config = config;
    -        }
    +    private final PrometheusProperties config;
    +    private CompilationMXBean compilationBean;
     
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder compilationBean(CompilationMXBean compilationBean) {
    -            this.compilationBean = compilationBean;
    -            return this;
    -        }
    +    private Builder(PrometheusProperties config) {
    +      this.config = config;
    +    }
     
    -        public void register() {
    -            register(PrometheusRegistry.defaultRegistry);
    -        }
    +    /** Package private. For testing only. */
    +    Builder compilationBean(CompilationMXBean compilationBean) {
    +      this.compilationBean = compilationBean;
    +      return this;
    +    }
    +
    +    public void register() {
    +      register(PrometheusRegistry.defaultRegistry);
    +    }
     
    -        public void register(PrometheusRegistry registry) {
    -            CompilationMXBean compilationBean = this.compilationBean != null ? this.compilationBean : ManagementFactory.getCompilationMXBean();
    -            new JvmCompilationMetrics(compilationBean, config).register(registry);
    -        }
    +    public void register(PrometheusRegistry registry) {
    +      CompilationMXBean compilationBean =
    +          this.compilationBean != null
    +              ? this.compilationBean
    +              : ManagementFactory.getCompilationMXBean();
    +      new JvmCompilationMetrics(compilationBean, config).register(registry);
         }
    +  }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetrics.java
    index ab9877a85..e8b9aaa70 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetrics.java
    @@ -5,21 +5,27 @@
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
     import io.prometheus.metrics.model.snapshots.Quantiles;
     import io.prometheus.metrics.model.snapshots.Unit;
    -
     import java.lang.management.GarbageCollectorMXBean;
     import java.lang.management.ManagementFactory;
     import java.util.List;
     
     /**
    - * JVM Garbage Collector metrics. The {@link JvmGarbageCollectorMetrics} are registered as part of the {@link JvmMetrics} like this:
    + * JVM Garbage Collector metrics. The {@link JvmGarbageCollectorMetrics} are registered as part of
    + * the {@link JvmMetrics} like this:
    + *
      * 
    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    - * However, if you want only the {@link JvmGarbageCollectorMetrics} you can also register them directly: + * + * However, if you want only the {@link JvmGarbageCollectorMetrics} you can also register them + * directly: + * *
    {@code
    - *   JvmGarbageCollectorMetrics.builder().register();
    + * JvmGarbageCollectorMetrics.builder().register();
      * }
    + * * Example metrics being exported: + * *
      * # HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.
      * # TYPE jvm_gc_collection_seconds summary
    @@ -31,66 +37,70 @@
      */
     public class JvmGarbageCollectorMetrics {
     
    -    private static final String JVM_GC_COLLECTION_SECONDS = "jvm_gc_collection_seconds";
    +  private static final String JVM_GC_COLLECTION_SECONDS = "jvm_gc_collection_seconds";
    +
    +  private final PrometheusProperties config;
    +  private final List garbageCollectorBeans;
    +
    +  private JvmGarbageCollectorMetrics(
    +      List garbageCollectorBeans, PrometheusProperties config) {
    +    this.config = config;
    +    this.garbageCollectorBeans = garbageCollectorBeans;
    +  }
    +
    +  private void register(PrometheusRegistry registry) {
    +
    +    SummaryWithCallback.builder(config)
    +        .name(JVM_GC_COLLECTION_SECONDS)
    +        .help("Time spent in a given JVM garbage collector in seconds.")
    +        .unit(Unit.SECONDS)
    +        .labelNames("gc")
    +        .callback(
    +            callback -> {
    +              for (GarbageCollectorMXBean gc : garbageCollectorBeans) {
    +                callback.call(
    +                    gc.getCollectionCount(),
    +                    Unit.millisToSeconds(gc.getCollectionTime()),
    +                    Quantiles.EMPTY,
    +                    gc.getName());
    +              }
    +            })
    +        .register(registry);
    +  }
    +
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
    +
    +  public static Builder builder(PrometheusProperties config) {
    +    return new Builder(config);
    +  }
    +
    +  public static class Builder {
     
         private final PrometheusProperties config;
    -    private final List garbageCollectorBeans;
    +    private List garbageCollectorBeans;
     
    -    private JvmGarbageCollectorMetrics(List garbageCollectorBeans, PrometheusProperties config) {
    -        this.config = config;
    -        this.garbageCollectorBeans = garbageCollectorBeans;
    +    private Builder(PrometheusProperties config) {
    +      this.config = config;
         }
     
    -    private void register(PrometheusRegistry registry) {
    -
    -        SummaryWithCallback.builder(config)
    -                .name(JVM_GC_COLLECTION_SECONDS)
    -                .help("Time spent in a given JVM garbage collector in seconds.")
    -                .unit(Unit.SECONDS)
    -                .labelNames("gc")
    -                .callback(callback -> {
    -                    for (GarbageCollectorMXBean gc : garbageCollectorBeans) {
    -                        callback.call(gc.getCollectionCount(), Unit.millisToSeconds(gc.getCollectionTime()), Quantiles.EMPTY, gc.getName());
    -                    }
    -                })
    -                .register(registry);
    +    /** Package private. For testing only. */
    +    Builder garbageCollectorBeans(List garbageCollectorBeans) {
    +      this.garbageCollectorBeans = garbageCollectorBeans;
    +      return this;
         }
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    +    public void register() {
    +      register(PrometheusRegistry.defaultRegistry);
         }
     
    -    public static Builder builder(PrometheusProperties config) {
    -        return new Builder(config);
    -    }
    -
    -    public static class Builder {
    -
    -        private final PrometheusProperties config;
    -        private List garbageCollectorBeans;
    -
    -        private Builder(PrometheusProperties config) {
    -            this.config = config;
    -        }
    -
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder garbageCollectorBeans(List garbageCollectorBeans) {
    -            this.garbageCollectorBeans = garbageCollectorBeans;
    -            return this;
    -        }
    -
    -        public void register() {
    -            register(PrometheusRegistry.defaultRegistry);
    -        }
    -
    -        public void register(PrometheusRegistry registry) {
    -            List garbageCollectorBeans = this.garbageCollectorBeans;
    -            if (garbageCollectorBeans == null) {
    -                garbageCollectorBeans = ManagementFactory.getGarbageCollectorMXBeans();
    -            }
    -            new JvmGarbageCollectorMetrics(garbageCollectorBeans, config).register(registry);
    -        }
    +    public void register(PrometheusRegistry registry) {
    +      List garbageCollectorBeans = this.garbageCollectorBeans;
    +      if (garbageCollectorBeans == null) {
    +        garbageCollectorBeans = ManagementFactory.getGarbageCollectorMXBeans();
    +      }
    +      new JvmGarbageCollectorMetrics(garbageCollectorBeans, config).register(registry);
         }
    +  }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.java
    index 3e3b95efa..b0672aaf3 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.java
    @@ -4,7 +4,6 @@
     import io.prometheus.metrics.core.metrics.GaugeWithCallback;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
     import io.prometheus.metrics.model.snapshots.Unit;
    -
     import java.lang.management.ManagementFactory;
     import java.lang.management.MemoryMXBean;
     import java.lang.management.MemoryPoolMXBean;
    @@ -14,15 +13,21 @@
     import java.util.function.Function;
     
     /**
    - * JVM memory metrics. The {@link JvmMemoryMetrics} are registered as part of the {@link JvmMetrics} like this:
    + * JVM memory metrics. The {@link JvmMemoryMetrics} are registered as part of the {@link JvmMetrics}
    + * like this:
    + *
      * 
    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    + * * However, if you want only the {@link JvmMemoryMetrics} you can also register them directly: + * *
    {@code
    - *   JvmMemoryMetrics.builder().register();
    + * JvmMemoryMetrics.builder().register();
      * }
    + * * Example metrics being exported: + * *
      * # HELP jvm_memory_committed_bytes Committed (bytes) of a given JVM memory area.
      * # TYPE jvm_memory_committed_bytes gauge
    @@ -99,200 +104,216 @@
      */
     public class JvmMemoryMetrics {
     
    -    private static final String JVM_MEMORY_OBJECTS_PENDING_FINALIZATION = "jvm_memory_objects_pending_finalization";
    -    private static final String JVM_MEMORY_USED_BYTES = "jvm_memory_used_bytes";
    -    private static final String JVM_MEMORY_COMMITTED_BYTES = "jvm_memory_committed_bytes";
    -    private static final String JVM_MEMORY_MAX_BYTES = "jvm_memory_max_bytes";
    -    private static final String JVM_MEMORY_INIT_BYTES = "jvm_memory_init_bytes";
    -    private static final String JVM_MEMORY_POOL_USED_BYTES = "jvm_memory_pool_used_bytes";
    -    private static final String JVM_MEMORY_POOL_COMMITTED_BYTES = "jvm_memory_pool_committed_bytes";
    -    private static final String JVM_MEMORY_POOL_MAX_BYTES = "jvm_memory_pool_max_bytes";
    -    private static final String JVM_MEMORY_POOL_INIT_BYTES = "jvm_memory_pool_init_bytes";
    -    private static final String JVM_MEMORY_POOL_COLLECTION_USED_BYTES = "jvm_memory_pool_collection_used_bytes";
    -    private static final String JVM_MEMORY_POOL_COLLECTION_COMMITTED_BYTES = "jvm_memory_pool_collection_committed_bytes";
    -    private static final String JVM_MEMORY_POOL_COLLECTION_MAX_BYTES = "jvm_memory_pool_collection_max_bytes";
    -    private static final String JVM_MEMORY_POOL_COLLECTION_INIT_BYTES = "jvm_memory_pool_collection_init_bytes";
    +  private static final String JVM_MEMORY_OBJECTS_PENDING_FINALIZATION =
    +      "jvm_memory_objects_pending_finalization";
    +  private static final String JVM_MEMORY_USED_BYTES = "jvm_memory_used_bytes";
    +  private static final String JVM_MEMORY_COMMITTED_BYTES = "jvm_memory_committed_bytes";
    +  private static final String JVM_MEMORY_MAX_BYTES = "jvm_memory_max_bytes";
    +  private static final String JVM_MEMORY_INIT_BYTES = "jvm_memory_init_bytes";
    +  private static final String JVM_MEMORY_POOL_USED_BYTES = "jvm_memory_pool_used_bytes";
    +  private static final String JVM_MEMORY_POOL_COMMITTED_BYTES = "jvm_memory_pool_committed_bytes";
    +  private static final String JVM_MEMORY_POOL_MAX_BYTES = "jvm_memory_pool_max_bytes";
    +  private static final String JVM_MEMORY_POOL_INIT_BYTES = "jvm_memory_pool_init_bytes";
    +  private static final String JVM_MEMORY_POOL_COLLECTION_USED_BYTES =
    +      "jvm_memory_pool_collection_used_bytes";
    +  private static final String JVM_MEMORY_POOL_COLLECTION_COMMITTED_BYTES =
    +      "jvm_memory_pool_collection_committed_bytes";
    +  private static final String JVM_MEMORY_POOL_COLLECTION_MAX_BYTES =
    +      "jvm_memory_pool_collection_max_bytes";
    +  private static final String JVM_MEMORY_POOL_COLLECTION_INIT_BYTES =
    +      "jvm_memory_pool_collection_init_bytes";
     
    -    private final PrometheusProperties config;
    -    private final MemoryMXBean memoryBean;
    -    private final List poolBeans;
    +  private final PrometheusProperties config;
    +  private final MemoryMXBean memoryBean;
    +  private final List poolBeans;
     
    -    private JvmMemoryMetrics(List poolBeans, MemoryMXBean memoryBean, PrometheusProperties config) {
    -        this.config = config;
    -        this.poolBeans = poolBeans;
    -        this.memoryBean = memoryBean;
    -    }
    +  private JvmMemoryMetrics(
    +      List poolBeans, MemoryMXBean memoryBean, PrometheusProperties config) {
    +    this.config = config;
    +    this.poolBeans = poolBeans;
    +    this.memoryBean = memoryBean;
    +  }
     
    -    private void register(PrometheusRegistry registry) {
    +  private void register(PrometheusRegistry registry) {
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_OBJECTS_PENDING_FINALIZATION)
    -                .help("The number of objects waiting in the finalizer queue.")
    -                .callback(callback -> callback.call(memoryBean.getObjectPendingFinalizationCount()))
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_OBJECTS_PENDING_FINALIZATION)
    +        .help("The number of objects waiting in the finalizer queue.")
    +        .callback(callback -> callback.call(memoryBean.getObjectPendingFinalizationCount()))
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_USED_BYTES)
    -                .help("Used bytes of a given JVM memory area.")
    -                .unit(Unit.BYTES)
    -                .labelNames("area")
    -                .callback(callback -> {
    -                    callback.call(memoryBean.getHeapMemoryUsage().getUsed(), "heap");
    -                    callback.call(memoryBean.getNonHeapMemoryUsage().getUsed(), "nonheap");
    -                })
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_USED_BYTES)
    +        .help("Used bytes of a given JVM memory area.")
    +        .unit(Unit.BYTES)
    +        .labelNames("area")
    +        .callback(
    +            callback -> {
    +              callback.call(memoryBean.getHeapMemoryUsage().getUsed(), "heap");
    +              callback.call(memoryBean.getNonHeapMemoryUsage().getUsed(), "nonheap");
    +            })
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_COMMITTED_BYTES)
    -                .help("Committed (bytes) of a given JVM memory area.")
    -                .unit(Unit.BYTES)
    -                .labelNames("area")
    -                .callback(callback -> {
    -                    callback.call(memoryBean.getHeapMemoryUsage().getCommitted(), "heap");
    -                    callback.call(memoryBean.getNonHeapMemoryUsage().getCommitted(), "nonheap");
    -                })
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_COMMITTED_BYTES)
    +        .help("Committed (bytes) of a given JVM memory area.")
    +        .unit(Unit.BYTES)
    +        .labelNames("area")
    +        .callback(
    +            callback -> {
    +              callback.call(memoryBean.getHeapMemoryUsage().getCommitted(), "heap");
    +              callback.call(memoryBean.getNonHeapMemoryUsage().getCommitted(), "nonheap");
    +            })
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_MAX_BYTES)
    -                .help("Max (bytes) of a given JVM memory area.")
    -                .unit(Unit.BYTES)
    -                .labelNames("area")
    -                .callback(callback -> {
    -                    callback.call(memoryBean.getHeapMemoryUsage().getMax(), "heap");
    -                    callback.call(memoryBean.getNonHeapMemoryUsage().getMax(), "nonheap");
    -                })
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_MAX_BYTES)
    +        .help("Max (bytes) of a given JVM memory area.")
    +        .unit(Unit.BYTES)
    +        .labelNames("area")
    +        .callback(
    +            callback -> {
    +              callback.call(memoryBean.getHeapMemoryUsage().getMax(), "heap");
    +              callback.call(memoryBean.getNonHeapMemoryUsage().getMax(), "nonheap");
    +            })
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_INIT_BYTES)
    -                .help("Initial bytes of a given JVM memory area.")
    -                .unit(Unit.BYTES)
    -                .labelNames("area")
    -                .callback(callback -> {
    -                    callback.call(memoryBean.getHeapMemoryUsage().getInit(), "heap");
    -                    callback.call(memoryBean.getNonHeapMemoryUsage().getInit(), "nonheap");
    -                })
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_INIT_BYTES)
    +        .help("Initial bytes of a given JVM memory area.")
    +        .unit(Unit.BYTES)
    +        .labelNames("area")
    +        .callback(
    +            callback -> {
    +              callback.call(memoryBean.getHeapMemoryUsage().getInit(), "heap");
    +              callback.call(memoryBean.getNonHeapMemoryUsage().getInit(), "nonheap");
    +            })
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_POOL_USED_BYTES)
    -                .help("Used bytes of a given JVM memory pool.")
    -                .unit(Unit.BYTES)
    -                .labelNames("pool")
    -                .callback(makeCallback(poolBeans, MemoryPoolMXBean::getUsage, MemoryUsage::getUsed))
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_POOL_USED_BYTES)
    +        .help("Used bytes of a given JVM memory pool.")
    +        .unit(Unit.BYTES)
    +        .labelNames("pool")
    +        .callback(makeCallback(poolBeans, MemoryPoolMXBean::getUsage, MemoryUsage::getUsed))
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_POOL_COMMITTED_BYTES)
    -                .help("Committed bytes of a given JVM memory pool.")
    -                .unit(Unit.BYTES)
    -                .labelNames("pool")
    -                .callback(makeCallback(poolBeans, MemoryPoolMXBean::getUsage, MemoryUsage::getCommitted))
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_POOL_COMMITTED_BYTES)
    +        .help("Committed bytes of a given JVM memory pool.")
    +        .unit(Unit.BYTES)
    +        .labelNames("pool")
    +        .callback(makeCallback(poolBeans, MemoryPoolMXBean::getUsage, MemoryUsage::getCommitted))
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_POOL_MAX_BYTES)
    -                .help("Max bytes of a given JVM memory pool.")
    -                .unit(Unit.BYTES)
    -                .labelNames("pool")
    -                .callback(makeCallback(poolBeans, MemoryPoolMXBean::getUsage, MemoryUsage::getMax))
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_POOL_MAX_BYTES)
    +        .help("Max bytes of a given JVM memory pool.")
    +        .unit(Unit.BYTES)
    +        .labelNames("pool")
    +        .callback(makeCallback(poolBeans, MemoryPoolMXBean::getUsage, MemoryUsage::getMax))
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_POOL_INIT_BYTES)
    -                .help("Initial bytes of a given JVM memory pool.")
    -                .unit(Unit.BYTES)
    -                .labelNames("pool")
    -                .callback(makeCallback(poolBeans, MemoryPoolMXBean::getUsage, MemoryUsage::getInit))
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_POOL_INIT_BYTES)
    +        .help("Initial bytes of a given JVM memory pool.")
    +        .unit(Unit.BYTES)
    +        .labelNames("pool")
    +        .callback(makeCallback(poolBeans, MemoryPoolMXBean::getUsage, MemoryUsage::getInit))
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_POOL_COLLECTION_USED_BYTES)
    -                .help("Used bytes after last collection of a given JVM memory pool.")
    -                .unit(Unit.BYTES)
    -                .labelNames("pool")
    -                .callback(makeCallback(poolBeans, MemoryPoolMXBean::getCollectionUsage, MemoryUsage::getUsed))
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_POOL_COLLECTION_USED_BYTES)
    +        .help("Used bytes after last collection of a given JVM memory pool.")
    +        .unit(Unit.BYTES)
    +        .labelNames("pool")
    +        .callback(
    +            makeCallback(poolBeans, MemoryPoolMXBean::getCollectionUsage, MemoryUsage::getUsed))
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_POOL_COLLECTION_COMMITTED_BYTES)
    -                .help("Committed after last collection bytes of a given JVM memory pool.")
    -                .unit(Unit.BYTES)
    -                .labelNames("pool")
    -                .callback(makeCallback(poolBeans, MemoryPoolMXBean::getCollectionUsage, MemoryUsage::getCommitted))
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_POOL_COLLECTION_COMMITTED_BYTES)
    +        .help("Committed after last collection bytes of a given JVM memory pool.")
    +        .unit(Unit.BYTES)
    +        .labelNames("pool")
    +        .callback(
    +            makeCallback(
    +                poolBeans, MemoryPoolMXBean::getCollectionUsage, MemoryUsage::getCommitted))
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_POOL_COLLECTION_MAX_BYTES)
    -                .help("Max bytes after last collection of a given JVM memory pool.")
    -                .unit(Unit.BYTES)
    -                .labelNames("pool")
    -                .callback(makeCallback(poolBeans, MemoryPoolMXBean::getCollectionUsage, MemoryUsage::getMax))
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_POOL_COLLECTION_MAX_BYTES)
    +        .help("Max bytes after last collection of a given JVM memory pool.")
    +        .unit(Unit.BYTES)
    +        .labelNames("pool")
    +        .callback(
    +            makeCallback(poolBeans, MemoryPoolMXBean::getCollectionUsage, MemoryUsage::getMax))
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_MEMORY_POOL_COLLECTION_INIT_BYTES)
    -                .help("Initial after last collection bytes of a given JVM memory pool.")
    -                .unit(Unit.BYTES)
    -                .labelNames("pool")
    -                .callback(makeCallback(poolBeans, MemoryPoolMXBean::getCollectionUsage, MemoryUsage::getInit))
    -                .register(registry);
    -    }
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_MEMORY_POOL_COLLECTION_INIT_BYTES)
    +        .help("Initial after last collection bytes of a given JVM memory pool.")
    +        .unit(Unit.BYTES)
    +        .labelNames("pool")
    +        .callback(
    +            makeCallback(poolBeans, MemoryPoolMXBean::getCollectionUsage, MemoryUsage::getInit))
    +        .register(registry);
    +  }
     
    -    private Consumer makeCallback(List poolBeans, Function memoryUsageFunc, Function valueFunc) {
    -        return callback -> {
    -            for (MemoryPoolMXBean pool : poolBeans) {
    -                MemoryUsage poolUsage = memoryUsageFunc.apply(pool);
    -                if (poolUsage != null) {
    -                    callback.call(valueFunc.apply(poolUsage), pool.getName());
    -                }
    -            }
    -        };
    -    }
    +  private Consumer makeCallback(
    +      List poolBeans,
    +      Function memoryUsageFunc,
    +      Function valueFunc) {
    +    return callback -> {
    +      for (MemoryPoolMXBean pool : poolBeans) {
    +        MemoryUsage poolUsage = memoryUsageFunc.apply(pool);
    +        if (poolUsage != null) {
    +          callback.call(valueFunc.apply(poolUsage), pool.getName());
    +        }
    +      }
    +    };
    +  }
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    -    }
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
     
    -    public static Builder builder(PrometheusProperties config) {
    -        return new Builder(config);
    -    }
    +  public static Builder builder(PrometheusProperties config) {
    +    return new Builder(config);
    +  }
     
    -    public static class Builder {
    +  public static class Builder {
     
    -        private final PrometheusProperties config;
    -        private MemoryMXBean memoryBean;
    -        private List poolBeans;
    +    private final PrometheusProperties config;
    +    private MemoryMXBean memoryBean;
    +    private List poolBeans;
     
    -        private Builder(PrometheusProperties config) {
    -            this.config = config;
    -        }
    +    private Builder(PrometheusProperties config) {
    +      this.config = config;
    +    }
     
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder withMemoryBean(MemoryMXBean memoryBean) {
    -            this.memoryBean = memoryBean;
    -            return this;
    -        }
    +    /** Package private. For testing only. */
    +    Builder withMemoryBean(MemoryMXBean memoryBean) {
    +      this.memoryBean = memoryBean;
    +      return this;
    +    }
     
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder withMemoryPoolBeans(List memoryPoolBeans) {
    -            this.poolBeans = memoryPoolBeans;
    -            return this;
    -        }
    +    /** Package private. For testing only. */
    +    Builder withMemoryPoolBeans(List memoryPoolBeans) {
    +      this.poolBeans = memoryPoolBeans;
    +      return this;
    +    }
     
    -        public void register() {
    -            register(PrometheusRegistry.defaultRegistry);
    -        }
    +    public void register() {
    +      register(PrometheusRegistry.defaultRegistry);
    +    }
     
    -        public void register(PrometheusRegistry registry) {
    -            MemoryMXBean memoryMXBean = this.memoryBean != null ? this.memoryBean : ManagementFactory.getMemoryMXBean();
    -            List poolBeans = this.poolBeans != null ? this.poolBeans : ManagementFactory.getMemoryPoolMXBeans();
    -            new JvmMemoryMetrics(poolBeans, memoryMXBean, config).register(registry);
    -        }
    +    public void register(PrometheusRegistry registry) {
    +      MemoryMXBean memoryMXBean =
    +          this.memoryBean != null ? this.memoryBean : ManagementFactory.getMemoryMXBean();
    +      List poolBeans =
    +          this.poolBeans != null ? this.poolBeans : ManagementFactory.getMemoryPoolMXBeans();
    +      new JvmMemoryMetrics(poolBeans, memoryMXBean, config).register(registry);
         }
    +  }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java
    index 522a2ef81..09aab0659 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java
    @@ -5,28 +5,34 @@
     import io.prometheus.metrics.config.PrometheusProperties;
     import io.prometheus.metrics.core.metrics.Counter;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
    -
    -import javax.management.Notification;
    -import javax.management.NotificationEmitter;
    -import javax.management.NotificationListener;
    -import javax.management.openmbean.CompositeData;
     import java.lang.management.GarbageCollectorMXBean;
     import java.lang.management.ManagementFactory;
     import java.lang.management.MemoryUsage;
     import java.util.HashMap;
     import java.util.List;
     import java.util.Map;
    +import javax.management.Notification;
    +import javax.management.NotificationEmitter;
    +import javax.management.NotificationListener;
    +import javax.management.openmbean.CompositeData;
     
     /**
    - * JVM memory allocation metrics. The {@link JvmMemoryPoolAllocationMetrics} are registered as part of the {@link JvmMetrics} like this:
    + * JVM memory allocation metrics. The {@link JvmMemoryPoolAllocationMetrics} are registered as part
    + * of the {@link JvmMetrics} like this:
    + *
      * 
    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    - * However, if you want only the {@link JvmMemoryPoolAllocationMetrics} you can also register them directly: + * + * However, if you want only the {@link JvmMemoryPoolAllocationMetrics} you can also register them + * directly: + * *
    {@code
    - *   JvmMemoryAllocationMetrics.builder().register();
    + * JvmMemoryAllocationMetrics.builder().register();
      * }
    + * * Example metrics being exported: + * *
      * # HELP jvm_memory_pool_allocated_bytes_total Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.
      * # TYPE jvm_memory_pool_allocated_bytes_total counter
    @@ -40,131 +46,136 @@
      */
     public class JvmMemoryPoolAllocationMetrics {
     
    -    private static final String JVM_MEMORY_POOL_ALLOCATED_BYTES_TOTAL = "jvm_memory_pool_allocated_bytes_total";
    +  private static final String JVM_MEMORY_POOL_ALLOCATED_BYTES_TOTAL =
    +      "jvm_memory_pool_allocated_bytes_total";
    +
    +  private final PrometheusProperties config;
    +  private final List garbageCollectorBeans;
    +
    +  private JvmMemoryPoolAllocationMetrics(
    +      List garbageCollectorBeans, PrometheusProperties config) {
    +    this.garbageCollectorBeans = garbageCollectorBeans;
    +    this.config = config;
    +  }
    +
    +  private void register(PrometheusRegistry registry) {
    +
    +    Counter allocatedCounter =
    +        Counter.builder()
    +            .name(JVM_MEMORY_POOL_ALLOCATED_BYTES_TOTAL)
    +            .help(
    +                "Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.")
    +            .labelNames("pool")
    +            .register(registry);
    +
    +    AllocationCountingNotificationListener listener =
    +        new AllocationCountingNotificationListener(allocatedCounter);
    +    for (GarbageCollectorMXBean garbageCollectorMXBean : garbageCollectorBeans) {
    +      if (garbageCollectorMXBean instanceof NotificationEmitter) {
    +        ((NotificationEmitter) garbageCollectorMXBean)
    +            .addNotificationListener(listener, null, null);
    +      }
    +    }
    +  }
     
    -    private final PrometheusProperties config;
    -    private final List garbageCollectorBeans;
    +  static class AllocationCountingNotificationListener implements NotificationListener {
    +
    +    private final Map lastMemoryUsage = new HashMap();
    +    private final Counter counter;
     
    -    private JvmMemoryPoolAllocationMetrics(List garbageCollectorBeans, PrometheusProperties config) {
    -        this.garbageCollectorBeans = garbageCollectorBeans;
    -        this.config = config;
    +    AllocationCountingNotificationListener(Counter counter) {
    +      this.counter = counter;
         }
     
    -    private void register(PrometheusRegistry registry) {
    +    @Override
    +    public synchronized void handleNotification(Notification notification, Object handback) {
    +      GarbageCollectionNotificationInfo info =
    +          GarbageCollectionNotificationInfo.from((CompositeData) notification.getUserData());
    +      GcInfo gcInfo = info.getGcInfo();
    +      Map memoryUsageBeforeGc = gcInfo.getMemoryUsageBeforeGc();
    +      Map memoryUsageAfterGc = gcInfo.getMemoryUsageAfterGc();
    +      for (Map.Entry entry : memoryUsageBeforeGc.entrySet()) {
    +        String memoryPool = entry.getKey();
    +        long before = entry.getValue().getUsed();
    +        long after = memoryUsageAfterGc.get(memoryPool).getUsed();
    +        handleMemoryPool(memoryPool, before, after);
    +      }
    +    }
     
    -        Counter allocatedCounter = Counter.builder()
    -                .name(JVM_MEMORY_POOL_ALLOCATED_BYTES_TOTAL)
    -                .help("Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.")
    -                .labelNames("pool")
    -                .register(registry);
    +    // Visible for testing
    +    void handleMemoryPool(String memoryPool, long before, long after) {
    +      /*
    +       * Calculate increase in the memory pool by comparing memory used
    +       * after last GC, before this GC, and after this GC.
    +       * See ascii illustration below.
    +       * Make sure to count only increases and ignore decreases.
    +       * (Typically a pool will only increase between GCs or during GCs, not both.
    +       * E.g. eden pools between GCs. Survivor and old generation pools during GCs.)
    +       *
    +       *                         |<-- diff1 -->|<-- diff2 -->|
    +       * Timeline: |-- last GC --|             |---- GC -----|
    +       *                      ___^__        ___^____      ___^___
    +       * Mem. usage vars:    / last \      / before \    / after \
    +       */
    +
    +      // Get last memory usage after GC and remember memory used after for next time
    +      long last = getAndSet(lastMemoryUsage, memoryPool, after);
    +      // Difference since last GC
    +      long diff1 = before - last;
    +      // Difference during this GC
    +      long diff2 = after - before;
    +      // Make sure to only count increases
    +      if (diff1 < 0) {
    +        diff1 = 0;
    +      }
    +      if (diff2 < 0) {
    +        diff2 = 0;
    +      }
    +      long increase = diff1 + diff2;
    +      if (increase > 0) {
    +        counter.labelValues(memoryPool).inc(increase);
    +      }
    +    }
     
    -        AllocationCountingNotificationListener listener = new AllocationCountingNotificationListener(allocatedCounter);
    -        for (GarbageCollectorMXBean garbageCollectorMXBean : garbageCollectorBeans) {
    -            if (garbageCollectorMXBean instanceof NotificationEmitter) {
    -                ((NotificationEmitter) garbageCollectorMXBean).addNotificationListener(listener, null, null);
    -            }
    -        }
    +    private static long getAndSet(Map map, String key, long value) {
    +      Long last = map.put(key, value);
    +      return last == null ? 0 : last;
         }
    +  }
    +
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
    +
    +  public static Builder builder(PrometheusProperties config) {
    +    return new Builder(config);
    +  }
    +
    +  public static class Builder {
    +
    +    private final PrometheusProperties config;
    +    private List garbageCollectorBeans;
     
    -    static class AllocationCountingNotificationListener implements NotificationListener {
    -
    -        private final Map lastMemoryUsage = new HashMap();
    -        private final Counter counter;
    -
    -        AllocationCountingNotificationListener(Counter counter) {
    -            this.counter = counter;
    -        }
    -
    -        @Override
    -        public synchronized void handleNotification(Notification notification, Object handback) {
    -            GarbageCollectionNotificationInfo info = GarbageCollectionNotificationInfo.from((CompositeData) notification.getUserData());
    -            GcInfo gcInfo = info.getGcInfo();
    -            Map memoryUsageBeforeGc = gcInfo.getMemoryUsageBeforeGc();
    -            Map memoryUsageAfterGc = gcInfo.getMemoryUsageAfterGc();
    -            for (Map.Entry entry : memoryUsageBeforeGc.entrySet()) {
    -                String memoryPool = entry.getKey();
    -                long before = entry.getValue().getUsed();
    -                long after = memoryUsageAfterGc.get(memoryPool).getUsed();
    -                handleMemoryPool(memoryPool, before, after);
    -            }
    -        }
    -
    -        // Visible for testing
    -        void handleMemoryPool(String memoryPool, long before, long after) {
    -            /*
    -             * Calculate increase in the memory pool by comparing memory used
    -             * after last GC, before this GC, and after this GC.
    -             * See ascii illustration below.
    -             * Make sure to count only increases and ignore decreases.
    -             * (Typically a pool will only increase between GCs or during GCs, not both.
    -             * E.g. eden pools between GCs. Survivor and old generation pools during GCs.)
    -             *
    -             *                         |<-- diff1 -->|<-- diff2 -->|
    -             * Timeline: |-- last GC --|             |---- GC -----|
    -             *                      ___^__        ___^____      ___^___
    -             * Mem. usage vars:    / last \      / before \    / after \
    -             */
    -
    -            // Get last memory usage after GC and remember memory used after for next time
    -            long last = getAndSet(lastMemoryUsage, memoryPool, after);
    -            // Difference since last GC
    -            long diff1 = before - last;
    -            // Difference during this GC
    -            long diff2 = after - before;
    -            // Make sure to only count increases
    -            if (diff1 < 0) {
    -                diff1 = 0;
    -            }
    -            if (diff2 < 0) {
    -                diff2 = 0;
    -            }
    -            long increase = diff1 + diff2;
    -            if (increase > 0) {
    -                counter.labelValues(memoryPool).inc(increase);
    -            }
    -        }
    -
    -        private static long getAndSet(Map map, String key, long value) {
    -            Long last = map.put(key, value);
    -            return last == null ? 0 : last;
    -        }
    +    private Builder(PrometheusProperties config) {
    +      this.config = config;
         }
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    +    /** Package private. For testing only. */
    +    Builder withGarbageCollectorBeans(List garbageCollectorBeans) {
    +      this.garbageCollectorBeans = garbageCollectorBeans;
    +      return this;
         }
     
    -    public static Builder builder(PrometheusProperties config) {
    -        return new Builder(config);
    +    public void register() {
    +      register(PrometheusRegistry.defaultRegistry);
         }
     
    -    public static class Builder {
    -
    -        private final PrometheusProperties config;
    -        private List garbageCollectorBeans;
    -
    -        private Builder(PrometheusProperties config) {
    -            this.config = config;
    -        }
    -
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder withGarbageCollectorBeans(List garbageCollectorBeans) {
    -            this.garbageCollectorBeans = garbageCollectorBeans;
    -            return this;
    -        }
    -
    -        public void register() {
    -            register(PrometheusRegistry.defaultRegistry);
    -        }
    -
    -        public void register(PrometheusRegistry registry) {
    -            List garbageCollectorBeans = this.garbageCollectorBeans;
    -            if (garbageCollectorBeans == null) {
    -                garbageCollectorBeans = ManagementFactory.getGarbageCollectorMXBeans();
    -            }
    -            new JvmMemoryPoolAllocationMetrics(garbageCollectorBeans, config).register(registry);
    -        }
    +    public void register(PrometheusRegistry registry) {
    +      List garbageCollectorBeans = this.garbageCollectorBeans;
    +      if (garbageCollectorBeans == null) {
    +        garbageCollectorBeans = ManagementFactory.getGarbageCollectorMXBeans();
    +      }
    +      new JvmMemoryPoolAllocationMetrics(garbageCollectorBeans, config).register(registry);
         }
    +  }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java
    index 54d937688..0f5a56eee 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMetrics.java
    @@ -2,67 +2,70 @@
     
     import io.prometheus.metrics.config.PrometheusProperties;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
    -
     import java.util.Set;
     import java.util.concurrent.ConcurrentHashMap;
     
     /**
      * Registers all JVM metrics. Example usage:
    + *
      * 
    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    */ public class JvmMetrics { - private static final Set REGISTERED = ConcurrentHashMap.newKeySet(); - public static Builder builder() { - return new Builder(PrometheusProperties.get()); - } + private static final Set REGISTERED = ConcurrentHashMap.newKeySet(); - // Note: Currently there is no configuration for JVM metrics, so it doesn't matter whether you pass a config or not. - // However, we will add config options in the future, like whether you want to use Prometheus naming conventions - // or OpenTelemetry semantic conventions for JVM metrics. - public static Builder builder(PrometheusProperties config) { - return new Builder(config); - } + public static Builder builder() { + return new Builder(PrometheusProperties.get()); + } - public static class Builder { + // Note: Currently there is no configuration for JVM metrics, so it doesn't matter whether you + // pass a config or not. + // However, we will add config options in the future, like whether you want to use Prometheus + // naming conventions + // or OpenTelemetry semantic conventions for JVM metrics. + public static Builder builder(PrometheusProperties config) { + return new Builder(config); + } - private final PrometheusProperties config; + public static class Builder { - private Builder(PrometheusProperties config) { - this.config = config; - } + private final PrometheusProperties config; - /** - * Register all JVM metrics with the default registry. - *

    - * It's safe to call this multiple times, only the first call will register the metrics, all subsequent calls - * will be ignored. - */ - public void register() { - register(PrometheusRegistry.defaultRegistry); - } + private Builder(PrometheusProperties config) { + this.config = config; + } + + /** + * Register all JVM metrics with the default registry. + * + *

    It's safe to call this multiple times, only the first call will register the metrics, all + * subsequent calls will be ignored. + */ + public void register() { + register(PrometheusRegistry.defaultRegistry); + } - /** - * Register all JVM metrics with the {@code registry}. - *

    - * It's safe to call this multiple times, only the first call will register the metrics, all subsequent calls - * will be ignored. - */ - public void register(PrometheusRegistry registry) { - if (REGISTERED.add(registry)) { - JvmThreadsMetrics.builder(config).register(registry); - JvmBufferPoolMetrics.builder(config).register(registry); - JvmClassLoadingMetrics.builder(config).register(registry); - JvmCompilationMetrics.builder(config).register(registry); - JvmGarbageCollectorMetrics.builder(config).register(registry); - JvmMemoryPoolAllocationMetrics.builder(config).register(registry); - JvmMemoryMetrics.builder(config).register(registry); - JvmNativeMemoryMetrics.builder(config).register(registry); - JvmRuntimeInfoMetric.builder(config).register(registry); - ProcessMetrics.builder(config).register(registry); - } - } + /** + * Register all JVM metrics with the {@code registry}. + * + *

    It's safe to call this multiple times, only the first call will register the metrics, all + * subsequent calls will be ignored. + */ + public void register(PrometheusRegistry registry) { + if (REGISTERED.add(registry)) { + JvmThreadsMetrics.builder(config).register(registry); + JvmBufferPoolMetrics.builder(config).register(registry); + JvmClassLoadingMetrics.builder(config).register(registry); + JvmCompilationMetrics.builder(config).register(registry); + JvmGarbageCollectorMetrics.builder(config).register(registry); + JvmMemoryPoolAllocationMetrics.builder(config).register(registry); + JvmMemoryMetrics.builder(config).register(registry); + JvmNativeMemoryMetrics.builder(config).register(registry); + JvmRuntimeInfoMetric.builder(config).register(registry); + ProcessMetrics.builder(config).register(registry); + } } + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java index 8e60a31d9..4f02823f1 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java @@ -4,34 +4,41 @@ import io.prometheus.metrics.core.metrics.GaugeWithCallback; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.Unit; - -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.ReflectionException; import java.lang.management.ManagementFactory; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.management.InstanceNotFoundException; +import javax.management.MBeanException; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.management.ReflectionException; /** - * JVM native memory. JVM native memory tracking is disabled by default. You need to enable it by starting your JVM with this flag: + * JVM native memory. JVM native memory tracking is disabled by default. You need to enable it by + * starting your JVM with this flag: + * *

    -XX:NativeMemoryTracking=summary
    + * + *

    When native memory tracking is disabled the metrics are not registered either. + * *

    - * When native memory tracking is disabled the metrics are not registered either. - *

    - *

    - * The {@link JvmNativeMemoryMetrics} are registered as part of the {@link JvmMetrics} like this: + * + *

    The {@link JvmNativeMemoryMetrics} are registered as part of the {@link JvmMetrics} like this: + * *

    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    + * * However, if you want only the {@link JvmNativeMemoryMetrics} you can also register them directly: + * *
    {@code
    - *   JvmNativeMemoryMetrics.builder().register();
    + * JvmNativeMemoryMetrics.builder().register();
      * }
    + * * Example metrics being exported: + * *
      * # HELP jvm_native_memory_committed_bytes Committed bytes of a given JVM. Committed memory represents the amount of memory the JVM is using right now.
      * # TYPE jvm_native_memory_committed_bytes gauge
    @@ -79,13 +86,13 @@
      */
     public class JvmNativeMemoryMetrics {
       private static final String JVM_NATIVE_MEMORY_RESERVED_BYTES = "jvm_native_memory_reserved_bytes";
    -  private static final String JVM_NATIVE_MEMORY_COMMITTED_BYTES = "jvm_native_memory_committed_bytes";
    +  private static final String JVM_NATIVE_MEMORY_COMMITTED_BYTES =
    +      "jvm_native_memory_committed_bytes";
     
    -  private static final Pattern pattern = Pattern.compile("\\s*([A-Z][A-Za-z\\s]*[A-Za-z]+).*reserved=(\\d+), committed=(\\d+)");
    +  private static final Pattern pattern =
    +      Pattern.compile("\\s*([A-Z][A-Za-z\\s]*[A-Za-z]+).*reserved=(\\d+), committed=(\\d+)");
     
    -  /**
    -   * Package private. For testing only.
    -   */
    +  /** Package private. For testing only. */
       static final AtomicBoolean isEnabled = new AtomicBoolean(true);
     
       private final PrometheusProperties config;
    @@ -102,7 +109,8 @@ private void register(PrometheusRegistry registry) {
         if (isEnabled.get()) {
           GaugeWithCallback.builder(config)
               .name(JVM_NATIVE_MEMORY_RESERVED_BYTES)
    -          .help("Reserved bytes of a given JVM. Reserved memory represents the total amount of memory the JVM can potentially use.")
    +          .help(
    +              "Reserved bytes of a given JVM. Reserved memory represents the total amount of memory the JVM can potentially use.")
               .unit(Unit.BYTES)
               .labelNames("pool")
               .callback(makeCallback(true))
    @@ -110,7 +118,8 @@ private void register(PrometheusRegistry registry) {
     
           GaugeWithCallback.builder(config)
               .name(JVM_NATIVE_MEMORY_COMMITTED_BYTES)
    -          .help("Committed bytes of a given JVM. Committed memory represents the amount of memory the JVM is using right now.")
    +          .help(
    +              "Committed bytes of a given JVM. Committed memory represents the amount of memory the JVM is using right now.")
               .unit(Unit.BYTES)
               .labelNames("pool")
               .callback(makeCallback(false))
    @@ -165,12 +174,17 @@ static class DefaultPlatformMBeanServerAdapter implements PlatformMBeanServerAda
         @Override
         public String vmNativeMemorySummaryInBytes() {
           try {
    -        return (String) ManagementFactory.getPlatformMBeanServer().invoke(
    -            new ObjectName("com.sun.management:type=DiagnosticCommand"),
    -            "vmNativeMemory",
    -            new Object[]{new String[]{"summary", "scale=B"}},
    -            new String[]{"[Ljava.lang.String;"});
    -      } catch (ReflectionException | MalformedObjectNameException | InstanceNotFoundException | MBeanException e) {
    +        return (String)
    +            ManagementFactory.getPlatformMBeanServer()
    +                .invoke(
    +                    new ObjectName("com.sun.management:type=DiagnosticCommand"),
    +                    "vmNativeMemory",
    +                    new Object[] {new String[] {"summary", "scale=B"}},
    +                    new String[] {"[Ljava.lang.String;"});
    +      } catch (ReflectionException
    +          | MalformedObjectNameException
    +          | InstanceNotFoundException
    +          | MBeanException e) {
             throw new IllegalStateException("Native memory tracking is not enabled", e);
           }
         }
    @@ -193,9 +207,7 @@ private Builder(PrometheusProperties config) {
           this(config, new DefaultPlatformMBeanServerAdapter());
         }
     
    -    /**
    -     * Package private. For testing only.
    -     */
    +    /** Package private. For testing only. */
         Builder(PrometheusProperties config, PlatformMBeanServerAdapter adapter) {
           this.config = config;
           this.adapter = adapter;
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetric.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetric.java
    index c7024b14e..333395425 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetric.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetric.java
    @@ -5,13 +5,17 @@
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
     
     /**
    - * JVM Runtime Info metric. The {@link JvmRuntimeInfoMetric} is registered as part of the {@link JvmMetrics} like this:
    + * JVM Runtime Info metric. The {@link JvmRuntimeInfoMetric} is registered as part of the {@link
    + * JvmMetrics} like this:
    + *
      * 
    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    + * * However, if you want only the {@link JvmRuntimeInfoMetric} you can also register them directly: + * *
    {@code
    - *   JvmRuntimeInfoMetric.builder().register();
    + * JvmRuntimeInfoMetric.builder().register();
      * }
    * *
    @@ -22,83 +26,84 @@
      */
     public class JvmRuntimeInfoMetric {
     
    -    private static final String JVM_RUNTIME_INFO = "jvm_runtime_info";
    +  private static final String JVM_RUNTIME_INFO = "jvm_runtime_info";
    +
    +  private final PrometheusProperties config;
    +  private final String version;
    +  private final String vendor;
    +  private final String runtime;
    +
    +  private JvmRuntimeInfoMetric(
    +      String version, String vendor, String runtime, PrometheusProperties config) {
    +    this.config = config;
    +    this.version = version;
    +    this.vendor = vendor;
    +    this.runtime = runtime;
    +  }
    +
    +  private void register(PrometheusRegistry registry) {
    +
    +    Info jvmInfo =
    +        Info.builder(config)
    +            .name(JVM_RUNTIME_INFO)
    +            .help("JVM runtime info")
    +            .labelNames("version", "vendor", "runtime")
    +            .register(registry);
    +
    +    jvmInfo.setLabelValues(version, vendor, runtime);
    +  }
    +
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
    +
    +  public static Builder builder(PrometheusProperties config) {
    +    return new Builder(config);
    +  }
    +
    +  public static class Builder {
     
         private final PrometheusProperties config;
    -    private final String version;
    -    private final String vendor;
    -    private final String runtime;
    -
    -    private JvmRuntimeInfoMetric(String version, String vendor, String runtime, PrometheusProperties config) {
    -        this.config = config;
    -        this.version = version;
    -        this.vendor = vendor;
    -        this.runtime = runtime;
    -    }
    +    private String version;
    +    private String vendor;
    +    private String runtime;
     
    -    private void register(PrometheusRegistry registry) {
    +    private Builder(PrometheusProperties config) {
    +      this.config = config;
    +    }
     
    -        Info jvmInfo = Info.builder(config)
    -                .name(JVM_RUNTIME_INFO)
    -                .help("JVM runtime info")
    -                .labelNames("version", "vendor", "runtime")
    -                .register(registry);
    +    /** Package private. For testing only. */
    +    Builder version(String version) {
    +      this.version = version;
    +      return this;
    +    }
     
    -        jvmInfo.setLabelValues(version, vendor, runtime);
    +    /** Package private. For testing only. */
    +    Builder vendor(String vendor) {
    +      this.vendor = vendor;
    +      return this;
         }
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    +    /** Package private. For testing only. */
    +    Builder runtime(String runtime) {
    +      this.runtime = runtime;
    +      return this;
         }
     
    -    public static Builder builder(PrometheusProperties config) {
    -        return new Builder(config);
    +    public void register() {
    +      register(PrometheusRegistry.defaultRegistry);
         }
     
    -    public static class Builder {
    -
    -        private final PrometheusProperties config;
    -        private String version;
    -        private String vendor;
    -        private String runtime;
    -
    -        private Builder(PrometheusProperties config) {
    -            this.config = config;
    -        }
    -
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder version(String version) {
    -            this.version = version;
    -            return this;
    -        }
    -
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder vendor(String vendor) {
    -            this.vendor = vendor;
    -            return this;
    -        }
    -
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder runtime(String runtime) {
    -            this.runtime = runtime;
    -            return this;
    -        }
    -
    -        public void register() {
    -            register(PrometheusRegistry.defaultRegistry);
    -        }
    -
    -        public void register(PrometheusRegistry registry) {
    -            String version = this.version != null ? this.version : System.getProperty("java.runtime.version", "unknown");
    -            String vendor = this.vendor != null ? this.vendor : System.getProperty("java.vm.vendor", "unknown");
    -            String runtime = this.runtime != null ? this.runtime : System.getProperty("java.runtime.name", "unknown");
    -            new JvmRuntimeInfoMetric(version, vendor, runtime, config).register(registry);
    -        }
    +    public void register(PrometheusRegistry registry) {
    +      String version =
    +          this.version != null
    +              ? this.version
    +              : System.getProperty("java.runtime.version", "unknown");
    +      String vendor =
    +          this.vendor != null ? this.vendor : System.getProperty("java.vm.vendor", "unknown");
    +      String runtime =
    +          this.runtime != null ? this.runtime : System.getProperty("java.runtime.name", "unknown");
    +      new JvmRuntimeInfoMetric(version, vendor, runtime, config).register(registry);
         }
    +  }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java
    index d38c50a54..4027551ac 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java
    @@ -4,7 +4,6 @@
     import io.prometheus.metrics.core.metrics.CounterWithCallback;
     import io.prometheus.metrics.core.metrics.GaugeWithCallback;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
    -
     import java.lang.management.ManagementFactory;
     import java.lang.management.ThreadInfo;
     import java.lang.management.ThreadMXBean;
    @@ -13,15 +12,21 @@
     import java.util.Map;
     
     /**
    - * JVM Thread metrics. The {@link JvmThreadsMetrics} are registered as part of the {@link JvmMetrics} like this:
    + * JVM Thread metrics. The {@link JvmThreadsMetrics} are registered as part of the {@link
    + * JvmMetrics} like this:
    + *
      * 
    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    + * * However, if you want only the {@link JvmThreadsMetrics} you can also register them directly: + * *
    {@code
    - *   JvmThreadMetrics.builder().register();
    + * JvmThreadMetrics.builder().register();
      * }
    + * * Example metrics being exported: + * *
      * # HELP jvm_threads_current Current thread count of a JVM
      * # TYPE jvm_threads_current gauge
    @@ -54,162 +59,165 @@
      */
     public class JvmThreadsMetrics {
     
    -    private static final String UNKNOWN = "UNKNOWN";
    -    private static final String JVM_THREADS_STATE = "jvm_threads_state";
    -    private static final String JVM_THREADS_CURRENT = "jvm_threads_current";
    -    private static final String JVM_THREADS_DAEMON = "jvm_threads_daemon";
    -    private static final String JVM_THREADS_PEAK = "jvm_threads_peak";
    -    private static final String JVM_THREADS_STARTED_TOTAL = "jvm_threads_started_total";
    -    private static final String JVM_THREADS_DEADLOCKED = "jvm_threads_deadlocked";
    -    private static final String JVM_THREADS_DEADLOCKED_MONITOR = "jvm_threads_deadlocked_monitor";
    +  private static final String UNKNOWN = "UNKNOWN";
    +  private static final String JVM_THREADS_STATE = "jvm_threads_state";
    +  private static final String JVM_THREADS_CURRENT = "jvm_threads_current";
    +  private static final String JVM_THREADS_DAEMON = "jvm_threads_daemon";
    +  private static final String JVM_THREADS_PEAK = "jvm_threads_peak";
    +  private static final String JVM_THREADS_STARTED_TOTAL = "jvm_threads_started_total";
    +  private static final String JVM_THREADS_DEADLOCKED = "jvm_threads_deadlocked";
    +  private static final String JVM_THREADS_DEADLOCKED_MONITOR = "jvm_threads_deadlocked_monitor";
    +
    +  private final PrometheusProperties config;
    +  private final ThreadMXBean threadBean;
    +  private final boolean isNativeImage;
    +
    +  private JvmThreadsMetrics(
    +      boolean isNativeImage, ThreadMXBean threadBean, PrometheusProperties config) {
    +    this.config = config;
    +    this.threadBean = threadBean;
    +    this.isNativeImage = isNativeImage;
    +  }
    +
    +  private void register(PrometheusRegistry registry) {
    +
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_THREADS_CURRENT)
    +        .help("Current thread count of a JVM")
    +        .callback(callback -> callback.call(threadBean.getThreadCount()))
    +        .register(registry);
    +
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_THREADS_DAEMON)
    +        .help("Daemon thread count of a JVM")
    +        .callback(callback -> callback.call(threadBean.getDaemonThreadCount()))
    +        .register(registry);
    +
    +    GaugeWithCallback.builder(config)
    +        .name(JVM_THREADS_PEAK)
    +        .help("Peak thread count of a JVM")
    +        .callback(callback -> callback.call(threadBean.getPeakThreadCount()))
    +        .register(registry);
    +
    +    CounterWithCallback.builder(config)
    +        .name(JVM_THREADS_STARTED_TOTAL)
    +        .help("Started thread count of a JVM")
    +        .callback(callback -> callback.call(threadBean.getTotalStartedThreadCount()))
    +        .register(registry);
    +
    +    if (!isNativeImage) {
    +      GaugeWithCallback.builder(config)
    +          .name(JVM_THREADS_DEADLOCKED)
    +          .help(
    +              "Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers")
    +          .callback(
    +              callback -> callback.call(nullSafeArrayLength(threadBean.findDeadlockedThreads())))
    +          .register(registry);
    +
    +      GaugeWithCallback.builder(config)
    +          .name(JVM_THREADS_DEADLOCKED_MONITOR)
    +          .help("Cycles of JVM-threads that are in deadlock waiting to acquire object monitors")
    +          .callback(
    +              callback ->
    +                  callback.call(nullSafeArrayLength(threadBean.findMonitorDeadlockedThreads())))
    +          .register(registry);
    +
    +      GaugeWithCallback.builder(config)
    +          .name(JVM_THREADS_STATE)
    +          .help("Current count of threads by state")
    +          .labelNames("state")
    +          .callback(
    +              callback -> {
    +                Map threadStateCounts = getThreadStateCountMap(threadBean);
    +                for (Map.Entry entry : threadStateCounts.entrySet()) {
    +                  callback.call(entry.getValue(), entry.getKey());
    +                }
    +              })
    +          .register(registry);
    +    }
    +  }
    +
    +  private Map getThreadStateCountMap(ThreadMXBean threadBean) {
    +    long[] threadIds = threadBean.getAllThreadIds();
     
    -    private final PrometheusProperties config;
    -    private final ThreadMXBean threadBean;
    -    private final boolean isNativeImage;
    +    // Code to remove any thread id values <= 0
    +    int writePos = 0;
    +    for (int i = 0; i < threadIds.length; i++) {
    +      if (threadIds[i] > 0) {
    +        threadIds[writePos++] = threadIds[i];
    +      }
    +    }
    +
    +    int numberOfInvalidThreadIds = threadIds.length - writePos;
    +    threadIds = Arrays.copyOf(threadIds, writePos);
     
    -    private JvmThreadsMetrics(boolean isNativeImage, ThreadMXBean threadBean, PrometheusProperties config) {
    -        this.config = config;
    -        this.threadBean = threadBean;
    -        this.isNativeImage = isNativeImage;
    +    // Get thread information without computing any stack traces
    +    ThreadInfo[] allThreads = threadBean.getThreadInfo(threadIds, 0);
    +
    +    // Initialize the map with all thread states
    +    HashMap threadCounts = new HashMap();
    +    for (Thread.State state : Thread.State.values()) {
    +      threadCounts.put(state.name(), 0);
         }
     
    -    private void register(PrometheusRegistry registry) {
    -
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_THREADS_CURRENT)
    -                .help("Current thread count of a JVM")
    -                .callback(callback -> callback.call(threadBean.getThreadCount()))
    -                .register(registry);
    -
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_THREADS_DAEMON)
    -                .help("Daemon thread count of a JVM")
    -                .callback(callback -> callback.call(threadBean.getDaemonThreadCount()))
    -                .register(registry);
    -
    -        GaugeWithCallback.builder(config)
    -                .name(JVM_THREADS_PEAK)
    -                .help("Peak thread count of a JVM")
    -                .callback(callback -> callback.call(threadBean.getPeakThreadCount()))
    -                .register(registry);
    -
    -        CounterWithCallback.builder(config)
    -                .name(JVM_THREADS_STARTED_TOTAL)
    -                .help("Started thread count of a JVM")
    -                .callback(callback -> callback.call(threadBean.getTotalStartedThreadCount()))
    -                .register(registry);
    -
    -        if (!isNativeImage) {
    -            GaugeWithCallback.builder(config)
    -                    .name(JVM_THREADS_DEADLOCKED)
    -                    .help("Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers")
    -                    .callback(callback -> callback.call(nullSafeArrayLength(threadBean.findDeadlockedThreads())))
    -                    .register(registry);
    -
    -            GaugeWithCallback.builder(config)
    -                    .name(JVM_THREADS_DEADLOCKED_MONITOR)
    -                    .help("Cycles of JVM-threads that are in deadlock waiting to acquire object monitors")
    -                    .callback(callback -> callback.call(nullSafeArrayLength(threadBean.findMonitorDeadlockedThreads())))
    -                    .register(registry);
    -
    -
    -            GaugeWithCallback.builder(config)
    -                    .name(JVM_THREADS_STATE)
    -                    .help("Current count of threads by state")
    -                    .labelNames("state")
    -                    .callback(callback -> {
    -                        Map threadStateCounts = getThreadStateCountMap(threadBean);
    -                        for (Map.Entry entry : threadStateCounts.entrySet()) {
    -                            callback.call(entry.getValue(), entry.getKey());
    -                        }
    -                    })
    -                    .register(registry);
    -        }
    +    // Collect the actual thread counts
    +    for (ThreadInfo curThread : allThreads) {
    +      if (curThread != null) {
    +        Thread.State threadState = curThread.getThreadState();
    +        threadCounts.put(threadState.name(), threadCounts.get(threadState.name()) + 1);
    +      }
         }
     
    -    private Map getThreadStateCountMap(ThreadMXBean threadBean) {
    -        long[] threadIds = threadBean.getAllThreadIds();
    -
    -        // Code to remove any thread id values <= 0
    -        int writePos = 0;
    -        for (int i = 0; i < threadIds.length; i++) {
    -            if (threadIds[i] > 0) {
    -                threadIds[writePos++] = threadIds[i];
    -            }
    -        }
    -
    -        int numberOfInvalidThreadIds = threadIds.length - writePos;
    -        threadIds = Arrays.copyOf(threadIds, writePos);
    -
    -        // Get thread information without computing any stack traces
    -        ThreadInfo[] allThreads = threadBean.getThreadInfo(threadIds, 0);
    -
    -        // Initialize the map with all thread states
    -        HashMap threadCounts = new HashMap();
    -        for (Thread.State state : Thread.State.values()) {
    -            threadCounts.put(state.name(), 0);
    -        }
    -
    -        // Collect the actual thread counts
    -        for (ThreadInfo curThread : allThreads) {
    -            if (curThread != null) {
    -                Thread.State threadState = curThread.getThreadState();
    -                threadCounts.put(threadState.name(), threadCounts.get(threadState.name()) + 1);
    -            }
    -        }
    -
    -        // Add the thread count for invalid thread ids
    -        threadCounts.put(UNKNOWN, numberOfInvalidThreadIds);
    -
    -        return threadCounts;
    +    // Add the thread count for invalid thread ids
    +    threadCounts.put(UNKNOWN, numberOfInvalidThreadIds);
    +
    +    return threadCounts;
    +  }
    +
    +  private double nullSafeArrayLength(long[] array) {
    +    return null == array ? 0 : array.length;
    +  }
    +
    +  public static Builder builder() {
    +    return new Builder(PrometheusProperties.get());
    +  }
    +
    +  public static Builder builder(PrometheusProperties config) {
    +    return new Builder(config);
    +  }
    +
    +  public static class Builder {
    +
    +    private final PrometheusProperties config;
    +    private Boolean isNativeImage;
    +    private ThreadMXBean threadBean;
    +
    +    private Builder(PrometheusProperties config) {
    +      this.config = config;
         }
     
    -    private double nullSafeArrayLength(long[] array) {
    -        return null == array ? 0 : array.length;
    +    /** Package private. For testing only. */
    +    Builder threadBean(ThreadMXBean threadBean) {
    +      this.threadBean = threadBean;
    +      return this;
         }
     
    -    public static Builder builder() {
    -        return new Builder(PrometheusProperties.get());
    +    /** Package private. For testing only. */
    +    Builder isNativeImage(boolean isNativeImage) {
    +      this.isNativeImage = isNativeImage;
    +      return this;
         }
     
    -    public static Builder builder(PrometheusProperties config) {
    -        return new Builder(config);
    +    public void register() {
    +      register(PrometheusRegistry.defaultRegistry);
         }
     
    -    public static class Builder {
    -
    -        private final PrometheusProperties config;
    -        private Boolean isNativeImage;
    -        private ThreadMXBean threadBean;
    -
    -        private Builder(PrometheusProperties config) {
    -            this.config = config;
    -        }
    -
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder threadBean(ThreadMXBean threadBean) {
    -            this.threadBean = threadBean;
    -            return this;
    -        }
    -
    -        /**
    -         * Package private. For testing only.
    -         */
    -        Builder isNativeImage(boolean isNativeImage) {
    -            this.isNativeImage = isNativeImage;
    -            return this;
    -        }
    -
    -        public void register() {
    -            register(PrometheusRegistry.defaultRegistry);
    -        }
    -
    -        public void register(PrometheusRegistry registry) {
    -            ThreadMXBean threadBean = this.threadBean != null ? this.threadBean : ManagementFactory.getThreadMXBean();
    -            boolean isNativeImage = this.isNativeImage != null ? this.isNativeImage : NativeImageChecker.isGraalVmNativeImage;
    -            new JvmThreadsMetrics(isNativeImage, threadBean, config).register(registry);
    -        }
    +    public void register(PrometheusRegistry registry) {
    +      ThreadMXBean threadBean =
    +          this.threadBean != null ? this.threadBean : ManagementFactory.getThreadMXBean();
    +      boolean isNativeImage =
    +          this.isNativeImage != null ? this.isNativeImage : NativeImageChecker.isGraalVmNativeImage;
    +      new JvmThreadsMetrics(isNativeImage, threadBean, config).register(registry);
         }
    +  }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/NativeImageChecker.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/NativeImageChecker.java
    index 11e3efb2d..e75350bce 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/NativeImageChecker.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/NativeImageChecker.java
    @@ -1,13 +1,15 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     /**
    - * Contains utilities to check if we are running inside or building for native image. Default behavior is to check
    - * if specific for graalvm runtime property is present. For additional optimizations it is possible to do add
    - * "--initialize-at-build-time=io.prometheus.client.hotspot.NativeImageChecker" to graalvm native image build command and
    - * the native image will be identified during build time.
    + * Contains utilities to check if we are running inside or building for native image. Default
    + * behavior is to check if specific for graalvm runtime property is present. For additional
    + * optimizations it is possible to do add
    + * "--initialize-at-build-time=io.prometheus.client.hotspot.NativeImageChecker" to graalvm native
    + * image build command and the native image will be identified during build time.
      */
     class NativeImageChecker {
    -    static final boolean isGraalVmNativeImage = System.getProperty("org.graalvm.nativeimage.imagecode") != null;
    +  static final boolean isGraalVmNativeImage =
    +      System.getProperty("org.graalvm.nativeimage.imagecode") != null;
     
    -    private NativeImageChecker() {}
    +  private NativeImageChecker() {}
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java
    index bca58942a..f875c104f 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java
    @@ -5,7 +5,6 @@
     import io.prometheus.metrics.core.metrics.GaugeWithCallback;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
     import io.prometheus.metrics.model.snapshots.Unit;
    -
     import java.io.BufferedReader;
     import java.io.File;
     import java.io.FileReader;
    @@ -18,23 +17,31 @@
     
     /**
      * Process metrics.
    - * 

    - * These metrics are defined in the process metrics - * section of the Prometheus client library documentation, and they are implemented across client libraries in multiple programming languages. - *

    - * Technically, some of them are OS-level metrics and not JVM-level metrics. However, I'm still putting them - * in the {@code prometheus-metrics-instrumentation-jvm} module, because first it seems overkill to create a separate - * Maven module just for the {@link ProcessMetrics} class, and seconds some of these metrics are coming from the JVM via JMX anyway. - *

    - * The {@link ProcessMetrics} are registered as part of the {@link JvmMetrics} like this: + * + *

    These metrics are defined in the process + * metrics section of the Prometheus client library documentation, and they are implemented + * across client libraries in multiple programming languages. + * + *

    Technically, some of them are OS-level metrics and not JVM-level metrics. However, I'm still + * putting them in the {@code prometheus-metrics-instrumentation-jvm} module, because first it seems + * overkill to create a separate Maven module just for the {@link ProcessMetrics} class, and seconds + * some of these metrics are coming from the JVM via JMX anyway. + * + *

    The {@link ProcessMetrics} are registered as part of the {@link JvmMetrics} like this: + * *

    {@code
    - *   JvmMetrics.builder().register();
    + * JvmMetrics.builder().register();
      * }
    + * * However, if you want only the {@link ProcessMetrics} you can also register them directly: + * *
    {@code
    - *   ProcessMetrics.builder().register();
    + * ProcessMetrics.builder().register();
      * }
    + * * Example metrics being exported: + * *
      * # HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
      * # TYPE process_cpu_seconds_total counter
    @@ -58,228 +65,237 @@
      */
     public class ProcessMetrics {
     
    -    private static final String PROCESS_CPU_SECONDS_TOTAL = "process_cpu_seconds_total";
    -    private static final String PROCESS_START_TIME_SECONDS = "process_start_time_seconds";
    -    private static final String PROCESS_OPEN_FDS = "process_open_fds";
    -    private static final String PROCESS_MAX_FDS = "process_max_fds";
    -    private static final String PROCESS_VIRTUAL_MEMORY_BYTES = "process_virtual_memory_bytes";
    -    private static final String PROCESS_RESIDENT_MEMORY_BYTES = "process_resident_memory_bytes";
    +  private static final String PROCESS_CPU_SECONDS_TOTAL = "process_cpu_seconds_total";
    +  private static final String PROCESS_START_TIME_SECONDS = "process_start_time_seconds";
    +  private static final String PROCESS_OPEN_FDS = "process_open_fds";
    +  private static final String PROCESS_MAX_FDS = "process_max_fds";
    +  private static final String PROCESS_VIRTUAL_MEMORY_BYTES = "process_virtual_memory_bytes";
    +  private static final String PROCESS_RESIDENT_MEMORY_BYTES = "process_resident_memory_bytes";
     
    -    private static final File PROC_SELF_STATUS = new File("/proc/self/status");
    +  private static final File PROC_SELF_STATUS = new File("/proc/self/status");
     
    -    private final PrometheusProperties config;
    -    private final OperatingSystemMXBean osBean;
    -    private final RuntimeMXBean runtimeBean;
    -    private final Grepper grepper;
    -    private final boolean linux;
    +  private final PrometheusProperties config;
    +  private final OperatingSystemMXBean osBean;
    +  private final RuntimeMXBean runtimeBean;
    +  private final Grepper grepper;
    +  private final boolean linux;
     
    -    private ProcessMetrics(OperatingSystemMXBean osBean, RuntimeMXBean runtimeBean, Grepper grepper, PrometheusProperties config) {
    -        this.osBean = osBean;
    -        this.runtimeBean = runtimeBean;
    -        this.grepper = grepper;
    -        this.config = config;
    -        this.linux = PROC_SELF_STATUS.canRead();
    -    }
    +  private ProcessMetrics(
    +      OperatingSystemMXBean osBean,
    +      RuntimeMXBean runtimeBean,
    +      Grepper grepper,
    +      PrometheusProperties config) {
    +    this.osBean = osBean;
    +    this.runtimeBean = runtimeBean;
    +    this.grepper = grepper;
    +    this.config = config;
    +    this.linux = PROC_SELF_STATUS.canRead();
    +  }
     
    -    private void register(PrometheusRegistry registry) {
    +  private void register(PrometheusRegistry registry) {
     
    -        CounterWithCallback.builder(config)
    -                .name(PROCESS_CPU_SECONDS_TOTAL)
    -                .help("Total user and system CPU time spent in seconds.")
    -                .unit(Unit.SECONDS)
    -                .callback(callback -> {
    -                    try {
    -                        // There exist at least 2 similar but unrelated UnixOperatingSystemMXBean interfaces, in
    -                        // com.sun.management and com.ibm.lang.management. Hence use reflection and recursively go
    -                        // through implemented interfaces until the method can be made accessible and invoked.
    -                        Long processCpuTime = callLongGetter("getProcessCpuTime", osBean);
    -                        if (processCpuTime != null) {
    -                            callback.call(Unit.nanosToSeconds(processCpuTime));
    -                        }
    -                    } catch (Exception ignored) {
    -                    }
    -                })
    -                .register(registry);
    +    CounterWithCallback.builder(config)
    +        .name(PROCESS_CPU_SECONDS_TOTAL)
    +        .help("Total user and system CPU time spent in seconds.")
    +        .unit(Unit.SECONDS)
    +        .callback(
    +            callback -> {
    +              try {
    +                // There exist at least 2 similar but unrelated UnixOperatingSystemMXBean
    +                // interfaces, in
    +                // com.sun.management and com.ibm.lang.management. Hence use reflection and
    +                // recursively go
    +                // through implemented interfaces until the method can be made accessible and
    +                // invoked.
    +                Long processCpuTime = callLongGetter("getProcessCpuTime", osBean);
    +                if (processCpuTime != null) {
    +                  callback.call(Unit.nanosToSeconds(processCpuTime));
    +                }
    +              } catch (Exception ignored) {
    +              }
    +            })
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(PROCESS_START_TIME_SECONDS)
    -                .help("Start time of the process since unix epoch in seconds.")
    -                .unit(Unit.SECONDS)
    -                .callback(callback -> callback.call(Unit.millisToSeconds(runtimeBean.getStartTime())))
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(PROCESS_START_TIME_SECONDS)
    +        .help("Start time of the process since unix epoch in seconds.")
    +        .unit(Unit.SECONDS)
    +        .callback(callback -> callback.call(Unit.millisToSeconds(runtimeBean.getStartTime())))
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(PROCESS_OPEN_FDS)
    -                .help("Number of open file descriptors.")
    -                .callback(callback -> {
    -                    try {
    -                        Long openFds = callLongGetter("getOpenFileDescriptorCount", osBean);
    -                        if (openFds != null) {
    -                            callback.call(openFds);
    -                        }
    -                    } catch (Exception ignored) {
    -                    }
    -                })
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(PROCESS_OPEN_FDS)
    +        .help("Number of open file descriptors.")
    +        .callback(
    +            callback -> {
    +              try {
    +                Long openFds = callLongGetter("getOpenFileDescriptorCount", osBean);
    +                if (openFds != null) {
    +                  callback.call(openFds);
    +                }
    +              } catch (Exception ignored) {
    +              }
    +            })
    +        .register(registry);
     
    -        GaugeWithCallback.builder(config)
    -                .name(PROCESS_MAX_FDS)
    -                .help("Maximum number of open file descriptors.")
    -                .callback(callback -> {
    -                    try {
    -                        Long maxFds = callLongGetter("getMaxFileDescriptorCount", osBean);
    -                        if (maxFds != null) {
    -                            callback.call(maxFds);
    -                        }
    -                    } catch (Exception ignored) {
    -                    }
    -                })
    -                .register(registry);
    +    GaugeWithCallback.builder(config)
    +        .name(PROCESS_MAX_FDS)
    +        .help("Maximum number of open file descriptors.")
    +        .callback(
    +            callback -> {
    +              try {
    +                Long maxFds = callLongGetter("getMaxFileDescriptorCount", osBean);
    +                if (maxFds != null) {
    +                  callback.call(maxFds);
    +                }
    +              } catch (Exception ignored) {
    +              }
    +            })
    +        .register(registry);
     
    -        if (linux) {
    +    if (linux) {
     
    -            GaugeWithCallback.builder(config)
    -                    .name(PROCESS_VIRTUAL_MEMORY_BYTES)
    -                    .help("Virtual memory size in bytes.")
    -                    .unit(Unit.BYTES)
    -                    .callback(callback -> {
    -                        try {
    -                            String line = grepper.lineStartingWith(PROC_SELF_STATUS, "VmSize:");
    -                            callback.call(Unit.kiloBytesToBytes(Double.parseDouble(line.split("\\s+")[1])));
    -                        } catch (Exception ignored) {
    -                        }
    -                    })
    -                    .register(registry);
    +      GaugeWithCallback.builder(config)
    +          .name(PROCESS_VIRTUAL_MEMORY_BYTES)
    +          .help("Virtual memory size in bytes.")
    +          .unit(Unit.BYTES)
    +          .callback(
    +              callback -> {
    +                try {
    +                  String line = grepper.lineStartingWith(PROC_SELF_STATUS, "VmSize:");
    +                  callback.call(Unit.kiloBytesToBytes(Double.parseDouble(line.split("\\s+")[1])));
    +                } catch (Exception ignored) {
    +                }
    +              })
    +          .register(registry);
     
    -            GaugeWithCallback.builder(config)
    -                    .name(PROCESS_RESIDENT_MEMORY_BYTES)
    -                    .help("Resident memory size in bytes.")
    -                    .unit(Unit.BYTES)
    -                    .callback(callback -> {
    -                        try {
    -                            String line = grepper.lineStartingWith(PROC_SELF_STATUS, "VmRSS:");
    -                            callback.call(Unit.kiloBytesToBytes(Double.parseDouble(line.split("\\s+")[1])));
    -                        } catch (Exception ignored) {
    -                        }
    -                    })
    -                    .register(registry);
    -        }
    +      GaugeWithCallback.builder(config)
    +          .name(PROCESS_RESIDENT_MEMORY_BYTES)
    +          .help("Resident memory size in bytes.")
    +          .unit(Unit.BYTES)
    +          .callback(
    +              callback -> {
    +                try {
    +                  String line = grepper.lineStartingWith(PROC_SELF_STATUS, "VmRSS:");
    +                  callback.call(Unit.kiloBytesToBytes(Double.parseDouble(line.split("\\s+")[1])));
    +                } catch (Exception ignored) {
    +                }
    +              })
    +          .register(registry);
         }
    +  }
    +
    +  private Long callLongGetter(String getterName, Object obj)
    +      throws NoSuchMethodException, InvocationTargetException {
    +    return callLongGetter(obj.getClass().getMethod(getterName), obj);
    +  }
     
    -    private Long callLongGetter(String getterName, Object obj) throws NoSuchMethodException, InvocationTargetException {
    -        return callLongGetter(obj.getClass().getMethod(getterName), obj);
    +  /**
    +   * Attempts to call a method either directly or via one of the implemented interfaces.
    +   *
    +   * 

    A Method object refers to a specific method declared in a specific class. The first + * invocation might happen with method == SomeConcreteClass.publicLongGetter() and will fail if + * SomeConcreteClass is not public. We then recurse over all interfaces implemented by + * SomeConcreteClass (or extended by those interfaces and so on) until we eventually invoke + * callMethod() with method == SomePublicInterface.publicLongGetter(), which will then succeed. + * + *

    There is a built-in assumption that the method will never return null (or, equivalently, + * that it returns the primitive data type, i.e. {@code long} rather than {@code Long}). If this + * assumption doesn't hold, the method might be called repeatedly and the returned value will be + * the one produced by the last call. + */ + private Long callLongGetter(Method method, Object obj) throws InvocationTargetException { + try { + return (Long) method.invoke(obj); + } catch (IllegalAccessException e) { + // Expected, the declaring class or interface might not be public. } - /** - * Attempts to call a method either directly or via one of the implemented interfaces. - *

    - * A Method object refers to a specific method declared in a specific class. The first invocation - * might happen with method == SomeConcreteClass.publicLongGetter() and will fail if - * SomeConcreteClass is not public. We then recurse over all interfaces implemented by - * SomeConcreteClass (or extended by those interfaces and so on) until we eventually invoke - * callMethod() with method == SomePublicInterface.publicLongGetter(), which will then succeed. - *

    - * There is a built-in assumption that the method will never return null (or, equivalently, that - * it returns the primitive data type, i.e. {@code long} rather than {@code Long}). If this - * assumption doesn't hold, the method might be called repeatedly and the returned value will be - * the one produced by the last call. - */ - private Long callLongGetter(Method method, Object obj) throws InvocationTargetException { - try { - return (Long) method.invoke(obj); - } catch (IllegalAccessException e) { - // Expected, the declaring class or interface might not be public. + // Iterate over all implemented/extended interfaces and attempt invoking the method with the + // same name and parameters on each. + for (Class clazz : method.getDeclaringClass().getInterfaces()) { + try { + Method interfaceMethod = clazz.getMethod(method.getName(), method.getParameterTypes()); + Long result = callLongGetter(interfaceMethod, obj); + if (result != null) { + return result; } - - // Iterate over all implemented/extended interfaces and attempt invoking the method with the - // same name and parameters on each. - for (Class clazz : method.getDeclaringClass().getInterfaces()) { - try { - Method interfaceMethod = clazz.getMethod(method.getName(), method.getParameterTypes()); - Long result = callLongGetter(interfaceMethod, obj); - if (result != null) { - return result; - } - } catch (NoSuchMethodException e) { - // Expected, class might implement multiple, unrelated interfaces. - } - } - return null; + } catch (NoSuchMethodException e) { + // Expected, class might implement multiple, unrelated interfaces. + } } + return null; + } - interface Grepper { - String lineStartingWith(File file, String prefix) throws IOException; - } + interface Grepper { + String lineStartingWith(File file, String prefix) throws IOException; + } - private static class FileGrepper implements Grepper { + private static class FileGrepper implements Grepper { - @Override - public String lineStartingWith(File file, String prefix) throws IOException { - try (BufferedReader reader = new BufferedReader(new FileReader(file))) { - String line = reader.readLine(); - while (line != null) { - if (line.startsWith(prefix)) { - return line; - } - line = reader.readLine(); - } - } - return null; + @Override + public String lineStartingWith(File file, String prefix) throws IOException { + try (BufferedReader reader = new BufferedReader(new FileReader(file))) { + String line = reader.readLine(); + while (line != null) { + if (line.startsWith(prefix)) { + return line; + } + line = reader.readLine(); } + } + return null; } + } - public static Builder builder() { - return new Builder(PrometheusProperties.get()); - } + public static Builder builder() { + return new Builder(PrometheusProperties.get()); + } - public static Builder builder(PrometheusProperties config) { - return new Builder(config); - } + public static Builder builder(PrometheusProperties config) { + return new Builder(config); + } - public static class Builder { + public static class Builder { - private final PrometheusProperties config; - private OperatingSystemMXBean osBean; - private RuntimeMXBean runtimeBean; - private Grepper grepper; + private final PrometheusProperties config; + private OperatingSystemMXBean osBean; + private RuntimeMXBean runtimeBean; + private Grepper grepper; - private Builder(PrometheusProperties config) { - this.config = config; - } + private Builder(PrometheusProperties config) { + this.config = config; + } - /** - * Package private. For testing only. - */ - Builder osBean(OperatingSystemMXBean osBean) { - this.osBean = osBean; - return this; - } + /** Package private. For testing only. */ + Builder osBean(OperatingSystemMXBean osBean) { + this.osBean = osBean; + return this; + } - /** - * Package private. For testing only. - */ - Builder runtimeBean(RuntimeMXBean runtimeBean) { - this.runtimeBean = runtimeBean; - return this; - } + /** Package private. For testing only. */ + Builder runtimeBean(RuntimeMXBean runtimeBean) { + this.runtimeBean = runtimeBean; + return this; + } - /** - * Package private. For testing only. - */ - Builder grepper(Grepper grepper) { - this.grepper = grepper; - return this; - } + /** Package private. For testing only. */ + Builder grepper(Grepper grepper) { + this.grepper = grepper; + return this; + } - public void register() { - register(PrometheusRegistry.defaultRegistry); - } + public void register() { + register(PrometheusRegistry.defaultRegistry); + } - public void register(PrometheusRegistry registry) { - OperatingSystemMXBean osBean = this.osBean != null ? this.osBean : ManagementFactory.getOperatingSystemMXBean(); - RuntimeMXBean runtimeMXBean = this.runtimeBean != null ? this.runtimeBean : ManagementFactory.getRuntimeMXBean(); - Grepper grepper = this.grepper != null ? this.grepper : new FileGrepper(); - new ProcessMetrics(osBean, runtimeMXBean, grepper, config).register(registry); - } + public void register(PrometheusRegistry registry) { + OperatingSystemMXBean osBean = + this.osBean != null ? this.osBean : ManagementFactory.getOperatingSystemMXBean(); + RuntimeMXBean runtimeMXBean = + this.runtimeBean != null ? this.runtimeBean : ManagementFactory.getRuntimeMXBean(); + Grepper grepper = this.grepper != null ? this.grepper : new FileGrepper(); + new ProcessMetrics(osBean, runtimeMXBean, grepper, config).register(registry); } + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ExampleExporterForManualTesting.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ExampleExporterForManualTesting.java index 16b59b85a..b3d1c8169 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ExampleExporterForManualTesting.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ExampleExporterForManualTesting.java @@ -1,25 +1,22 @@ package io.prometheus.metrics.instrumentation.jvm; import io.prometheus.metrics.exporter.httpserver.HTTPServer; - import java.io.IOException; - public class ExampleExporterForManualTesting { - public static void main(String[] args) throws IOException, InterruptedException { + public static void main(String[] args) throws IOException, InterruptedException { - JvmMetrics.builder().register(); + JvmMetrics.builder().register(); - HTTPServer server = HTTPServer.builder() - .port(9400) - .buildAndStart(); + HTTPServer server = HTTPServer.builder().port(9400).buildAndStart(); - System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + System.out.println( + "HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); - while (true) { - Thread.sleep(100); - Runtime.getRuntime().gc(); // Memory allocation metrics only start after GC run. - } + while (true) { + Thread.sleep(100); + Runtime.getRuntime().gc(); // Memory allocation metrics only start after GC run. } + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java index b8aafa0ea..df6dddf99 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java @@ -1,82 +1,81 @@ package io.prometheus.metrics.instrumentation.jvm; +import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import io.prometheus.metrics.model.registry.MetricNameFilter; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import java.io.IOException; +import java.lang.management.BufferPoolMXBean; +import java.util.Arrays; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; -import java.io.IOException; -import java.lang.management.BufferPoolMXBean; -import java.util.Arrays; - -import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - public class JvmBufferPoolMetricsTest { - private final BufferPoolMXBean directBuffer = Mockito.mock(BufferPoolMXBean.class); - private final BufferPoolMXBean mappedBuffer = Mockito.mock(BufferPoolMXBean.class); + private final BufferPoolMXBean directBuffer = Mockito.mock(BufferPoolMXBean.class); + private final BufferPoolMXBean mappedBuffer = Mockito.mock(BufferPoolMXBean.class); - @Before - public void setUp() { - when(directBuffer.getName()).thenReturn("direct"); - when(directBuffer.getCount()).thenReturn(2L); - when(directBuffer.getMemoryUsed()).thenReturn(1234L); - when(directBuffer.getTotalCapacity()).thenReturn(3456L); - when(mappedBuffer.getName()).thenReturn("mapped"); - when(mappedBuffer.getCount()).thenReturn(3L); - when(mappedBuffer.getMemoryUsed()).thenReturn(2345L); - when(mappedBuffer.getTotalCapacity()).thenReturn(4567L); - } + @Before + public void setUp() { + when(directBuffer.getName()).thenReturn("direct"); + when(directBuffer.getCount()).thenReturn(2L); + when(directBuffer.getMemoryUsed()).thenReturn(1234L); + when(directBuffer.getTotalCapacity()).thenReturn(3456L); + when(mappedBuffer.getName()).thenReturn("mapped"); + when(mappedBuffer.getCount()).thenReturn(3L); + when(mappedBuffer.getMemoryUsed()).thenReturn(2345L); + when(mappedBuffer.getTotalCapacity()).thenReturn(4567L); + } - @Test - public void testGoodCase() throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - JvmBufferPoolMetrics.builder() - .bufferPoolBeans(Arrays.asList(mappedBuffer, directBuffer)) - .register(registry); - MetricSnapshots snapshots = registry.scrape(); + @Test + public void testGoodCase() throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + JvmBufferPoolMetrics.builder() + .bufferPoolBeans(Arrays.asList(mappedBuffer, directBuffer)) + .register(registry); + MetricSnapshots snapshots = registry.scrape(); - String expected = "" + - "# TYPE jvm_buffer_pool_capacity_bytes gauge\n" + - "# UNIT jvm_buffer_pool_capacity_bytes bytes\n" + - "# HELP jvm_buffer_pool_capacity_bytes Bytes capacity of a given JVM buffer pool.\n" + - "jvm_buffer_pool_capacity_bytes{pool=\"direct\"} 3456.0\n" + - "jvm_buffer_pool_capacity_bytes{pool=\"mapped\"} 4567.0\n" + - "# TYPE jvm_buffer_pool_used_buffers gauge\n" + - "# HELP jvm_buffer_pool_used_buffers Used buffers of a given JVM buffer pool.\n" + - "jvm_buffer_pool_used_buffers{pool=\"direct\"} 2.0\n" + - "jvm_buffer_pool_used_buffers{pool=\"mapped\"} 3.0\n" + - "# TYPE jvm_buffer_pool_used_bytes gauge\n" + - "# UNIT jvm_buffer_pool_used_bytes bytes\n" + - "# HELP jvm_buffer_pool_used_bytes Used bytes of a given JVM buffer pool.\n" + - "jvm_buffer_pool_used_bytes{pool=\"direct\"} 1234.0\n" + - "jvm_buffer_pool_used_bytes{pool=\"mapped\"} 2345.0\n" + - "# EOF\n"; + String expected = + "" + + "# TYPE jvm_buffer_pool_capacity_bytes gauge\n" + + "# UNIT jvm_buffer_pool_capacity_bytes bytes\n" + + "# HELP jvm_buffer_pool_capacity_bytes Bytes capacity of a given JVM buffer pool.\n" + + "jvm_buffer_pool_capacity_bytes{pool=\"direct\"} 3456.0\n" + + "jvm_buffer_pool_capacity_bytes{pool=\"mapped\"} 4567.0\n" + + "# TYPE jvm_buffer_pool_used_buffers gauge\n" + + "# HELP jvm_buffer_pool_used_buffers Used buffers of a given JVM buffer pool.\n" + + "jvm_buffer_pool_used_buffers{pool=\"direct\"} 2.0\n" + + "jvm_buffer_pool_used_buffers{pool=\"mapped\"} 3.0\n" + + "# TYPE jvm_buffer_pool_used_bytes gauge\n" + + "# UNIT jvm_buffer_pool_used_bytes bytes\n" + + "# HELP jvm_buffer_pool_used_bytes Used bytes of a given JVM buffer pool.\n" + + "jvm_buffer_pool_used_bytes{pool=\"direct\"} 1234.0\n" + + "jvm_buffer_pool_used_bytes{pool=\"mapped\"} 2345.0\n" + + "# EOF\n"; - Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); - } + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } - @Test - public void testIgnoredMetricNotScraped() { - MetricNameFilter filter = MetricNameFilter.builder() - .nameMustNotBeEqualTo("jvm_buffer_pool_used_bytes") - .build(); + @Test + public void testIgnoredMetricNotScraped() { + MetricNameFilter filter = + MetricNameFilter.builder().nameMustNotBeEqualTo("jvm_buffer_pool_used_bytes").build(); - PrometheusRegistry registry = new PrometheusRegistry(); - JvmBufferPoolMetrics.builder() - .bufferPoolBeans(Arrays.asList(directBuffer, mappedBuffer)) - .register(registry); - registry.scrape(filter); + PrometheusRegistry registry = new PrometheusRegistry(); + JvmBufferPoolMetrics.builder() + .bufferPoolBeans(Arrays.asList(directBuffer, mappedBuffer)) + .register(registry); + registry.scrape(filter); - verify(directBuffer, times(0)).getMemoryUsed(); - verify(mappedBuffer, times(0)).getMemoryUsed(); - verify(directBuffer, times(1)).getTotalCapacity(); - verify(mappedBuffer, times(1)).getTotalCapacity(); - } + verify(directBuffer, times(0)).getMemoryUsed(); + verify(mappedBuffer, times(0)).getMemoryUsed(); + verify(directBuffer, times(1)).getTotalCapacity(); + verify(mappedBuffer, times(1)).getTotalCapacity(); + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java index 16413b839..4196031bf 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java @@ -1,68 +1,63 @@ package io.prometheus.metrics.instrumentation.jvm; +import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import io.prometheus.metrics.model.registry.MetricNameFilter; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import java.io.IOException; +import java.lang.management.ClassLoadingMXBean; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; -import java.io.IOException; -import java.lang.management.ClassLoadingMXBean; - -import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - public class JvmClassLoadingMetricsTest { - private ClassLoadingMXBean mockClassLoadingBean = Mockito.mock(ClassLoadingMXBean.class); - - @Before - public void setUp() { - when(mockClassLoadingBean.getLoadedClassCount()).thenReturn(1000); - when(mockClassLoadingBean.getTotalLoadedClassCount()).thenReturn(2000L); - when(mockClassLoadingBean.getUnloadedClassCount()).thenReturn(500L); - } - - @Test - public void testGoodCase() throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - JvmClassLoadingMetrics.builder() - .classLoadingBean(mockClassLoadingBean) - .register(registry); - MetricSnapshots snapshots = registry.scrape(); - - String expected = "" + - "# TYPE jvm_classes_currently_loaded gauge\n" + - "# HELP jvm_classes_currently_loaded The number of classes that are currently loaded in the JVM\n" + - "jvm_classes_currently_loaded 1000.0\n" + - "# TYPE jvm_classes_loaded counter\n" + - "# HELP jvm_classes_loaded The total number of classes that have been loaded since the JVM has started execution\n" + - "jvm_classes_loaded_total 2000.0\n" + - "# TYPE jvm_classes_unloaded counter\n" + - "# HELP jvm_classes_unloaded The total number of classes that have been unloaded since the JVM has started execution\n" + - "jvm_classes_unloaded_total 500.0\n" + - "# EOF\n"; - - Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); - } - - @Test - public void testIgnoredMetricNotScraped() { - MetricNameFilter filter = MetricNameFilter.builder() - .nameMustNotBeEqualTo("jvm_classes_currently_loaded") - .build(); - - PrometheusRegistry registry = new PrometheusRegistry(); - JvmClassLoadingMetrics.builder() - .classLoadingBean(mockClassLoadingBean) - .register(registry); - registry.scrape(filter); - - verify(mockClassLoadingBean, times(0)).getLoadedClassCount(); - verify(mockClassLoadingBean, times(1)).getTotalLoadedClassCount(); - } + private ClassLoadingMXBean mockClassLoadingBean = Mockito.mock(ClassLoadingMXBean.class); + + @Before + public void setUp() { + when(mockClassLoadingBean.getLoadedClassCount()).thenReturn(1000); + when(mockClassLoadingBean.getTotalLoadedClassCount()).thenReturn(2000L); + when(mockClassLoadingBean.getUnloadedClassCount()).thenReturn(500L); + } + + @Test + public void testGoodCase() throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + JvmClassLoadingMetrics.builder().classLoadingBean(mockClassLoadingBean).register(registry); + MetricSnapshots snapshots = registry.scrape(); + + String expected = + "" + + "# TYPE jvm_classes_currently_loaded gauge\n" + + "# HELP jvm_classes_currently_loaded The number of classes that are currently loaded in the JVM\n" + + "jvm_classes_currently_loaded 1000.0\n" + + "# TYPE jvm_classes_loaded counter\n" + + "# HELP jvm_classes_loaded The total number of classes that have been loaded since the JVM has started execution\n" + + "jvm_classes_loaded_total 2000.0\n" + + "# TYPE jvm_classes_unloaded counter\n" + + "# HELP jvm_classes_unloaded The total number of classes that have been unloaded since the JVM has started execution\n" + + "jvm_classes_unloaded_total 500.0\n" + + "# EOF\n"; + + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } + + @Test + public void testIgnoredMetricNotScraped() { + MetricNameFilter filter = + MetricNameFilter.builder().nameMustNotBeEqualTo("jvm_classes_currently_loaded").build(); + + PrometheusRegistry registry = new PrometheusRegistry(); + JvmClassLoadingMetrics.builder().classLoadingBean(mockClassLoadingBean).register(registry); + registry.scrape(filter); + + verify(mockClassLoadingBean, times(0)).getLoadedClassCount(); + verify(mockClassLoadingBean, times(1)).getTotalLoadedClassCount(); + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java index 75ecc8370..780d6a949 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java @@ -1,62 +1,59 @@ package io.prometheus.metrics.instrumentation.jvm; +import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.internal.verification.VerificationModeFactory.times; + import io.prometheus.metrics.model.registry.MetricNameFilter; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import java.io.IOException; +import java.lang.management.CompilationMXBean; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; -import java.io.IOException; -import java.lang.management.CompilationMXBean; - -import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.internal.verification.VerificationModeFactory.times; - public class JvmCompilationMetricsTest { - private CompilationMXBean mockCompilationBean = Mockito.mock(CompilationMXBean.class); - - @Before - public void setUp() { - when(mockCompilationBean.getTotalCompilationTime()).thenReturn(10000l); - when(mockCompilationBean.isCompilationTimeMonitoringSupported()).thenReturn(true); - } - - @Test - public void testGoodCase() throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - JvmCompilationMetrics.builder() - .compilationBean(mockCompilationBean) - .register(registry); - MetricSnapshots snapshots = registry.scrape(); - - String expected = "" + - "# TYPE jvm_compilation_time_seconds counter\n" + - "# UNIT jvm_compilation_time_seconds seconds\n" + - "# HELP jvm_compilation_time_seconds The total time in seconds taken for HotSpot class compilation\n" + - "jvm_compilation_time_seconds_total 10.0\n" + - "# EOF\n"; - - Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); - } - - @Test - public void testIgnoredMetricNotScraped() { - MetricNameFilter filter = MetricNameFilter.builder() - .nameMustNotBeEqualTo("jvm_compilation_time_seconds_total") - .build(); - - PrometheusRegistry registry = new PrometheusRegistry(); - JvmCompilationMetrics.builder() - .compilationBean(mockCompilationBean) - .register(registry); - MetricSnapshots snapshots = registry.scrape(filter); - - verify(mockCompilationBean, times(0)).getTotalCompilationTime(); - Assert.assertEquals(0, snapshots.size()); - } + private CompilationMXBean mockCompilationBean = Mockito.mock(CompilationMXBean.class); + + @Before + public void setUp() { + when(mockCompilationBean.getTotalCompilationTime()).thenReturn(10000l); + when(mockCompilationBean.isCompilationTimeMonitoringSupported()).thenReturn(true); + } + + @Test + public void testGoodCase() throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + JvmCompilationMetrics.builder().compilationBean(mockCompilationBean).register(registry); + MetricSnapshots snapshots = registry.scrape(); + + String expected = + "" + + "# TYPE jvm_compilation_time_seconds counter\n" + + "# UNIT jvm_compilation_time_seconds seconds\n" + + "# HELP jvm_compilation_time_seconds The total time in seconds taken for HotSpot class compilation\n" + + "jvm_compilation_time_seconds_total 10.0\n" + + "# EOF\n"; + + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } + + @Test + public void testIgnoredMetricNotScraped() { + MetricNameFilter filter = + MetricNameFilter.builder() + .nameMustNotBeEqualTo("jvm_compilation_time_seconds_total") + .build(); + + PrometheusRegistry registry = new PrometheusRegistry(); + JvmCompilationMetrics.builder().compilationBean(mockCompilationBean).register(registry); + MetricSnapshots snapshots = registry.scrape(filter); + + verify(mockCompilationBean, times(0)).getTotalCompilationTime(); + Assert.assertEquals(0, snapshots.size()); + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java index d7dad1787..67ba4f064 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java @@ -1,74 +1,72 @@ package io.prometheus.metrics.instrumentation.jvm; +import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import io.prometheus.metrics.model.registry.MetricNameFilter; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; - import java.io.IOException; import java.lang.management.GarbageCollectorMXBean; import java.util.Arrays; import java.util.concurrent.TimeUnit; - -import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; public class JvmGarbageCollectorMetricsTest { - private GarbageCollectorMXBean mockGcBean1 = Mockito.mock(GarbageCollectorMXBean.class); - private GarbageCollectorMXBean mockGcBean2 = Mockito.mock(GarbageCollectorMXBean.class); + private GarbageCollectorMXBean mockGcBean1 = Mockito.mock(GarbageCollectorMXBean.class); + private GarbageCollectorMXBean mockGcBean2 = Mockito.mock(GarbageCollectorMXBean.class); - @Before - public void setUp() { - when(mockGcBean1.getName()).thenReturn("MyGC1"); - when(mockGcBean1.getCollectionCount()).thenReturn(100L); - when(mockGcBean1.getCollectionTime()).thenReturn(TimeUnit.SECONDS.toMillis(10)); - when(mockGcBean2.getName()).thenReturn("MyGC2"); - when(mockGcBean2.getCollectionCount()).thenReturn(200L); - when(mockGcBean2.getCollectionTime()).thenReturn(TimeUnit.SECONDS.toMillis(20)); - } + @Before + public void setUp() { + when(mockGcBean1.getName()).thenReturn("MyGC1"); + when(mockGcBean1.getCollectionCount()).thenReturn(100L); + when(mockGcBean1.getCollectionTime()).thenReturn(TimeUnit.SECONDS.toMillis(10)); + when(mockGcBean2.getName()).thenReturn("MyGC2"); + when(mockGcBean2.getCollectionCount()).thenReturn(200L); + when(mockGcBean2.getCollectionTime()).thenReturn(TimeUnit.SECONDS.toMillis(20)); + } - @Test - public void testGoodCase() throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - JvmGarbageCollectorMetrics.builder() - .garbageCollectorBeans(Arrays.asList(mockGcBean1, mockGcBean2)) - .register(registry); - MetricSnapshots snapshots = registry.scrape(); + @Test + public void testGoodCase() throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + JvmGarbageCollectorMetrics.builder() + .garbageCollectorBeans(Arrays.asList(mockGcBean1, mockGcBean2)) + .register(registry); + MetricSnapshots snapshots = registry.scrape(); - String expected = "" + - "# TYPE jvm_gc_collection_seconds summary\n" + - "# UNIT jvm_gc_collection_seconds seconds\n" + - "# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.\n" + - "jvm_gc_collection_seconds_count{gc=\"MyGC1\"} 100\n" + - "jvm_gc_collection_seconds_sum{gc=\"MyGC1\"} 10.0\n" + - "jvm_gc_collection_seconds_count{gc=\"MyGC2\"} 200\n" + - "jvm_gc_collection_seconds_sum{gc=\"MyGC2\"} 20.0\n" + - "# EOF\n"; + String expected = + "" + + "# TYPE jvm_gc_collection_seconds summary\n" + + "# UNIT jvm_gc_collection_seconds seconds\n" + + "# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.\n" + + "jvm_gc_collection_seconds_count{gc=\"MyGC1\"} 100\n" + + "jvm_gc_collection_seconds_sum{gc=\"MyGC1\"} 10.0\n" + + "jvm_gc_collection_seconds_count{gc=\"MyGC2\"} 200\n" + + "jvm_gc_collection_seconds_sum{gc=\"MyGC2\"} 20.0\n" + + "# EOF\n"; - Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); - } + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } - @Test - public void testIgnoredMetricNotScraped() { - MetricNameFilter filter = MetricNameFilter.builder() - .nameMustNotBeEqualTo("jvm_gc_collection_seconds") - .build(); + @Test + public void testIgnoredMetricNotScraped() { + MetricNameFilter filter = + MetricNameFilter.builder().nameMustNotBeEqualTo("jvm_gc_collection_seconds").build(); - PrometheusRegistry registry = new PrometheusRegistry(); - JvmGarbageCollectorMetrics.builder() - .garbageCollectorBeans(Arrays.asList(mockGcBean1, mockGcBean2)) - .register(registry); - MetricSnapshots snapshots = registry.scrape(filter); + PrometheusRegistry registry = new PrometheusRegistry(); + JvmGarbageCollectorMetrics.builder() + .garbageCollectorBeans(Arrays.asList(mockGcBean1, mockGcBean2)) + .register(registry); + MetricSnapshots snapshots = registry.scrape(filter); - verify(mockGcBean1, times(0)).getCollectionTime(); - verify(mockGcBean1, times(0)).getCollectionCount(); - Assert.assertEquals(0, snapshots.size()); - } + verify(mockGcBean1, times(0)).getCollectionTime(); + verify(mockGcBean1, times(0)).getCollectionCount(); + Assert.assertEquals(0, snapshots.size()); + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java index b70bb0bba..167299291 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java @@ -1,177 +1,177 @@ package io.prometheus.metrics.instrumentation.jvm; +import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import io.prometheus.metrics.model.registry.MetricNameFilter; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; - import java.io.IOException; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryPoolMXBean; import java.lang.management.MemoryUsage; import java.util.Arrays; - -import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; public class JvmMemoryMetricsTest { - private MemoryMXBean mockMemoryBean = Mockito.mock(MemoryMXBean.class); - private MemoryPoolMXBean mockPoolsBeanEdenSpace = Mockito.mock(MemoryPoolMXBean.class); - private MemoryPoolMXBean mockPoolsBeanOldGen = Mockito.mock(MemoryPoolMXBean.class); - private MemoryUsage memoryUsageHeap = Mockito.mock(MemoryUsage.class); - private MemoryUsage memoryUsageNonHeap = Mockito.mock(MemoryUsage.class); - private MemoryUsage memoryUsagePoolEdenSpace = Mockito.mock(MemoryUsage.class); - private MemoryUsage memoryUsagePoolOldGen = Mockito.mock(MemoryUsage.class); - private MemoryUsage memoryUsagePoolCollectionEdenSpace = Mockito.mock(MemoryUsage.class); - private MemoryUsage memoryUsagePoolCollectionOldGen = Mockito.mock(MemoryUsage.class); - - @Before - public void setUp() { - when(mockMemoryBean.getHeapMemoryUsage()).thenReturn(memoryUsageHeap); - when(mockMemoryBean.getNonHeapMemoryUsage()).thenReturn(memoryUsageNonHeap); - - long val = 1L; - when(mockMemoryBean.getObjectPendingFinalizationCount()).thenReturn((int) val++); - - when(memoryUsageHeap.getUsed()).thenReturn(val++); - when(memoryUsageHeap.getMax()).thenReturn(val++); - when(memoryUsageHeap.getCommitted()).thenReturn(val++); - when(memoryUsageHeap.getInit()).thenReturn(val++); - - when(memoryUsageNonHeap.getUsed()).thenReturn(val++); - when(memoryUsageNonHeap.getMax()).thenReturn(val++); - when(memoryUsageNonHeap.getCommitted()).thenReturn(val++); - when(memoryUsageNonHeap.getInit()).thenReturn(val++); - - when(memoryUsagePoolEdenSpace.getUsed()).thenReturn(val++); - when(memoryUsagePoolEdenSpace.getMax()).thenReturn(val++); - when(memoryUsagePoolEdenSpace.getCommitted()).thenReturn(val++); - when(memoryUsagePoolEdenSpace.getInit()).thenReturn(val++); - - when(memoryUsagePoolOldGen.getUsed()).thenReturn(val++); - when(memoryUsagePoolOldGen.getMax()).thenReturn(val++); - when(memoryUsagePoolOldGen.getCommitted()).thenReturn(val++); - when(memoryUsagePoolOldGen.getInit()).thenReturn(val++); - - when(memoryUsagePoolCollectionEdenSpace.getUsed()).thenReturn(val++); - when(memoryUsagePoolCollectionEdenSpace.getMax()).thenReturn(val++); - when(memoryUsagePoolCollectionEdenSpace.getCommitted()).thenReturn(val++); - when(memoryUsagePoolCollectionEdenSpace.getInit()).thenReturn(val++); - - when(memoryUsagePoolCollectionOldGen.getUsed()).thenReturn(val++); - when(memoryUsagePoolCollectionOldGen.getMax()).thenReturn(val++); - when(memoryUsagePoolCollectionOldGen.getCommitted()).thenReturn(val++); - when(memoryUsagePoolCollectionOldGen.getInit()).thenReturn(val++); - - when(mockPoolsBeanEdenSpace.getName()).thenReturn("PS Eden Space"); - when(mockPoolsBeanEdenSpace.getUsage()).thenReturn(memoryUsagePoolEdenSpace); - when(mockPoolsBeanEdenSpace.getCollectionUsage()).thenReturn(memoryUsagePoolCollectionEdenSpace); - - when(mockPoolsBeanOldGen.getName()).thenReturn("PS Old Gen"); - when(mockPoolsBeanOldGen.getUsage()).thenReturn(memoryUsagePoolOldGen); - when(mockPoolsBeanOldGen.getCollectionUsage()).thenReturn(memoryUsagePoolCollectionOldGen); - } - - @Test - public void testGoodCase() throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - JvmMemoryMetrics.builder() - .withMemoryBean(mockMemoryBean) - .withMemoryPoolBeans(Arrays.asList(mockPoolsBeanEdenSpace, mockPoolsBeanOldGen)) - .register(registry); - MetricSnapshots snapshots = registry.scrape(); - - String expected = "" + - "# TYPE jvm_memory_committed_bytes gauge\n" + - "# UNIT jvm_memory_committed_bytes bytes\n" + - "# HELP jvm_memory_committed_bytes Committed (bytes) of a given JVM memory area.\n" + - "jvm_memory_committed_bytes{area=\"heap\"} 4.0\n" + - "jvm_memory_committed_bytes{area=\"nonheap\"} 8.0\n" + - "# TYPE jvm_memory_init_bytes gauge\n" + - "# UNIT jvm_memory_init_bytes bytes\n" + - "# HELP jvm_memory_init_bytes Initial bytes of a given JVM memory area.\n" + - "jvm_memory_init_bytes{area=\"heap\"} 5.0\n" + - "jvm_memory_init_bytes{area=\"nonheap\"} 9.0\n" + - "# TYPE jvm_memory_max_bytes gauge\n" + - "# UNIT jvm_memory_max_bytes bytes\n" + - "# HELP jvm_memory_max_bytes Max (bytes) of a given JVM memory area.\n" + - "jvm_memory_max_bytes{area=\"heap\"} 3.0\n" + - "jvm_memory_max_bytes{area=\"nonheap\"} 7.0\n" + - "# TYPE jvm_memory_objects_pending_finalization gauge\n" + - "# HELP jvm_memory_objects_pending_finalization The number of objects waiting in the finalizer queue.\n" + - "jvm_memory_objects_pending_finalization 1.0\n" + - "# TYPE jvm_memory_pool_collection_committed_bytes gauge\n" + - "# UNIT jvm_memory_pool_collection_committed_bytes bytes\n" + - "# HELP jvm_memory_pool_collection_committed_bytes Committed after last collection bytes of a given JVM memory pool.\n" + - "jvm_memory_pool_collection_committed_bytes{pool=\"PS Eden Space\"} 20.0\n" + - "jvm_memory_pool_collection_committed_bytes{pool=\"PS Old Gen\"} 24.0\n" + - "# TYPE jvm_memory_pool_collection_init_bytes gauge\n" + - "# UNIT jvm_memory_pool_collection_init_bytes bytes\n" + - "# HELP jvm_memory_pool_collection_init_bytes Initial after last collection bytes of a given JVM memory pool.\n" + - "jvm_memory_pool_collection_init_bytes{pool=\"PS Eden Space\"} 21.0\n" + - "jvm_memory_pool_collection_init_bytes{pool=\"PS Old Gen\"} 25.0\n" + - "# TYPE jvm_memory_pool_collection_max_bytes gauge\n" + - "# UNIT jvm_memory_pool_collection_max_bytes bytes\n" + - "# HELP jvm_memory_pool_collection_max_bytes Max bytes after last collection of a given JVM memory pool.\n" + - "jvm_memory_pool_collection_max_bytes{pool=\"PS Eden Space\"} 19.0\n" + - "jvm_memory_pool_collection_max_bytes{pool=\"PS Old Gen\"} 23.0\n" + - "# TYPE jvm_memory_pool_collection_used_bytes gauge\n" + - "# UNIT jvm_memory_pool_collection_used_bytes bytes\n" + - "# HELP jvm_memory_pool_collection_used_bytes Used bytes after last collection of a given JVM memory pool.\n" + - "jvm_memory_pool_collection_used_bytes{pool=\"PS Eden Space\"} 18.0\n" + - "jvm_memory_pool_collection_used_bytes{pool=\"PS Old Gen\"} 22.0\n" + - "# TYPE jvm_memory_pool_committed_bytes gauge\n" + - "# UNIT jvm_memory_pool_committed_bytes bytes\n" + - "# HELP jvm_memory_pool_committed_bytes Committed bytes of a given JVM memory pool.\n" + - "jvm_memory_pool_committed_bytes{pool=\"PS Eden Space\"} 12.0\n" + - "jvm_memory_pool_committed_bytes{pool=\"PS Old Gen\"} 16.0\n" + - "# TYPE jvm_memory_pool_init_bytes gauge\n" + - "# UNIT jvm_memory_pool_init_bytes bytes\n" + - "# HELP jvm_memory_pool_init_bytes Initial bytes of a given JVM memory pool.\n" + - "jvm_memory_pool_init_bytes{pool=\"PS Eden Space\"} 13.0\n" + - "jvm_memory_pool_init_bytes{pool=\"PS Old Gen\"} 17.0\n" + - "# TYPE jvm_memory_pool_max_bytes gauge\n" + - "# UNIT jvm_memory_pool_max_bytes bytes\n" + - "# HELP jvm_memory_pool_max_bytes Max bytes of a given JVM memory pool.\n" + - "jvm_memory_pool_max_bytes{pool=\"PS Eden Space\"} 11.0\n" + - "jvm_memory_pool_max_bytes{pool=\"PS Old Gen\"} 15.0\n" + - "# TYPE jvm_memory_pool_used_bytes gauge\n" + - "# UNIT jvm_memory_pool_used_bytes bytes\n" + - "# HELP jvm_memory_pool_used_bytes Used bytes of a given JVM memory pool.\n" + - "jvm_memory_pool_used_bytes{pool=\"PS Eden Space\"} 10.0\n" + - "jvm_memory_pool_used_bytes{pool=\"PS Old Gen\"} 14.0\n" + - "# TYPE jvm_memory_used_bytes gauge\n" + - "# UNIT jvm_memory_used_bytes bytes\n" + - "# HELP jvm_memory_used_bytes Used bytes of a given JVM memory area.\n" + - "jvm_memory_used_bytes{area=\"heap\"} 2.0\n" + - "jvm_memory_used_bytes{area=\"nonheap\"} 6.0\n" + - "# EOF\n"; - - Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); - } - - @Test - public void testIgnoredMetricNotScraped() { - MetricNameFilter filter = MetricNameFilter.builder() - .nameMustNotBeEqualTo("jvm_memory_pool_used_bytes") - .build(); - - PrometheusRegistry registry = new PrometheusRegistry(); - JvmMemoryMetrics.builder() - .withMemoryBean(mockMemoryBean) - .withMemoryPoolBeans(Arrays.asList(mockPoolsBeanEdenSpace, mockPoolsBeanOldGen)) - .register(registry); - registry.scrape(filter); - - verify(memoryUsagePoolEdenSpace, times(0)).getUsed(); - verify(memoryUsagePoolOldGen, times(0)).getUsed(); - verify(memoryUsagePoolEdenSpace, times(1)).getMax(); - verify(memoryUsagePoolOldGen, times(1)).getMax(); - } + private MemoryMXBean mockMemoryBean = Mockito.mock(MemoryMXBean.class); + private MemoryPoolMXBean mockPoolsBeanEdenSpace = Mockito.mock(MemoryPoolMXBean.class); + private MemoryPoolMXBean mockPoolsBeanOldGen = Mockito.mock(MemoryPoolMXBean.class); + private MemoryUsage memoryUsageHeap = Mockito.mock(MemoryUsage.class); + private MemoryUsage memoryUsageNonHeap = Mockito.mock(MemoryUsage.class); + private MemoryUsage memoryUsagePoolEdenSpace = Mockito.mock(MemoryUsage.class); + private MemoryUsage memoryUsagePoolOldGen = Mockito.mock(MemoryUsage.class); + private MemoryUsage memoryUsagePoolCollectionEdenSpace = Mockito.mock(MemoryUsage.class); + private MemoryUsage memoryUsagePoolCollectionOldGen = Mockito.mock(MemoryUsage.class); + + @Before + public void setUp() { + when(mockMemoryBean.getHeapMemoryUsage()).thenReturn(memoryUsageHeap); + when(mockMemoryBean.getNonHeapMemoryUsage()).thenReturn(memoryUsageNonHeap); + + long val = 1L; + when(mockMemoryBean.getObjectPendingFinalizationCount()).thenReturn((int) val++); + + when(memoryUsageHeap.getUsed()).thenReturn(val++); + when(memoryUsageHeap.getMax()).thenReturn(val++); + when(memoryUsageHeap.getCommitted()).thenReturn(val++); + when(memoryUsageHeap.getInit()).thenReturn(val++); + + when(memoryUsageNonHeap.getUsed()).thenReturn(val++); + when(memoryUsageNonHeap.getMax()).thenReturn(val++); + when(memoryUsageNonHeap.getCommitted()).thenReturn(val++); + when(memoryUsageNonHeap.getInit()).thenReturn(val++); + + when(memoryUsagePoolEdenSpace.getUsed()).thenReturn(val++); + when(memoryUsagePoolEdenSpace.getMax()).thenReturn(val++); + when(memoryUsagePoolEdenSpace.getCommitted()).thenReturn(val++); + when(memoryUsagePoolEdenSpace.getInit()).thenReturn(val++); + + when(memoryUsagePoolOldGen.getUsed()).thenReturn(val++); + when(memoryUsagePoolOldGen.getMax()).thenReturn(val++); + when(memoryUsagePoolOldGen.getCommitted()).thenReturn(val++); + when(memoryUsagePoolOldGen.getInit()).thenReturn(val++); + + when(memoryUsagePoolCollectionEdenSpace.getUsed()).thenReturn(val++); + when(memoryUsagePoolCollectionEdenSpace.getMax()).thenReturn(val++); + when(memoryUsagePoolCollectionEdenSpace.getCommitted()).thenReturn(val++); + when(memoryUsagePoolCollectionEdenSpace.getInit()).thenReturn(val++); + + when(memoryUsagePoolCollectionOldGen.getUsed()).thenReturn(val++); + when(memoryUsagePoolCollectionOldGen.getMax()).thenReturn(val++); + when(memoryUsagePoolCollectionOldGen.getCommitted()).thenReturn(val++); + when(memoryUsagePoolCollectionOldGen.getInit()).thenReturn(val++); + + when(mockPoolsBeanEdenSpace.getName()).thenReturn("PS Eden Space"); + when(mockPoolsBeanEdenSpace.getUsage()).thenReturn(memoryUsagePoolEdenSpace); + when(mockPoolsBeanEdenSpace.getCollectionUsage()) + .thenReturn(memoryUsagePoolCollectionEdenSpace); + + when(mockPoolsBeanOldGen.getName()).thenReturn("PS Old Gen"); + when(mockPoolsBeanOldGen.getUsage()).thenReturn(memoryUsagePoolOldGen); + when(mockPoolsBeanOldGen.getCollectionUsage()).thenReturn(memoryUsagePoolCollectionOldGen); + } + + @Test + public void testGoodCase() throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + JvmMemoryMetrics.builder() + .withMemoryBean(mockMemoryBean) + .withMemoryPoolBeans(Arrays.asList(mockPoolsBeanEdenSpace, mockPoolsBeanOldGen)) + .register(registry); + MetricSnapshots snapshots = registry.scrape(); + + String expected = + "" + + "# TYPE jvm_memory_committed_bytes gauge\n" + + "# UNIT jvm_memory_committed_bytes bytes\n" + + "# HELP jvm_memory_committed_bytes Committed (bytes) of a given JVM memory area.\n" + + "jvm_memory_committed_bytes{area=\"heap\"} 4.0\n" + + "jvm_memory_committed_bytes{area=\"nonheap\"} 8.0\n" + + "# TYPE jvm_memory_init_bytes gauge\n" + + "# UNIT jvm_memory_init_bytes bytes\n" + + "# HELP jvm_memory_init_bytes Initial bytes of a given JVM memory area.\n" + + "jvm_memory_init_bytes{area=\"heap\"} 5.0\n" + + "jvm_memory_init_bytes{area=\"nonheap\"} 9.0\n" + + "# TYPE jvm_memory_max_bytes gauge\n" + + "# UNIT jvm_memory_max_bytes bytes\n" + + "# HELP jvm_memory_max_bytes Max (bytes) of a given JVM memory area.\n" + + "jvm_memory_max_bytes{area=\"heap\"} 3.0\n" + + "jvm_memory_max_bytes{area=\"nonheap\"} 7.0\n" + + "# TYPE jvm_memory_objects_pending_finalization gauge\n" + + "# HELP jvm_memory_objects_pending_finalization The number of objects waiting in the finalizer queue.\n" + + "jvm_memory_objects_pending_finalization 1.0\n" + + "# TYPE jvm_memory_pool_collection_committed_bytes gauge\n" + + "# UNIT jvm_memory_pool_collection_committed_bytes bytes\n" + + "# HELP jvm_memory_pool_collection_committed_bytes Committed after last collection bytes of a given JVM memory pool.\n" + + "jvm_memory_pool_collection_committed_bytes{pool=\"PS Eden Space\"} 20.0\n" + + "jvm_memory_pool_collection_committed_bytes{pool=\"PS Old Gen\"} 24.0\n" + + "# TYPE jvm_memory_pool_collection_init_bytes gauge\n" + + "# UNIT jvm_memory_pool_collection_init_bytes bytes\n" + + "# HELP jvm_memory_pool_collection_init_bytes Initial after last collection bytes of a given JVM memory pool.\n" + + "jvm_memory_pool_collection_init_bytes{pool=\"PS Eden Space\"} 21.0\n" + + "jvm_memory_pool_collection_init_bytes{pool=\"PS Old Gen\"} 25.0\n" + + "# TYPE jvm_memory_pool_collection_max_bytes gauge\n" + + "# UNIT jvm_memory_pool_collection_max_bytes bytes\n" + + "# HELP jvm_memory_pool_collection_max_bytes Max bytes after last collection of a given JVM memory pool.\n" + + "jvm_memory_pool_collection_max_bytes{pool=\"PS Eden Space\"} 19.0\n" + + "jvm_memory_pool_collection_max_bytes{pool=\"PS Old Gen\"} 23.0\n" + + "# TYPE jvm_memory_pool_collection_used_bytes gauge\n" + + "# UNIT jvm_memory_pool_collection_used_bytes bytes\n" + + "# HELP jvm_memory_pool_collection_used_bytes Used bytes after last collection of a given JVM memory pool.\n" + + "jvm_memory_pool_collection_used_bytes{pool=\"PS Eden Space\"} 18.0\n" + + "jvm_memory_pool_collection_used_bytes{pool=\"PS Old Gen\"} 22.0\n" + + "# TYPE jvm_memory_pool_committed_bytes gauge\n" + + "# UNIT jvm_memory_pool_committed_bytes bytes\n" + + "# HELP jvm_memory_pool_committed_bytes Committed bytes of a given JVM memory pool.\n" + + "jvm_memory_pool_committed_bytes{pool=\"PS Eden Space\"} 12.0\n" + + "jvm_memory_pool_committed_bytes{pool=\"PS Old Gen\"} 16.0\n" + + "# TYPE jvm_memory_pool_init_bytes gauge\n" + + "# UNIT jvm_memory_pool_init_bytes bytes\n" + + "# HELP jvm_memory_pool_init_bytes Initial bytes of a given JVM memory pool.\n" + + "jvm_memory_pool_init_bytes{pool=\"PS Eden Space\"} 13.0\n" + + "jvm_memory_pool_init_bytes{pool=\"PS Old Gen\"} 17.0\n" + + "# TYPE jvm_memory_pool_max_bytes gauge\n" + + "# UNIT jvm_memory_pool_max_bytes bytes\n" + + "# HELP jvm_memory_pool_max_bytes Max bytes of a given JVM memory pool.\n" + + "jvm_memory_pool_max_bytes{pool=\"PS Eden Space\"} 11.0\n" + + "jvm_memory_pool_max_bytes{pool=\"PS Old Gen\"} 15.0\n" + + "# TYPE jvm_memory_pool_used_bytes gauge\n" + + "# UNIT jvm_memory_pool_used_bytes bytes\n" + + "# HELP jvm_memory_pool_used_bytes Used bytes of a given JVM memory pool.\n" + + "jvm_memory_pool_used_bytes{pool=\"PS Eden Space\"} 10.0\n" + + "jvm_memory_pool_used_bytes{pool=\"PS Old Gen\"} 14.0\n" + + "# TYPE jvm_memory_used_bytes gauge\n" + + "# UNIT jvm_memory_used_bytes bytes\n" + + "# HELP jvm_memory_used_bytes Used bytes of a given JVM memory area.\n" + + "jvm_memory_used_bytes{area=\"heap\"} 2.0\n" + + "jvm_memory_used_bytes{area=\"nonheap\"} 6.0\n" + + "# EOF\n"; + + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } + + @Test + public void testIgnoredMetricNotScraped() { + MetricNameFilter filter = + MetricNameFilter.builder().nameMustNotBeEqualTo("jvm_memory_pool_used_bytes").build(); + + PrometheusRegistry registry = new PrometheusRegistry(); + JvmMemoryMetrics.builder() + .withMemoryBean(mockMemoryBean) + .withMemoryPoolBeans(Arrays.asList(mockPoolsBeanEdenSpace, mockPoolsBeanOldGen)) + .register(registry); + registry.scrape(filter); + + verify(memoryUsagePoolEdenSpace, times(0)).getUsed(); + verify(memoryUsagePoolOldGen, times(0)).getUsed(); + verify(memoryUsagePoolEdenSpace, times(1)).getMax(); + verify(memoryUsagePoolOldGen, times(1)).getMax(); + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java index 945ac5e27..8f90a9cb8 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java @@ -1,5 +1,7 @@ package io.prometheus.metrics.instrumentation.jvm; +import static org.junit.Assert.assertEquals; + import io.prometheus.metrics.core.metrics.Counter; import io.prometheus.metrics.instrumentation.jvm.JvmMemoryPoolAllocationMetrics.AllocationCountingNotificationListener; import io.prometheus.metrics.model.registry.PrometheusRegistry; @@ -9,57 +11,56 @@ import org.junit.Assert; import org.junit.Test; -import static org.junit.Assert.assertEquals; - public class JvmMemoryPoolAllocationMetricsTest { - @Test - public void testListenerLogic() { - PrometheusRegistry registry = new PrometheusRegistry(); - Counter counter = Counter.builder().name("test").labelNames("pool").register(registry); - AllocationCountingNotificationListener listener = new AllocationCountingNotificationListener(counter); + @Test + public void testListenerLogic() { + PrometheusRegistry registry = new PrometheusRegistry(); + Counter counter = Counter.builder().name("test").labelNames("pool").register(registry); + AllocationCountingNotificationListener listener = + new AllocationCountingNotificationListener(counter); - // Increase by 123 - listener.handleMemoryPool("TestPool", 0, 123); - assertEquals(123, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + // Increase by 123 + listener.handleMemoryPool("TestPool", 0, 123); + assertEquals(123, getCountByPool("test", "TestPool", registry.scrape()), 0.0); - // No increase - listener.handleMemoryPool("TestPool", 123, 123); - assertEquals(123, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + // No increase + listener.handleMemoryPool("TestPool", 123, 123); + assertEquals(123, getCountByPool("test", "TestPool", registry.scrape()), 0.0); - // No increase, then decrease to 0 - listener.handleMemoryPool("TestPool", 123, 0); - assertEquals(123, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + // No increase, then decrease to 0 + listener.handleMemoryPool("TestPool", 123, 0); + assertEquals(123, getCountByPool("test", "TestPool", registry.scrape()), 0.0); - // No increase, then increase by 7 - listener.handleMemoryPool("TestPool", 0, 7); - assertEquals(130, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + // No increase, then increase by 7 + listener.handleMemoryPool("TestPool", 0, 7); + assertEquals(130, getCountByPool("test", "TestPool", registry.scrape()), 0.0); - // Increase by 10, then decrease to 10 - listener.handleMemoryPool("TestPool", 17, 10); - assertEquals(140, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + // Increase by 10, then decrease to 10 + listener.handleMemoryPool("TestPool", 17, 10); + assertEquals(140, getCountByPool("test", "TestPool", registry.scrape()), 0.0); - // Increase by 7, then increase by 3 - listener.handleMemoryPool("TestPool", 17, 20); - assertEquals(150, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + // Increase by 7, then increase by 3 + listener.handleMemoryPool("TestPool", 17, 20); + assertEquals(150, getCountByPool("test", "TestPool", registry.scrape()), 0.0); - // Decrease to 17, then increase by 3 - listener.handleMemoryPool("TestPool", 17, 20); - assertEquals(153, getCountByPool("test", "TestPool", registry.scrape()), 0.0); - } + // Decrease to 17, then increase by 3 + listener.handleMemoryPool("TestPool", 17, 20); + assertEquals(153, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + } - private double getCountByPool(String metricName, String poolName, MetricSnapshots snapshots) { - for (MetricSnapshot snapshot : snapshots) { - if (snapshot.getMetadata().getPrometheusName().equals(metricName)) { - for (CounterSnapshot.CounterDataPointSnapshot data : ((CounterSnapshot) snapshot).getDataPoints()) { - if (data.getLabels().get("pool").equals(poolName)) { - return data.getValue(); - } - } - } + private double getCountByPool(String metricName, String poolName, MetricSnapshots snapshots) { + for (MetricSnapshot snapshot : snapshots) { + if (snapshot.getMetadata().getPrometheusName().equals(metricName)) { + for (CounterSnapshot.CounterDataPointSnapshot data : + ((CounterSnapshot) snapshot).getDataPoints()) { + if (data.getLabels().get("pool").equals(poolName)) { + return data.getValue(); + } } - Assert.fail("pool " + poolName + " not found."); - return 0.0; + } } - + Assert.fail("pool " + poolName + " not found."); + return 0.0; + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java index d93b1682d..f0df40538 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java @@ -1,19 +1,19 @@ package io.prometheus.metrics.instrumentation.jvm; -import io.prometheus.metrics.model.registry.PrometheusRegistry; -import org.junit.Test; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import org.junit.Test; + public class JvmMetricsTest { - @Test - public void testRegisterIdempotent() { - PrometheusRegistry registry = new PrometheusRegistry(); - assertEquals(0, registry.scrape().size()); - JvmMetrics.builder().register(registry); - assertTrue(registry.scrape().size() > 0); - JvmMetrics.builder().register(registry); - } + @Test + public void testRegisterIdempotent() { + PrometheusRegistry registry = new PrometheusRegistry(); + assertEquals(0, registry.scrape().size()); + JvmMetrics.builder().register(registry); + assertTrue(registry.scrape().size() > 0); + JvmMetrics.builder().register(registry); + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java index 4b9321660..13d1cc99f 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java @@ -1,25 +1,25 @@ package io.prometheus.metrics.instrumentation.jvm; +import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; +import static org.mockito.Mockito.when; + import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import java.io.IOException; import junit.framework.TestCase; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; -import java.io.IOException; - -import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.mockito.Mockito.when; - public class JvmNativeMemoryMetricsTest extends TestCase { @Test public void testNativeMemoryTrackingFail() throws IOException { JvmNativeMemoryMetrics.isEnabled.set(true); - JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); + JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = + Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); when(adapter.vmNativeMemorySummaryInBytes()).thenThrow(new RuntimeException("mock")); PrometheusRegistry registry = new PrometheusRegistry(); @@ -35,7 +35,8 @@ public void testNativeMemoryTrackingFail() throws IOException { public void testNativeMemoryTrackingEmpty() throws IOException { JvmNativeMemoryMetrics.isEnabled.set(true); - JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); + JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = + Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); when(adapter.vmNativeMemorySummaryInBytes()).thenReturn(""); PrometheusRegistry registry = new PrometheusRegistry(); @@ -51,8 +52,10 @@ public void testNativeMemoryTrackingEmpty() throws IOException { public void testNativeMemoryTrackingDisabled() throws IOException { JvmNativeMemoryMetrics.isEnabled.set(true); - JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); - when(adapter.vmNativeMemorySummaryInBytes()).thenReturn("Native memory tracking is not enabled"); + JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = + Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); + when(adapter.vmNativeMemorySummaryInBytes()) + .thenReturn("Native memory tracking is not enabled"); PrometheusRegistry registry = new PrometheusRegistry(); new JvmNativeMemoryMetrics.Builder(PrometheusProperties.get(), adapter).register(registry); @@ -67,159 +70,161 @@ public void testNativeMemoryTrackingDisabled() throws IOException { public void testNativeMemoryTrackingEnabled() throws IOException { JvmNativeMemoryMetrics.isEnabled.set(true); - JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); - when(adapter.vmNativeMemorySummaryInBytes()).thenReturn( - "Native Memory Tracking:\n" + - "\n" + - "Total: reserved=10341970661, committed=642716389\n" + - " malloc: 27513573 #22947\n" + - " mmap: reserved=10314457088, committed=615202816\n" + - "\n" + - "- Java Heap (reserved=8531214336, committed=536870912)\n" + - " (mmap: reserved=8531214336, committed=536870912) \n" + - " \n" + - "- Class (reserved=1073899939, committed=616867)\n" + - " (classes #1630)\n" + - " ( instance classes #1462, array classes #168)\n" + - " (malloc=158115 #2350) \n" + - " (mmap: reserved=1073741824, committed=458752) \n" + - " ( Metadata: )\n" + - " ( reserved=67108864, committed=2818048)\n" + - " ( used=2748008)\n" + - " ( waste=70040 =2.49%)\n" + - " ( Class space:)\n" + - " ( reserved=1073741824, committed=458752)\n" + - " ( used=343568)\n" + - " ( waste=115184 =25.11%)\n" + - " \n" + - "- Thread (reserved=21020080, committed=847280)\n" + - " (thread #20)\n" + - " (stack: reserved=20971520, committed=798720)\n" + - " (malloc=27512 #125) \n" + - " (arena=21048 #37)\n" + - " \n" + - "- Code (reserved=253796784, committed=7836080)\n" + - " (malloc=105944 #1403) \n" + - " (mmap: reserved=253689856, committed=7729152) \n" + - " (arena=984 #1)\n" + - " \n" + - "- GC (reserved=373343252, committed=76530708)\n" + - " (malloc=22463508 #720) \n" + - " (mmap: reserved=350879744, committed=54067200) \n" + - " \n" + - "- Compiler (reserved=1926356, committed=1926356)\n" + - " (malloc=20428 #73) \n" + - " (arena=1905928 #20)\n" + - " \n" + - "- Internal (reserved=242257, committed=242257)\n" + - " (malloc=176721 #1808) \n" + - " (mmap: reserved=65536, committed=65536) \n" + - " \n" + - "- Other (reserved=4096, committed=4096)\n" + - " (malloc=4096 #2) \n" + - " \n" + - "- Symbol (reserved=1505072, committed=1505072)\n" + - " (malloc=1136432 #14482) \n" + - " (arena=368640 #1)\n" + - " \n" + - "- Native Memory Tracking (reserved=373448, committed=373448)\n" + - " (malloc=6280 #91) \n" + - " (tracking overhead=367168)\n" + - " \n" + - "- Shared class space (reserved=16777216, committed=12386304)\n" + - " (mmap: reserved=16777216, committed=12386304) \n" + - " \n" + - "- Arena Chunk (reserved=503216, committed=503216)\n" + - " (malloc=503216) \n" + - " \n" + - "- Tracing (reserved=33097, committed=33097)\n" + - " (malloc=369 #10) \n" + - " (arena=32728 #1)\n" + - " \n" + - "- Arguments (reserved=160, committed=160)\n" + - " (malloc=160 #5) \n" + - " \n" + - "- Module (reserved=169168, committed=169168)\n" + - " (malloc=169168 #1266) \n" + - " \n" + - "- Safepoint (reserved=8192, committed=8192)\n" + - " (mmap: reserved=8192, committed=8192) \n" + - " \n" + - "- Synchronization (reserved=31160, committed=31160)\n" + - " (malloc=31160 #452) \n" + - " \n" + - "- Serviceability (reserved=600, committed=600)\n" + - " (malloc=600 #6) \n" + - " \n" + - "- Metaspace (reserved=67120768, committed=2829952)\n" + - " (malloc=11904 #12) \n" + - " (mmap: reserved=67108864, committed=2818048) \n" + - " \n" + - "- String Deduplication (reserved=632, committed=632)\n" + - " (malloc=632 #8) \n" + - " \n" + - "- Object Monitors (reserved=832, committed=832)\n" + - " (malloc=832 #4) \n" + - " \n" + - "\n" - ); + JvmNativeMemoryMetrics.PlatformMBeanServerAdapter adapter = + Mockito.mock(JvmNativeMemoryMetrics.PlatformMBeanServerAdapter.class); + when(adapter.vmNativeMemorySummaryInBytes()) + .thenReturn( + "Native Memory Tracking:\n" + + "\n" + + "Total: reserved=10341970661, committed=642716389\n" + + " malloc: 27513573 #22947\n" + + " mmap: reserved=10314457088, committed=615202816\n" + + "\n" + + "- Java Heap (reserved=8531214336, committed=536870912)\n" + + " (mmap: reserved=8531214336, committed=536870912) \n" + + " \n" + + "- Class (reserved=1073899939, committed=616867)\n" + + " (classes #1630)\n" + + " ( instance classes #1462, array classes #168)\n" + + " (malloc=158115 #2350) \n" + + " (mmap: reserved=1073741824, committed=458752) \n" + + " ( Metadata: )\n" + + " ( reserved=67108864, committed=2818048)\n" + + " ( used=2748008)\n" + + " ( waste=70040 =2.49%)\n" + + " ( Class space:)\n" + + " ( reserved=1073741824, committed=458752)\n" + + " ( used=343568)\n" + + " ( waste=115184 =25.11%)\n" + + " \n" + + "- Thread (reserved=21020080, committed=847280)\n" + + " (thread #20)\n" + + " (stack: reserved=20971520, committed=798720)\n" + + " (malloc=27512 #125) \n" + + " (arena=21048 #37)\n" + + " \n" + + "- Code (reserved=253796784, committed=7836080)\n" + + " (malloc=105944 #1403) \n" + + " (mmap: reserved=253689856, committed=7729152) \n" + + " (arena=984 #1)\n" + + " \n" + + "- GC (reserved=373343252, committed=76530708)\n" + + " (malloc=22463508 #720) \n" + + " (mmap: reserved=350879744, committed=54067200) \n" + + " \n" + + "- Compiler (reserved=1926356, committed=1926356)\n" + + " (malloc=20428 #73) \n" + + " (arena=1905928 #20)\n" + + " \n" + + "- Internal (reserved=242257, committed=242257)\n" + + " (malloc=176721 #1808) \n" + + " (mmap: reserved=65536, committed=65536) \n" + + " \n" + + "- Other (reserved=4096, committed=4096)\n" + + " (malloc=4096 #2) \n" + + " \n" + + "- Symbol (reserved=1505072, committed=1505072)\n" + + " (malloc=1136432 #14482) \n" + + " (arena=368640 #1)\n" + + " \n" + + "- Native Memory Tracking (reserved=373448, committed=373448)\n" + + " (malloc=6280 #91) \n" + + " (tracking overhead=367168)\n" + + " \n" + + "- Shared class space (reserved=16777216, committed=12386304)\n" + + " (mmap: reserved=16777216, committed=12386304) \n" + + " \n" + + "- Arena Chunk (reserved=503216, committed=503216)\n" + + " (malloc=503216) \n" + + " \n" + + "- Tracing (reserved=33097, committed=33097)\n" + + " (malloc=369 #10) \n" + + " (arena=32728 #1)\n" + + " \n" + + "- Arguments (reserved=160, committed=160)\n" + + " (malloc=160 #5) \n" + + " \n" + + "- Module (reserved=169168, committed=169168)\n" + + " (malloc=169168 #1266) \n" + + " \n" + + "- Safepoint (reserved=8192, committed=8192)\n" + + " (mmap: reserved=8192, committed=8192) \n" + + " \n" + + "- Synchronization (reserved=31160, committed=31160)\n" + + " (malloc=31160 #452) \n" + + " \n" + + "- Serviceability (reserved=600, committed=600)\n" + + " (malloc=600 #6) \n" + + " \n" + + "- Metaspace (reserved=67120768, committed=2829952)\n" + + " (malloc=11904 #12) \n" + + " (mmap: reserved=67108864, committed=2818048) \n" + + " \n" + + "- String Deduplication (reserved=632, committed=632)\n" + + " (malloc=632 #8) \n" + + " \n" + + "- Object Monitors (reserved=832, committed=832)\n" + + " (malloc=832 #4) \n" + + " \n" + + "\n"); PrometheusRegistry registry = new PrometheusRegistry(); new JvmNativeMemoryMetrics.Builder(PrometheusProperties.get(), adapter).register(registry); MetricSnapshots snapshots = registry.scrape(); - String expected = "" + - "# TYPE jvm_native_memory_committed_bytes gauge\n" + - "# UNIT jvm_native_memory_committed_bytes bytes\n" + - "# HELP jvm_native_memory_committed_bytes Committed bytes of a given JVM. Committed memory represents the amount of memory the JVM is using right now.\n" + - "jvm_native_memory_committed_bytes{pool=\"Arena Chunk\"} 503216.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Arguments\"} 160.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Class\"} 616867.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Code\"} 7836080.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Compiler\"} 1926356.0\n" + - "jvm_native_memory_committed_bytes{pool=\"GC\"} 7.6530708E7\n" + - "jvm_native_memory_committed_bytes{pool=\"Internal\"} 242257.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Java Heap\"} 5.36870912E8\n" + - "jvm_native_memory_committed_bytes{pool=\"Metaspace\"} 2829952.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Module\"} 169168.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Native Memory Tracking\"} 373448.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Object Monitors\"} 832.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Other\"} 4096.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Safepoint\"} 8192.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Serviceability\"} 600.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Shared class space\"} 1.2386304E7\n" + - "jvm_native_memory_committed_bytes{pool=\"String Deduplication\"} 632.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Symbol\"} 1505072.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Synchronization\"} 31160.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Thread\"} 847280.0\n" + - "jvm_native_memory_committed_bytes{pool=\"Total\"} 6.42716389E8\n" + - "jvm_native_memory_committed_bytes{pool=\"Tracing\"} 33097.0\n" + - "# TYPE jvm_native_memory_reserved_bytes gauge\n" + - "# UNIT jvm_native_memory_reserved_bytes bytes\n" + - "# HELP jvm_native_memory_reserved_bytes Reserved bytes of a given JVM. Reserved memory represents the total amount of memory the JVM can potentially use.\n" + - "jvm_native_memory_reserved_bytes{pool=\"Arena Chunk\"} 503216.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Arguments\"} 160.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Class\"} 1.073899939E9\n" + - "jvm_native_memory_reserved_bytes{pool=\"Code\"} 2.53796784E8\n" + - "jvm_native_memory_reserved_bytes{pool=\"Compiler\"} 1926356.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"GC\"} 3.73343252E8\n" + - "jvm_native_memory_reserved_bytes{pool=\"Internal\"} 242257.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Java Heap\"} 8.531214336E9\n" + - "jvm_native_memory_reserved_bytes{pool=\"Metaspace\"} 6.7120768E7\n" + - "jvm_native_memory_reserved_bytes{pool=\"Module\"} 169168.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Native Memory Tracking\"} 373448.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Object Monitors\"} 832.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Other\"} 4096.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Safepoint\"} 8192.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Serviceability\"} 600.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Shared class space\"} 1.6777216E7\n" + - "jvm_native_memory_reserved_bytes{pool=\"String Deduplication\"} 632.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Symbol\"} 1505072.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Synchronization\"} 31160.0\n" + - "jvm_native_memory_reserved_bytes{pool=\"Thread\"} 2.102008E7\n" + - "jvm_native_memory_reserved_bytes{pool=\"Total\"} 1.0341970661E10\n" + - "jvm_native_memory_reserved_bytes{pool=\"Tracing\"} 33097.0\n" + - "# EOF\n"; + String expected = + "" + + "# TYPE jvm_native_memory_committed_bytes gauge\n" + + "# UNIT jvm_native_memory_committed_bytes bytes\n" + + "# HELP jvm_native_memory_committed_bytes Committed bytes of a given JVM. Committed memory represents the amount of memory the JVM is using right now.\n" + + "jvm_native_memory_committed_bytes{pool=\"Arena Chunk\"} 503216.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Arguments\"} 160.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Class\"} 616867.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Code\"} 7836080.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Compiler\"} 1926356.0\n" + + "jvm_native_memory_committed_bytes{pool=\"GC\"} 7.6530708E7\n" + + "jvm_native_memory_committed_bytes{pool=\"Internal\"} 242257.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Java Heap\"} 5.36870912E8\n" + + "jvm_native_memory_committed_bytes{pool=\"Metaspace\"} 2829952.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Module\"} 169168.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Native Memory Tracking\"} 373448.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Object Monitors\"} 832.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Other\"} 4096.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Safepoint\"} 8192.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Serviceability\"} 600.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Shared class space\"} 1.2386304E7\n" + + "jvm_native_memory_committed_bytes{pool=\"String Deduplication\"} 632.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Symbol\"} 1505072.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Synchronization\"} 31160.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Thread\"} 847280.0\n" + + "jvm_native_memory_committed_bytes{pool=\"Total\"} 6.42716389E8\n" + + "jvm_native_memory_committed_bytes{pool=\"Tracing\"} 33097.0\n" + + "# TYPE jvm_native_memory_reserved_bytes gauge\n" + + "# UNIT jvm_native_memory_reserved_bytes bytes\n" + + "# HELP jvm_native_memory_reserved_bytes Reserved bytes of a given JVM. Reserved memory represents the total amount of memory the JVM can potentially use.\n" + + "jvm_native_memory_reserved_bytes{pool=\"Arena Chunk\"} 503216.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Arguments\"} 160.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Class\"} 1.073899939E9\n" + + "jvm_native_memory_reserved_bytes{pool=\"Code\"} 2.53796784E8\n" + + "jvm_native_memory_reserved_bytes{pool=\"Compiler\"} 1926356.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"GC\"} 3.73343252E8\n" + + "jvm_native_memory_reserved_bytes{pool=\"Internal\"} 242257.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Java Heap\"} 8.531214336E9\n" + + "jvm_native_memory_reserved_bytes{pool=\"Metaspace\"} 6.7120768E7\n" + + "jvm_native_memory_reserved_bytes{pool=\"Module\"} 169168.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Native Memory Tracking\"} 373448.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Object Monitors\"} 832.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Other\"} 4096.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Safepoint\"} 8192.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Serviceability\"} 600.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Shared class space\"} 1.6777216E7\n" + + "jvm_native_memory_reserved_bytes{pool=\"String Deduplication\"} 632.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Symbol\"} 1505072.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Synchronization\"} 31160.0\n" + + "jvm_native_memory_reserved_bytes{pool=\"Thread\"} 2.102008E7\n" + + "jvm_native_memory_reserved_bytes{pool=\"Total\"} 1.0341970661E10\n" + + "jvm_native_memory_reserved_bytes{pool=\"Tracing\"} 33097.0\n" + + "# EOF\n"; Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java index 0c4dd786a..a99178234 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java @@ -1,32 +1,32 @@ package io.prometheus.metrics.instrumentation.jvm; +import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; + import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import java.io.IOException; import org.junit.Assert; import org.junit.Test; -import java.io.IOException; - -import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; - public class JvmRuntimeInfoMetricTest { - @Test - public void testGoodCase() throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - JvmRuntimeInfoMetric.builder() - .version("1.8.0_382-b05") - .vendor("Oracle Corporation") - .runtime("OpenJDK Runtime Environment") - .register(registry); - MetricSnapshots snapshots = registry.scrape(); + @Test + public void testGoodCase() throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + JvmRuntimeInfoMetric.builder() + .version("1.8.0_382-b05") + .vendor("Oracle Corporation") + .runtime("OpenJDK Runtime Environment") + .register(registry); + MetricSnapshots snapshots = registry.scrape(); - String expected = "" + - "# TYPE jvm_runtime info\n" + - "# HELP jvm_runtime JVM runtime info\n" + - "jvm_runtime_info{runtime=\"OpenJDK Runtime Environment\",vendor=\"Oracle Corporation\",version=\"1.8.0_382-b05\"} 1\n" + - "# EOF\n"; + String expected = + "" + + "# TYPE jvm_runtime info\n" + + "# HELP jvm_runtime JVM runtime info\n" + + "jvm_runtime_info{runtime=\"OpenJDK Runtime Environment\",vendor=\"Oracle Corporation\",version=\"1.8.0_382-b05\"} 1\n" + + "# EOF\n"; - Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); - } + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java index 94cadc268..e454082b2 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java @@ -1,200 +1,199 @@ package io.prometheus.metrics.instrumentation.jvm; +import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import io.prometheus.metrics.model.registry.MetricNameFilter; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; - import java.io.IOException; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CountDownLatch; - -import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; public class JvmThreadsMetricsTest { - private ThreadMXBean mockThreadsBean = Mockito.mock(ThreadMXBean.class); - private ThreadInfo mockThreadInfoBlocked = Mockito.mock(ThreadInfo.class); - private ThreadInfo mockThreadInfoRunnable1 = Mockito.mock(ThreadInfo.class); - private ThreadInfo mockThreadInfoRunnable2 = Mockito.mock(ThreadInfo.class); - - @Before - public void setUp() { - when(mockThreadsBean.getThreadCount()).thenReturn(300); - when(mockThreadsBean.getDaemonThreadCount()).thenReturn(200); - when(mockThreadsBean.getPeakThreadCount()).thenReturn(301); - when(mockThreadsBean.getTotalStartedThreadCount()).thenReturn(503L); - when(mockThreadsBean.findDeadlockedThreads()).thenReturn(new long[]{1L, 2L, 3L}); - when(mockThreadsBean.findMonitorDeadlockedThreads()).thenReturn(new long[]{2L, 3L, 4L}); - when(mockThreadsBean.getAllThreadIds()).thenReturn(new long[]{3L, 4L, 5L}); - when(mockThreadInfoBlocked.getThreadState()).thenReturn(Thread.State.BLOCKED); - when(mockThreadInfoRunnable1.getThreadState()).thenReturn(Thread.State.RUNNABLE); - when(mockThreadInfoRunnable2.getThreadState()).thenReturn(Thread.State.RUNNABLE); - when(mockThreadsBean.getThreadInfo(new long[]{3L, 4L, 5L}, 0)).thenReturn(new ThreadInfo[]{ - mockThreadInfoBlocked, mockThreadInfoRunnable1, mockThreadInfoRunnable2 - }); + private ThreadMXBean mockThreadsBean = Mockito.mock(ThreadMXBean.class); + private ThreadInfo mockThreadInfoBlocked = Mockito.mock(ThreadInfo.class); + private ThreadInfo mockThreadInfoRunnable1 = Mockito.mock(ThreadInfo.class); + private ThreadInfo mockThreadInfoRunnable2 = Mockito.mock(ThreadInfo.class); + + @Before + public void setUp() { + when(mockThreadsBean.getThreadCount()).thenReturn(300); + when(mockThreadsBean.getDaemonThreadCount()).thenReturn(200); + when(mockThreadsBean.getPeakThreadCount()).thenReturn(301); + when(mockThreadsBean.getTotalStartedThreadCount()).thenReturn(503L); + when(mockThreadsBean.findDeadlockedThreads()).thenReturn(new long[] {1L, 2L, 3L}); + when(mockThreadsBean.findMonitorDeadlockedThreads()).thenReturn(new long[] {2L, 3L, 4L}); + when(mockThreadsBean.getAllThreadIds()).thenReturn(new long[] {3L, 4L, 5L}); + when(mockThreadInfoBlocked.getThreadState()).thenReturn(Thread.State.BLOCKED); + when(mockThreadInfoRunnable1.getThreadState()).thenReturn(Thread.State.RUNNABLE); + when(mockThreadInfoRunnable2.getThreadState()).thenReturn(Thread.State.RUNNABLE); + when(mockThreadsBean.getThreadInfo(new long[] {3L, 4L, 5L}, 0)) + .thenReturn( + new ThreadInfo[] { + mockThreadInfoBlocked, mockThreadInfoRunnable1, mockThreadInfoRunnable2 + }); + } + + @Test + public void testGoodCase() throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + JvmThreadsMetrics.builder().threadBean(mockThreadsBean).isNativeImage(false).register(registry); + MetricSnapshots snapshots = registry.scrape(); + + String expected = + "" + + "# TYPE jvm_threads_current gauge\n" + + "# HELP jvm_threads_current Current thread count of a JVM\n" + + "jvm_threads_current 300.0\n" + + "# TYPE jvm_threads_daemon gauge\n" + + "# HELP jvm_threads_daemon Daemon thread count of a JVM\n" + + "jvm_threads_daemon 200.0\n" + + "# TYPE jvm_threads_deadlocked gauge\n" + + "# HELP jvm_threads_deadlocked Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers\n" + + "jvm_threads_deadlocked 3.0\n" + + "# TYPE jvm_threads_deadlocked_monitor gauge\n" + + "# HELP jvm_threads_deadlocked_monitor Cycles of JVM-threads that are in deadlock waiting to acquire object monitors\n" + + "jvm_threads_deadlocked_monitor 3.0\n" + + "# TYPE jvm_threads_peak gauge\n" + + "# HELP jvm_threads_peak Peak thread count of a JVM\n" + + "jvm_threads_peak 301.0\n" + + "# TYPE jvm_threads_started counter\n" + + "# HELP jvm_threads_started Started thread count of a JVM\n" + + "jvm_threads_started_total 503.0\n" + + "# TYPE jvm_threads_state gauge\n" + + "# HELP jvm_threads_state Current count of threads by state\n" + + "jvm_threads_state{state=\"BLOCKED\"} 1.0\n" + + "jvm_threads_state{state=\"NEW\"} 0.0\n" + + "jvm_threads_state{state=\"RUNNABLE\"} 2.0\n" + + "jvm_threads_state{state=\"TERMINATED\"} 0.0\n" + + "jvm_threads_state{state=\"TIMED_WAITING\"} 0.0\n" + + "jvm_threads_state{state=\"UNKNOWN\"} 0.0\n" + + "jvm_threads_state{state=\"WAITING\"} 0.0\n" + + "# EOF\n"; + + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } + + @Test + public void testIgnoredMetricNotScraped() { + MetricNameFilter filter = + MetricNameFilter.builder().nameMustNotBeEqualTo("jvm_threads_deadlocked").build(); + + PrometheusRegistry registry = new PrometheusRegistry(); + JvmThreadsMetrics.builder().threadBean(mockThreadsBean).isNativeImage(false).register(registry); + registry.scrape(filter); + + verify(mockThreadsBean, times(0)).findDeadlockedThreads(); + verify(mockThreadsBean, times(1)).getThreadCount(); + } + + @Test + public void testInvalidThreadIds() { + try { + String javaVersion = System.getProperty("java.version"); // Example: "21.0.2" + String majorJavaVersion = javaVersion.replaceAll("\\..*", ""); // Example: "21" + if (Integer.parseInt(majorJavaVersion) >= 21) { + // With Java 21 and newer you can no longer have invalid thread ids. + return; + } + } catch (NumberFormatException ignored) { } - - @Test - public void testGoodCase() throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - JvmThreadsMetrics.builder() - .threadBean(mockThreadsBean) - .isNativeImage(false) - .register(registry); - MetricSnapshots snapshots = registry.scrape(); - - String expected = "" + - "# TYPE jvm_threads_current gauge\n" + - "# HELP jvm_threads_current Current thread count of a JVM\n" + - "jvm_threads_current 300.0\n" + - "# TYPE jvm_threads_daemon gauge\n" + - "# HELP jvm_threads_daemon Daemon thread count of a JVM\n" + - "jvm_threads_daemon 200.0\n" + - "# TYPE jvm_threads_deadlocked gauge\n" + - "# HELP jvm_threads_deadlocked Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers\n" + - "jvm_threads_deadlocked 3.0\n" + - "# TYPE jvm_threads_deadlocked_monitor gauge\n" + - "# HELP jvm_threads_deadlocked_monitor Cycles of JVM-threads that are in deadlock waiting to acquire object monitors\n" + - "jvm_threads_deadlocked_monitor 3.0\n" + - "# TYPE jvm_threads_peak gauge\n" + - "# HELP jvm_threads_peak Peak thread count of a JVM\n" + - "jvm_threads_peak 301.0\n" + - "# TYPE jvm_threads_started counter\n" + - "# HELP jvm_threads_started Started thread count of a JVM\n" + - "jvm_threads_started_total 503.0\n" + - "# TYPE jvm_threads_state gauge\n" + - "# HELP jvm_threads_state Current count of threads by state\n" + - "jvm_threads_state{state=\"BLOCKED\"} 1.0\n" + - "jvm_threads_state{state=\"NEW\"} 0.0\n" + - "jvm_threads_state{state=\"RUNNABLE\"} 2.0\n" + - "jvm_threads_state{state=\"TERMINATED\"} 0.0\n" + - "jvm_threads_state{state=\"TIMED_WAITING\"} 0.0\n" + - "jvm_threads_state{state=\"UNKNOWN\"} 0.0\n" + - "jvm_threads_state{state=\"WAITING\"} 0.0\n" + - "# EOF\n"; - - Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); - } - - @Test - public void testIgnoredMetricNotScraped() { - MetricNameFilter filter = MetricNameFilter.builder() - .nameMustNotBeEqualTo("jvm_threads_deadlocked") - .build(); - - PrometheusRegistry registry = new PrometheusRegistry(); - JvmThreadsMetrics.builder() - .threadBean(mockThreadsBean) - .isNativeImage(false) - .register(registry); - registry.scrape(filter); - - verify(mockThreadsBean, times(0)).findDeadlockedThreads(); - verify(mockThreadsBean, times(1)).getThreadCount(); + PrometheusRegistry registry = new PrometheusRegistry(); + JvmThreadsMetrics.builder().register(registry); + + // Number of threads to create with invalid thread ids + int numberOfInvalidThreadIds = 2; + + Map expected = getCountByState(registry.scrape()); + expected.compute( + "UNKNOWN", + (key, oldValue) -> + oldValue == null ? numberOfInvalidThreadIds : oldValue + numberOfInvalidThreadIds); + + final CountDownLatch countDownLatch = new CountDownLatch(numberOfInvalidThreadIds); + + try { + // Create and start threads with invalid thread ids (id=0, id=-1, etc.) + for (int i = 0; i < numberOfInvalidThreadIds; i++) { + new ThreadWithInvalidId(-i, new TestRunnable(countDownLatch)).start(); + } + + Map actual = getCountByState(registry.scrape()); + + Assert.assertEquals(expected.size(), actual.size()); + for (String threadState : expected.keySet()) { + Assert.assertEquals(expected.get(threadState), actual.get(threadState), 0.0); + } + } finally { + for (int i = 0; i < numberOfInvalidThreadIds; i++) { + countDownLatch.countDown(); + } } - - @Test - public void testInvalidThreadIds() { - try { - String javaVersion = System.getProperty("java.version"); // Example: "21.0.2" - String majorJavaVersion = javaVersion.replaceAll("\\..*", ""); // Example: "21" - if (Integer.parseInt(majorJavaVersion) >= 21) { - // With Java 21 and newer you can no longer have invalid thread ids. - return; - } - } catch (NumberFormatException ignored) { + } + + private Map getCountByState(MetricSnapshots snapshots) { + Map result = new HashMap<>(); + for (MetricSnapshot snapshot : snapshots) { + if (snapshot.getMetadata().getName().equals("jvm_threads_state")) { + for (GaugeSnapshot.GaugeDataPointSnapshot data : + ((GaugeSnapshot) snapshot).getDataPoints()) { + String state = data.getLabels().get("state"); + Assert.assertNotNull(state); + result.put(state, data.getValue()); } - PrometheusRegistry registry = new PrometheusRegistry(); - JvmThreadsMetrics.builder().register(registry); - - // Number of threads to create with invalid thread ids - int numberOfInvalidThreadIds = 2; - - Map expected = getCountByState(registry.scrape()); - expected.compute("UNKNOWN", (key, oldValue) -> oldValue == null ? numberOfInvalidThreadIds : oldValue + numberOfInvalidThreadIds); - - final CountDownLatch countDownLatch = new CountDownLatch(numberOfInvalidThreadIds); + } + } + return result; + } - try { - // Create and start threads with invalid thread ids (id=0, id=-1, etc.) - for (int i = 0; i < numberOfInvalidThreadIds; i++) { - new ThreadWithInvalidId(-i, new TestRunnable(countDownLatch)).start(); - } + private static class ThreadWithInvalidId extends Thread { - Map actual = getCountByState(registry.scrape()); + private final long id; - Assert.assertEquals(expected.size(), actual.size()); - for (String threadState : expected.keySet()) { - Assert.assertEquals(expected.get(threadState), actual.get(threadState), 0.0); - } - } finally { - for (int i = 0; i < numberOfInvalidThreadIds; i++) { - countDownLatch.countDown(); - } - } + public ThreadWithInvalidId(long id, Runnable runnable) { + super(runnable); + setDaemon(true); + this.id = id; } - private Map getCountByState(MetricSnapshots snapshots) { - Map result = new HashMap<>(); - for (MetricSnapshot snapshot : snapshots) { - if (snapshot.getMetadata().getName().equals("jvm_threads_state")) { - for (GaugeSnapshot.GaugeDataPointSnapshot data : ((GaugeSnapshot) snapshot).getDataPoints()) { - String state = data.getLabels().get("state"); - Assert.assertNotNull(state); - result.put(state, data.getValue()); - } - } - } - return result; + /** + * Note that only Java versions < 21 call this to get the thread id. With Java 21 and newer it's + * no longer possible to make an invalid thread id. + */ + @Override + public long getId() { + return this.id; } + } - private static class ThreadWithInvalidId extends Thread { - - private final long id; + private static class TestRunnable implements Runnable { - public ThreadWithInvalidId(long id, Runnable runnable) { - super(runnable); - setDaemon(true); - this.id = id; - } + private final CountDownLatch countDownLatch; - /** - * Note that only Java versions < 21 call this to get the thread id. - * With Java 21 and newer it's no longer possible to make an invalid thread id. - */ - @Override - public long getId() { - return this.id; - } + public TestRunnable(CountDownLatch countDownLatch) { + this.countDownLatch = countDownLatch; } - private static class TestRunnable implements Runnable { - - private final CountDownLatch countDownLatch; - - public TestRunnable(CountDownLatch countDownLatch) { - this.countDownLatch = countDownLatch; - } - - @Override - public void run() { - try { - countDownLatch.await(); - } catch (InterruptedException e) { - // DO NOTHING - } - } + @Override + public void run() { + try { + countDownLatch.await(); + } catch (InterruptedException e) { + // DO NOTHING + } } + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java index 92f286e01..41a5b514b 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java @@ -1,116 +1,120 @@ package io.prometheus.metrics.instrumentation.jvm; +import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import io.prometheus.metrics.model.registry.MetricNameFilter; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; - import java.io.File; import java.io.IOException; import java.lang.management.RuntimeMXBean; import java.util.concurrent.TimeUnit; - -import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; public class ProcessMetricsTest { - private com.sun.management.UnixOperatingSystemMXBean sunOsBean = Mockito.mock(com.sun.management.UnixOperatingSystemMXBean.class); - private java.lang.management.OperatingSystemMXBean javaOsBean = Mockito.mock(java.lang.management.OperatingSystemMXBean.class); - private ProcessMetrics.Grepper linuxGrepper = Mockito.mock(ProcessMetrics.Grepper.class); - private ProcessMetrics.Grepper windowsGrepper = Mockito.mock(ProcessMetrics.Grepper.class); - private RuntimeMXBean runtimeBean = Mockito.mock(RuntimeMXBean.class); + private com.sun.management.UnixOperatingSystemMXBean sunOsBean = + Mockito.mock(com.sun.management.UnixOperatingSystemMXBean.class); + private java.lang.management.OperatingSystemMXBean javaOsBean = + Mockito.mock(java.lang.management.OperatingSystemMXBean.class); + private ProcessMetrics.Grepper linuxGrepper = Mockito.mock(ProcessMetrics.Grepper.class); + private ProcessMetrics.Grepper windowsGrepper = Mockito.mock(ProcessMetrics.Grepper.class); + private RuntimeMXBean runtimeBean = Mockito.mock(RuntimeMXBean.class); - @Before - public void setUp() throws IOException { - when(sunOsBean.getProcessCpuTime()).thenReturn(TimeUnit.MILLISECONDS.toNanos(72)); - when(sunOsBean.getOpenFileDescriptorCount()).thenReturn(127L); - when(sunOsBean.getMaxFileDescriptorCount()).thenReturn(244L); - when(runtimeBean.getStartTime()).thenReturn(37100L); - when(linuxGrepper.lineStartingWith(any(File.class), eq("VmSize:"))).thenReturn("VmSize: 6036 kB"); - when(linuxGrepper.lineStartingWith(any(File.class), eq("VmRSS:"))).thenReturn("VmRSS: 1012 kB"); - } + @Before + public void setUp() throws IOException { + when(sunOsBean.getProcessCpuTime()).thenReturn(TimeUnit.MILLISECONDS.toNanos(72)); + when(sunOsBean.getOpenFileDescriptorCount()).thenReturn(127L); + when(sunOsBean.getMaxFileDescriptorCount()).thenReturn(244L); + when(runtimeBean.getStartTime()).thenReturn(37100L); + when(linuxGrepper.lineStartingWith(any(File.class), eq("VmSize:"))) + .thenReturn("VmSize: 6036 kB"); + when(linuxGrepper.lineStartingWith(any(File.class), eq("VmRSS:"))) + .thenReturn("VmRSS: 1012 kB"); + } - @Test - public void testGoodCase() throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - ProcessMetrics.builder() - .osBean(sunOsBean) - .runtimeBean(runtimeBean) - .grepper(linuxGrepper) - .register(registry); - MetricSnapshots snapshots = registry.scrape(); + @Test + public void testGoodCase() throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + ProcessMetrics.builder() + .osBean(sunOsBean) + .runtimeBean(runtimeBean) + .grepper(linuxGrepper) + .register(registry); + MetricSnapshots snapshots = registry.scrape(); - String expected = "" + - "# TYPE process_cpu_seconds counter\n" + - "# UNIT process_cpu_seconds seconds\n" + - "# HELP process_cpu_seconds Total user and system CPU time spent in seconds.\n" + - "process_cpu_seconds_total 0.072\n" + - "# TYPE process_max_fds gauge\n" + - "# HELP process_max_fds Maximum number of open file descriptors.\n" + - "process_max_fds 244.0\n" + - "# TYPE process_open_fds gauge\n" + - "# HELP process_open_fds Number of open file descriptors.\n" + - "process_open_fds 127.0\n" + - "# TYPE process_resident_memory_bytes gauge\n" + - "# UNIT process_resident_memory_bytes bytes\n" + - "# HELP process_resident_memory_bytes Resident memory size in bytes.\n" + - "process_resident_memory_bytes 1036288.0\n" + - "# TYPE process_start_time_seconds gauge\n" + - "# UNIT process_start_time_seconds seconds\n" + - "# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.\n" + - "process_start_time_seconds 37.1\n" + - "# TYPE process_virtual_memory_bytes gauge\n" + - "# UNIT process_virtual_memory_bytes bytes\n" + - "# HELP process_virtual_memory_bytes Virtual memory size in bytes.\n" + - "process_virtual_memory_bytes 6180864.0\n" + - "# EOF\n"; + String expected = + "" + + "# TYPE process_cpu_seconds counter\n" + + "# UNIT process_cpu_seconds seconds\n" + + "# HELP process_cpu_seconds Total user and system CPU time spent in seconds.\n" + + "process_cpu_seconds_total 0.072\n" + + "# TYPE process_max_fds gauge\n" + + "# HELP process_max_fds Maximum number of open file descriptors.\n" + + "process_max_fds 244.0\n" + + "# TYPE process_open_fds gauge\n" + + "# HELP process_open_fds Number of open file descriptors.\n" + + "process_open_fds 127.0\n" + + "# TYPE process_resident_memory_bytes gauge\n" + + "# UNIT process_resident_memory_bytes bytes\n" + + "# HELP process_resident_memory_bytes Resident memory size in bytes.\n" + + "process_resident_memory_bytes 1036288.0\n" + + "# TYPE process_start_time_seconds gauge\n" + + "# UNIT process_start_time_seconds seconds\n" + + "# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.\n" + + "process_start_time_seconds 37.1\n" + + "# TYPE process_virtual_memory_bytes gauge\n" + + "# UNIT process_virtual_memory_bytes bytes\n" + + "# HELP process_virtual_memory_bytes Virtual memory size in bytes.\n" + + "process_virtual_memory_bytes 6180864.0\n" + + "# EOF\n"; - Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); - } + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } - @Test - public void testMinimal() throws IOException { - PrometheusRegistry registry = new PrometheusRegistry(); - ProcessMetrics.builder() - .osBean(javaOsBean) - .runtimeBean(runtimeBean) - .grepper(windowsGrepper) - .register(registry); - MetricSnapshots snapshots = registry.scrape(); + @Test + public void testMinimal() throws IOException { + PrometheusRegistry registry = new PrometheusRegistry(); + ProcessMetrics.builder() + .osBean(javaOsBean) + .runtimeBean(runtimeBean) + .grepper(windowsGrepper) + .register(registry); + MetricSnapshots snapshots = registry.scrape(); - String expected = "" + - "# TYPE process_start_time_seconds gauge\n" + - "# UNIT process_start_time_seconds seconds\n" + - "# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.\n" + - "process_start_time_seconds 37.1\n" + - "# EOF\n"; + String expected = + "" + + "# TYPE process_start_time_seconds gauge\n" + + "# UNIT process_start_time_seconds seconds\n" + + "# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.\n" + + "process_start_time_seconds 37.1\n" + + "# EOF\n"; - Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); - } + Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + } - @Test - public void testIgnoredMetricNotScraped() { - MetricNameFilter filter = MetricNameFilter.builder() - .nameMustNotBeEqualTo("process_max_fds") - .build(); + @Test + public void testIgnoredMetricNotScraped() { + MetricNameFilter filter = + MetricNameFilter.builder().nameMustNotBeEqualTo("process_max_fds").build(); - PrometheusRegistry registry = new PrometheusRegistry(); - ProcessMetrics.builder() - .osBean(sunOsBean) - .runtimeBean(runtimeBean) - .grepper(linuxGrepper) - .register(registry); - registry.scrape(filter); + PrometheusRegistry registry = new PrometheusRegistry(); + ProcessMetrics.builder() + .osBean(sunOsBean) + .runtimeBean(runtimeBean) + .grepper(linuxGrepper) + .register(registry); + registry.scrape(filter); - verify(sunOsBean, times(0)).getMaxFileDescriptorCount(); - verify(sunOsBean, times(1)).getOpenFileDescriptorCount(); - } + verify(sunOsBean, times(0)).getMaxFileDescriptorCount(); + verify(sunOsBean, times(1)).getOpenFileDescriptorCount(); + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/TestUtil.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/TestUtil.java index 2b0d7972c..a86517368 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/TestUtil.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/TestUtil.java @@ -2,17 +2,16 @@ import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; import io.prometheus.metrics.model.snapshots.MetricSnapshots; - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; public class TestUtil { - static String convertToOpenMetricsFormat(MetricSnapshots snapshots) throws IOException { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); - writer.write(out, snapshots); - return out.toString(StandardCharsets.UTF_8.name()); - } + static String convertToOpenMetricsFormat(MetricSnapshots snapshots) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + writer.write(out, snapshots); + return out.toString(StandardCharsets.UTF_8.name()); + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MetricNameFilter.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MetricNameFilter.java index c0c345a1b..59fbe6a13 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MetricNameFilter.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MetricNameFilter.java @@ -1,196 +1,197 @@ package io.prometheus.metrics.model.registry; +import static java.util.Collections.unmodifiableCollection; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.function.Predicate; -import static java.util.Collections.unmodifiableCollection; - -/** - * Filter samples (i.e. time series) by name. - */ +/** Filter samples (i.e. time series) by name. */ public class MetricNameFilter implements Predicate { + /** For convenience, a filter that allows all names. */ + public static final Predicate ALLOW_ALL = name -> true; + + private final Collection nameIsEqualTo; + private final Collection nameIsNotEqualTo; + private final Collection nameStartsWith; + private final Collection nameDoesNotStartWith; + + private MetricNameFilter( + Collection nameIsEqualTo, + Collection nameIsNotEqualTo, + Collection nameStartsWith, + Collection nameDoesNotStartWith) { + this.nameIsEqualTo = unmodifiableCollection(new ArrayList<>(nameIsEqualTo)); + this.nameIsNotEqualTo = unmodifiableCollection(new ArrayList<>(nameIsNotEqualTo)); + this.nameStartsWith = unmodifiableCollection(new ArrayList<>(nameStartsWith)); + this.nameDoesNotStartWith = unmodifiableCollection(new ArrayList<>(nameDoesNotStartWith)); + } + + @Override + public boolean test(String sampleName) { + return matchesNameEqualTo(sampleName) + && !matchesNameNotEqualTo(sampleName) + && matchesNameStartsWith(sampleName) + && !matchesNameDoesNotStartWith(sampleName); + } + + private boolean matchesNameEqualTo(String metricName) { + if (nameIsEqualTo.isEmpty()) { + return true; + } + for (String name : nameIsEqualTo) { + // The following ignores suffixes like _total. + // "request_count" and "request_count_total" both match a metric named "request_count". + if (name.startsWith(metricName)) { + return true; + } + } + return false; + } + + private boolean matchesNameNotEqualTo(String metricName) { + if (nameIsNotEqualTo.isEmpty()) { + return false; + } + for (String name : nameIsNotEqualTo) { + // The following ignores suffixes like _total. + // "request_count" and "request_count_total" both match a metric named "request_count". + if (name.startsWith(metricName)) { + return true; + } + } + return false; + } + + private boolean matchesNameStartsWith(String metricName) { + if (nameStartsWith.isEmpty()) { + return true; + } + for (String prefix : nameStartsWith) { + if (metricName.startsWith(prefix)) { + return true; + } + } + return false; + } + + private boolean matchesNameDoesNotStartWith(String metricName) { + if (nameDoesNotStartWith.isEmpty()) { + return false; + } + for (String prefix : nameDoesNotStartWith) { + if (metricName.startsWith(prefix)) { + return true; + } + } + return false; + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + + private final Collection nameEqualTo = new ArrayList<>(); + private final Collection nameNotEqualTo = new ArrayList<>(); + private final Collection nameStartsWith = new ArrayList<>(); + private final Collection nameDoesNotStartWith = new ArrayList<>(); + + private Builder() {} + + /** + * @see #nameMustBeEqualTo(Collection) + */ + public Builder nameMustBeEqualTo(String... names) { + return nameMustBeEqualTo(Arrays.asList(names)); + } + + /** + * Only samples with one of the {@code names} will be included. + * + *

    Note that the provided {@code names} will be matched against the sample name (i.e. the + * time series name) and not the metric name. For instance, to retrieve all samples from a + * histogram, you must include the '_count', '_sum' and '_bucket' names. + * + *

    This method should be used by HTTP exporters to implement the {@code ?name[]=} URL + * parameters. + * + * @param names empty means no restriction. + */ + public Builder nameMustBeEqualTo(Collection names) { + if (names != null) { + nameEqualTo.addAll(names); + } + return this; + } + + /** + * @see #nameMustNotBeEqualTo(Collection) + */ + public Builder nameMustNotBeEqualTo(String... names) { + return nameMustNotBeEqualTo(Arrays.asList(names)); + } + /** - * For convenience, a filter that allows all names. + * All samples that are not in {@code names} will be excluded. + * + *

    Note that the provided {@code names} will be matched against the sample name (i.e. the + * time series name) and not the metric name. For instance, to exclude all samples from a + * histogram, you must exclude the '_count', '_sum' and '_bucket' names. + * + * @param names empty means no name will be excluded. */ - public static final Predicate ALLOW_ALL = name -> true; - - private final Collection nameIsEqualTo; - private final Collection nameIsNotEqualTo; - private final Collection nameStartsWith; - private final Collection nameDoesNotStartWith; - - private MetricNameFilter(Collection nameIsEqualTo, Collection nameIsNotEqualTo, Collection nameStartsWith, Collection nameDoesNotStartWith) { - this.nameIsEqualTo = unmodifiableCollection(new ArrayList<>(nameIsEqualTo)); - this.nameIsNotEqualTo = unmodifiableCollection(new ArrayList<>(nameIsNotEqualTo)); - this.nameStartsWith = unmodifiableCollection(new ArrayList<>(nameStartsWith)); - this.nameDoesNotStartWith = unmodifiableCollection(new ArrayList<>(nameDoesNotStartWith)); - } - - @Override - public boolean test(String sampleName) { - return matchesNameEqualTo(sampleName) - && !matchesNameNotEqualTo(sampleName) - && matchesNameStartsWith(sampleName) - && !matchesNameDoesNotStartWith(sampleName); - } - - private boolean matchesNameEqualTo(String metricName) { - if (nameIsEqualTo.isEmpty()) { - return true; - } - for (String name : nameIsEqualTo) { - // The following ignores suffixes like _total. - // "request_count" and "request_count_total" both match a metric named "request_count". - if (name.startsWith(metricName)) { - return true; - } - } - return false; - } - - private boolean matchesNameNotEqualTo(String metricName) { - if (nameIsNotEqualTo.isEmpty()) { - return false; - } - for (String name : nameIsNotEqualTo) { - // The following ignores suffixes like _total. - // "request_count" and "request_count_total" both match a metric named "request_count". - if (name.startsWith(metricName)) { - return true; - } - } - return false; - } - - private boolean matchesNameStartsWith(String metricName) { - if (nameStartsWith.isEmpty()) { - return true; - } - for (String prefix : nameStartsWith) { - if (metricName.startsWith(prefix)) { - return true; - } - } - return false; - } - - private boolean matchesNameDoesNotStartWith(String metricName) { - if (nameDoesNotStartWith.isEmpty()) { - return false; - } - for (String prefix : nameDoesNotStartWith) { - if (metricName.startsWith(prefix)) { - return true; - } - } - return false; - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - - private final Collection nameEqualTo = new ArrayList<>(); - private final Collection nameNotEqualTo = new ArrayList<>(); - private final Collection nameStartsWith = new ArrayList<>(); - private final Collection nameDoesNotStartWith = new ArrayList<>(); - - private Builder() { - } - - /** - * @see #nameMustBeEqualTo(Collection) - */ - public Builder nameMustBeEqualTo(String... names) { - return nameMustBeEqualTo(Arrays.asList(names)); - } - - /** - * Only samples with one of the {@code names} will be included. - *

    - * Note that the provided {@code names} will be matched against the sample name (i.e. the time series name) - * and not the metric name. For instance, to retrieve all samples from a histogram, you must include the - * '_count', '_sum' and '_bucket' names. - *

    - * This method should be used by HTTP exporters to implement the {@code ?name[]=} URL parameters. - * - * @param names empty means no restriction. - */ - public Builder nameMustBeEqualTo(Collection names) { - if (names != null) { - nameEqualTo.addAll(names); - } - return this; - } - - /** - * @see #nameMustNotBeEqualTo(Collection) - */ - public Builder nameMustNotBeEqualTo(String... names) { - return nameMustNotBeEqualTo(Arrays.asList(names)); - } - - /** - * All samples that are not in {@code names} will be excluded. - *

    - * Note that the provided {@code names} will be matched against the sample name (i.e. the time series name) - * and not the metric name. For instance, to exclude all samples from a histogram, you must exclude the - * '_count', '_sum' and '_bucket' names. - * - * @param names empty means no name will be excluded. - */ - public Builder nameMustNotBeEqualTo(Collection names) { - if (names != null) { - nameNotEqualTo.addAll(names); - } - return this; - } - - /** - * @see #nameMustStartWith(Collection) - */ - public Builder nameMustStartWith(String... prefixes) { - return nameMustStartWith(Arrays.asList(prefixes)); - } - - /** - * Only samples whose name starts with one of the {@code prefixes} will be included. - * - * @param prefixes empty means no restriction. - */ - public Builder nameMustStartWith(Collection prefixes) { - if (prefixes != null) { - nameStartsWith.addAll(prefixes); - } - return this; - } - - /** - * @see #nameMustNotStartWith(Collection) - */ - public Builder nameMustNotStartWith(String... prefixes) { - return nameMustNotStartWith(Arrays.asList(prefixes)); - } - - /** - * Samples with names starting with one of the {@code prefixes} will be excluded. - * - * @param prefixes empty means no time series will be excluded. - */ - public Builder nameMustNotStartWith(Collection prefixes) { - if (prefixes != null) { - nameDoesNotStartWith.addAll(prefixes); - } - return this; - } - - public MetricNameFilter build() { - return new MetricNameFilter(nameEqualTo, nameNotEqualTo, nameStartsWith, nameDoesNotStartWith); - } + public Builder nameMustNotBeEqualTo(Collection names) { + if (names != null) { + nameNotEqualTo.addAll(names); + } + return this; + } + + /** + * @see #nameMustStartWith(Collection) + */ + public Builder nameMustStartWith(String... prefixes) { + return nameMustStartWith(Arrays.asList(prefixes)); + } + + /** + * Only samples whose name starts with one of the {@code prefixes} will be included. + * + * @param prefixes empty means no restriction. + */ + public Builder nameMustStartWith(Collection prefixes) { + if (prefixes != null) { + nameStartsWith.addAll(prefixes); + } + return this; + } + + /** + * @see #nameMustNotStartWith(Collection) + */ + public Builder nameMustNotStartWith(String... prefixes) { + return nameMustNotStartWith(Arrays.asList(prefixes)); + } + + /** + * Samples with names starting with one of the {@code prefixes} will be excluded. + * + * @param prefixes empty means no time series will be excluded. + */ + public Builder nameMustNotStartWith(Collection prefixes) { + if (prefixes != null) { + nameDoesNotStartWith.addAll(prefixes); + } + return this; + } + + public MetricNameFilter build() { + return new MetricNameFilter( + nameEqualTo, nameNotEqualTo, nameStartsWith, nameDoesNotStartWith); } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java index 5434c0ec0..a4f52746e 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java @@ -2,70 +2,71 @@ import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; - import java.util.Collections; import java.util.List; import java.util.function.Predicate; -/** - * Like {@link Collector}, but collecting multiple Snapshots at once. - */ +/** Like {@link Collector}, but collecting multiple Snapshots at once. */ @FunctionalInterface public interface MultiCollector { - /** - * Called when the Prometheus server scrapes metrics. - */ - MetricSnapshots collect(); + /** Called when the Prometheus server scrapes metrics. */ + MetricSnapshots collect(); - /** - * Provides Collector with the details of the request issued by Prometheus to allow multi-target pattern implementation - * Override to implement request dependent logic to provide MetricSnapshot - */ - default MetricSnapshots collect(PrometheusScrapeRequest scrapeRequest) { - return collect(); - } - - - /** - * Like {@link #collect()}, but returns only the snapshots where {@code includedNames.test(name)} is {@code true}. - *

    - * Override this if there is a more efficient way than first collecting all snapshot and then discarding the excluded ones. - */ - default MetricSnapshots collect(Predicate includedNames) { - return collect(includedNames, null); - } + /** + * Provides Collector with the details of the request issued by Prometheus to allow multi-target + * pattern implementation Override to implement request dependent logic to provide MetricSnapshot + */ + default MetricSnapshots collect(PrometheusScrapeRequest scrapeRequest) { + return collect(); + } - /** - * Like {@link #collect(Predicate)}, but with support for multi-target pattern. - *

    - * Override this if there is a more efficient way than first collecting the snapshot and then discarding it. - */ - default MetricSnapshots collect(Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { - MetricSnapshots allSnapshots = scrapeRequest == null ? collect(): collect(scrapeRequest); - MetricSnapshots.Builder result = MetricSnapshots.builder(); - for (MetricSnapshot snapshot : allSnapshots) { - if (includedNames.test(snapshot.getMetadata().getPrometheusName())) { - result.metricSnapshot(snapshot); - } - } - return result.build(); - } + /** + * Like {@link #collect()}, but returns only the snapshots where {@code includedNames.test(name)} + * is {@code true}. + * + *

    Override this if there is a more efficient way than first collecting all snapshot and then + * discarding the excluded ones. + */ + default MetricSnapshots collect(Predicate includedNames) { + return collect(includedNames, null); + } - - /** - * This is called in two places: - *

      - *
    1. During registration to check if a metric with that name already exists.
    2. - *
    3. During scrape to check if the collector can be skipped because a name filter is present and all names are excluded.
    4. - *
    - * Returning an empty list means checks are omitted (registration metric always succeeds), - * and the collector is always scraped (if a name filter is present and all names are excluded the result is dropped). - *

    - * If your collector returns a constant list of metrics that have names that do not change at runtime - * it is a good idea to overwrite this and return the names. - */ - default List getPrometheusNames() { - return Collections.emptyList(); + /** + * Like {@link #collect(Predicate)}, but with support for multi-target pattern. + * + *

    Override this if there is a more efficient way than first collecting the snapshot and then + * discarding it. + */ + default MetricSnapshots collect( + Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { + MetricSnapshots allSnapshots = scrapeRequest == null ? collect() : collect(scrapeRequest); + MetricSnapshots.Builder result = MetricSnapshots.builder(); + for (MetricSnapshot snapshot : allSnapshots) { + if (includedNames.test(snapshot.getMetadata().getPrometheusName())) { + result.metricSnapshot(snapshot); + } } + return result.build(); + } + + /** + * This is called in two places: + * + *

      + *
    1. During registration to check if a metric with that name already exists. + *
    2. During scrape to check if the collector can be skipped because a name filter is present + * and all names are excluded. + *
    + * + * Returning an empty list means checks are omitted (registration metric always succeeds), and the + * collector is always scraped (if a name filter is present and all names are excluded the result + * is dropped). + * + *

    If your collector returns a constant list of metrics that have names that do not change at + * runtime it is a good idea to overwrite this and return the names. + */ + default List getPrometheusNames() { + return Collections.emptyList(); + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java index e8651292e..b1789c3bd 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusScrapeRequest.java @@ -1,17 +1,11 @@ package io.prometheus.metrics.model.registry; -/** - * Infos extracted from the request received by the endpoint - */ +/** Infos extracted from the request received by the endpoint */ public interface PrometheusScrapeRequest { - /** - * Absolute path of the HTTP request. - */ - String getRequestPath(); + /** Absolute path of the HTTP request. */ + String getRequestPath(); - /** - * See {@code jakarta.servlet.ServletRequest.getParameterValues(String name)} - */ - String[] getParameterValues(String name); + /** See {@code jakarta.servlet.ServletRequest.getParameterValues(String name)} */ + String[] getParameterValues(String name); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucket.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucket.java index 6ca2f90ec..ebadd1f16 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucket.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucket.java @@ -1,42 +1,44 @@ package io.prometheus.metrics.model.snapshots; /** - * Helper class for iterating over {@link ClassicHistogramBuckets}. - * Note that the {@code count} is not cumulative. + * Helper class for iterating over {@link ClassicHistogramBuckets}. Note that the {@code count} is + * not cumulative. */ public class ClassicHistogramBucket implements Comparable { - private final long count; // not cumulative - private final double upperBound; + private final long count; // not cumulative + private final double upperBound; - public ClassicHistogramBucket(double upperBound, long count) { - this.count = count; - this.upperBound = upperBound; - if (Double.isNaN(upperBound)) { - throw new IllegalArgumentException("Cannot use NaN as an upper bound for a histogram bucket"); - } - if (count < 0) { - throw new IllegalArgumentException(count + ": " + ClassicHistogramBuckets.class.getSimpleName() + " cannot have a negative count"); - } + public ClassicHistogramBucket(double upperBound, long count) { + this.count = count; + this.upperBound = upperBound; + if (Double.isNaN(upperBound)) { + throw new IllegalArgumentException("Cannot use NaN as an upper bound for a histogram bucket"); } - - public long getCount() { - return count; + if (count < 0) { + throw new IllegalArgumentException( + count + + ": " + + ClassicHistogramBuckets.class.getSimpleName() + + " cannot have a negative count"); } + } - public double getUpperBound() { - return upperBound; - } + public long getCount() { + return count; + } + + public double getUpperBound() { + return upperBound; + } - /** - * For sorting a list of buckets by upper bound. - */ - @Override - public int compareTo(ClassicHistogramBucket other) { - int result = Double.compare(upperBound, other.upperBound); - if (result != 0) { - return result; - } - return Long.compare(count, other.count); + /** For sorting a list of buckets by upper bound. */ + @Override + public int compareTo(ClassicHistogramBucket other) { + int result = Double.compare(upperBound, other.upperBound); + if (result != 0) { + return result; } + return Long.compare(count, other.count); + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBuckets.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBuckets.java index 4d7c6d279..6b5d4dea6 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBuckets.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBuckets.java @@ -8,216 +8,220 @@ import java.util.stream.Stream; /** - * Immutable container for histogram buckets with fixed bucket boundaries. - * Note that the counts are not cumulative. + * Immutable container for histogram buckets with fixed bucket boundaries. Note that the counts are + * not cumulative. */ public class ClassicHistogramBuckets implements Iterable { - /** - * Used in native histograms to indicate that no classic histogram buckets are present. - */ - public static final ClassicHistogramBuckets EMPTY = new ClassicHistogramBuckets(new double[]{}, new long[]{}); - - private final double[] upperBounds; - private final long[] counts; // not cumulative - - private ClassicHistogramBuckets(double[] upperBounds, long[] counts) { - this.upperBounds = upperBounds; - this.counts = counts; - } - - /** - * To create new {@link ClassicHistogramBuckets}, you can either use one of the static {@code of(...)} methods, - * or use {@link ClassicHistogramBuckets#builder()}. - *

    - * This method will create a copy of upperBounds and counts. - * - * @param upperBounds must have the same length as counts. Must not contain duplicates. - * Must contain at least {@link Double#POSITIVE_INFINITY} for the {@code +Inf} bucket. - * An upper bound must not be {@link Double#NaN}. - * The upperBounds array does not need to be sorted. - * @param counts must have the same length as {@code upperBounds}. - * The entry at index {@code i} is the count for the {@code upperBound} at index {@code i}. - * For each count, {@link Number#longValue()} is called to get the value. - * Counts are not cumulative. Counts must not be negative. - */ - public static ClassicHistogramBuckets of(List upperBounds, List counts) { - double[] upperBoundsCopy = new double[upperBounds.size()]; - for (int i = 0; i < upperBounds.size(); i++) { - upperBoundsCopy[i] = upperBounds.get(i); + /** Used in native histograms to indicate that no classic histogram buckets are present. */ + public static final ClassicHistogramBuckets EMPTY = + new ClassicHistogramBuckets(new double[] {}, new long[] {}); + + private final double[] upperBounds; + private final long[] counts; // not cumulative + + private ClassicHistogramBuckets(double[] upperBounds, long[] counts) { + this.upperBounds = upperBounds; + this.counts = counts; + } + + /** + * To create new {@link ClassicHistogramBuckets}, you can either use one of the static {@code + * of(...)} methods, or use {@link ClassicHistogramBuckets#builder()}. + * + *

    This method will create a copy of upperBounds and counts. + * + * @param upperBounds must have the same length as counts. Must not contain duplicates. Must + * contain at least {@link Double#POSITIVE_INFINITY} for the {@code +Inf} bucket. An upper + * bound must not be {@link Double#NaN}. The upperBounds array does not need to be sorted. + * @param counts must have the same length as {@code upperBounds}. The entry at index {@code i} is + * the count for the {@code upperBound} at index {@code i}. For each count, {@link + * Number#longValue()} is called to get the value. Counts are not cumulative. Counts + * must not be negative. + */ + public static ClassicHistogramBuckets of( + List upperBounds, List counts) { + double[] upperBoundsCopy = new double[upperBounds.size()]; + for (int i = 0; i < upperBounds.size(); i++) { + upperBoundsCopy[i] = upperBounds.get(i); + } + long[] countsCopy = new long[counts.size()]; + for (int i = 0; i < counts.size(); i++) { + countsCopy[i] = counts.get(i).longValue(); + } + sortAndValidate(upperBoundsCopy, countsCopy); + return new ClassicHistogramBuckets(upperBoundsCopy, countsCopy); + } + + /** + * To create new {@link ClassicHistogramBuckets}, you can either use one of the static {@code + * of(...)} methods, or use {@link ClassicHistogramBuckets#builder()}. + * + *

    This method will create a copy of upperBounds and counts. + * + * @param upperBounds must have the same length as counts. Must not contain duplicates. Must + * contain at least {@link Double#POSITIVE_INFINITY} for the {@code +Inf} bucket. An upper + * bound must not be {@link Double#NaN}. The upperBounds array does not need to be sorted. + * @param counts must have the same length as {@code upperBounds}. The entry at index {@code i} is + * the count for the {@code upperBound} at index {@code i}. For each count, {@link + * Number#longValue()} is called to get the value. Counts are not cumulative. Counts + * must not be negative. + */ + public static ClassicHistogramBuckets of(double[] upperBounds, Number[] counts) { + double[] upperBoundsCopy = Arrays.copyOf(upperBounds, upperBounds.length); + long[] countsCopy = new long[counts.length]; + for (int i = 0; i < counts.length; i++) { + countsCopy[i] = counts[i].longValue(); + } + sortAndValidate(upperBoundsCopy, countsCopy); + return new ClassicHistogramBuckets(upperBoundsCopy, countsCopy); + } + + /** + * To create new {@link ClassicHistogramBuckets}, you can either use one of the static {@code + * of(...)} methods, or use {@link ClassicHistogramBuckets#builder()}. + * + *

    This method will create a copy of upperBounds and counts. + * + * @param upperBounds must have the same length as counts. Must not contain duplicates. Must + * contain at least {@link Double#POSITIVE_INFINITY} for the {@code +Inf} bucket. An upper + * bound must not be {@link Double#NaN}. The upperBounds array does not need to be sorted. + * @param counts must have the same length as {@code upperBounds}. The entry at index {@code i} is + * the count for the {@code upperBound} at index {@code i}. Counts are not cumulative. + * Counts must not be negative. + */ + public static ClassicHistogramBuckets of(double[] upperBounds, long[] counts) { + double[] upperBoundsCopy = Arrays.copyOf(upperBounds, upperBounds.length); + long[] countsCopy = Arrays.copyOf(counts, counts.length); + sortAndValidate(upperBoundsCopy, countsCopy); + return new ClassicHistogramBuckets(upperBoundsCopy, countsCopy); + } + + private static void sortAndValidate(double[] upperBounds, long[] counts) { + if (upperBounds.length != counts.length) { + throw new IllegalArgumentException( + "upperBounds.length == " + + upperBounds.length + + " but counts.length == " + + counts.length + + ". Expected the same length."); + } + sort(upperBounds, counts); + validate(upperBounds, counts); + } + + private static void sort(double[] upperBounds, long[] counts) { + // Bubblesort. Should be efficient here as in most cases upperBounds is already sorted. + int n = upperBounds.length; + for (int i = 0; i < n - 1; i++) { + for (int j = 0; j < n - i - 1; j++) { + if (upperBounds[j] > upperBounds[j + 1]) { + swap(j, j + 1, upperBounds, counts); } - long[] countsCopy = new long[counts.size()]; - for (int i = 0; i < counts.size(); i++) { - countsCopy[i] = counts.get(i).longValue(); + } + } + } + + private static void swap(int i, int j, double[] upperBounds, long[] counts) { + double tmpDouble = upperBounds[j]; + upperBounds[j] = upperBounds[i]; + upperBounds[i] = tmpDouble; + long tmpLong = counts[j]; + counts[j] = counts[i]; + counts[i] = tmpLong; + } + + private static void validate(double[] upperBounds, long[] counts) { + // Preconditions: + // * upperBounds sorted + // * upperBounds and counts have the same length + if (upperBounds.length == 0) { + throw new IllegalArgumentException( + ClassicHistogramBuckets.class.getSimpleName() + + " cannot be empty. They must contain at least the +Inf bucket."); + } + if (upperBounds[upperBounds.length - 1] != Double.POSITIVE_INFINITY) { + throw new IllegalArgumentException( + ClassicHistogramBuckets.class.getSimpleName() + " must contain the +Inf bucket."); + } + for (int i = 0; i < upperBounds.length; i++) { + if (Double.isNaN(upperBounds[i])) { + throw new IllegalArgumentException( + "Cannot use NaN as an upper bound in " + ClassicHistogramBuckets.class.getSimpleName()); + } + if (counts[i] < 0) { + throw new IllegalArgumentException( + "Counts in " + ClassicHistogramBuckets.class.getSimpleName() + " cannot be negative."); + } + if (i > 0) { + if (upperBounds[i - 1] == upperBounds[i]) { + throw new IllegalArgumentException("Duplicate upper bound " + upperBounds[i]); } - sortAndValidate(upperBoundsCopy, countsCopy); - return new ClassicHistogramBuckets(upperBoundsCopy, countsCopy); + } } + } - /** - * To create new {@link ClassicHistogramBuckets}, you can either use one of the static {@code of(...)} methods, - * or use {@link ClassicHistogramBuckets#builder()}. - *

    - * This method will create a copy of upperBounds and counts. - * - * @param upperBounds must have the same length as counts. Must not contain duplicates. - * Must contain at least {@link Double#POSITIVE_INFINITY} for the {@code +Inf} bucket. - * An upper bound must not be {@link Double#NaN}. - * The upperBounds array does not need to be sorted. - * @param counts must have the same length as {@code upperBounds}. - * The entry at index {@code i} is the count for the {@code upperBound} at index {@code i}. - * For each count, {@link Number#longValue()} is called to get the value. - * Counts are not cumulative. Counts must not be negative. - */ - public static ClassicHistogramBuckets of(double[] upperBounds, Number[] counts) { - double[] upperBoundsCopy = Arrays.copyOf(upperBounds, upperBounds.length); - long[] countsCopy = new long[counts.length]; - for (int i = 0; i < counts.length; i++) { - countsCopy[i] = counts[i].longValue(); - } - sortAndValidate(upperBoundsCopy, countsCopy); - return new ClassicHistogramBuckets(upperBoundsCopy, countsCopy); - } + public int size() { + return upperBounds.length; + } - /** - * To create new {@link ClassicHistogramBuckets}, you can either use one of the static {@code of(...)} methods, - * or use {@link ClassicHistogramBuckets#builder()}. - *

    - * This method will create a copy of upperBounds and counts. - * - * @param upperBounds must have the same length as counts. Must not contain duplicates. - * Must contain at least {@link Double#POSITIVE_INFINITY} for the {@code +Inf} bucket. - * An upper bound must not be {@link Double#NaN}. - * The upperBounds array does not need to be sorted. - * @param counts must have the same length as {@code upperBounds}. - * The entry at index {@code i} is the count for the {@code upperBound} at index {@code i}. - * Counts are not cumulative. Counts must not be negative. - */ - public static ClassicHistogramBuckets of(double[] upperBounds, long[] counts) { - double[] upperBoundsCopy = Arrays.copyOf(upperBounds, upperBounds.length); - long[] countsCopy = Arrays.copyOf(counts, counts.length); - sortAndValidate(upperBoundsCopy, countsCopy); - return new ClassicHistogramBuckets(upperBoundsCopy, countsCopy); - } + public double getUpperBound(int i) { + return upperBounds[i]; + } - private static void sortAndValidate(double[] upperBounds, long[] counts) { - if (upperBounds.length != counts.length) { - throw new IllegalArgumentException("upperBounds.length == " + upperBounds.length + " but counts.length == " + counts.length + ". Expected the same length."); - } - sort(upperBounds, counts); - validate(upperBounds, counts); - } + /** The count is not cumulative. */ + public long getCount(int i) { + return counts[i]; + } - private static void sort(double[] upperBounds, long[] counts) { - // Bubblesort. Should be efficient here as in most cases upperBounds is already sorted. - int n = upperBounds.length; - for (int i = 0; i < n - 1; i++) { - for (int j = 0; j < n - i - 1; j++) { - if (upperBounds[j] > upperBounds[j + 1]) { - swap(j, j + 1, upperBounds, counts); - } - } - } - } + public boolean isEmpty() { + return this.upperBounds.length == 0; + } - private static void swap(int i, int j, double[] upperBounds, long[] counts) { - double tmpDouble = upperBounds[j]; - upperBounds[j] = upperBounds[i]; - upperBounds[i] = tmpDouble; - long tmpLong = counts[j]; - counts[j] = counts[i]; - counts[i] = tmpLong; + private List asList() { + List result = new ArrayList<>(size()); + for (int i = 0; i < upperBounds.length; i++) { + result.add(new ClassicHistogramBucket(upperBounds[i], counts[i])); } + return Collections.unmodifiableList(result); + } - private static void validate(double[] upperBounds, long[] counts) { - // Preconditions: - // * upperBounds sorted - // * upperBounds and counts have the same length - if (upperBounds.length == 0) { - throw new IllegalArgumentException(ClassicHistogramBuckets.class.getSimpleName() + " cannot be empty. They must contain at least the +Inf bucket."); - } - if (upperBounds[upperBounds.length - 1] != Double.POSITIVE_INFINITY) { - throw new IllegalArgumentException(ClassicHistogramBuckets.class.getSimpleName() + " must contain the +Inf bucket."); - } - for (int i = 0; i < upperBounds.length; i++) { - if (Double.isNaN(upperBounds[i])) { - throw new IllegalArgumentException("Cannot use NaN as an upper bound in " + ClassicHistogramBuckets.class.getSimpleName()); - } - if (counts[i] < 0) { - throw new IllegalArgumentException("Counts in " + ClassicHistogramBuckets.class.getSimpleName() + " cannot be negative."); - } - if (i > 0) { - if (upperBounds[i - 1] == upperBounds[i]) { - throw new IllegalArgumentException("Duplicate upper bound " + upperBounds[i]); - } - } - } - } - - public int size() { - return upperBounds.length; - } - - public double getUpperBound(int i) { - return upperBounds[i]; - } + @Override + public Iterator iterator() { + return asList().iterator(); + } - /** - * The count is not cumulative. - */ - public long getCount(int i) { - return counts[i]; - } + public Stream stream() { + return asList().stream(); + } - public boolean isEmpty() { - return this.upperBounds.length == 0; - } + /** + * To create new {@link ClassicHistogramBuckets}, you can either use one of the static {@code + * of(...)} methods, or use {@code builder()}. + */ + public static Builder builder() { + return new Builder(); + } - private List asList() { - List result = new ArrayList<>(size()); - for (int i = 0; i < upperBounds.length; i++) { - result.add(new ClassicHistogramBucket(upperBounds[i], counts[i])); - } - return Collections.unmodifiableList(result); - } + public static class Builder { + private final List upperBounds = new ArrayList<>(); + private final List counts = new ArrayList<>(); - @Override - public Iterator iterator() { - return asList().iterator(); - } + private Builder() {} - public Stream stream() { - return asList().stream(); + /** Must be called at least once for the {@link Double#POSITIVE_INFINITY} bucket. */ + public Builder bucket(double upperBound, long count) { + upperBounds.add(upperBound); + counts.add(count); + return this; } /** - * To create new {@link ClassicHistogramBuckets}, you can either use one of the static {@code of(...)} methods, - * or use {@code builder()}. + * Will throw an {@link IllegalArgumentException} if the {@link Double#POSITIVE_INFINITY} bucket + * is missing. */ - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private final List upperBounds = new ArrayList<>(); - private final List counts = new ArrayList<>(); - - private Builder() {} - - /** - * Must be called at least once for the {@link Double#POSITIVE_INFINITY} bucket. - */ - public Builder bucket(double upperBound, long count) { - upperBounds.add(upperBound); - counts.add(count); - return this; - } - - /** - * Will throw an {@link IllegalArgumentException} if the {@link Double#POSITIVE_INFINITY} bucket is missing. - */ - public ClassicHistogramBuckets build() { - return ClassicHistogramBuckets.of(upperBounds, counts); - } + public ClassicHistogramBuckets build() { + return ClassicHistogramBuckets.of(upperBounds, counts); } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java index 4aceea6bd..fa807af19 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java @@ -4,149 +4,146 @@ import java.util.Collection; import java.util.List; -/** - * Immutable snapshot of a Counter. - */ +/** Immutable snapshot of a Counter. */ public class CounterSnapshot extends MetricSnapshot { + /** + * To create a new {@link CounterSnapshot}, you can either call the constructor directly or use + * the builder with {@link CounterSnapshot#builder()}. + * + * @param metadata the metric name in metadata must not include the {@code _total} suffix. See + * {@link MetricMetadata} for more naming conventions. + * @param dataPoints the constructor will create a sorted copy of the collection. + */ + public CounterSnapshot(MetricMetadata metadata, Collection dataPoints) { + super(metadata, dataPoints); + } + + @Override + public List getDataPoints() { + return (List) dataPoints; + } + + public static class CounterDataPointSnapshot extends DataPointSnapshot { + + private final double value; + private final Exemplar exemplar; // may be null + /** - * To create a new {@link CounterSnapshot}, you can either call the constructor directly or use - * the builder with {@link CounterSnapshot#builder()}. + * To create a new {@link CounterDataPointSnapshot}, you can either call the constructor + * directly or use the Builder with {@link CounterDataPointSnapshot#builder()}. * - * @param metadata the metric name in metadata must not include the {@code _total} suffix. - * See {@link MetricMetadata} for more naming conventions. - * @param dataPoints the constructor will create a sorted copy of the collection. + * @param value the counter value. Must not be negative. + * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. + * @param exemplar may be null. + * @param createdTimestampMillis timestamp (as in {@link System#currentTimeMillis()}) when the + * time series (this specific set of labels) was created (or reset to zero). It's optional. + * Use {@code 0L} if there is no created timestamp. */ - public CounterSnapshot(MetricMetadata metadata, Collection dataPoints) { - super(metadata, dataPoints); + public CounterDataPointSnapshot( + double value, Labels labels, Exemplar exemplar, long createdTimestampMillis) { + this(value, labels, exemplar, createdTimestampMillis, 0); } - @Override - public List getDataPoints() { - return (List) dataPoints; + /** + * Constructor with an additional scrape timestamp. This is only useful in rare cases as the + * scrape timestamp is usually set by the Prometheus server during scraping. Exceptions include + * mirroring metrics with given timestamps from other metric sources. + */ + public CounterDataPointSnapshot( + double value, + Labels labels, + Exemplar exemplar, + long createdTimestampMillis, + long scrapeTimestampMillis) { + super(labels, createdTimestampMillis, scrapeTimestampMillis); + this.value = value; + this.exemplar = exemplar; + validate(); } - public static class CounterDataPointSnapshot extends DataPointSnapshot { - - private final double value; - private final Exemplar exemplar; // may be null - - /** - * To create a new {@link CounterDataPointSnapshot}, you can either call the constructor directly or use the - * Builder with {@link CounterDataPointSnapshot#builder()}. - * - * @param value the counter value. Must not be negative. - * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. - * @param exemplar may be null. - * @param createdTimestampMillis timestamp (as in {@link System#currentTimeMillis()}) when the time series - * (this specific set of labels) was created (or reset to zero). - * It's optional. Use {@code 0L} if there is no created timestamp. - */ - public CounterDataPointSnapshot(double value, Labels labels, Exemplar exemplar, long createdTimestampMillis) { - this(value, labels, exemplar, createdTimestampMillis, 0); - } + public double getValue() { + return value; + } - /** - * Constructor with an additional scrape timestamp. - * This is only useful in rare cases as the scrape timestamp is usually set by the Prometheus server - * during scraping. Exceptions include mirroring metrics with given timestamps from other metric sources. - */ - public CounterDataPointSnapshot(double value, Labels labels, Exemplar exemplar, long createdTimestampMillis, long scrapeTimestampMillis) { - super(labels, createdTimestampMillis, scrapeTimestampMillis); - this.value = value; - this.exemplar = exemplar; - validate(); - } + /** May be {@code null}. */ + public Exemplar getExemplar() { + return exemplar; + } - public double getValue() { - return value; - } + protected void validate() { + if (value < 0.0) { + throw new IllegalArgumentException(value + ": counters cannot have a negative value"); + } + } - /** - * May be {@code null}. - */ - public Exemplar getExemplar() { - return exemplar; - } + public static Builder builder() { + return new Builder(); + } - protected void validate() { - if (value < 0.0) { - throw new IllegalArgumentException(value + ": counters cannot have a negative value"); - } - } + public static class Builder extends DataPointSnapshot.Builder { - public static Builder builder() { - return new Builder(); - } + private Exemplar exemplar = null; + private Double value = null; + private long createdTimestampMillis = 0L; + + private Builder() {} + + /** Counter value. This is required. The value must not be negative. */ + public Builder value(double value) { + this.value = value; + return this; + } - public static class Builder extends DataPointSnapshot.Builder { - - private Exemplar exemplar = null; - private Double value = null; - private long createdTimestampMillis = 0L; - - private Builder() { - } - - /** - * Counter value. This is required. The value must not be negative. - */ - public Builder value(double value) { - this.value = value; - return this; - } - - public Builder exemplar(Exemplar exemplar) { - this.exemplar = exemplar; - return this; - } - - public Builder createdTimestampMillis(long createdTimestampMillis) { - this.createdTimestampMillis = createdTimestampMillis; - return this; - } - - public CounterDataPointSnapshot build() { - if (value == null) { - throw new IllegalArgumentException("Missing required field: value is null."); - } - return new CounterDataPointSnapshot(value, labels, exemplar, createdTimestampMillis, scrapeTimestampMillis); - } - - @Override - protected Builder self() { - return this; - } + public Builder exemplar(Exemplar exemplar) { + this.exemplar = exemplar; + return this; + } + + public Builder createdTimestampMillis(long createdTimestampMillis) { + this.createdTimestampMillis = createdTimestampMillis; + return this; + } + + public CounterDataPointSnapshot build() { + if (value == null) { + throw new IllegalArgumentException("Missing required field: value is null."); } + return new CounterDataPointSnapshot( + value, labels, exemplar, createdTimestampMillis, scrapeTimestampMillis); + } + + @Override + protected Builder self() { + return this; + } } + } - public static Builder builder() { - return new Builder(); - } + public static Builder builder() { + return new Builder(); + } - public static class Builder extends MetricSnapshot.Builder { + public static class Builder extends MetricSnapshot.Builder { - private final List dataPoints = new ArrayList<>(); + private final List dataPoints = new ArrayList<>(); - private Builder() { - } + private Builder() {} - /** - * Add a data point. Can be called multiple times to add multiple data points. - */ - public Builder dataPoint(CounterDataPointSnapshot dataPoint) { - dataPoints.add(dataPoint); - return this; - } + /** Add a data point. Can be called multiple times to add multiple data points. */ + public Builder dataPoint(CounterDataPointSnapshot dataPoint) { + dataPoints.add(dataPoint); + return this; + } - @Override - public CounterSnapshot build() { - return new CounterSnapshot(buildMetadata(), dataPoints); - } + @Override + public CounterSnapshot build() { + return new CounterSnapshot(buildMetadata(), dataPoints); + } - @Override - protected Builder self() { - return this; - } + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java index 7710754e2..47ad4486b 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java @@ -1,82 +1,85 @@ package io.prometheus.metrics.model.snapshots; public abstract class DataPointSnapshot { - private final Labels labels; - private final long createdTimestampMillis; - private final long scrapeTimestampMillis; + private final Labels labels; + private final long createdTimestampMillis; + private final long scrapeTimestampMillis; - protected DataPointSnapshot(Labels labels, long createdTimestampMillis, long scrapeTimestampMillis) { - this.labels = labels; - this.createdTimestampMillis = createdTimestampMillis; - this.scrapeTimestampMillis = scrapeTimestampMillis; - validate(); - } + protected DataPointSnapshot( + Labels labels, long createdTimestampMillis, long scrapeTimestampMillis) { + this.labels = labels; + this.createdTimestampMillis = createdTimestampMillis; + this.scrapeTimestampMillis = scrapeTimestampMillis; + validate(); + } - private void validate() { - if (labels == null) { - throw new IllegalArgumentException("Labels cannot be null. Use Labels.EMPTY if there are no labels."); - } - if (createdTimestampMillis < 0) { - throw new IllegalArgumentException("Created timestamp cannot be negative. Use 0 if the metric doesn't have a created timestamp."); - } - if (scrapeTimestampMillis < 0) { - throw new IllegalArgumentException("Scrape timestamp cannot be negative. Use 0 to indicate that the Prometheus server should set the scrape timestamp."); - } - if (hasCreatedTimestamp() && hasScrapeTimestamp()) { - if (scrapeTimestampMillis < createdTimestampMillis) { - throw new IllegalArgumentException("The scrape timestamp cannot be before the created timestamp"); - } - } + private void validate() { + if (labels == null) { + throw new IllegalArgumentException( + "Labels cannot be null. Use Labels.EMPTY if there are no labels."); } - - public Labels getLabels() { - return labels; + if (createdTimestampMillis < 0) { + throw new IllegalArgumentException( + "Created timestamp cannot be negative. Use 0 if the metric doesn't have a created timestamp."); } - - public boolean hasScrapeTimestamp() { - return scrapeTimestampMillis != 0L; + if (scrapeTimestampMillis < 0) { + throw new IllegalArgumentException( + "Scrape timestamp cannot be negative. Use 0 to indicate that the Prometheus server should set the scrape timestamp."); } - - /** - * This will only return a reasonable value if {@link #hasScrapeTimestamp()} is true. - */ - public long getScrapeTimestampMillis() { - return scrapeTimestampMillis; + if (hasCreatedTimestamp() && hasScrapeTimestamp()) { + if (scrapeTimestampMillis < createdTimestampMillis) { + throw new IllegalArgumentException( + "The scrape timestamp cannot be before the created timestamp"); + } } + } - public boolean hasCreatedTimestamp() { - return createdTimestampMillis != 0L; - } + public Labels getLabels() { + return labels; + } - /** - * This will only return a reasonable value if {@link #hasCreatedTimestamp()} is true. - * Some metrics like Gauge don't have created timestamps. For these metrics {@link #hasCreatedTimestamp()} - * is always false. - */ - public long getCreatedTimestampMillis() { - return createdTimestampMillis; - } + public boolean hasScrapeTimestamp() { + return scrapeTimestampMillis != 0L; + } + + /** This will only return a reasonable value if {@link #hasScrapeTimestamp()} is true. */ + public long getScrapeTimestampMillis() { + return scrapeTimestampMillis; + } + + public boolean hasCreatedTimestamp() { + return createdTimestampMillis != 0L; + } - public static abstract class Builder> { + /** + * This will only return a reasonable value if {@link #hasCreatedTimestamp()} is true. Some + * metrics like Gauge don't have created timestamps. For these metrics {@link + * #hasCreatedTimestamp()} is always false. + */ + public long getCreatedTimestampMillis() { + return createdTimestampMillis; + } - protected Labels labels = Labels.EMPTY; - protected long scrapeTimestampMillis = 0L; + public abstract static class Builder> { - public T labels(Labels labels) { - this.labels = labels; - return self(); - } + protected Labels labels = Labels.EMPTY; + protected long scrapeTimestampMillis = 0L; - /** - * In most cases you should not set a scrape timestamp, - * because the scrape timestamp is set by the Prometheus server during scraping. - * Exceptions include mirroring metrics with given timestamps from other metric sources. - */ - public T scrapeTimestampMillis(long scrapeTimestampMillis) { - this.scrapeTimestampMillis = scrapeTimestampMillis; - return self(); - } + public T labels(Labels labels) { + this.labels = labels; + return self(); + } - protected abstract T self(); + /** + * In most cases you should not set a scrape timestamp, because the scrape timestamp is set by + * the Prometheus server during scraping. Exceptions include mirroring metrics with given + * timestamps from other metric sources. + */ + public T scrapeTimestampMillis(long scrapeTimestampMillis) { + this.scrapeTimestampMillis = scrapeTimestampMillis; + return self(); } + + protected abstract T self(); + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DistributionDataPointSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DistributionDataPointSnapshot.java index fe5f729c1..c8092237c 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DistributionDataPointSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DistributionDataPointSnapshot.java @@ -1,89 +1,86 @@ package io.prometheus.metrics.model.snapshots; /** - * Common base class for histogram and summary data. - * Histograms and Summaries represent distributions, like a latency distribution or a distribution - * of request sizes in Bytes. + * Common base class for histogram and summary data. Histograms and Summaries represent + * distributions, like a latency distribution or a distribution of request sizes in Bytes. */ public abstract class DistributionDataPointSnapshot extends DataPointSnapshot { - private final long count; // optional, negative value means no count. - private final double sum; // optional, Double.NaN means no sum. - private final Exemplars exemplars; // optional, Exemplars.EMPTY means no Exemplars. + private final long count; // optional, negative value means no count. + private final double sum; // optional, Double.NaN means no sum. + private final Exemplars exemplars; // optional, Exemplars.EMPTY means no Exemplars. - /** - * See JavaDoc of the child classes. - */ - protected DistributionDataPointSnapshot(long count, double sum, Exemplars exemplars, Labels labels, long createdTimestampMillis, long scrapeTimestampMillis) { - super(labels, createdTimestampMillis, scrapeTimestampMillis); - this.count = count; - this.sum = sum; - this.exemplars = exemplars == null ? Exemplars.EMPTY : exemplars; - validate(); - } + /** See JavaDoc of the child classes. */ + protected DistributionDataPointSnapshot( + long count, + double sum, + Exemplars exemplars, + Labels labels, + long createdTimestampMillis, + long scrapeTimestampMillis) { + super(labels, createdTimestampMillis, scrapeTimestampMillis); + this.count = count; + this.sum = sum; + this.exemplars = exemplars == null ? Exemplars.EMPTY : exemplars; + validate(); + } - private void validate() { - // If a histogram or summary observes negative values the sum could be negative. - // According to OpenMetrics sum should be omitted in that case, but we don't enforce this here. - } + private void validate() { + // If a histogram or summary observes negative values the sum could be negative. + // According to OpenMetrics sum should be omitted in that case, but we don't enforce this here. + } - public boolean hasCount() { - return count >= 0; - } + public boolean hasCount() { + return count >= 0; + } - public boolean hasSum() { - return !Double.isNaN(sum); - } + public boolean hasSum() { + return !Double.isNaN(sum); + } - /** - * This will return garbage if {@link #hasCount()} is {@code false}. - */ - public long getCount() { - return count; - } + /** This will return garbage if {@link #hasCount()} is {@code false}. */ + public long getCount() { + return count; + } - /** - * This will return garbage if {@link #hasSum()} is {@code false}. - */ - public double getSum() { - return sum; - } + /** This will return garbage if {@link #hasSum()} is {@code false}. */ + public double getSum() { + return sum; + } - /** - * May be {@link Exemplars#EMPTY}, but will never be {@code null}. - */ - public Exemplars getExemplars() { - return exemplars; - } + /** May be {@link Exemplars#EMPTY}, but will never be {@code null}. */ + public Exemplars getExemplars() { + return exemplars; + } - static abstract class Builder> extends DataPointSnapshot.Builder { + abstract static class Builder> extends DataPointSnapshot.Builder { - protected long count = -1; - protected double sum = Double.NaN; - protected long createdTimestampMillis = 0L; - protected Exemplars exemplars = Exemplars.EMPTY; + protected long count = -1; + protected double sum = Double.NaN; + protected long createdTimestampMillis = 0L; + protected Exemplars exemplars = Exemplars.EMPTY; - /** - * Count can be explicitly set on summaries (this is a public method for summary metrics), - * and it is set implicitly on histograms (derived from the bucket counts). - */ - protected T count(long count) { - this.count = count; - return self(); - } + /** + * Count can be explicitly set on summaries (this is a public method for summary metrics), and + * it is set implicitly on histograms (derived from the bucket counts). + */ + protected T count(long count) { + this.count = count; + return self(); + } - public T sum(double sum) { - this.sum = sum; - return self(); - } + public T sum(double sum) { + this.sum = sum; + return self(); + } - public T exemplars(Exemplars exemplars) { - this.exemplars = exemplars; - return self(); - } + public T exemplars(Exemplars exemplars) { + this.exemplars = exemplars; + return self(); + } - public T createdTimestampMillis(long createdTimestampMillis) { - this.createdTimestampMillis = createdTimestampMillis; - return self(); - } + public T createdTimestampMillis(long createdTimestampMillis) { + this.createdTimestampMillis = createdTimestampMillis; + return self(); } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java index 4588b344d..d1f3f3414 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java @@ -1,25 +1,25 @@ package io.prometheus.metrics.model.snapshots; /** - * Thrown when a collector tries to create a {@link MetricSnapshot} - * where multiple data points have the same labels (same label names and label values). + * Thrown when a collector tries to create a {@link MetricSnapshot} where multiple data points have + * the same labels (same label names and label values). */ public class DuplicateLabelsException extends IllegalArgumentException { - private final MetricMetadata metadata; - private final Labels labels; + private final MetricMetadata metadata; + private final Labels labels; - public DuplicateLabelsException(MetricMetadata metadata, Labels labels) { - super("Duplicate labels for metric \"" + metadata.getName() + "\": " + labels); - this.metadata = metadata; - this.labels = labels; - } + public DuplicateLabelsException(MetricMetadata metadata, Labels labels) { + super("Duplicate labels for metric \"" + metadata.getName() + "\": " + labels); + this.metadata = metadata; + this.labels = labels; + } - public MetricMetadata getMetadata() { - return metadata; - } + public MetricMetadata getMetadata() { + return metadata; + } - public Labels getLabels() { - return labels; - } -} \ No newline at end of file + public Labels getLabels() { + return labels; + } +} diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplar.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplar.java index aa46bd229..e56d9e1c7 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplar.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Exemplar.java @@ -1,129 +1,121 @@ package io.prometheus.metrics.model.snapshots; -/** - * Immutable representation of an Exemplar. - */ +/** Immutable representation of an Exemplar. */ public class Exemplar { - /** - * Label name for trace id. - */ - public static final String TRACE_ID = "trace_id"; - - /** - * Label name for span id. - */ - public static final String SPAN_ID = "span_id"; - - private final double value; - private final Labels labels; - private final long timestampMillis; - - /** - * To create a new {@link Exemplar}, you can either call the constructor directly - * or use the Builder with {@link Exemplar#builder()}. - * - * @param value the observed value. This is required. - * @param labels in most cases the labels will contain the {@link #TRACE_ID} and {@link #SPAN_ID}. - * Must not be {@code null}. Use {@link Labels#EMPTY} if no labels are present. - * @param timestampMillis timestamp when the value was observed. Optional. Use 0L if not available. - */ - public Exemplar(double value, Labels labels, long timestampMillis) { - if (labels == null) { - throw new NullPointerException("Labels cannot be null. Use Labels.EMPTY."); - } - this.value = value; - this.labels = labels; - this.timestampMillis = timestampMillis; + /** Label name for trace id. */ + public static final String TRACE_ID = "trace_id"; + + /** Label name for span id. */ + public static final String SPAN_ID = "span_id"; + + private final double value; + private final Labels labels; + private final long timestampMillis; + + /** + * To create a new {@link Exemplar}, you can either call the constructor directly or use the + * Builder with {@link Exemplar#builder()}. + * + * @param value the observed value. This is required. + * @param labels in most cases the labels will contain the {@link #TRACE_ID} and {@link #SPAN_ID}. + * Must not be {@code null}. Use {@link Labels#EMPTY} if no labels are present. + * @param timestampMillis timestamp when the value was observed. Optional. Use 0L if not + * available. + */ + public Exemplar(double value, Labels labels, long timestampMillis) { + if (labels == null) { + throw new NullPointerException("Labels cannot be null. Use Labels.EMPTY."); } - - public double getValue() { - return value; + this.value = value; + this.labels = labels; + this.timestampMillis = timestampMillis; + } + + public double getValue() { + return value; + } + + /** + * In most cases labels will contain {@link #TRACE_ID} and {@link #SPAN_ID}, but this is not + * required. May be {@link Labels#EMPTY}, but may not be {@code null}. + */ + public Labels getLabels() { + return labels; + } + + public boolean hasTimestamp() { + return timestampMillis != 0L; + } + + /** Will return garbage if {@link #hasTimestamp()} is {@code false}. */ + public long getTimestampMillis() { + return timestampMillis; + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + + private Double value = null; + private Labels labels = Labels.EMPTY; + private String traceId = null; + private String spanId = null; + private long timestampMillis = 0L; + + private Builder() {} + + public Builder value(double value) { + this.value = value; + return this; } - /** - * In most cases labels will contain {@link #TRACE_ID} and {@link #SPAN_ID}, but this is not required. - * May be {@link Labels#EMPTY}, but may not be {@code null}. - */ - public Labels getLabels() { - return labels; + public Builder traceId(String traceId) { + this.traceId = traceId; + return this; } - public boolean hasTimestamp() { - return timestampMillis != 0L; + public Builder spanId(String spanId) { + this.spanId = spanId; + return this; } - /** - * Will return garbage if {@link #hasTimestamp()} is {@code false}. - */ - public long getTimestampMillis() { - return timestampMillis; + public Builder labels(Labels labels) { + if (labels == null) { + throw new NullPointerException(); + } + this.labels = labels; + return this; } - public static Builder builder() { - return new Builder(); + public Builder timestampMillis(long timestampMillis) { + this.timestampMillis = timestampMillis; + return this; } - public static class Builder { - - private Double value = null; - private Labels labels = Labels.EMPTY; - private String traceId = null; - private String spanId = null; - private long timestampMillis = 0L; - - private Builder() { - } - - public Builder value(double value) { - this.value = value; - return this; - } - - public Builder traceId(String traceId) { - this.traceId = traceId; - return this; - } - - public Builder spanId(String spanId) { - this.spanId = spanId; - return this; - } - - public Builder labels(Labels labels) { - if (labels == null) { - throw new NullPointerException(); - } - this.labels = labels; - return this; - } - - public Builder timestampMillis(long timestampMillis) { - this.timestampMillis = timestampMillis; - return this; - } - - /** - * @throws IllegalStateException if {@link #value(double)} wasn't called. - */ - public Exemplar build() { - if (value == null) { - throw new IllegalStateException("cannot build an Exemplar without a value"); - } - Labels allLabels; - if (traceId != null && spanId != null) { - allLabels = Labels.of(TRACE_ID, traceId, SPAN_ID, spanId); - } else if (traceId != null) { - allLabels = Labels.of(TRACE_ID, traceId); - } else if (spanId != null) { - allLabels = Labels.of(SPAN_ID, spanId); - } else { - allLabels = Labels.EMPTY; - } - if (!labels.isEmpty()) { - allLabels = allLabels.merge(labels); - } - return new Exemplar(value, allLabels, timestampMillis); - } + /** + * @throws IllegalStateException if {@link #value(double)} wasn't called. + */ + public Exemplar build() { + if (value == null) { + throw new IllegalStateException("cannot build an Exemplar without a value"); + } + Labels allLabels; + if (traceId != null && spanId != null) { + allLabels = Labels.of(TRACE_ID, traceId, SPAN_ID, spanId); + } else if (traceId != null) { + allLabels = Labels.of(TRACE_ID, traceId); + } else if (spanId != null) { + allLabels = Labels.of(SPAN_ID, spanId); + } else { + allLabels = Labels.EMPTY; + } + if (!labels.isEmpty()) { + allLabels = allLabels.merge(labels); + } + return new Exemplar(value, allLabels, timestampMillis); } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java index 2600214aa..c94faf8dd 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java @@ -4,135 +4,124 @@ import java.util.Collection; import java.util.List; -/** - * Immutable snapshot of a Gauge. - */ +/** Immutable snapshot of a Gauge. */ public final class GaugeSnapshot extends MetricSnapshot { + /** + * To create a new {@link GaugeSnapshot}, you can either call the constructor directly or use the + * builder with {@link GaugeSnapshot#builder()}. + * + * @param metadata see {@link MetricMetadata} for naming conventions. + * @param data the constructor will create a sorted copy of the collection. + */ + public GaugeSnapshot(MetricMetadata metadata, Collection data) { + super(metadata, data); + } + + @Override + public List getDataPoints() { + return (List) dataPoints; + } + + public static final class GaugeDataPointSnapshot extends DataPointSnapshot { + + private final double value; + private final Exemplar exemplar; // may be null + /** - * To create a new {@link GaugeSnapshot}, you can either call the constructor directly or use - * the builder with {@link GaugeSnapshot#builder()}. + * To create a new {@link GaugeDataPointSnapshot}, you can either call the constructor directly + * or use the Builder with {@link GaugeDataPointSnapshot#builder()}. * - * @param metadata see {@link MetricMetadata} for naming conventions. - * @param data the constructor will create a sorted copy of the collection. + * @param value the gauge value. + * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. + * @param exemplar may be null. */ - public GaugeSnapshot(MetricMetadata metadata, Collection data) { - super(metadata, data); + public GaugeDataPointSnapshot(double value, Labels labels, Exemplar exemplar) { + this(value, labels, exemplar, 0); } - @Override - public List getDataPoints() { - return (List) dataPoints; + /** + * Constructor with an additional scrape timestamp. This is only useful in rare cases as the + * scrape timestamp is usually set by the Prometheus server during scraping. Exceptions include + * mirroring metrics with given timestamps from other metric sources. + */ + public GaugeDataPointSnapshot( + double value, Labels labels, Exemplar exemplar, long scrapeTimestampMillis) { + super(labels, 0L, scrapeTimestampMillis); + this.value = value; + this.exemplar = exemplar; } - public static final class GaugeDataPointSnapshot extends DataPointSnapshot { - - private final double value; - private final Exemplar exemplar; // may be null - - /** - * To create a new {@link GaugeDataPointSnapshot}, you can either call the constructor directly or use the - * Builder with {@link GaugeDataPointSnapshot#builder()}. - * - * @param value the gauge value. - * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. - * @param exemplar may be null. - */ - public GaugeDataPointSnapshot(double value, Labels labels, Exemplar exemplar) { - this(value, labels, exemplar, 0); - } + public double getValue() { + return value; + } - /** - * Constructor with an additional scrape timestamp. - * This is only useful in rare cases as the scrape timestamp is usually set by the Prometheus server - * during scraping. Exceptions include mirroring metrics with given timestamps from other metric sources. - */ - public GaugeDataPointSnapshot(double value, Labels labels, Exemplar exemplar, long scrapeTimestampMillis) { - super(labels, 0L, scrapeTimestampMillis); - this.value = value; - this.exemplar = exemplar; - } + /** May be {@code null}. */ + public Exemplar getExemplar() { + return exemplar; + } - public double getValue() { - return value; - } + public static Builder builder() { + return new Builder(); + } - /** - * May be {@code null}. - */ - public Exemplar getExemplar() { - return exemplar; - } + public static class Builder extends DataPointSnapshot.Builder { - public static Builder builder() { - return new Builder(); - } + private Exemplar exemplar = null; + private Double value = null; + + private Builder() {} + + /** Gauge value. This is required. */ + public Builder value(double value) { + this.value = value; + return this; + } + + /** Optional */ + public Builder exemplar(Exemplar exemplar) { + this.exemplar = exemplar; + return this; + } - public static class Builder extends DataPointSnapshot.Builder { - - private Exemplar exemplar = null; - private Double value = null; - - private Builder() { - } - - /** - * Gauge value. This is required. - */ - public Builder value(double value) { - this.value = value; - return this; - } - - /** - * Optional - */ - public Builder exemplar(Exemplar exemplar) { - this.exemplar = exemplar; - return this; - } - - public GaugeDataPointSnapshot build() { - if (value == null) { - throw new IllegalArgumentException("Missing required field: value is null."); - } - return new GaugeDataPointSnapshot(value, labels, exemplar, scrapeTimestampMillis); - } - - @Override - protected Builder self() { - return this; - } + public GaugeDataPointSnapshot build() { + if (value == null) { + throw new IllegalArgumentException("Missing required field: value is null."); } - } + return new GaugeDataPointSnapshot(value, labels, exemplar, scrapeTimestampMillis); + } - public static Builder builder() { - return new Builder(); + @Override + protected Builder self() { + return this; + } } + } - public static class Builder extends MetricSnapshot.Builder { + public static Builder builder() { + return new Builder(); + } - private final List dataPoints = new ArrayList<>(); + public static class Builder extends MetricSnapshot.Builder { - private Builder() { - } + private final List dataPoints = new ArrayList<>(); - /** - * Add a data point. This can be called multiple times to add multiple data points. - */ - public Builder dataPoint(GaugeDataPointSnapshot dataPoint) { - dataPoints.add(dataPoint); - return this; - } + private Builder() {} - @Override - public GaugeSnapshot build() { - return new GaugeSnapshot(buildMetadata(), dataPoints); - } + /** Add a data point. This can be called multiple times to add multiple data points. */ + public Builder dataPoint(GaugeDataPointSnapshot dataPoint) { + dataPoints.add(dataPoint); + return this; + } - @Override - protected Builder self() { - return this; - } + @Override + public GaugeSnapshot build() { + return new GaugeSnapshot(buildMetadata(), dataPoints); + } + + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java index 0737f7368..5988cce3d 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java @@ -4,399 +4,487 @@ import java.util.Collection; import java.util.List; -/** - * Immutable snapshot of a Histogram. - */ +/** Immutable snapshot of a Histogram. */ public final class HistogramSnapshot extends MetricSnapshot { - private final boolean gaugeHistogram; - public static final int CLASSIC_HISTOGRAM = Integer.MIN_VALUE; + private final boolean gaugeHistogram; + public static final int CLASSIC_HISTOGRAM = Integer.MIN_VALUE; + + /** + * To create a new {@link HistogramSnapshot}, you can either call the constructor directly or use + * the builder with {@link HistogramSnapshot#builder()}. + * + * @param metadata see {@link MetricMetadata} for naming conventions. + * @param data the constructor will create a sorted copy of the collection. + */ + public HistogramSnapshot(MetricMetadata metadata, Collection data) { + this(false, metadata, data); + } + + /** + * Use this with the first parameter {@code true} to create a snapshot of a Gauge Histogram. The + * data model for Gauge Histograms is the same as for regular histograms, except that bucket + * values are semantically gauges and not counters. See openmetrics.io for more info on Gauge Histograms. + */ + public HistogramSnapshot( + boolean isGaugeHistogram, + MetricMetadata metadata, + Collection data) { + super(metadata, data); + this.gaugeHistogram = isGaugeHistogram; + } + + public boolean isGaugeHistogram() { + return gaugeHistogram; + } + + @Override + public List getDataPoints() { + return (List) dataPoints; + } + + public static final class HistogramDataPointSnapshot extends DistributionDataPointSnapshot { + + // There are two types of histograms: Classic histograms and native histograms. + // Classic histograms have a fixed set of buckets. + // Native histograms have "infinitely many" buckets with exponentially growing boundaries. + // The OpenTelemetry terminology for native histogram is "exponential histogram". + // --- + // A histogram can be a classic histogram (indicated by nativeSchema == CLASSIC_HISTOGRAM), + // or a native histogram (indicated by classicBuckets == ClassicHistogramBuckets.EMPTY), + // or both. + // --- + // A histogram that is both classic and native is great for migrating from classic histograms + // to native histograms: Old Prometheus servers can still scrape the classic histogram, while + // new Prometheus servers can scrape the native histogram. + + private final ClassicHistogramBuckets + classicBuckets; // May be ClassicHistogramBuckets.EMPTY for native histograms. + private final int + nativeSchema; // Number in [-4, 8]. May be CLASSIC_HISTOGRAM for classic histograms. + private final long nativeZeroCount; // only used if nativeSchema != CLASSIC_HISTOGRAM + private final double nativeZeroThreshold; // only used if nativeSchema != CLASSIC_HISTOGRAM + private final NativeHistogramBuckets + nativeBucketsForPositiveValues; // only used if nativeSchema != CLASSIC_HISTOGRAM + private final NativeHistogramBuckets + nativeBucketsForNegativeValues; // only used if nativeSchema != CLASSIC_HISTOGRAM /** - * To create a new {@link HistogramSnapshot}, you can either call the constructor directly or use - * the builder with {@link HistogramSnapshot#builder()}. + * Constructor for classic histograms (as opposed to native histograms). * - * @param metadata see {@link MetricMetadata} for naming conventions. - * @param data the constructor will create a sorted copy of the collection. + *

    To create a new {@link HistogramDataPointSnapshot}, you can either call the constructor + * directly or use the Builder with {@link HistogramSnapshot#builder()}. + * + * @param classicBuckets required. Must not be empty. Must at least contain the +Inf bucket. + * @param sum sum of all observed values. Optional, pass {@link Double#NaN} if not available. + * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. + * @param exemplars must not be null. Use {@link Exemplars#EMPTY} if there are no Exemplars. + * @param createdTimestampMillis timestamp (as in {@link System#currentTimeMillis()}) when the + * time series (this specific set of labels) was created (or reset to zero). It's optional. + * Use {@code 0L} if there is no created timestamp. */ - public HistogramSnapshot(MetricMetadata metadata, Collection data) { - this(false, metadata, data); + public HistogramDataPointSnapshot( + ClassicHistogramBuckets classicBuckets, + double sum, + Labels labels, + Exemplars exemplars, + long createdTimestampMillis) { + this( + classicBuckets, + CLASSIC_HISTOGRAM, + 0, + 0, + NativeHistogramBuckets.EMPTY, + NativeHistogramBuckets.EMPTY, + sum, + labels, + exemplars, + createdTimestampMillis, + 0L); } /** - * Use this with the first parameter {@code true} to create a snapshot of a Gauge Histogram. - * The data model for Gauge Histograms is the same as for regular histograms, except that bucket values - * are semantically gauges and not counters. - * See openmetrics.io for more info on Gauge Histograms. + * Constructor for native histograms (as opposed to classic histograms). + * + *

    To create a new {@link HistogramDataPointSnapshot}, you can either call the constructor + * directly or use the Builder with {@link HistogramSnapshot#builder()}. + * + * @param nativeSchema number in [-4, 8]. See Prometheus + * client_model metrics.proto. + * @param nativeZeroCount number of observed zero values (zero is special because there is no + * histogram bucket for zero values). + * @param nativeZeroThreshold observations in [-zeroThreshold, +zeroThreshold] are treated as + * zero. This is to avoid creating a large number of buckets if observations fluctuate + * around zero. + * @param nativeBucketsForPositiveValues must not be {@code null}. Use {@link + * NativeHistogramBuckets#EMPTY} if empty. + * @param nativeBucketsForNegativeValues must not be {@code null}. Use {@link + * NativeHistogramBuckets#EMPTY} if empty. + * @param sum sum of all observed values. Optional, use {@link Double#NaN} if not available. + * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. + * @param exemplars must not be null. Use {@link Exemplars#EMPTY} if there are no Exemplars. + * @param createdTimestampMillis timestamp (as in {@link System#currentTimeMillis()}) when the + * time series (this specific set of labels) was created (or reset to zero). It's optional. + * Use {@code 0L} if there is no created timestamp. */ - public HistogramSnapshot(boolean isGaugeHistogram, MetricMetadata metadata, Collection data) { - super(metadata, data); - this.gaugeHistogram = isGaugeHistogram; + public HistogramDataPointSnapshot( + int nativeSchema, + long nativeZeroCount, + double nativeZeroThreshold, + NativeHistogramBuckets nativeBucketsForPositiveValues, + NativeHistogramBuckets nativeBucketsForNegativeValues, + double sum, + Labels labels, + Exemplars exemplars, + long createdTimestampMillis) { + this( + ClassicHistogramBuckets.EMPTY, + nativeSchema, + nativeZeroCount, + nativeZeroThreshold, + nativeBucketsForPositiveValues, + nativeBucketsForNegativeValues, + sum, + labels, + exemplars, + createdTimestampMillis, + 0L); } - public boolean isGaugeHistogram() { - return gaugeHistogram; + /** + * Constructor for a histogram with both, classic and native data. + * + *

    To create a new {@link HistogramDataPointSnapshot}, you can either call the constructor + * directly or use the Builder with {@link HistogramSnapshot#builder()}. + * + * @param classicBuckets required. Must not be empty. Must at least contain the +Inf bucket. + * @param nativeSchema number in [-4, 8]. See Prometheus + * client_model metrics.proto. + * @param nativeZeroCount number of observed zero values (zero is special because there is no + * histogram bucket for zero values). + * @param nativeZeroThreshold observations in [-zeroThreshold, +zeroThreshold] are treated as + * zero. This is to avoid creating a large number of buckets if observations fluctuate + * around zero. + * @param nativeBucketsForPositiveValues must not be {@code null}. Use {@link + * NativeHistogramBuckets#EMPTY} if empty. + * @param nativeBucketsForNegativeValues must not be {@code null}. Use {@link + * NativeHistogramBuckets#EMPTY} if empty. + * @param sum sum of all observed values. Optional, use {@link Double#NaN} if not available. + * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. + * @param exemplars must not be null. Use {@link Exemplars#EMPTY} if there are no Exemplars. + * @param createdTimestampMillis timestamp (as in {@link System#currentTimeMillis()}) when the + * time series (this specific set of labels) was created (or reset to zero). It's optional. + * Use {@code 0L} if there is no created timestamp. + */ + public HistogramDataPointSnapshot( + ClassicHistogramBuckets classicBuckets, + int nativeSchema, + long nativeZeroCount, + double nativeZeroThreshold, + NativeHistogramBuckets nativeBucketsForPositiveValues, + NativeHistogramBuckets nativeBucketsForNegativeValues, + double sum, + Labels labels, + Exemplars exemplars, + long createdTimestampMillis) { + this( + classicBuckets, + nativeSchema, + nativeZeroCount, + nativeZeroThreshold, + nativeBucketsForPositiveValues, + nativeBucketsForNegativeValues, + sum, + labels, + exemplars, + createdTimestampMillis, + 0L); } - @Override - public List getDataPoints() { - return (List) dataPoints; + /** + * Constructor with an additional scrape timestamp. This is only useful in rare cases as the + * scrape timestamp is usually set by the Prometheus server during scraping. Exceptions include + * mirroring metrics with given timestamps from other metric sources. + */ + public HistogramDataPointSnapshot( + ClassicHistogramBuckets classicBuckets, + int nativeSchema, + long nativeZeroCount, + double nativeZeroThreshold, + NativeHistogramBuckets nativeBucketsForPositiveValues, + NativeHistogramBuckets nativeBucketsForNegativeValues, + double sum, + Labels labels, + Exemplars exemplars, + long createdTimestampMillis, + long scrapeTimestampMillis) { + super( + calculateCount( + classicBuckets, + nativeSchema, + nativeZeroCount, + nativeBucketsForPositiveValues, + nativeBucketsForNegativeValues), + sum, + exemplars, + labels, + createdTimestampMillis, + scrapeTimestampMillis); + this.classicBuckets = classicBuckets; + this.nativeSchema = nativeSchema; + this.nativeZeroCount = nativeSchema == CLASSIC_HISTOGRAM ? 0 : nativeZeroCount; + this.nativeZeroThreshold = nativeSchema == CLASSIC_HISTOGRAM ? 0 : nativeZeroThreshold; + this.nativeBucketsForPositiveValues = + nativeSchema == CLASSIC_HISTOGRAM + ? NativeHistogramBuckets.EMPTY + : nativeBucketsForPositiveValues; + this.nativeBucketsForNegativeValues = + nativeSchema == CLASSIC_HISTOGRAM + ? NativeHistogramBuckets.EMPTY + : nativeBucketsForNegativeValues; + validate(); } - public static final class HistogramDataPointSnapshot extends DistributionDataPointSnapshot { - - // There are two types of histograms: Classic histograms and native histograms. - // Classic histograms have a fixed set of buckets. - // Native histograms have "infinitely many" buckets with exponentially growing boundaries. - // The OpenTelemetry terminology for native histogram is "exponential histogram". - // --- - // A histogram can be a classic histogram (indicated by nativeSchema == CLASSIC_HISTOGRAM), - // or a native histogram (indicated by classicBuckets == ClassicHistogramBuckets.EMPTY), - // or both. - // --- - // A histogram that is both classic and native is great for migrating from classic histograms - // to native histograms: Old Prometheus servers can still scrape the classic histogram, while - // new Prometheus servers can scrape the native histogram. - - private final ClassicHistogramBuckets classicBuckets; // May be ClassicHistogramBuckets.EMPTY for native histograms. - private final int nativeSchema; // Number in [-4, 8]. May be CLASSIC_HISTOGRAM for classic histograms. - private final long nativeZeroCount; // only used if nativeSchema != CLASSIC_HISTOGRAM - private final double nativeZeroThreshold; // only used if nativeSchema != CLASSIC_HISTOGRAM - private final NativeHistogramBuckets nativeBucketsForPositiveValues; // only used if nativeSchema != CLASSIC_HISTOGRAM - private final NativeHistogramBuckets nativeBucketsForNegativeValues; // only used if nativeSchema != CLASSIC_HISTOGRAM - - /** - * Constructor for classic histograms (as opposed to native histograms). - *

    - * To create a new {@link HistogramDataPointSnapshot}, you can either call the constructor directly or use the - * Builder with {@link HistogramSnapshot#builder()}. - * - * @param classicBuckets required. Must not be empty. Must at least contain the +Inf bucket. - * @param sum sum of all observed values. Optional, pass {@link Double#NaN} if not available. - * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. - * @param exemplars must not be null. Use {@link Exemplars#EMPTY} if there are no Exemplars. - * @param createdTimestampMillis timestamp (as in {@link System#currentTimeMillis()}) when the time series - * (this specific set of labels) was created (or reset to zero). - * It's optional. Use {@code 0L} if there is no created timestamp. - */ - public HistogramDataPointSnapshot( - ClassicHistogramBuckets classicBuckets, - double sum, - Labels labels, - Exemplars exemplars, - long createdTimestampMillis) { - this(classicBuckets, CLASSIC_HISTOGRAM, 0, 0, NativeHistogramBuckets.EMPTY, NativeHistogramBuckets.EMPTY, sum, labels, exemplars, createdTimestampMillis, 0L); - } - - /** - * Constructor for native histograms (as opposed to classic histograms). - *

    - * To create a new {@link HistogramDataPointSnapshot}, you can either call the constructor directly or use the - * Builder with {@link HistogramSnapshot#builder()}. - * - * @param nativeSchema number in [-4, 8]. See Prometheus client_model metrics.proto. - * @param nativeZeroCount number of observed zero values (zero is special because there is no - * histogram bucket for zero values). - * @param nativeZeroThreshold observations in [-zeroThreshold, +zeroThreshold] are treated as zero. - * This is to avoid creating a large number of buckets if observations fluctuate around zero. - * @param nativeBucketsForPositiveValues must not be {@code null}. Use {@link NativeHistogramBuckets#EMPTY} if empty. - * @param nativeBucketsForNegativeValues must not be {@code null}. Use {@link NativeHistogramBuckets#EMPTY} if empty. - * @param sum sum of all observed values. Optional, use {@link Double#NaN} if not available. - * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. - * @param exemplars must not be null. Use {@link Exemplars#EMPTY} if there are no Exemplars. - * @param createdTimestampMillis timestamp (as in {@link System#currentTimeMillis()}) when the time series - * (this specific set of labels) was created (or reset to zero). - * It's optional. Use {@code 0L} if there is no created timestamp. - */ - public HistogramDataPointSnapshot( - int nativeSchema, - long nativeZeroCount, - double nativeZeroThreshold, - NativeHistogramBuckets nativeBucketsForPositiveValues, - NativeHistogramBuckets nativeBucketsForNegativeValues, - double sum, - Labels labels, - Exemplars exemplars, - long createdTimestampMillis) { - this(ClassicHistogramBuckets.EMPTY, nativeSchema, nativeZeroCount, nativeZeroThreshold, nativeBucketsForPositiveValues, nativeBucketsForNegativeValues, sum, labels, exemplars, createdTimestampMillis, 0L); + private static long calculateCount( + ClassicHistogramBuckets classicBuckets, + int nativeSchema, + long nativeZeroCount, + NativeHistogramBuckets nativeBucketsForPositiveValues, + NativeHistogramBuckets nativeBucketsForNegativeValues) { + if (classicBuckets.isEmpty()) { + // This is a native histogram + return calculateNativeCount( + nativeZeroCount, nativeBucketsForPositiveValues, nativeBucketsForNegativeValues); + } else if (nativeSchema == CLASSIC_HISTOGRAM) { + // This is a classic histogram + return calculateClassicCount(classicBuckets); + } else { + // This is both, a native and a classic histogram. Count should be the same for both. + long classicCount = calculateClassicCount(classicBuckets); + long nativeCount = + calculateNativeCount( + nativeZeroCount, nativeBucketsForPositiveValues, nativeBucketsForNegativeValues); + if (classicCount != nativeCount) { + throw new IllegalArgumentException( + "Inconsistent observation count: If a histogram has both classic and native data the observation count must be the same. Classic count is " + + classicCount + + " but native count is " + + nativeCount + + "."); } + return classicCount; + } + } - /** - * Constructor for a histogram with both, classic and native data. - *

    - * To create a new {@link HistogramDataPointSnapshot}, you can either call the constructor directly or use the - * Builder with {@link HistogramSnapshot#builder()}. - * - * @param classicBuckets required. Must not be empty. Must at least contain the +Inf bucket. - * @param nativeSchema number in [-4, 8]. See Prometheus client_model metrics.proto. - * @param nativeZeroCount number of observed zero values (zero is special because there is no - * histogram bucket for zero values). - * @param nativeZeroThreshold observations in [-zeroThreshold, +zeroThreshold] are treated as zero. - * This is to avoid creating a large number of buckets if observations fluctuate around zero. - * @param nativeBucketsForPositiveValues must not be {@code null}. Use {@link NativeHistogramBuckets#EMPTY} if empty. - * @param nativeBucketsForNegativeValues must not be {@code null}. Use {@link NativeHistogramBuckets#EMPTY} if empty. - * @param sum sum of all observed values. Optional, use {@link Double#NaN} if not available. - * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. - * @param exemplars must not be null. Use {@link Exemplars#EMPTY} if there are no Exemplars. - * @param createdTimestampMillis timestamp (as in {@link System#currentTimeMillis()}) when the time series - * (this specific set of labels) was created (or reset to zero). - * It's optional. Use {@code 0L} if there is no created timestamp. - */ - public HistogramDataPointSnapshot( - ClassicHistogramBuckets classicBuckets, - int nativeSchema, - long nativeZeroCount, - double nativeZeroThreshold, - NativeHistogramBuckets nativeBucketsForPositiveValues, - NativeHistogramBuckets nativeBucketsForNegativeValues, - double sum, - Labels labels, - Exemplars exemplars, - long createdTimestampMillis) { - this(classicBuckets, nativeSchema, nativeZeroCount, nativeZeroThreshold, nativeBucketsForPositiveValues, nativeBucketsForNegativeValues, sum, labels, exemplars, createdTimestampMillis, 0L); - } + private static long calculateClassicCount(ClassicHistogramBuckets classicBuckets) { + long count = 0; + for (int i = 0; i < classicBuckets.size(); i++) { + count += classicBuckets.getCount(i); + } + return count; + } - /** - * Constructor with an additional scrape timestamp. - * This is only useful in rare cases as the scrape timestamp is usually set by the Prometheus server - * during scraping. Exceptions include mirroring metrics with given timestamps from other metric sources. - */ - public HistogramDataPointSnapshot( - ClassicHistogramBuckets classicBuckets, - int nativeSchema, - long nativeZeroCount, - double nativeZeroThreshold, - NativeHistogramBuckets nativeBucketsForPositiveValues, - NativeHistogramBuckets nativeBucketsForNegativeValues, - double sum, - Labels labels, - Exemplars exemplars, - long createdTimestampMillis, - long scrapeTimestampMillis) { - super(calculateCount(classicBuckets, nativeSchema, nativeZeroCount, nativeBucketsForPositiveValues, nativeBucketsForNegativeValues), sum, exemplars, labels, createdTimestampMillis, scrapeTimestampMillis); - this.classicBuckets = classicBuckets; - this.nativeSchema = nativeSchema; - this.nativeZeroCount = nativeSchema == CLASSIC_HISTOGRAM ? 0 : nativeZeroCount; - this.nativeZeroThreshold = nativeSchema == CLASSIC_HISTOGRAM ? 0 : nativeZeroThreshold; - this.nativeBucketsForPositiveValues = nativeSchema == CLASSIC_HISTOGRAM ? NativeHistogramBuckets.EMPTY : nativeBucketsForPositiveValues; - this.nativeBucketsForNegativeValues = nativeSchema == CLASSIC_HISTOGRAM ? NativeHistogramBuckets.EMPTY : nativeBucketsForNegativeValues; - validate(); - } + private static long calculateNativeCount( + long nativeZeroCount, + NativeHistogramBuckets nativeBucketsForPositiveValues, + NativeHistogramBuckets nativeBucketsForNegativeValues) { + long count = nativeZeroCount; + for (int i = 0; i < nativeBucketsForNegativeValues.size(); i++) { + count += nativeBucketsForNegativeValues.getCount(i); + } + for (int i = 0; i < nativeBucketsForPositiveValues.size(); i++) { + count += nativeBucketsForPositiveValues.getCount(i); + } + return count; + } - private static long calculateCount(ClassicHistogramBuckets classicBuckets, int nativeSchema, long nativeZeroCount, NativeHistogramBuckets nativeBucketsForPositiveValues, NativeHistogramBuckets nativeBucketsForNegativeValues) { - if (classicBuckets.isEmpty()) { - // This is a native histogram - return calculateNativeCount(nativeZeroCount, nativeBucketsForPositiveValues, nativeBucketsForNegativeValues); - } else if (nativeSchema == CLASSIC_HISTOGRAM) { - // This is a classic histogram - return calculateClassicCount(classicBuckets); - } else { - // This is both, a native and a classic histogram. Count should be the same for both. - long classicCount = calculateClassicCount(classicBuckets); - long nativeCount = calculateNativeCount(nativeZeroCount, nativeBucketsForPositiveValues, nativeBucketsForNegativeValues); - if (classicCount != nativeCount) { - throw new IllegalArgumentException("Inconsistent observation count: If a histogram has both classic and native data the observation count must be the same. Classic count is " + classicCount + " but native count is " + nativeCount + "."); - } - return classicCount; - } - } + public boolean hasClassicHistogramData() { + return !classicBuckets.isEmpty(); + } - private static long calculateClassicCount(ClassicHistogramBuckets classicBuckets) { - long count = 0; - for (int i = 0; i < classicBuckets.size(); i++) { - count += classicBuckets.getCount(i); - } - return count; - } + public boolean hasNativeHistogramData() { + return nativeSchema != CLASSIC_HISTOGRAM; + } - private static long calculateNativeCount(long nativeZeroCount, NativeHistogramBuckets nativeBucketsForPositiveValues, NativeHistogramBuckets nativeBucketsForNegativeValues) { - long count = nativeZeroCount; - for (int i = 0; i < nativeBucketsForNegativeValues.size(); i++) { - count += nativeBucketsForNegativeValues.getCount(i); - } - for (int i = 0; i < nativeBucketsForPositiveValues.size(); i++) { - count += nativeBucketsForPositiveValues.getCount(i); - } - return count; - } + /** Will return garbage if {@link #hasClassicHistogramData()} is {@code false}. */ + public ClassicHistogramBuckets getClassicBuckets() { + return classicBuckets; + } - public boolean hasClassicHistogramData() { - return !classicBuckets.isEmpty(); - } + /** + * The schema defines the scale of the native histogram, i.g. the granularity of the buckets. + * Current supported values are -4 <= schema <= 8. See {@link NativeHistogramBuckets} for + * more info. This will return garbage if {@link #hasNativeHistogramData()} is {@code false}. + */ + public int getNativeSchema() { + return nativeSchema; + } - public boolean hasNativeHistogramData() { - return nativeSchema != CLASSIC_HISTOGRAM; - } + /** + * Number of observed zero values. Will return garbage if {@link #hasNativeHistogramData()} is + * {@code false}. + */ + public long getNativeZeroCount() { + return nativeZeroCount; + } - /** - * Will return garbage if {@link #hasClassicHistogramData()} is {@code false}. - */ - public ClassicHistogramBuckets getClassicBuckets() { - return classicBuckets; - } + /** + * All observations in [-nativeZeroThreshold; +nativeZeroThreshold] are treated as zero. This is + * useful to avoid creation of a large number of buckets if observations fluctuate around zero. + * Will return garbage if {@link #hasNativeHistogramData()} is {@code false}. + */ + public double getNativeZeroThreshold() { + return nativeZeroThreshold; + } - /** - * The schema defines the scale of the native histogram, i.g. the granularity of the buckets. - * Current supported values are -4 <= schema <= 8. - * See {@link NativeHistogramBuckets} for more info. - * This will return garbage if {@link #hasNativeHistogramData()} is {@code false}. - */ - public int getNativeSchema() { - return nativeSchema; - } + /** Will return garbage if {@link #hasNativeHistogramData()} is {@code false}. */ + public NativeHistogramBuckets getNativeBucketsForPositiveValues() { + return nativeBucketsForPositiveValues; + } - /** - * Number of observed zero values. - * Will return garbage if {@link #hasNativeHistogramData()} is {@code false}. - */ - public long getNativeZeroCount() { - return nativeZeroCount; - } + /** Will return garbage if {@link #hasNativeHistogramData()} is {@code false}. */ + public NativeHistogramBuckets getNativeBucketsForNegativeValues() { + return nativeBucketsForNegativeValues; + } - /** - * All observations in [-nativeZeroThreshold; +nativeZeroThreshold] are treated as zero. - * This is useful to avoid creation of a large number of buckets if observations fluctuate around zero. - * Will return garbage if {@link #hasNativeHistogramData()} is {@code false}. - */ - public double getNativeZeroThreshold() { - return nativeZeroThreshold; + private void validate() { + for (Label label : getLabels()) { + if (label.getName().equals("le")) { + throw new IllegalArgumentException("le is a reserved label name for histograms"); } - - /** - * Will return garbage if {@link #hasNativeHistogramData()} is {@code false}. - */ - public NativeHistogramBuckets getNativeBucketsForPositiveValues() { - return nativeBucketsForPositiveValues; + } + if (nativeSchema == CLASSIC_HISTOGRAM && classicBuckets.isEmpty()) { + throw new IllegalArgumentException( + "Histogram buckets cannot be empty, must at least have the +Inf bucket."); + } + if (nativeSchema != CLASSIC_HISTOGRAM) { + if (nativeSchema < -4 || nativeSchema > 8) { + throw new IllegalArgumentException( + nativeSchema + ": illegal schema. Expecting number in [-4, 8]."); } - - /** - * Will return garbage if {@link #hasNativeHistogramData()} is {@code false}. - */ - public NativeHistogramBuckets getNativeBucketsForNegativeValues() { - return nativeBucketsForNegativeValues; + if (nativeZeroCount < 0) { + throw new IllegalArgumentException( + nativeZeroCount + ": nativeZeroCount cannot be negative"); } - - private void validate() { - for (Label label : getLabels()) { - if (label.getName().equals("le")) { - throw new IllegalArgumentException("le is a reserved label name for histograms"); - } - } - if (nativeSchema == CLASSIC_HISTOGRAM && classicBuckets.isEmpty()) { - throw new IllegalArgumentException("Histogram buckets cannot be empty, must at least have the +Inf bucket."); - } - if (nativeSchema != CLASSIC_HISTOGRAM) { - if (nativeSchema < -4 || nativeSchema > 8) { - throw new IllegalArgumentException(nativeSchema + ": illegal schema. Expecting number in [-4, 8]."); - } - if (nativeZeroCount < 0) { - throw new IllegalArgumentException(nativeZeroCount + ": nativeZeroCount cannot be negative"); - } - if (Double.isNaN(nativeZeroThreshold) || nativeZeroThreshold < 0) { - throw new IllegalArgumentException(nativeZeroThreshold + ": illegal nativeZeroThreshold. Must be >= 0."); - } - } + if (Double.isNaN(nativeZeroThreshold) || nativeZeroThreshold < 0) { + throw new IllegalArgumentException( + nativeZeroThreshold + ": illegal nativeZeroThreshold. Must be >= 0."); } + } + } - public static Builder builder() { - return new Builder(); - } + public static Builder builder() { + return new Builder(); + } - public static class Builder extends DistributionDataPointSnapshot.Builder { - - private ClassicHistogramBuckets classicHistogramBuckets = ClassicHistogramBuckets.EMPTY; - private int nativeSchema = CLASSIC_HISTOGRAM; - private long nativeZeroCount = 0; - private double nativeZeroThreshold = 0; - private NativeHistogramBuckets nativeBucketsForPositiveValues = NativeHistogramBuckets.EMPTY; - private NativeHistogramBuckets nativeBucketsForNegativeValues = NativeHistogramBuckets.EMPTY; - - private Builder() { - } - - @Override - protected Builder self() { - return this; - } - - public Builder classicHistogramBuckets(ClassicHistogramBuckets classicBuckets) { - this.classicHistogramBuckets = classicBuckets; - return this; - } - - public Builder nativeSchema(int nativeSchema) { - this.nativeSchema = nativeSchema; - return this; - } - - public Builder nativeZeroCount(long zeroCount) { - this.nativeZeroCount = zeroCount; - return this; - } - - public Builder nativeZeroThreshold(double zeroThreshold) { - this.nativeZeroThreshold = zeroThreshold; - return this; - } - - public Builder nativeBucketsForPositiveValues(NativeHistogramBuckets bucketsForPositiveValues) { - this.nativeBucketsForPositiveValues = bucketsForPositiveValues; - return this; - } - - public Builder nativeBucketsForNegativeValues(NativeHistogramBuckets bucketsForNegativeValues) { - this.nativeBucketsForNegativeValues = bucketsForNegativeValues; - return this; - } - - public HistogramDataPointSnapshot build() { - if (nativeSchema == CLASSIC_HISTOGRAM && classicHistogramBuckets.isEmpty()) { - throw new IllegalArgumentException("One of nativeSchema and classicHistogramBuckets is required."); - } - return new HistogramDataPointSnapshot(classicHistogramBuckets, nativeSchema, nativeZeroCount, nativeZeroThreshold, nativeBucketsForPositiveValues, nativeBucketsForNegativeValues, sum, labels, exemplars, createdTimestampMillis, scrapeTimestampMillis); - } + public static class Builder extends DistributionDataPointSnapshot.Builder { + + private ClassicHistogramBuckets classicHistogramBuckets = ClassicHistogramBuckets.EMPTY; + private int nativeSchema = CLASSIC_HISTOGRAM; + private long nativeZeroCount = 0; + private double nativeZeroThreshold = 0; + private NativeHistogramBuckets nativeBucketsForPositiveValues = NativeHistogramBuckets.EMPTY; + private NativeHistogramBuckets nativeBucketsForNegativeValues = NativeHistogramBuckets.EMPTY; + + private Builder() {} + + @Override + protected Builder self() { + return this; + } + + public Builder classicHistogramBuckets(ClassicHistogramBuckets classicBuckets) { + this.classicHistogramBuckets = classicBuckets; + return this; + } + + public Builder nativeSchema(int nativeSchema) { + this.nativeSchema = nativeSchema; + return this; + } + + public Builder nativeZeroCount(long zeroCount) { + this.nativeZeroCount = zeroCount; + return this; + } + + public Builder nativeZeroThreshold(double zeroThreshold) { + this.nativeZeroThreshold = zeroThreshold; + return this; + } + + public Builder nativeBucketsForPositiveValues( + NativeHistogramBuckets bucketsForPositiveValues) { + this.nativeBucketsForPositiveValues = bucketsForPositiveValues; + return this; + } + + public Builder nativeBucketsForNegativeValues( + NativeHistogramBuckets bucketsForNegativeValues) { + this.nativeBucketsForNegativeValues = bucketsForNegativeValues; + return this; + } + + public HistogramDataPointSnapshot build() { + if (nativeSchema == CLASSIC_HISTOGRAM && classicHistogramBuckets.isEmpty()) { + throw new IllegalArgumentException( + "One of nativeSchema and classicHistogramBuckets is required."); } + return new HistogramDataPointSnapshot( + classicHistogramBuckets, + nativeSchema, + nativeZeroCount, + nativeZeroThreshold, + nativeBucketsForPositiveValues, + nativeBucketsForNegativeValues, + sum, + labels, + exemplars, + createdTimestampMillis, + scrapeTimestampMillis); + } } + } - public static Builder builder() { - return new Builder(); - } + public static Builder builder() { + return new Builder(); + } - public static class Builder extends MetricSnapshot.Builder { + public static class Builder extends MetricSnapshot.Builder { - private final List dataPoints = new ArrayList<>(); - private boolean isGaugeHistogram = false; + private final List dataPoints = new ArrayList<>(); + private boolean isGaugeHistogram = false; - private Builder() { - } + private Builder() {} - /** - * Add a data point. Call multiple times to add multiple data points. - */ - public Builder dataPoint(HistogramDataPointSnapshot dataPoint) { - dataPoints.add(dataPoint); - return this; - } + /** Add a data point. Call multiple times to add multiple data points. */ + public Builder dataPoint(HistogramDataPointSnapshot dataPoint) { + dataPoints.add(dataPoint); + return this; + } - /** - * {@code true} indicates that this histogram is a gauge histogram. - * The data model for gauge histograms is the same as for regular histograms, - * except that bucket values are semantically gauges and not counters. - * See openmetrics.io for more info on gauge histograms. - */ - public Builder gaugeHistogram(boolean isGaugeHistogram) { - this.isGaugeHistogram = isGaugeHistogram; - return this; - } + /** + * {@code true} indicates that this histogram is a gauge histogram. The data model for gauge + * histograms is the same as for regular histograms, except that bucket values are semantically + * gauges and not counters. See openmetrics.io for more + * info on gauge histograms. + */ + public Builder gaugeHistogram(boolean isGaugeHistogram) { + this.isGaugeHistogram = isGaugeHistogram; + return this; + } - @Override - public HistogramSnapshot build() { - return new HistogramSnapshot(isGaugeHistogram, buildMetadata(), dataPoints); - } + @Override + public HistogramSnapshot build() { + return new HistogramSnapshot(isGaugeHistogram, buildMetadata(), dataPoints); + } - @Override - protected Builder self() { - return this; - } + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java index 5d3890c0e..c7f180d9f 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java @@ -4,105 +4,98 @@ import java.util.Collection; import java.util.List; -/** - * Immutable snapshot of an Info metric. - */ +/** Immutable snapshot of an Info metric. */ public final class InfoSnapshot extends MetricSnapshot { + /** + * To create a new {@link InfoSnapshot}, you can either call the constructor directly or use the + * builder with {@link InfoSnapshot#builder()}. + * + * @param metadata the metric name in metadata must not include the {@code _info} suffix. See + * {@link MetricMetadata} for more naming conventions. The metadata must not have a unit. + * @param data the constructor will create a sorted copy of the collection. + */ + public InfoSnapshot(MetricMetadata metadata, Collection data) { + super(metadata, data); + if (metadata.hasUnit()) { + throw new IllegalArgumentException("An Info metric cannot have a unit."); + } + } + + @Override + public List getDataPoints() { + return (List) dataPoints; + } + + public static class InfoDataPointSnapshot extends DataPointSnapshot { + /** - * To create a new {@link InfoSnapshot}, you can either call the constructor directly or use - * the builder with {@link InfoSnapshot#builder()}. + * To create a new {@link InfoDataPointSnapshot}, you can either call the constructor directly + * or use the Builder with {@link InfoDataPointSnapshot#builder()}. * - * @param metadata the metric name in metadata must not include the {@code _info} suffix. - * See {@link MetricMetadata} for more naming conventions. - * The metadata must not have a unit. - * @param data the constructor will create a sorted copy of the collection. + * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. */ - public InfoSnapshot(MetricMetadata metadata, Collection data) { - super(metadata, data); - if (metadata.hasUnit()) { - throw new IllegalArgumentException("An Info metric cannot have a unit."); - } + public InfoDataPointSnapshot(Labels labels) { + this(labels, 0L); } - @Override - public List getDataPoints() { - return (List) dataPoints; + /** + * Constructor with an additional scrape timestamp. This is only useful in rare cases as the + * scrape timestamp is usually set by the Prometheus server during scraping. Exceptions include + * mirroring metrics with given timestamps from other metric sources. + */ + public InfoDataPointSnapshot(Labels labels, long scrapeTimestampMillis) { + super(labels, 0L, scrapeTimestampMillis); } - public static class InfoDataPointSnapshot extends DataPointSnapshot { - - /** - * To create a new {@link InfoDataPointSnapshot}, you can either call the constructor directly or use the - * Builder with {@link InfoDataPointSnapshot#builder()}. - * - * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. - */ - public InfoDataPointSnapshot(Labels labels) { - this(labels, 0L); - } - - /** - * Constructor with an additional scrape timestamp. - * This is only useful in rare cases as the scrape timestamp is usually set by the Prometheus server - * during scraping. Exceptions include mirroring metrics with given timestamps from other metric sources. - */ - public InfoDataPointSnapshot(Labels labels, long scrapeTimestampMillis) { - super(labels, 0L, scrapeTimestampMillis); - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder extends DataPointSnapshot.Builder { - - private Builder() { - } - - public InfoDataPointSnapshot build() { - return new InfoDataPointSnapshot(labels, scrapeTimestampMillis); - } - - @Override - protected Builder self() { - return this; - } - } + public static Builder builder() { + return new Builder(); } - public static Builder builder() { - return new Builder(); + public static class Builder extends DataPointSnapshot.Builder { + + private Builder() {} + + public InfoDataPointSnapshot build() { + return new InfoDataPointSnapshot(labels, scrapeTimestampMillis); + } + + @Override + protected Builder self() { + return this; + } } + } - public static class Builder extends MetricSnapshot.Builder { + public static Builder builder() { + return new Builder(); + } - private final List dataPoints = new ArrayList<>(); + public static class Builder extends MetricSnapshot.Builder { - private Builder() { - } + private final List dataPoints = new ArrayList<>(); - /** - * Add a data point. Call multiple times for adding multiple data points. - */ - public Builder dataPoint(InfoDataPointSnapshot dataPoint) { - dataPoints.add(dataPoint); - return this; - } + private Builder() {} - @Override - public Builder unit(Unit unit) { - throw new IllegalArgumentException("Info metric cannot have a unit."); - } + /** Add a data point. Call multiple times for adding multiple data points. */ + public Builder dataPoint(InfoDataPointSnapshot dataPoint) { + dataPoints.add(dataPoint); + return this; + } - @Override - public InfoSnapshot build() { - return new InfoSnapshot(buildMetadata(), dataPoints); - } + @Override + public Builder unit(Unit unit) { + throw new IllegalArgumentException("Info metric cannot have a unit."); + } - @Override - protected Builder self() { - return this; - } + @Override + public InfoSnapshot build() { + return new InfoSnapshot(buildMetadata(), dataPoints); + } + + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java index 674eafff8..f14af41ce 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java @@ -2,51 +2,46 @@ import java.util.Objects; -/** - * Utility for iterating over {@link Labels}. - */ +/** Utility for iterating over {@link Labels}. */ public final class Label implements Comparable

    - * For example, the name for a counter "http_requests_total" is "http_requests". - * The name of an info called "jvm_info" is "jvm". - *

    - * We allow dots in label names. Dots are automatically replaced with underscores in Prometheus - * exposition formats. However, if metrics from this library are exposed in OpenTelemetry - * format dots are retained. - *

    - * See {@link #MetricMetadata(String, String, Unit)} for more info on naming conventions. - */ - private final String name; + /** + * Name without suffix. + * + *

    For example, the name for a counter "http_requests_total" is "http_requests". The name of an + * info called "jvm_info" is "jvm". + * + *

    We allow dots in label names. Dots are automatically replaced with underscores in Prometheus + * exposition formats. However, if metrics from this library are exposed in OpenTelemetry format + * dots are retained. + * + *

    See {@link #MetricMetadata(String, String, Unit)} for more info on naming conventions. + */ + private final String name; - /** - * Same as name, except if name contains dots, then the prometheusName is {@code name.replace(".", "_")}. - */ - private final String prometheusName; + /** + * Same as name, except if name contains dots, then the prometheusName is {@code name.replace(".", + * "_")}. + */ + private final String prometheusName; - /** - * optional, may be {@code null}. - */ - private final String help; + /** optional, may be {@code null}. */ + private final String help; - /** - * optional, may be {@code null}. - */ - private final Unit unit; + /** optional, may be {@code null}. */ + private final Unit unit; - /** - * See {@link #MetricMetadata(String, String, Unit)} - */ - public MetricMetadata(String name) { - this(name, null, null); - } + /** See {@link #MetricMetadata(String, String, Unit)} */ + public MetricMetadata(String name) { + this(name, null, null); + } - /** - * See {@link #MetricMetadata(String, String, Unit)} - */ - public MetricMetadata(String name, String help) { - this(name, help, null); - } + /** See {@link #MetricMetadata(String, String, Unit)} */ + public MetricMetadata(String name, String help) { + this(name, help, null); + } - /** - * Constructor. - * @param name must not be {@code null}. {@link PrometheusNaming#isValidMetricName(String) isValidMetricName(name)} - * must be {@code true}. Use {@link PrometheusNaming#sanitizeMetricName(String)} to convert arbitrary - * strings into valid names. - * @param help optional. May be {@code null}. - * @param unit optional. May be {@code null}. - */ - public MetricMetadata(String name, String help, Unit unit) { - this.name = name; - this.help = help; - this.unit = unit; - validate(); - this.prometheusName = name.contains(".") ? PrometheusNaming.prometheusName(name) : name; - } + /** + * Constructor. + * + * @param name must not be {@code null}. {@link PrometheusNaming#isValidMetricName(String) + * isValidMetricName(name)} must be {@code true}. Use {@link + * PrometheusNaming#sanitizeMetricName(String)} to convert arbitrary strings into valid names. + * @param help optional. May be {@code null}. + * @param unit optional. May be {@code null}. + */ + public MetricMetadata(String name, String help, Unit unit) { + this.name = name; + this.help = help; + this.unit = unit; + validate(); + this.prometheusName = name.contains(".") ? PrometheusNaming.prometheusName(name) : name; + } - /** - * The name does not include the {@code _total} suffix for counter metrics - * or the {@code _info} suffix for Info metrics. - *

    - * The name may contain dots. Use {@link #getPrometheusName()} to get the name in Prometheus format, - * i.e. with dots replaced by underscores. - */ - public String getName() { - return name; - } + /** + * The name does not include the {@code _total} suffix for counter metrics or the {@code _info} + * suffix for Info metrics. + * + *

    The name may contain dots. Use {@link #getPrometheusName()} to get the name in Prometheus + * format, i.e. with dots replaced by underscores. + */ + public String getName() { + return name; + } - /** - * Same as {@link #getName()} but with dots replaced by underscores. - *

    - * This is used by Prometheus exposition formats. - */ - public String getPrometheusName() { - return prometheusName; - } + /** + * Same as {@link #getName()} but with dots replaced by underscores. + * + *

    This is used by Prometheus exposition formats. + */ + public String getPrometheusName() { + return prometheusName; + } - public String getHelp() { - return help; - } + public String getHelp() { + return help; + } - public boolean hasUnit() { - return unit != null; - } + public boolean hasUnit() { + return unit != null; + } - public Unit getUnit() { - return unit; - } + public Unit getUnit() { + return unit; + } - private void validate() { - if (name == null) { - throw new IllegalArgumentException("Missing required field: name is null"); - } - String error = PrometheusNaming.validateMetricName(name); - if (error != null) { - throw new IllegalArgumentException("'" + name + "': Illegal metric name. " + error - + " Call " + PrometheusNaming.class.getSimpleName() + ".sanitizeMetricName(name) to avoid this error."); - } - if (hasUnit()) { - if (!name.endsWith("_" + unit) && !name.endsWith("." + unit)) { - throw new IllegalArgumentException("'" + name + "': Illegal metric name. If the unit is non-null, the name must end with the unit: _" + unit + "." - + " Call " + PrometheusNaming.class.getSimpleName() + ".sanitizeMetricName(name, unit) to avoid this error."); - } - } + private void validate() { + if (name == null) { + throw new IllegalArgumentException("Missing required field: name is null"); + } + String error = PrometheusNaming.validateMetricName(name); + if (error != null) { + throw new IllegalArgumentException( + "'" + + name + + "': Illegal metric name. " + + error + + " Call " + + PrometheusNaming.class.getSimpleName() + + ".sanitizeMetricName(name) to avoid this error."); + } + if (hasUnit()) { + if (!name.endsWith("_" + unit) && !name.endsWith("." + unit)) { + throw new IllegalArgumentException( + "'" + + name + + "': Illegal metric name. If the unit is non-null, the name must end with the unit: _" + + unit + + "." + + " Call " + + PrometheusNaming.class.getSimpleName() + + ".sanitizeMetricName(name, unit) to avoid this error."); + } } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java index dcf41bc09..d44e54ff9 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java @@ -7,81 +7,81 @@ import java.util.Comparator; import java.util.List; -/** - * Base class for metric snapshots. - */ +/** Base class for metric snapshots. */ public abstract class MetricSnapshot { - private final MetricMetadata metadata; - protected final List dataPoints; + private final MetricMetadata metadata; + protected final List dataPoints; - protected MetricSnapshot(MetricMetadata metadata, DataPointSnapshot... dataPoints) { - this(metadata, Arrays.asList(dataPoints)); - } + protected MetricSnapshot(MetricMetadata metadata, DataPointSnapshot... dataPoints) { + this(metadata, Arrays.asList(dataPoints)); + } - protected MetricSnapshot(MetricMetadata metadata, Collection dataPoints) { - if (metadata == null) { - throw new NullPointerException("metadata"); - } - if (dataPoints == null) { - throw new NullPointerException("dataPoints"); - } - this.metadata = metadata; - List dataCopy = new ArrayList<>(dataPoints); - dataCopy.sort(Comparator.comparing(DataPointSnapshot::getLabels)); - this.dataPoints = Collections.unmodifiableList(dataCopy); - validateLabels(); + protected MetricSnapshot( + MetricMetadata metadata, Collection dataPoints) { + if (metadata == null) { + throw new NullPointerException("metadata"); } - - public MetricMetadata getMetadata() { - return metadata; + if (dataPoints == null) { + throw new NullPointerException("dataPoints"); } - - public abstract List getDataPoints(); - - protected void validateLabels() { - // Verify that labels are unique (the same set of names/values must not be used multiple times for the same metric). - for (int i = 0; i < dataPoints.size() - 1; i++) { - if (dataPoints.get(i).getLabels().equals(dataPoints.get(i + 1).getLabels())) { - throw new DuplicateLabelsException(metadata, dataPoints.get(i).getLabels()); - } - } - // Should we verify that all entries in data have the same label names? - // No. They should have the same label names, but according to OpenMetrics this is not a MUST. + this.metadata = metadata; + List dataCopy = new ArrayList<>(dataPoints); + dataCopy.sort(Comparator.comparing(DataPointSnapshot::getLabels)); + this.dataPoints = Collections.unmodifiableList(dataCopy); + validateLabels(); + } + + public MetricMetadata getMetadata() { + return metadata; + } + + public abstract List getDataPoints(); + + protected void validateLabels() { + // Verify that labels are unique (the same set of names/values must not be used multiple times + // for the same metric). + for (int i = 0; i < dataPoints.size() - 1; i++) { + if (dataPoints.get(i).getLabels().equals(dataPoints.get(i + 1).getLabels())) { + throw new DuplicateLabelsException(metadata, dataPoints.get(i).getLabels()); + } + } + // Should we verify that all entries in data have the same label names? + // No. They should have the same label names, but according to OpenMetrics this is not a MUST. + } + + public abstract static class Builder> { + + private String name; + private String help; + private Unit unit; + + /** + * The name is required. If the name is missing or invalid, {@code build()} will throw an {@link + * IllegalArgumentException}. See {@link PrometheusNaming#isValidMetricName(String)} for info on + * valid metric names. + */ + public T name(String name) { + this.name = name; + return self(); } - public static abstract class Builder> { - - private String name; - private String help; - private Unit unit; - - /** - * The name is required. - * If the name is missing or invalid, {@code build()} will throw an {@link IllegalArgumentException}. - * See {@link PrometheusNaming#isValidMetricName(String)} for info on valid metric names. - */ - public T name(String name) { - this.name = name; - return self(); - } - - public T help(String help) { - this.help = help; - return self(); - } - - public T unit(Unit unit) { - this.unit = unit; - return self(); - } + public T help(String help) { + this.help = help; + return self(); + } - public abstract MetricSnapshot build(); + public T unit(Unit unit) { + this.unit = unit; + return self(); + } - protected MetricMetadata buildMetadata() { - return new MetricMetadata(name, help, unit); - } + public abstract MetricSnapshot build(); - protected abstract T self(); + protected MetricMetadata buildMetadata() { + return new MetricMetadata(name, help, unit); } + + protected abstract T self(); + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java index a4865acb9..ecee897e4 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java @@ -1,5 +1,9 @@ package io.prometheus.metrics.model.snapshots; +import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; +import static java.util.Collections.unmodifiableList; +import static java.util.Comparator.comparing; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -9,97 +13,90 @@ import java.util.Set; import java.util.stream.Stream; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.prometheusName; -import static java.util.Collections.unmodifiableList; -import static java.util.Comparator.comparing; - -/** - * Immutable list of metric snapshots. - */ +/** Immutable list of metric snapshots. */ public class MetricSnapshots implements Iterable { - private final List snapshots; - - /** - * See {@link #MetricSnapshots(Collection)} - */ - public MetricSnapshots(MetricSnapshot... snapshots) { - this(Arrays.asList(snapshots)); + private final List snapshots; + + /** See {@link #MetricSnapshots(Collection)} */ + public MetricSnapshots(MetricSnapshot... snapshots) { + this(Arrays.asList(snapshots)); + } + + /** + * To create MetricSnapshots, you can either call the constructor directly or use {@link + * #builder()}. + * + * @param snapshots the constructor creates a sorted copy of snapshots. + * @throws IllegalArgumentException if snapshots contains duplicate metric names. To avoid + * duplicate metric names use {@link #builder()} and check {@link + * Builder#containsMetricName(String)} before calling {@link + * Builder#metricSnapshot(MetricSnapshot)}. + */ + public MetricSnapshots(Collection snapshots) { + List list = new ArrayList<>(snapshots); + list.sort(comparing(s -> s.getMetadata().getPrometheusName())); + for (int i = 0; i < snapshots.size() - 1; i++) { + if (list.get(i) + .getMetadata() + .getPrometheusName() + .equals(list.get(i + 1).getMetadata().getPrometheusName())) { + throw new IllegalArgumentException( + list.get(i).getMetadata().getPrometheusName() + ": duplicate metric name"); + } } + this.snapshots = unmodifiableList(list); + } - /** - * To create MetricSnapshots, you can either call the constructor directly - * or use {@link #builder()}. - * - * @param snapshots the constructor creates a sorted copy of snapshots. - * @throws IllegalArgumentException if snapshots contains duplicate metric names. - * To avoid duplicate metric names use {@link #builder()} and check - * {@link Builder#containsMetricName(String)} before calling - * {@link Builder#metricSnapshot(MetricSnapshot)}. - */ - public MetricSnapshots(Collection snapshots) { - List list = new ArrayList<>(snapshots); - list.sort(comparing(s -> s.getMetadata().getPrometheusName())); - for (int i = 0; i < snapshots.size() - 1; i++) { - if (list.get(i).getMetadata().getPrometheusName().equals(list.get(i + 1).getMetadata().getPrometheusName())) { - throw new IllegalArgumentException(list.get(i).getMetadata().getPrometheusName() + ": duplicate metric name"); - } - } - this.snapshots = unmodifiableList(list); - } + public static MetricSnapshots of(MetricSnapshot... snapshots) { + return new MetricSnapshots(snapshots); + } - public static MetricSnapshots of(MetricSnapshot... snapshots) { - return new MetricSnapshots(snapshots); - } + @Override + public Iterator iterator() { + return snapshots.iterator(); + } - @Override - public Iterator iterator() { - return snapshots.iterator(); - } + public int size() { + return snapshots.size(); + } - public int size() { - return snapshots.size(); - } + public MetricSnapshot get(int i) { + return snapshots.get(i); + } - public MetricSnapshot get(int i) { - return snapshots.get(i); - } + public Stream stream() { + return snapshots.stream(); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + + private final List snapshots = new ArrayList<>(); + private final Set prometheusNames = new HashSet<>(); + + private Builder() {} - public Stream stream() { - return snapshots.stream(); + public boolean containsMetricName(String name) { + if (name == null) { + return false; + } + String prometheusName = prometheusName(name); + return prometheusNames.contains(prometheusName); } - public static Builder builder() { - return new Builder(); + /** Add a metric snapshot. Call multiple times to add multiple metric snapshots. */ + public Builder metricSnapshot(MetricSnapshot snapshot) { + snapshots.add(snapshot); + prometheusNames.add(snapshot.getMetadata().getPrometheusName()); + return this; } - public static class Builder { - - private final List snapshots = new ArrayList<>(); - private final Set prometheusNames = new HashSet<>(); - - private Builder() { - } - - public boolean containsMetricName(String name) { - if (name == null) { - return false; - } - String prometheusName = prometheusName(name); - return prometheusNames.contains(prometheusName); - } - - /** - * Add a metric snapshot. Call multiple times to add multiple metric snapshots. - */ - public Builder metricSnapshot(MetricSnapshot snapshot) { - snapshots.add(snapshot); - prometheusNames.add(snapshot.getMetadata().getPrometheusName()); - return this; - } - - public MetricSnapshots build() { - return new MetricSnapshots(snapshots); - } + public MetricSnapshots build() { + return new MetricSnapshots(snapshots); } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucket.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucket.java index e7af0e6e8..9e58af18f 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucket.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucket.java @@ -1,26 +1,22 @@ package io.prometheus.metrics.model.snapshots; -/** - * For iterating over {@link NativeHistogramBuckets}. - */ +/** For iterating over {@link NativeHistogramBuckets}. */ public class NativeHistogramBucket { - private final int bucketIndex; - private final long count; + private final int bucketIndex; + private final long count; - public NativeHistogramBucket(int bucketIndex, long count) { - this.bucketIndex = bucketIndex; - this.count = count; - } + public NativeHistogramBucket(int bucketIndex, long count) { + this.bucketIndex = bucketIndex; + this.count = count; + } - /** - * See {@link NativeHistogramBuckets} for info on native bucket indexes. - */ - public int getBucketIndex() { - return bucketIndex; - } + /** See {@link NativeHistogramBuckets} for info on native bucket indexes. */ + public int getBucketIndex() { + return bucketIndex; + } - public long getCount() { - return count; - } + public long getCount() { + return count; + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/NativeHistogramBuckets.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/NativeHistogramBuckets.java index e4f722168..3b1214364 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/NativeHistogramBuckets.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/NativeHistogramBuckets.java @@ -9,9 +9,10 @@ /** * Immutable representation of native histogram buckets. - *

    - * The bucket index defines the boundaries of the bucket, - * depending on the histogram's {@link HistogramSnapshot.HistogramDataPointSnapshot#getNativeSchema() schema}. + * + *

    The bucket index defines the boundaries of the bucket, depending on the histogram's {@link + * HistogramSnapshot.HistogramDataPointSnapshot#getNativeSchema() schema}. + * *

      *     base = 2^(2^-schema)
      *     lower bound = base^(index - 1)
    @@ -20,143 +21,149 @@
      */
     public class NativeHistogramBuckets implements Iterable {
     
    -    public static final NativeHistogramBuckets EMPTY = new NativeHistogramBuckets(new int[]{}, new long[]{});
    -    private final int[] bucketIndexes; // sorted
    -    private final long[] counts;
    -
    -    private NativeHistogramBuckets(int[] bucketIndexes, long[] counts) {
    -        this.bucketIndexes = bucketIndexes;
    -        this.counts = counts;
    -    }
    -
    -    /**
    -     * To create a new {@link NativeHistogramBuckets} instance, you can either use one of the static {@code of(...)}
    -     * methods, or use {@link NativeHistogramBuckets#builder()}.
    -     * @param bucketIndexes see class javadoc of {@link NativeHistogramBuckets}. May be empty.
    -     * @param counts must have the same length as bucketIndexes
    -     */
    -    public static NativeHistogramBuckets of(int[] bucketIndexes, long[] counts) {
    -        int[] bucketIndexesCopy = Arrays.copyOf(bucketIndexes, bucketIndexes.length);
    -        long[] countsCopy = Arrays.copyOf(counts, counts.length);
    -        sortAndValidate(bucketIndexesCopy, countsCopy);
    -        return new NativeHistogramBuckets(bucketIndexesCopy, countsCopy);
    -    }
    -
    -    /**
    -     * To create a new {@link NativeHistogramBuckets} instance, you can either use one of the static {@code of(...)}
    -     * methods, or use {@link NativeHistogramBuckets#builder()}.
    -     * @param bucketIndexes see class javadoc of {@link NativeHistogramBuckets}. May be empty.
    -     * @param counts must have the same size as bucketIndexes
    -     */
    -    public static NativeHistogramBuckets of(List bucketIndexes, List counts) {
    -        int[] bucketIndexesCopy = new int[bucketIndexes.size()];
    -        for (int i=0; i asList() {
    -        List result = new ArrayList<>(size());
    -        for (int i=0; i iterator() {
    -        return asList().iterator();
    +  public static final NativeHistogramBuckets EMPTY =
    +      new NativeHistogramBuckets(new int[] {}, new long[] {});
    +  private final int[] bucketIndexes; // sorted
    +  private final long[] counts;
    +
    +  private NativeHistogramBuckets(int[] bucketIndexes, long[] counts) {
    +    this.bucketIndexes = bucketIndexes;
    +    this.counts = counts;
    +  }
    +
    +  /**
    +   * To create a new {@link NativeHistogramBuckets} instance, you can either use one of the static
    +   * {@code of(...)} methods, or use {@link NativeHistogramBuckets#builder()}.
    +   *
    +   * @param bucketIndexes see class javadoc of {@link NativeHistogramBuckets}. May be empty.
    +   * @param counts must have the same length as bucketIndexes
    +   */
    +  public static NativeHistogramBuckets of(int[] bucketIndexes, long[] counts) {
    +    int[] bucketIndexesCopy = Arrays.copyOf(bucketIndexes, bucketIndexes.length);
    +    long[] countsCopy = Arrays.copyOf(counts, counts.length);
    +    sortAndValidate(bucketIndexesCopy, countsCopy);
    +    return new NativeHistogramBuckets(bucketIndexesCopy, countsCopy);
    +  }
    +
    +  /**
    +   * To create a new {@link NativeHistogramBuckets} instance, you can either use one of the static
    +   * {@code of(...)} methods, or use {@link NativeHistogramBuckets#builder()}.
    +   *
    +   * @param bucketIndexes see class javadoc of {@link NativeHistogramBuckets}. May be empty.
    +   * @param counts must have the same size as bucketIndexes
    +   */
    +  public static NativeHistogramBuckets of(List bucketIndexes, List counts) {
    +    int[] bucketIndexesCopy = new int[bucketIndexes.size()];
    +    for (int i = 0; i < bucketIndexes.size(); i++) {
    +      bucketIndexesCopy[i] = bucketIndexes.get(i);
         }
    -
    -    public Stream stream() {
    -        return asList().stream();
    +    long[] countsCopy = new long[counts.size()];
    +    for (int i = 0; i < counts.size(); i++) {
    +      countsCopy[i] = counts.get(i);
         }
    -
    -    public int getBucketIndex(int i) {
    -        return bucketIndexes[i];
    +    sortAndValidate(bucketIndexesCopy, countsCopy);
    +    return new NativeHistogramBuckets(bucketIndexesCopy, countsCopy);
    +  }
    +
    +  public int size() {
    +    return bucketIndexes.length;
    +  }
    +
    +  private List asList() {
    +    List result = new ArrayList<>(size());
    +    for (int i = 0; i < bucketIndexes.length; i++) {
    +      result.add(new NativeHistogramBucket(bucketIndexes[i], counts[i]));
         }
    -
    -    public long getCount(int i) {
    -        return counts[i];
    +    return Collections.unmodifiableList(result);
    +  }
    +
    +  @Override
    +  public Iterator iterator() {
    +    return asList().iterator();
    +  }
    +
    +  public Stream stream() {
    +    return asList().stream();
    +  }
    +
    +  public int getBucketIndex(int i) {
    +    return bucketIndexes[i];
    +  }
    +
    +  public long getCount(int i) {
    +    return counts[i];
    +  }
    +
    +  private static void sortAndValidate(int[] bucketIndexes, long[] counts) {
    +    if (bucketIndexes.length != counts.length) {
    +      throw new IllegalArgumentException(
    +          "bucketIndexes.length == "
    +              + bucketIndexes.length
    +              + " but counts.length == "
    +              + counts.length
    +              + ". Expected the same length.");
         }
    -
    -    private static void sortAndValidate(int[] bucketIndexes, long[] counts) {
    -        if (bucketIndexes.length != counts.length) {
    -            throw new IllegalArgumentException("bucketIndexes.length == " + bucketIndexes.length + " but counts.length == " + counts.length + ". Expected the same length.");
    -        }
    -        sort(bucketIndexes, counts);
    -        validate(bucketIndexes, counts);
    -    }
    -
    -    private static void sort(int[] bucketIndexes, long[] counts) {
    -        // Bubblesort. Should be efficient here as in most cases bucketIndexes is already sorted.
    -        int n = bucketIndexes.length;
    -        for (int i = 0; i < n - 1; i++) {
    -            for (int j = 0; j < n - i - 1; j++) {
    -                if (bucketIndexes[j] > bucketIndexes[j + 1]) {
    -                    swap(j, j+1, bucketIndexes, counts);
    -                }
    -            }
    +    sort(bucketIndexes, counts);
    +    validate(bucketIndexes, counts);
    +  }
    +
    +  private static void sort(int[] bucketIndexes, long[] counts) {
    +    // Bubblesort. Should be efficient here as in most cases bucketIndexes is already sorted.
    +    int n = bucketIndexes.length;
    +    for (int i = 0; i < n - 1; i++) {
    +      for (int j = 0; j < n - i - 1; j++) {
    +        if (bucketIndexes[j] > bucketIndexes[j + 1]) {
    +          swap(j, j + 1, bucketIndexes, counts);
             }
    +      }
         }
    -
    -    private static void swap(int i, int j, int[] bucketIndexes, long[] counts) {
    -        int tmpInt = bucketIndexes[j];
    -        bucketIndexes[j] = bucketIndexes[i];
    -        bucketIndexes[i] = tmpInt;
    -        long tmpLong = counts[j];
    -        counts[j] = counts[i];
    -        counts[i] = tmpLong;
    -    }
    -
    -    private static void validate(int[] bucketIndexes, long[] counts) {
    -        // Preconditions:
    -        // * bucketIndexes sorted
    -        // * bucketIndexes and counts have the same length
    -        for (int i=0; i 0) {
    -                if (bucketIndexes[i-1] == bucketIndexes[i]) {
    -                    throw new IllegalArgumentException("Duplicate bucket index " + bucketIndexes[i]);
    -                }
    -            }
    +  }
    +
    +  private static void swap(int i, int j, int[] bucketIndexes, long[] counts) {
    +    int tmpInt = bucketIndexes[j];
    +    bucketIndexes[j] = bucketIndexes[i];
    +    bucketIndexes[i] = tmpInt;
    +    long tmpLong = counts[j];
    +    counts[j] = counts[i];
    +    counts[i] = tmpLong;
    +  }
    +
    +  private static void validate(int[] bucketIndexes, long[] counts) {
    +    // Preconditions:
    +    // * bucketIndexes sorted
    +    // * bucketIndexes and counts have the same length
    +    for (int i = 0; i < bucketIndexes.length; i++) {
    +      if (counts[i] < 0) {
    +        throw new IllegalArgumentException("Bucket counts cannot be negative.");
    +      }
    +      if (i > 0) {
    +        if (bucketIndexes[i - 1] == bucketIndexes[i]) {
    +          throw new IllegalArgumentException("Duplicate bucket index " + bucketIndexes[i]);
             }
    +      }
         }
    +  }
     
    -    public static Builder builder() {
    -        return new Builder();
    -    }
    +  public static Builder builder() {
    +    return new Builder();
    +  }
     
    -    public static class Builder {
    +  public static class Builder {
     
    -        private final List bucketIndexes = new ArrayList<>();
    -        private final List counts = new ArrayList<>();
    +    private final List bucketIndexes = new ArrayList<>();
    +    private final List counts = new ArrayList<>();
     
    -        private Builder() {}
    +    private Builder() {}
     
    -        /**
    -         * Add a native histogram bucket. Call multiple times to add multiple buckets.
    -         */
    -        public Builder bucket(int bucketIndex, long count) {
    -            bucketIndexes.add(bucketIndex);
    -            counts.add(count);
    -            return this;
    -        }
    +    /** Add a native histogram bucket. Call multiple times to add multiple buckets. */
    +    public Builder bucket(int bucketIndex, long count) {
    +      bucketIndexes.add(bucketIndex);
    +      counts.add(count);
    +      return this;
    +    }
     
    -        public NativeHistogramBuckets build() {
    -            return NativeHistogramBuckets.of(bucketIndexes, counts);
    -        }
    +    public NativeHistogramBuckets build() {
    +      return NativeHistogramBuckets.of(bucketIndexes, counts);
         }
    +  }
     }
    diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java
    index 21c162632..d4f9db699 100644
    --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java
    +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java
    @@ -4,276 +4,280 @@
     
     /**
      * Utility for Prometheus Metric and Label naming.
    - * 

    - * Note that this library allows dots in metric and label names. Dots will automatically be replaced with underscores - * in Prometheus exposition formats. However, if metrics are exposed in OpenTelemetry format the dots are retained. + * + *

    Note that this library allows dots in metric and label names. Dots will automatically be + * replaced with underscores in Prometheus exposition formats. However, if metrics are exposed in + * OpenTelemetry format the dots are retained. */ public class PrometheusNaming { - /** - * Legal characters for metric names, including dot. - */ - private static final Pattern METRIC_NAME_PATTERN = Pattern.compile("^[a-zA-Z_.:][a-zA-Z0-9_.:]*$"); + /** Legal characters for metric names, including dot. */ + private static final Pattern METRIC_NAME_PATTERN = + Pattern.compile("^[a-zA-Z_.:][a-zA-Z0-9_.:]*$"); - /** - * Legal characters for label names, including dot. - */ - private static final Pattern LABEL_NAME_PATTERN = Pattern.compile("^[a-zA-Z_.][a-zA-Z0-9_.]*$"); + /** Legal characters for label names, including dot. */ + private static final Pattern LABEL_NAME_PATTERN = Pattern.compile("^[a-zA-Z_.][a-zA-Z0-9_.]*$"); - /** - * Legal characters for unit names, including dot. - */ - private static final Pattern UNIT_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_.:]+$"); + /** Legal characters for unit names, including dot. */ + private static final Pattern UNIT_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_.:]+$"); - /** - * According to OpenMetrics {@code _count} and {@code _sum} (and {@code _gcount}, {@code _gsum}) should also be - * reserved metric name suffixes. However, popular instrumentation libraries have Gauges with names - * ending in {@code _count}. - * Examples: - *

      - *
    • Micrometer: {@code jvm_buffer_count}
    • - *
    • OpenTelemetry: {@code process_runtime_jvm_buffer_count}
    • - *
    - * We do not treat {@code _count} and {@code _sum} as reserved suffixes here for compatibility with these libraries. - * However, there is a risk of name conflict if someone creates a gauge named {@code my_data_count} and a - * histogram or summary named {@code my_data}, because the histogram or summary will implicitly have a sample - * named {@code my_data_count}. - */ - private static final String[] RESERVED_METRIC_NAME_SUFFIXES = { - "_total", "_created", "_bucket", "_info", - ".total", ".created", ".bucket", ".info" - }; + /** + * According to OpenMetrics {@code _count} and {@code _sum} (and {@code _gcount}, {@code _gsum}) + * should also be reserved metric name suffixes. However, popular instrumentation libraries have + * Gauges with names ending in {@code _count}. Examples: + * + *
      + *
    • Micrometer: {@code jvm_buffer_count} + *
    • OpenTelemetry: {@code process_runtime_jvm_buffer_count} + *
    + * + * We do not treat {@code _count} and {@code _sum} as reserved suffixes here for compatibility + * with these libraries. However, there is a risk of name conflict if someone creates a gauge + * named {@code my_data_count} and a histogram or summary named {@code my_data}, because the + * histogram or summary will implicitly have a sample named {@code my_data_count}. + */ + private static final String[] RESERVED_METRIC_NAME_SUFFIXES = { + "_total", "_created", "_bucket", "_info", + ".total", ".created", ".bucket", ".info" + }; - /** - * Test if a metric name is valid. Rules: - *
      - *
    • The name must match {@link #METRIC_NAME_PATTERN}.
    • - *
    • The name MUST NOT end with one of the {@link #RESERVED_METRIC_NAME_SUFFIXES}.
    • - *
    - * If a metric has a {@link Unit}, the metric name SHOULD end with the unit as a suffix. - * Note that OpenMetrics requires metric names to have their unit as suffix, - * and we implement this in {@code prometheus-metrics-core}. However, {@code prometheus-metrics-model} - * does not enforce Unit suffixes. - *

    - * Example: If you create a Counter for a processing time with Unit {@link Unit#SECONDS SECONDS}, - * the name should be {@code processing_time_seconds}. When exposed in OpenMetrics Text format, - * this will be represented as two values: {@code processing_time_seconds_total} for the counter value, - * and the optional {@code processing_time_seconds_created} timestamp. - *

    - * Use {@link #sanitizeMetricName(String)} to convert arbitrary Strings to valid metric names. - */ - public static boolean isValidMetricName(String name) { - return validateMetricName(name) == null; - } + /** + * Test if a metric name is valid. Rules: + * + *

      + *
    • The name must match {@link #METRIC_NAME_PATTERN}. + *
    • The name MUST NOT end with one of the {@link #RESERVED_METRIC_NAME_SUFFIXES}. + *
    + * + * If a metric has a {@link Unit}, the metric name SHOULD end with the unit as a suffix. Note that + * OpenMetrics requires metric names to have their unit as + * suffix, and we implement this in {@code prometheus-metrics-core}. However, {@code + * prometheus-metrics-model} does not enforce Unit suffixes. + * + *

    Example: If you create a Counter for a processing time with Unit {@link Unit#SECONDS + * SECONDS}, the name should be {@code processing_time_seconds}. When exposed in OpenMetrics Text + * format, this will be represented as two values: {@code processing_time_seconds_total} for the + * counter value, and the optional {@code processing_time_seconds_created} timestamp. + * + *

    Use {@link #sanitizeMetricName(String)} to convert arbitrary Strings to valid metric names. + */ + public static boolean isValidMetricName(String name) { + return validateMetricName(name) == null; + } - /** - * Same as {@link #isValidMetricName(String)}, but produces an error message. - *

    - * The name is valid if the error message is {@code null}. - */ - static String validateMetricName(String name) { - for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { - if (name.endsWith(reservedSuffix)) { - return "The metric name must not include the '" + reservedSuffix + "' suffix."; - } - } - if (!METRIC_NAME_PATTERN.matcher(name).matches()) { - return "The metric name contains unsupported characters"; - } - return null; + /** + * Same as {@link #isValidMetricName(String)}, but produces an error message. + * + *

    The name is valid if the error message is {@code null}. + */ + static String validateMetricName(String name) { + for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { + if (name.endsWith(reservedSuffix)) { + return "The metric name must not include the '" + reservedSuffix + "' suffix."; + } } - - public static boolean isValidLabelName(String name) { - return LABEL_NAME_PATTERN.matcher(name).matches() && - !(name.startsWith("__") || name.startsWith("._") || name.startsWith("..") || name.startsWith("_.")); + if (!METRIC_NAME_PATTERN.matcher(name).matches()) { + return "The metric name contains unsupported characters"; } + return null; + } - /** - * Units may not have illegal characters, and they may not end with a reserved suffix like 'total'. - */ - public static boolean isValidUnitName(String name) { - return validateUnitName(name) == null; - } + public static boolean isValidLabelName(String name) { + return LABEL_NAME_PATTERN.matcher(name).matches() + && !(name.startsWith("__") + || name.startsWith("._") + || name.startsWith("..") + || name.startsWith("_.")); + } - /** - * Same as {@link #isValidUnitName(String)} but returns an error message. - */ - public static String validateUnitName(String name) { - if (name.isEmpty()) { - return "The unit name must not be empty."; - } - for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { - String suffixName = reservedSuffix.substring(1); - if (name.endsWith(suffixName)) { - return suffixName + " is a reserved suffix in Prometheus"; - } - } - if (!UNIT_NAME_PATTERN.matcher(name).matches()) { - return "The unit name contains unsupported characters"; - } - return null; - } + /** + * Units may not have illegal characters, and they may not end with a reserved suffix like + * 'total'. + */ + public static boolean isValidUnitName(String name) { + return validateUnitName(name) == null; + } - /** - * Get the metric or label name that is used in Prometheus exposition format. - * - * @param name must be a valid metric or label name, - * i.e. {@link #isValidMetricName(String) isValidMetricName(name)} - * or {@link #isValidLabelName(String) isValidLabelName(name)} must be true. - * @return the name with dots replaced by underscores. - */ - public static String prometheusName(String name) { - return name.replace(".", "_"); + /** Same as {@link #isValidUnitName(String)} but returns an error message. */ + public static String validateUnitName(String name) { + if (name.isEmpty()) { + return "The unit name must not be empty."; } + for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { + String suffixName = reservedSuffix.substring(1); + if (name.endsWith(suffixName)) { + return suffixName + " is a reserved suffix in Prometheus"; + } + } + if (!UNIT_NAME_PATTERN.matcher(name).matches()) { + return "The unit name contains unsupported characters"; + } + return null; + } + + /** + * Get the metric or label name that is used in Prometheus exposition format. + * + * @param name must be a valid metric or label name, i.e. {@link #isValidMetricName(String) + * isValidMetricName(name)} or {@link #isValidLabelName(String) isValidLabelName(name)} must + * be true. + * @return the name with dots replaced by underscores. + */ + public static String prometheusName(String name) { + return name.replace(".", "_"); + } - /** - * Convert an arbitrary string to a name where {@link #isValidMetricName(String) isValidMetricName(name)} is true. - */ - public static String sanitizeMetricName(String metricName) { - if (metricName.isEmpty()) { - throw new IllegalArgumentException("Cannot convert an empty string to a valid metric name."); + /** + * Convert an arbitrary string to a name where {@link #isValidMetricName(String) + * isValidMetricName(name)} is true. + */ + public static String sanitizeMetricName(String metricName) { + if (metricName.isEmpty()) { + throw new IllegalArgumentException("Cannot convert an empty string to a valid metric name."); + } + String sanitizedName = replaceIllegalCharsInMetricName(metricName); + boolean modified = true; + while (modified) { + modified = false; + for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { + if (sanitizedName.equals(reservedSuffix)) { + // This is for the corner case when you call sanitizeMetricName("_total"). + // In that case the result will be "total". + return reservedSuffix.substring(1); } - String sanitizedName = replaceIllegalCharsInMetricName(metricName); - boolean modified = true; - while (modified) { - modified = false; - for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { - if (sanitizedName.equals(reservedSuffix)) { - // This is for the corner case when you call sanitizeMetricName("_total"). - // In that case the result will be "total". - return reservedSuffix.substring(1); - } - if (sanitizedName.endsWith(reservedSuffix)) { - sanitizedName = sanitizedName.substring(0, sanitizedName.length() - reservedSuffix.length()); - modified = true; - } - } + if (sanitizedName.endsWith(reservedSuffix)) { + sanitizedName = + sanitizedName.substring(0, sanitizedName.length() - reservedSuffix.length()); + modified = true; } - return sanitizedName; + } } + return sanitizedName; + } - /** - * Like {@link #sanitizeMetricName(String)}, but also makes sure that the unit is appended - * as a suffix if the unit is not {@code null}. - */ - public static String sanitizeMetricName(String metricName, Unit unit) { - String result = sanitizeMetricName(metricName); - if (unit != null) { - if (!result.endsWith("_" + unit) && !result.endsWith("." + unit)) { - result += "_" + unit; - } - } - return result; + /** + * Like {@link #sanitizeMetricName(String)}, but also makes sure that the unit is appended as a + * suffix if the unit is not {@code null}. + */ + public static String sanitizeMetricName(String metricName, Unit unit) { + String result = sanitizeMetricName(metricName); + if (unit != null) { + if (!result.endsWith("_" + unit) && !result.endsWith("." + unit)) { + result += "_" + unit; + } } + return result; + } - /** - * Convert an arbitrary string to a name where {@link #isValidLabelName(String) isValidLabelName(name)} is true. - */ - public static String sanitizeLabelName(String labelName) { - if (labelName.isEmpty()) { - throw new IllegalArgumentException("Cannot convert an empty string to a valid label name."); - } - String sanitizedName = replaceIllegalCharsInLabelName(labelName); - while (sanitizedName.startsWith("__") || sanitizedName.startsWith("_.") || sanitizedName.startsWith("._") || sanitizedName.startsWith("..")) { - sanitizedName = sanitizedName.substring(1); - } - return sanitizedName; + /** + * Convert an arbitrary string to a name where {@link #isValidLabelName(String) + * isValidLabelName(name)} is true. + */ + public static String sanitizeLabelName(String labelName) { + if (labelName.isEmpty()) { + throw new IllegalArgumentException("Cannot convert an empty string to a valid label name."); + } + String sanitizedName = replaceIllegalCharsInLabelName(labelName); + while (sanitizedName.startsWith("__") + || sanitizedName.startsWith("_.") + || sanitizedName.startsWith("._") + || sanitizedName.startsWith("..")) { + sanitizedName = sanitizedName.substring(1); } + return sanitizedName; + } - /** - * Convert an arbitrary string to a name where {@link #isValidUnitName(String) isValidUnitName(name)} is true. - * - * @throws IllegalArgumentException if the {@code unitName} cannot be converted, for example if you call {@code sanitizeUnitName("total")} or {@code sanitizeUnitName("")}. - * @throws NullPointerException if {@code unitName} is null. - */ - public static String sanitizeUnitName(String unitName) { - if (unitName.isEmpty()) { - throw new IllegalArgumentException("Cannot convert an empty string to a valid unit name."); - } - String sanitizedName = replaceIllegalCharsInUnitName(unitName); - boolean modified = true; - while (modified) { - modified = false; - while (sanitizedName.startsWith("_") || sanitizedName.startsWith(".")) { - sanitizedName = sanitizedName.substring(1); - modified = true; - } - while (sanitizedName.endsWith(".") || sanitizedName.endsWith("_")) { - sanitizedName = sanitizedName.substring(0, sanitizedName.length()-1); - modified = true; - } - for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { - String suffixName = reservedSuffix.substring(1); - if (sanitizedName.endsWith(suffixName)) { - sanitizedName = sanitizedName.substring(0, sanitizedName.length() - suffixName.length()); - modified = true; - } - } - } - if (sanitizedName.isEmpty()) { - throw new IllegalArgumentException("Cannot convert '" + unitName + "' into a valid unit name."); + /** + * Convert an arbitrary string to a name where {@link #isValidUnitName(String) + * isValidUnitName(name)} is true. + * + * @throws IllegalArgumentException if the {@code unitName} cannot be converted, for example if + * you call {@code sanitizeUnitName("total")} or {@code sanitizeUnitName("")}. + * @throws NullPointerException if {@code unitName} is null. + */ + public static String sanitizeUnitName(String unitName) { + if (unitName.isEmpty()) { + throw new IllegalArgumentException("Cannot convert an empty string to a valid unit name."); + } + String sanitizedName = replaceIllegalCharsInUnitName(unitName); + boolean modified = true; + while (modified) { + modified = false; + while (sanitizedName.startsWith("_") || sanitizedName.startsWith(".")) { + sanitizedName = sanitizedName.substring(1); + modified = true; + } + while (sanitizedName.endsWith(".") || sanitizedName.endsWith("_")) { + sanitizedName = sanitizedName.substring(0, sanitizedName.length() - 1); + modified = true; + } + for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { + String suffixName = reservedSuffix.substring(1); + if (sanitizedName.endsWith(suffixName)) { + sanitizedName = sanitizedName.substring(0, sanitizedName.length() - suffixName.length()); + modified = true; } - return sanitizedName; + } + } + if (sanitizedName.isEmpty()) { + throw new IllegalArgumentException( + "Cannot convert '" + unitName + "' into a valid unit name."); } + return sanitizedName; + } - /** - * Returns a string that matches {@link #METRIC_NAME_PATTERN}. - */ - private static String replaceIllegalCharsInMetricName(String name) { - int length = name.length(); - char[] sanitized = new char[length]; - for (int i = 0; i < length; i++) { - char ch = name.charAt(i); - if (ch == '.' || - (ch >= 'a' && ch <= 'z') || - (ch >= 'A' && ch <= 'Z') || - (i > 0 && ch >= '0' && ch <= '9')) { - sanitized[i] = ch; - } else { - sanitized[i] = '_'; - } - } - return new String(sanitized); + /** Returns a string that matches {@link #METRIC_NAME_PATTERN}. */ + private static String replaceIllegalCharsInMetricName(String name) { + int length = name.length(); + char[] sanitized = new char[length]; + for (int i = 0; i < length; i++) { + char ch = name.charAt(i); + if (ch == '.' + || (ch >= 'a' && ch <= 'z') + || (ch >= 'A' && ch <= 'Z') + || (i > 0 && ch >= '0' && ch <= '9')) { + sanitized[i] = ch; + } else { + sanitized[i] = '_'; + } } + return new String(sanitized); + } - /** - * Returns a string that matches {@link #LABEL_NAME_PATTERN}. - */ - private static String replaceIllegalCharsInLabelName(String name) { - int length = name.length(); - char[] sanitized = new char[length]; - for (int i = 0; i < length; i++) { - char ch = name.charAt(i); - if (ch == '.' || - (ch >= 'a' && ch <= 'z') || - (ch >= 'A' && ch <= 'Z') || - (i > 0 && ch >= '0' && ch <= '9')) { - sanitized[i] = ch; - } else { - sanitized[i] = '_'; - } - } - return new String(sanitized); + /** Returns a string that matches {@link #LABEL_NAME_PATTERN}. */ + private static String replaceIllegalCharsInLabelName(String name) { + int length = name.length(); + char[] sanitized = new char[length]; + for (int i = 0; i < length; i++) { + char ch = name.charAt(i); + if (ch == '.' + || (ch >= 'a' && ch <= 'z') + || (ch >= 'A' && ch <= 'Z') + || (i > 0 && ch >= '0' && ch <= '9')) { + sanitized[i] = ch; + } else { + sanitized[i] = '_'; + } } + return new String(sanitized); + } - /** - * Returns a string that matches {@link #UNIT_NAME_PATTERN}. - */ - private static String replaceIllegalCharsInUnitName(String name) { - int length = name.length(); - char[] sanitized = new char[length]; - for (int i = 0; i < length; i++) { - char ch = name.charAt(i); - if (ch == ':' || - ch == '.' || - (ch >= 'a' && ch <= 'z') || - (ch >= 'A' && ch <= 'Z') || - (ch >= '0' && ch <= '9')) { - sanitized[i] = ch; - } else { - sanitized[i] = '_'; - } - } - return new String(sanitized); + /** Returns a string that matches {@link #UNIT_NAME_PATTERN}. */ + private static String replaceIllegalCharsInUnitName(String name) { + int length = name.length(); + char[] sanitized = new char[length]; + for (int i = 0; i < length; i++) { + char ch = name.charAt(i); + if (ch == ':' + || ch == '.' + || (ch >= 'a' && ch <= 'z') + || (ch >= 'A' && ch <= 'Z') + || (ch >= '0' && ch <= '9')) { + sanitized[i] = ch; + } else { + sanitized[i] = '_'; + } } + return new String(sanitized); + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java index 40a31f85a..7bc575ef8 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java @@ -4,137 +4,151 @@ import java.util.Collection; import java.util.List; -/** - * Immutable snapshot of a Summary metric. - */ +/** Immutable snapshot of a Summary metric. */ public final class SummarySnapshot extends MetricSnapshot { + /** + * To create a new {@link SummarySnapshot}, you can either call the constructor directly or use + * the builder with {@link SummarySnapshot#builder()}. + * + * @param metadata See {@link MetricMetadata} for more naming conventions. + * @param data the constructor will create a sorted copy of the collection. + */ + public SummarySnapshot(MetricMetadata metadata, Collection data) { + super(metadata, data); + } + + @Override + public List getDataPoints() { + return (List) dataPoints; + } + + public static final class SummaryDataPointSnapshot extends DistributionDataPointSnapshot { + + private final Quantiles quantiles; + /** - * To create a new {@link SummarySnapshot}, you can either call the constructor directly or use - * the builder with {@link SummarySnapshot#builder()}. + * To create a new {@link SummaryDataPointSnapshot}, you can either call the constructor + * directly or use the Builder with {@link SummaryDataPointSnapshot#builder()}. * - * @param metadata See {@link MetricMetadata} for more naming conventions. - * @param data the constructor will create a sorted copy of the collection. + * @param count total number of observations. Optional, pass -1 if not available. + * @param sum sum of all observed values. Optional, pass {@link Double#NaN} if not available. + * @param quantiles must not be {@code null}. Use {@link Quantiles#EMPTY} if there are no + * quantiles. + * @param labels must not be {@code null}. Use {@link Labels#EMPTY} if there are no labels. + * @param exemplars must not be {@code null}. Use {@link Exemplars#EMPTY} if there are no + * exemplars. + * @param createdTimestampMillis timestamp (as in {@link System#currentTimeMillis()}) when this + * summary data (this specific set of labels) was created. Note that this refers to the + * creation of the timeseries, not the creation of the snapshot. The created timestamp + * optional. Use {@code 0L} if there is no created timestamp. */ - public SummarySnapshot(MetricMetadata metadata, Collection data) { - super(metadata, data); + public SummaryDataPointSnapshot( + long count, + double sum, + Quantiles quantiles, + Labels labels, + Exemplars exemplars, + long createdTimestampMillis) { + this(count, sum, quantiles, labels, exemplars, createdTimestampMillis, 0); } - @Override - public List getDataPoints() { - return (List) dataPoints; + /** + * Constructor with an additional scrape timestamp. This is only useful in rare cases as the + * scrape timestamp is usually set by the Prometheus server during scraping. Exceptions include + * mirroring metrics with given timestamps from other metric sources. + */ + public SummaryDataPointSnapshot( + long count, + double sum, + Quantiles quantiles, + Labels labels, + Exemplars exemplars, + long createdTimestampMillis, + long scrapeTimestampMillis) { + super(count, sum, exemplars, labels, createdTimestampMillis, scrapeTimestampMillis); + this.quantiles = quantiles; + validate(); } - public static final class SummaryDataPointSnapshot extends DistributionDataPointSnapshot { - - private final Quantiles quantiles; - - - /** - * To create a new {@link SummaryDataPointSnapshot}, you can either call the constructor directly - * or use the Builder with {@link SummaryDataPointSnapshot#builder()}. - * - * @param count total number of observations. Optional, pass -1 if not available. - * @param sum sum of all observed values. Optional, pass {@link Double#NaN} if not available. - * @param quantiles must not be {@code null}. Use {@link Quantiles#EMPTY} if there are no quantiles. - * @param labels must not be {@code null}. Use {@link Labels#EMPTY} if there are no labels. - * @param exemplars must not be {@code null}. Use {@link Exemplars#EMPTY} if there are no exemplars. - * @param createdTimestampMillis timestamp (as in {@link System#currentTimeMillis()}) when this summary - * data (this specific set of labels) was created. - * Note that this refers to the creation of the timeseries, - * not the creation of the snapshot. - * The created timestamp optional. Use {@code 0L} if there is no created timestamp. - */ - public SummaryDataPointSnapshot(long count, double sum, Quantiles quantiles, Labels labels, Exemplars exemplars, long createdTimestampMillis) { - this(count, sum, quantiles, labels, exemplars, createdTimestampMillis, 0); - } - - /** - * Constructor with an additional scrape timestamp. - * This is only useful in rare cases as the scrape timestamp is usually set by the Prometheus server - * during scraping. Exceptions include mirroring metrics with given timestamps from other metric sources. - */ - public SummaryDataPointSnapshot(long count, double sum, Quantiles quantiles, Labels labels, Exemplars exemplars, long createdTimestampMillis, long scrapeTimestampMillis) { - super(count, sum, exemplars, labels, createdTimestampMillis, scrapeTimestampMillis); - this.quantiles = quantiles; - validate(); - } - - public Quantiles getQuantiles() { - return quantiles; - } - - private void validate() { - for (Label label : getLabels()) { - if (label.getName().equals("quantile")) { - throw new IllegalArgumentException("quantile is a reserved label name for summaries"); - } - } - if (quantiles == null) { - throw new NullPointerException(); - } - } + public Quantiles getQuantiles() { + return quantiles; + } - public static Builder builder() { - return new Builder(); + private void validate() { + for (Label label : getLabels()) { + if (label.getName().equals("quantile")) { + throw new IllegalArgumentException("quantile is a reserved label name for summaries"); } + } + if (quantiles == null) { + throw new NullPointerException(); + } + } - public static class Builder extends DistributionDataPointSnapshot.Builder { + public static Builder builder() { + return new Builder(); + } - private Quantiles quantiles = Quantiles.EMPTY; + public static class Builder extends DistributionDataPointSnapshot.Builder { + + private Quantiles quantiles = Quantiles.EMPTY; + + private Builder() {} + + @Override + protected Builder self() { + return this; + } + + public Builder quantiles(Quantiles quantiles) { + this.quantiles = quantiles; + return this; + } + + @Override + public Builder count(long count) { + super.count(count); + return this; + } + + public SummaryDataPointSnapshot build() { + return new SummaryDataPointSnapshot( + count, + sum, + quantiles, + labels, + exemplars, + createdTimestampMillis, + scrapeTimestampMillis); + } + } + } - private Builder() { - } + public static Builder builder() { + return new Builder(); + } - @Override - protected Builder self() { - return this; - } + public static class Builder extends MetricSnapshot.Builder { - public Builder quantiles(Quantiles quantiles) { - this.quantiles = quantiles; - return this; - } + private final List dataPoints = new ArrayList<>(); - @Override - public Builder count(long count) { - super.count(count); - return this; - } + private Builder() {} - public SummaryDataPointSnapshot build() { - return new SummaryDataPointSnapshot(count, sum, quantiles, labels, exemplars, createdTimestampMillis, scrapeTimestampMillis); - } - } + /** Add a data point. Call multiple times to add multiple data points. */ + public Builder dataPoint(SummaryDataPointSnapshot data) { + dataPoints.add(data); + return this; } - public static Builder builder() { - return new Builder(); + @Override + public SummarySnapshot build() { + return new SummarySnapshot(buildMetadata(), dataPoints); } - public static class Builder extends MetricSnapshot.Builder { - - private final List dataPoints = new ArrayList<>(); - - private Builder() { - } - - /** - * Add a data point. Call multiple times to add multiple data points. - */ - public Builder dataPoint(SummaryDataPointSnapshot data) { - dataPoints.add(data); - return this; - } - - @Override - public SummarySnapshot build() { - return new SummarySnapshot(buildMetadata(), dataPoints); - } - - @Override - protected Builder self() { - return this; - } + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java index 16a6c5941..cb3d93cda 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java @@ -4,69 +4,71 @@ /** * Some pre-defined units for convenience. You can create your own units with + * *

      *     new Unit("myUnit");
      * 
    - * Note that in Prometheus, units are largely based on SI base units - * (seconds, bytes, joules, grams, meters, ratio, volts, amperes, and celsius). + * + * Note that in Prometheus, units are largely based on SI base units (seconds, bytes, joules, grams, + * meters, ratio, volts, amperes, and celsius). */ public class Unit { - private final String name; + private final String name; - public static final Unit RATIO = new Unit("ratio"); - public static final Unit SECONDS = new Unit("seconds"); - public static final Unit BYTES = new Unit("bytes"); - public static final Unit CELSIUS = new Unit("celsius"); - public static final Unit JOULES = new Unit("joules"); - public static final Unit GRAMS = new Unit("grams"); - public static final Unit METERS = new Unit("meters"); - public static final Unit VOLTS = new Unit("volts"); - public static final Unit AMPERES = new Unit("amperes"); + public static final Unit RATIO = new Unit("ratio"); + public static final Unit SECONDS = new Unit("seconds"); + public static final Unit BYTES = new Unit("bytes"); + public static final Unit CELSIUS = new Unit("celsius"); + public static final Unit JOULES = new Unit("joules"); + public static final Unit GRAMS = new Unit("grams"); + public static final Unit METERS = new Unit("meters"); + public static final Unit VOLTS = new Unit("volts"); + public static final Unit AMPERES = new Unit("amperes"); - public Unit(String name) { - if (name == null) { - throw new NullPointerException("Unit name cannot be null."); - } - name = name.trim(); - String error = PrometheusNaming.validateUnitName(name); - if (error != null) { - throw new IllegalArgumentException(name + ": Illegal unit name: " + error); - } - this.name = name; + public Unit(String name) { + if (name == null) { + throw new NullPointerException("Unit name cannot be null."); } - - @Override - public String toString() { - return name; + name = name.trim(); + String error = PrometheusNaming.validateUnitName(name); + if (error != null) { + throw new IllegalArgumentException(name + ": Illegal unit name: " + error); } + this.name = name; + } - public static double nanosToSeconds(long nanos) { - return nanos / 1E9; - } + @Override + public String toString() { + return name; + } - public static double millisToSeconds(long millis) { - return millis / 1E3; - } + public static double nanosToSeconds(long nanos) { + return nanos / 1E9; + } - public static double secondsToMillis(double seconds) { - return seconds * 1E3; - } + public static double millisToSeconds(long millis) { + return millis / 1E3; + } - public static double kiloBytesToBytes(double kilobytes) { - return kilobytes * 1024; - } + public static double secondsToMillis(double seconds) { + return seconds * 1E3; + } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Unit unit = (Unit) o; - return Objects.equals(name, unit.name); - } + public static double kiloBytesToBytes(double kilobytes) { + return kilobytes * 1024; + } - @Override - public int hashCode() { - return Objects.hash(name); - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Unit unit = (Unit) o; + return Objects.equals(name, unit.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java index 70cf07326..3fe01c9df 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java @@ -4,136 +4,125 @@ import java.util.Collection; import java.util.List; -/** - * Immutable snapshot of an Unknown (Untyped) metric. - */ +/** Immutable snapshot of an Unknown (Untyped) metric. */ public final class UnknownSnapshot extends MetricSnapshot { + /** + * To create a new {@link UnknownSnapshot}, you can either call the constructor directly or use + * the builder with {@link UnknownSnapshot#builder()}. + * + * @param metadata required name and optional help and unit. See {@link MetricMetadata} for naming + * conventions. + * @param data the constructor will create a sorted copy of the collection. + */ + public UnknownSnapshot(MetricMetadata metadata, Collection data) { + super(metadata, data); + } + + @Override + public List getDataPoints() { + return (List) dataPoints; + } + + public static final class UnknownDataPointSnapshot extends DataPointSnapshot { + + private final double value; + private final Exemplar exemplar; // may be null + /** - * To create a new {@link UnknownSnapshot}, you can either call the constructor directly or use - * the builder with {@link UnknownSnapshot#builder()}. + * To create a new {@link UnknownDataPointSnapshot}, you can either call the constructor + * directly or use the Builder with {@link UnknownDataPointSnapshot#builder()}. * - * @param metadata required name and optional help and unit. - * See {@link MetricMetadata} for naming conventions. - * @param data the constructor will create a sorted copy of the collection. + * @param value the value. + * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. + * @param exemplar may be null. */ - public UnknownSnapshot(MetricMetadata metadata, Collection data) { - super(metadata, data); + public UnknownDataPointSnapshot(double value, Labels labels, Exemplar exemplar) { + this(value, labels, exemplar, 0); } - @Override - public List getDataPoints() { - return (List) dataPoints; + /** + * Constructor with an additional scrape timestamp. This is only useful in rare cases as the + * scrape timestamp is usually set by the Prometheus server during scraping. Exceptions include + * mirroring metrics with given timestamps from other metric sources. + */ + public UnknownDataPointSnapshot( + double value, Labels labels, Exemplar exemplar, long scrapeTimestampMillis) { + super(labels, 0L, scrapeTimestampMillis); + this.value = value; + this.exemplar = exemplar; } - public static final class UnknownDataPointSnapshot extends DataPointSnapshot { - - private final double value; - private final Exemplar exemplar; // may be null - - /** - * To create a new {@link UnknownDataPointSnapshot}, you can either call the constructor directly or use the - * Builder with {@link UnknownDataPointSnapshot#builder()}. - * - * @param value the value. - * @param labels must not be null. Use {@link Labels#EMPTY} if there are no labels. - * @param exemplar may be null. - */ - public UnknownDataPointSnapshot(double value, Labels labels, Exemplar exemplar) { - this(value, labels, exemplar, 0); - } + public double getValue() { + return value; + } - /** - * Constructor with an additional scrape timestamp. - * This is only useful in rare cases as the scrape timestamp is usually set by the Prometheus server - * during scraping. Exceptions include mirroring metrics with given timestamps from other metric sources. - */ - public UnknownDataPointSnapshot(double value, Labels labels, Exemplar exemplar, long scrapeTimestampMillis) { - super(labels, 0L, scrapeTimestampMillis); - this.value = value; - this.exemplar = exemplar; - } + /** May return {@code null}. */ + public Exemplar getExemplar() { + return exemplar; + } - public double getValue() { - return value; - } + public static Builder builder() { + return new Builder(); + } - /** - * May return {@code null}. - */ - public Exemplar getExemplar() { - return exemplar; - } + public static class Builder extends DataPointSnapshot.Builder { - public static Builder builder() { - return new Builder(); - } + private Exemplar exemplar = null; + private Double value = null; + + private Builder() {} + + /** required. */ + public Builder value(double value) { + this.value = value; + return this; + } + + /** Optional */ + public Builder exemplar(Exemplar exemplar) { + this.exemplar = exemplar; + return this; + } - public static class Builder extends DataPointSnapshot.Builder { - - private Exemplar exemplar = null; - private Double value = null; - - private Builder() { - } - - /** - * required. - */ - public Builder value(double value) { - this.value = value; - return this; - } - - /** - * Optional - */ - public Builder exemplar(Exemplar exemplar) { - this.exemplar = exemplar; - return this; - } - - public UnknownDataPointSnapshot build() { - if (value == null) { - throw new IllegalArgumentException("Missing required field: value is null."); - } - return new UnknownDataPointSnapshot(value, labels, exemplar, scrapeTimestampMillis); - } - - @Override - protected Builder self() { - return this; - } + public UnknownDataPointSnapshot build() { + if (value == null) { + throw new IllegalArgumentException("Missing required field: value is null."); } - } + return new UnknownDataPointSnapshot(value, labels, exemplar, scrapeTimestampMillis); + } - public static Builder builder() { - return new Builder(); + @Override + protected Builder self() { + return this; + } } + } - public static class Builder extends MetricSnapshot.Builder { + public static Builder builder() { + return new Builder(); + } - private final List dataPoints = new ArrayList<>(); + public static class Builder extends MetricSnapshot.Builder { - private Builder() { - } + private final List dataPoints = new ArrayList<>(); - /** - * Add a data point. Call multiple times to add multiple data points. - */ - public Builder dataPoint(UnknownDataPointSnapshot data) { - dataPoints.add(data); - return this; - } + private Builder() {} - @Override - public UnknownSnapshot build() { - return new UnknownSnapshot(buildMetadata(), dataPoints); - } + /** Add a data point. Call multiple times to add multiple data points. */ + public Builder dataPoint(UnknownDataPointSnapshot data) { + dataPoints.add(data); + return this; + } - @Override - protected Builder self() { - return this; - } + @Override + public UnknownSnapshot build() { + return new UnknownSnapshot(buildMetadata(), dataPoints); + } + + @Override + protected Builder self() { + return this; } + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java index 78bf8c564..082981431 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java @@ -1,102 +1,98 @@ package io.prometheus.metrics.model.snapshots; +import java.util.Iterator; import org.junit.Assert; import org.junit.Test; -import java.util.Iterator; - public class ClassicHistogramBucketsTest { - @Test - public void testGoodCase() { - ClassicHistogramBuckets buckets = ClassicHistogramBuckets.builder() - .bucket(Double.NEGATIVE_INFINITY, 0) - .bucket(-10.0, 7) - .bucket(1024, 3) - .bucket(Double.POSITIVE_INFINITY, 8) - .build(); - Assert.assertEquals(4, buckets.size()); - } + @Test + public void testGoodCase() { + ClassicHistogramBuckets buckets = + ClassicHistogramBuckets.builder() + .bucket(Double.NEGATIVE_INFINITY, 0) + .bucket(-10.0, 7) + .bucket(1024, 3) + .bucket(Double.POSITIVE_INFINITY, 8) + .build(); + Assert.assertEquals(4, buckets.size()); + } - @Test - public void testSort() { - ClassicHistogramBuckets buckets = ClassicHistogramBuckets.builder() - .bucket(7, 2) - .bucket(2, 0) - .bucket(Double.POSITIVE_INFINITY, 3) - .build(); - Assert.assertEquals(3, buckets.size()); - Assert.assertEquals(2, buckets.getUpperBound(0), 0.0); - Assert.assertEquals(7, buckets.getUpperBound(1), 0.0); - Assert.assertEquals(Double.POSITIVE_INFINITY, buckets.getUpperBound(2), 0.0); - Assert.assertEquals(0, buckets.getCount(0)); - Assert.assertEquals(2, buckets.getCount(1)); - Assert.assertEquals(3, buckets.getCount(2)); - } + @Test + public void testSort() { + ClassicHistogramBuckets buckets = + ClassicHistogramBuckets.builder() + .bucket(7, 2) + .bucket(2, 0) + .bucket(Double.POSITIVE_INFINITY, 3) + .build(); + Assert.assertEquals(3, buckets.size()); + Assert.assertEquals(2, buckets.getUpperBound(0), 0.0); + Assert.assertEquals(7, buckets.getUpperBound(1), 0.0); + Assert.assertEquals(Double.POSITIVE_INFINITY, buckets.getUpperBound(2), 0.0); + Assert.assertEquals(0, buckets.getCount(0)); + Assert.assertEquals(2, buckets.getCount(1)); + Assert.assertEquals(3, buckets.getCount(2)); + } - @Test - public void testMinimalBuckets() { - ClassicHistogramBuckets buckets = ClassicHistogramBuckets.builder() - .bucket(Double.POSITIVE_INFINITY, 0) - .build(); - Assert.assertEquals(1, buckets.size()); - } + @Test + public void testMinimalBuckets() { + ClassicHistogramBuckets buckets = + ClassicHistogramBuckets.builder().bucket(Double.POSITIVE_INFINITY, 0).build(); + Assert.assertEquals(1, buckets.size()); + } - @Test(expected = IllegalArgumentException.class) - public void testInfBucketMissing() { - ClassicHistogramBuckets.builder() - .bucket(Double.NEGATIVE_INFINITY, 0) - .build(); - } + @Test(expected = IllegalArgumentException.class) + public void testInfBucketMissing() { + ClassicHistogramBuckets.builder().bucket(Double.NEGATIVE_INFINITY, 0).build(); + } - @Test(expected = IllegalArgumentException.class) - public void testNegativeCount() { - ClassicHistogramBuckets.builder() - .bucket(0.0, 10) - .bucket(Double.POSITIVE_INFINITY, -1) - .build(); - } + @Test(expected = IllegalArgumentException.class) + public void testNegativeCount() { + ClassicHistogramBuckets.builder().bucket(0.0, 10).bucket(Double.POSITIVE_INFINITY, -1).build(); + } - @Test(expected = IllegalArgumentException.class) - public void testNaNBoundary() { - ClassicHistogramBuckets.builder() - .bucket(0.0, 1) - .bucket(Double.NaN, 2) - .bucket(Double.POSITIVE_INFINITY, 0) - .build(); - } + @Test(expected = IllegalArgumentException.class) + public void testNaNBoundary() { + ClassicHistogramBuckets.builder() + .bucket(0.0, 1) + .bucket(Double.NaN, 2) + .bucket(Double.POSITIVE_INFINITY, 0) + .build(); + } - @Test(expected = IllegalArgumentException.class) - public void testDuplicateBoundary() { - ClassicHistogramBuckets.builder() - .bucket(1.0, 1) - .bucket(2.0, 2) - .bucket(1.0, 2) - .bucket(Double.POSITIVE_INFINITY, 0) - .build(); - } + @Test(expected = IllegalArgumentException.class) + public void testDuplicateBoundary() { + ClassicHistogramBuckets.builder() + .bucket(1.0, 1) + .bucket(2.0, 2) + .bucket(1.0, 2) + .bucket(Double.POSITIVE_INFINITY, 0) + .build(); + } - @Test(expected = IllegalArgumentException.class) - public void testEmptyBuckets() { - ClassicHistogramBuckets.builder().build(); - } + @Test(expected = IllegalArgumentException.class) + public void testEmptyBuckets() { + ClassicHistogramBuckets.builder().build(); + } - @Test(expected = IllegalArgumentException.class) - public void testDifferentLength() { - double[] upperBounds = new double[] {0.7, 1.3, Double.POSITIVE_INFINITY}; - long[] counts = new long[] {13, 178, 1024, 3000}; - ClassicHistogramBuckets.of(upperBounds, counts); - } + @Test(expected = IllegalArgumentException.class) + public void testDifferentLength() { + double[] upperBounds = new double[] {0.7, 1.3, Double.POSITIVE_INFINITY}; + long[] counts = new long[] {13, 178, 1024, 3000}; + ClassicHistogramBuckets.of(upperBounds, counts); + } - @Test(expected = UnsupportedOperationException.class) - public void testImmutable() { - ClassicHistogramBuckets buckets = ClassicHistogramBuckets.builder() - .bucket(1.0, 7) - .bucket(2.0, 8) - .bucket(Double.POSITIVE_INFINITY, 0) - .build(); - Iterator iterator = buckets.iterator(); - iterator.next(); - iterator.remove(); - } + @Test(expected = UnsupportedOperationException.class) + public void testImmutable() { + ClassicHistogramBuckets buckets = + ClassicHistogramBuckets.builder() + .bucket(1.0, 7) + .bucket(2.0, 8) + .bucket(Double.POSITIVE_INFINITY, 0) + .build(); + Iterator iterator = buckets.iterator(); + iterator.next(); + iterator.remove(); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/CounterSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/CounterSnapshotTest.java index b990de196..96e8df4c9 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/CounterSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/CounterSnapshotTest.java @@ -1,108 +1,115 @@ package io.prometheus.metrics.model.snapshots; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; -import org.junit.Assert; -import org.junit.Test; - import java.util.Iterator; import java.util.concurrent.TimeUnit; +import org.junit.Assert; +import org.junit.Test; public class CounterSnapshotTest { - @Test - public void testCompleteGoodCase() { - long createdTimestamp1 = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1); - long createdTimestamp2 = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(2); - long exemplarTimestamp = System.currentTimeMillis(); - CounterSnapshot snapshot = CounterSnapshot.builder() - .name("http_server_requests_seconds") - .help("total time spent serving requests") - .unit(Unit.SECONDS) - .dataPoint(CounterDataPointSnapshot.builder() - .value(1.0) - .exemplar(Exemplar.builder() - .value(3.0) - .traceId("abc123") - .spanId("123457") - .timestampMillis(exemplarTimestamp) - .build()) - .labels(Labels.builder() - .label("path", "/world") - .build()) - .createdTimestampMillis(createdTimestamp1) - .build() - ).dataPoint(CounterDataPointSnapshot.builder() - .value(2.0) - .exemplar(Exemplar.builder() - .value(4.0) - .traceId("def456") - .spanId("234567") - .timestampMillis(exemplarTimestamp) - .build()) - .labels(Labels.builder() - .label("path", "/hello") - .build()) - .createdTimestampMillis(createdTimestamp2) - .build() - ) - .build(); - SnapshotTestUtil.assertMetadata(snapshot, "http_server_requests_seconds", "total time spent serving requests", "seconds"); - Assert.assertEquals(2, snapshot.getDataPoints().size()); - CounterDataPointSnapshot data = snapshot.getDataPoints().get(0); // data is sorted by labels, so the first one should be path="/hello" - Assert.assertEquals(Labels.of("path", "/hello"), data.getLabels()); - Assert.assertEquals(2.0, data.getValue(), 0.0); - Assert.assertEquals(4.0, data.getExemplar().getValue(), 0.0); - Assert.assertEquals(createdTimestamp2, data.getCreatedTimestampMillis()); - Assert.assertFalse(data.hasScrapeTimestamp()); - data = snapshot.getDataPoints().get(1); - Assert.assertEquals(Labels.of("path", "/world"), data.getLabels()); - Assert.assertEquals(1.0, data.getValue(), 0.0); - Assert.assertEquals(3.0, data.getExemplar().getValue(), 0.0); - Assert.assertEquals(createdTimestamp1, data.getCreatedTimestampMillis()); - Assert.assertFalse(data.hasScrapeTimestamp()); - } + @Test + public void testCompleteGoodCase() { + long createdTimestamp1 = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1); + long createdTimestamp2 = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(2); + long exemplarTimestamp = System.currentTimeMillis(); + CounterSnapshot snapshot = + CounterSnapshot.builder() + .name("http_server_requests_seconds") + .help("total time spent serving requests") + .unit(Unit.SECONDS) + .dataPoint( + CounterDataPointSnapshot.builder() + .value(1.0) + .exemplar( + Exemplar.builder() + .value(3.0) + .traceId("abc123") + .spanId("123457") + .timestampMillis(exemplarTimestamp) + .build()) + .labels(Labels.builder().label("path", "/world").build()) + .createdTimestampMillis(createdTimestamp1) + .build()) + .dataPoint( + CounterDataPointSnapshot.builder() + .value(2.0) + .exemplar( + Exemplar.builder() + .value(4.0) + .traceId("def456") + .spanId("234567") + .timestampMillis(exemplarTimestamp) + .build()) + .labels(Labels.builder().label("path", "/hello").build()) + .createdTimestampMillis(createdTimestamp2) + .build()) + .build(); + SnapshotTestUtil.assertMetadata( + snapshot, "http_server_requests_seconds", "total time spent serving requests", "seconds"); + Assert.assertEquals(2, snapshot.getDataPoints().size()); + CounterDataPointSnapshot data = + snapshot + .getDataPoints() + .get(0); // data is sorted by labels, so the first one should be path="/hello" + Assert.assertEquals(Labels.of("path", "/hello"), data.getLabels()); + Assert.assertEquals(2.0, data.getValue(), 0.0); + Assert.assertEquals(4.0, data.getExemplar().getValue(), 0.0); + Assert.assertEquals(createdTimestamp2, data.getCreatedTimestampMillis()); + Assert.assertFalse(data.hasScrapeTimestamp()); + data = snapshot.getDataPoints().get(1); + Assert.assertEquals(Labels.of("path", "/world"), data.getLabels()); + Assert.assertEquals(1.0, data.getValue(), 0.0); + Assert.assertEquals(3.0, data.getExemplar().getValue(), 0.0); + Assert.assertEquals(createdTimestamp1, data.getCreatedTimestampMillis()); + Assert.assertFalse(data.hasScrapeTimestamp()); + } - @Test - public void testMinimalGoodCase() { - CounterSnapshot snapshot = CounterSnapshot.builder() - .name("events") - .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) - .build(); - SnapshotTestUtil.assertMetadata(snapshot, "events", null, null); - Assert.assertEquals(1, snapshot.getDataPoints().size()); - CounterDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertEquals(Labels.EMPTY, data.getLabels()); - Assert.assertEquals(1.0, data.getValue(), 0.0); - Assert.assertNull(data.getExemplar()); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - } + @Test + public void testMinimalGoodCase() { + CounterSnapshot snapshot = + CounterSnapshot.builder() + .name("events") + .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) + .build(); + SnapshotTestUtil.assertMetadata(snapshot, "events", null, null); + Assert.assertEquals(1, snapshot.getDataPoints().size()); + CounterDataPointSnapshot data = snapshot.getDataPoints().get(0); + Assert.assertEquals(Labels.EMPTY, data.getLabels()); + Assert.assertEquals(1.0, data.getValue(), 0.0); + Assert.assertNull(data.getExemplar()); + Assert.assertFalse(data.hasCreatedTimestamp()); + Assert.assertFalse(data.hasScrapeTimestamp()); + } - @Test - public void testEmptyCounter() { - CounterSnapshot snapshot = CounterSnapshot.builder().name("events").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); - } + @Test + public void testEmptyCounter() { + CounterSnapshot snapshot = CounterSnapshot.builder().name("events").build(); + Assert.assertEquals(0, snapshot.getDataPoints().size()); + } - @Test(expected = IllegalArgumentException.class) - public void testTotalSuffixPresent() { - CounterSnapshot.builder().name("test_total").build(); - } + @Test(expected = IllegalArgumentException.class) + public void testTotalSuffixPresent() { + CounterSnapshot.builder().name("test_total").build(); + } - @Test(expected = IllegalArgumentException.class) - public void testValueMissing() { - CounterDataPointSnapshot.builder().build(); - } + @Test(expected = IllegalArgumentException.class) + public void testValueMissing() { + CounterDataPointSnapshot.builder().build(); + } - @Test(expected = UnsupportedOperationException.class) - public void testDataImmutable() { - CounterSnapshot snapshot = CounterSnapshot.builder() - .name("events") - .dataPoint(CounterDataPointSnapshot.builder().labels(Labels.of("a", "a")).value(1.0).build()) - .dataPoint(CounterDataPointSnapshot.builder().labels(Labels.of("a", "b")).value(2.0).build()) - .build(); - Iterator iterator = snapshot.getDataPoints().iterator(); - iterator.next(); - iterator.remove(); - } + @Test(expected = UnsupportedOperationException.class) + public void testDataImmutable() { + CounterSnapshot snapshot = + CounterSnapshot.builder() + .name("events") + .dataPoint( + CounterDataPointSnapshot.builder().labels(Labels.of("a", "a")).value(1.0).build()) + .dataPoint( + CounterDataPointSnapshot.builder().labels(Labels.of("a", "b")).value(2.0).build()) + .build(); + Iterator iterator = snapshot.getDataPoints().iterator(); + iterator.next(); + iterator.remove(); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarTest.java index 84134b6b3..1a94b12f1 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarTest.java @@ -5,72 +5,76 @@ public class ExemplarTest { - @Test - public void testGoodCaseComplete() { - long timestamp = System.currentTimeMillis(); - Exemplar exemplar = Exemplar.builder() - .value(2.2) - .traceId("abc123abc123") - .spanId("def456def456") - .timestampMillis(timestamp) - .labels(Labels.of("path", "/", "error", "none")) - .build(); - Assert.assertEquals(2.2, exemplar.getValue(), 0.0); - Assert.assertEquals(Labels.of(Exemplar.TRACE_ID, "abc123abc123", Exemplar.SPAN_ID, "def456def456", "path", "/", "error", "none"), exemplar.getLabels()); - Assert.assertTrue(exemplar.hasTimestamp()); - Assert.assertEquals(timestamp, exemplar.getTimestampMillis()); - } + @Test + public void testGoodCaseComplete() { + long timestamp = System.currentTimeMillis(); + Exemplar exemplar = + Exemplar.builder() + .value(2.2) + .traceId("abc123abc123") + .spanId("def456def456") + .timestampMillis(timestamp) + .labels(Labels.of("path", "/", "error", "none")) + .build(); + Assert.assertEquals(2.2, exemplar.getValue(), 0.0); + Assert.assertEquals( + Labels.of( + Exemplar.TRACE_ID, + "abc123abc123", + Exemplar.SPAN_ID, + "def456def456", + "path", + "/", + "error", + "none"), + exemplar.getLabels()); + Assert.assertTrue(exemplar.hasTimestamp()); + Assert.assertEquals(timestamp, exemplar.getTimestampMillis()); + } - @Test(expected = IllegalStateException.class) - public void testValueMissing() { - Exemplar.builder().build(); - } + @Test(expected = IllegalStateException.class) + public void testValueMissing() { + Exemplar.builder().build(); + } - @Test - public void testMinimal() { - Exemplar exemplar = Exemplar.builder().value(0.0).build(); - Assert.assertEquals(0.0, exemplar.getValue(), 0.0); - Assert.assertEquals(Labels.EMPTY, exemplar.getLabels()); - Assert.assertFalse(exemplar.hasTimestamp()); - } + @Test + public void testMinimal() { + Exemplar exemplar = Exemplar.builder().value(0.0).build(); + Assert.assertEquals(0.0, exemplar.getValue(), 0.0); + Assert.assertEquals(Labels.EMPTY, exemplar.getLabels()); + Assert.assertFalse(exemplar.hasTimestamp()); + } - @Test - public void testLabelsMergeTraceId() { - Exemplar exemplar = Exemplar.builder() - .value(0.0) - .labels(Labels.of("a", "b")) - .traceId("abc") - .build(); - Assert.assertEquals(Labels.of("a", "b", "trace_id", "abc"), exemplar.getLabels()); - } + @Test + public void testLabelsMergeTraceId() { + Exemplar exemplar = + Exemplar.builder().value(0.0).labels(Labels.of("a", "b")).traceId("abc").build(); + Assert.assertEquals(Labels.of("a", "b", "trace_id", "abc"), exemplar.getLabels()); + } - @Test - public void testLabelsMergeSpanId() { - Exemplar exemplar = Exemplar.builder() - .value(0.0) - .labels(Labels.of("a", "b")) - .spanId("abc") - .build(); - Assert.assertEquals(Labels.of("a", "b", "span_id", "abc"), exemplar.getLabels()); - } + @Test + public void testLabelsMergeSpanId() { + Exemplar exemplar = + Exemplar.builder().value(0.0).labels(Labels.of("a", "b")).spanId("abc").build(); + Assert.assertEquals(Labels.of("a", "b", "span_id", "abc"), exemplar.getLabels()); + } - @Test - public void testLabelsMergeTraceIdAndSpanId() { - Exemplar exemplar = Exemplar.builder() - .value(0.0) - .labels(Labels.of("a", "b")) - .spanId("abc") - .traceId("def") - .build(); - Assert.assertEquals(Labels.of("span_id", "abc", "a", "b", "trace_id", "def"), exemplar.getLabels()); - } + @Test + public void testLabelsMergeTraceIdAndSpanId() { + Exemplar exemplar = + Exemplar.builder() + .value(0.0) + .labels(Labels.of("a", "b")) + .spanId("abc") + .traceId("def") + .build(); + Assert.assertEquals( + Labels.of("span_id", "abc", "a", "b", "trace_id", "def"), exemplar.getLabels()); + } - @Test - public void testLabelsMergeNone() { - Exemplar exemplar = Exemplar.builder() - .value(0.0) - .labels(Labels.of("a", "b")) - .build(); - Assert.assertEquals(Labels.of("a", "b"), exemplar.getLabels()); - } + @Test + public void testLabelsMergeNone() { + Exemplar exemplar = Exemplar.builder().value(0.0).labels(Labels.of("a", "b")).build(); + Assert.assertEquals(Labels.of("a", "b"), exemplar.getLabels()); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java index 4ca64d6fb..93a1c1efa 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java @@ -1,52 +1,54 @@ package io.prometheus.metrics.model.snapshots; +import java.util.Iterator; import org.junit.Assert; import org.junit.Test; -import java.util.Iterator; - public class ExemplarsTest { - @Test - public void testUpperBound() { - Exemplars exemplars = Exemplars.of( - Exemplar.builder().value(1.0).build(), - Exemplar.builder().value(3.0).build(), - Exemplar.builder().value(2.0).build() - ); - Assert.assertEquals(3, exemplars.size()); - Assert.assertEquals(1.0, exemplars.get(0).getValue(), 0.0); - Assert.assertEquals(3.0, exemplars.get(1).getValue(), 0.0); - Assert.assertEquals(2.0, exemplars.get(2).getValue(), 0.0); - Assert.assertEquals(1.0, exemplars.get(0.0, Double.POSITIVE_INFINITY).getValue(), 0.0); - Assert.assertEquals(1.0, exemplars.get(0.0, 1.0).getValue(), 0.0); - Assert.assertEquals(3.0, exemplars.get(1.0, 4.0).getValue(), 0.0); - Assert.assertEquals(3.0, exemplars.get(2.0, 3.0).getValue(), 0.0); - Assert.assertEquals(2.0, exemplars.get(1.0, 2.1).getValue(), 0.0); - Assert.assertNull(exemplars.get(2.0, 2.1)); - } + @Test + public void testUpperBound() { + Exemplars exemplars = + Exemplars.of( + Exemplar.builder().value(1.0).build(), + Exemplar.builder().value(3.0).build(), + Exemplar.builder().value(2.0).build()); + Assert.assertEquals(3, exemplars.size()); + Assert.assertEquals(1.0, exemplars.get(0).getValue(), 0.0); + Assert.assertEquals(3.0, exemplars.get(1).getValue(), 0.0); + Assert.assertEquals(2.0, exemplars.get(2).getValue(), 0.0); + Assert.assertEquals(1.0, exemplars.get(0.0, Double.POSITIVE_INFINITY).getValue(), 0.0); + Assert.assertEquals(1.0, exemplars.get(0.0, 1.0).getValue(), 0.0); + Assert.assertEquals(3.0, exemplars.get(1.0, 4.0).getValue(), 0.0); + Assert.assertEquals(3.0, exemplars.get(2.0, 3.0).getValue(), 0.0); + Assert.assertEquals(2.0, exemplars.get(1.0, 2.1).getValue(), 0.0); + Assert.assertNull(exemplars.get(2.0, 2.1)); + } - @Test(expected = UnsupportedOperationException.class) - public void testImmutable() { - Exemplars exemplars = Exemplars.of( - Exemplar.builder().value(1.0).build(), - Exemplar.builder().value(3.0).build(), - Exemplar.builder().value(2.0).build() - ); - Iterator iterator = exemplars.iterator(); - iterator.next(); - iterator.remove(); - } + @Test(expected = UnsupportedOperationException.class) + public void testImmutable() { + Exemplars exemplars = + Exemplars.of( + Exemplar.builder().value(1.0).build(), + Exemplar.builder().value(3.0).build(), + Exemplar.builder().value(2.0).build()); + Iterator iterator = exemplars.iterator(); + iterator.next(); + iterator.remove(); + } - @Test - public void testGet() { - Exemplar oldest = Exemplar.builder().timestampMillis(System.currentTimeMillis() - 100).value(1.8).build(); - Exemplar middle = Exemplar.builder().timestampMillis(System.currentTimeMillis() - 50).value(1.2).build(); - Exemplar newest = Exemplar.builder().timestampMillis(System.currentTimeMillis()).value(1.0).build(); - Exemplars exemplars = Exemplars.of(oldest, newest, middle); - Exemplar result = exemplars.get(1.1, 1.9); // newest is not within these bounds - Assert.assertSame(result, middle); - result = exemplars.get(0.9, Double.POSITIVE_INFINITY); - Assert.assertSame(result, newest); - } + @Test + public void testGet() { + Exemplar oldest = + Exemplar.builder().timestampMillis(System.currentTimeMillis() - 100).value(1.8).build(); + Exemplar middle = + Exemplar.builder().timestampMillis(System.currentTimeMillis() - 50).value(1.2).build(); + Exemplar newest = + Exemplar.builder().timestampMillis(System.currentTimeMillis()).value(1.0).build(); + Exemplars exemplars = Exemplars.of(oldest, newest, middle); + Exemplar result = exemplars.get(1.1, 1.9); // newest is not within these bounds + Assert.assertSame(result, middle); + result = exemplars.get(0.9, Double.POSITIVE_INFINITY); + Assert.assertSame(result, newest); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/GaugeSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/GaugeSnapshotTest.java index b64298529..fe7f386ba 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/GaugeSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/GaugeSnapshotTest.java @@ -2,110 +2,114 @@ import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; +import java.util.Iterator; import org.junit.Assert; import org.junit.Test; -import java.util.Iterator; - public class GaugeSnapshotTest { - @Test - public void testCompleteGoodCase() { - long exemplarTimestamp = System.currentTimeMillis(); - GaugeSnapshot snapshot = GaugeSnapshot.builder() - .name("cache_size_bytes") - .help("cache size in Bytes") - .unit(Unit.BYTES) - .dataPoint(GaugeDataPointSnapshot.builder() - .value(1024.0) - .exemplar(Exemplar.builder() - .value(1024.0) - .traceId("abc123") - .spanId("123457") - .timestampMillis(exemplarTimestamp) - .build()) - .labels(Labels.builder() - .label("env", "prod") - .build()) - .build() - ).dataPoint(GaugeDataPointSnapshot.builder() - .value(128.0) - .exemplar(Exemplar.builder() - .value(128.0) - .traceId("def456") - .spanId("234567") - .timestampMillis(exemplarTimestamp) - .build()) - .labels(Labels.builder() - .label("env", "dev") - .build()) - .build() - ) - .build(); - SnapshotTestUtil.assertMetadata(snapshot, "cache_size_bytes", "cache size in Bytes", "bytes"); - Assert.assertEquals(2, snapshot.getDataPoints().size()); - GaugeDataPointSnapshot data = snapshot.getDataPoints().get(0); // data is sorted by labels, so the first one should be path="/hello" - Assert.assertEquals(Labels.of("env", "dev"), data.getLabels()); - Assert.assertEquals(128.0, data.getValue(), 0.0); - Assert.assertEquals(128.0, data.getExemplar().getValue(), 0.0); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - data = snapshot.getDataPoints().get(1); - Assert.assertEquals(Labels.of("env", "prod"), data.getLabels()); - Assert.assertEquals(1024.0, data.getValue(), 0.0); - Assert.assertEquals(1024.0, data.getExemplar().getValue(), 0.0); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - } + @Test + public void testCompleteGoodCase() { + long exemplarTimestamp = System.currentTimeMillis(); + GaugeSnapshot snapshot = + GaugeSnapshot.builder() + .name("cache_size_bytes") + .help("cache size in Bytes") + .unit(Unit.BYTES) + .dataPoint( + GaugeDataPointSnapshot.builder() + .value(1024.0) + .exemplar( + Exemplar.builder() + .value(1024.0) + .traceId("abc123") + .spanId("123457") + .timestampMillis(exemplarTimestamp) + .build()) + .labels(Labels.builder().label("env", "prod").build()) + .build()) + .dataPoint( + GaugeDataPointSnapshot.builder() + .value(128.0) + .exemplar( + Exemplar.builder() + .value(128.0) + .traceId("def456") + .spanId("234567") + .timestampMillis(exemplarTimestamp) + .build()) + .labels(Labels.builder().label("env", "dev").build()) + .build()) + .build(); + SnapshotTestUtil.assertMetadata(snapshot, "cache_size_bytes", "cache size in Bytes", "bytes"); + Assert.assertEquals(2, snapshot.getDataPoints().size()); + GaugeDataPointSnapshot data = + snapshot + .getDataPoints() + .get(0); // data is sorted by labels, so the first one should be path="/hello" + Assert.assertEquals(Labels.of("env", "dev"), data.getLabels()); + Assert.assertEquals(128.0, data.getValue(), 0.0); + Assert.assertEquals(128.0, data.getExemplar().getValue(), 0.0); + Assert.assertFalse(data.hasCreatedTimestamp()); + Assert.assertFalse(data.hasScrapeTimestamp()); + data = snapshot.getDataPoints().get(1); + Assert.assertEquals(Labels.of("env", "prod"), data.getLabels()); + Assert.assertEquals(1024.0, data.getValue(), 0.0); + Assert.assertEquals(1024.0, data.getExemplar().getValue(), 0.0); + Assert.assertFalse(data.hasCreatedTimestamp()); + Assert.assertFalse(data.hasScrapeTimestamp()); + } - @Test - public void testMinimalGoodCase() { - GaugeSnapshot snapshot = GaugeSnapshot.builder() - .name("temperature") - .dataPoint(GaugeDataPointSnapshot.builder().value(23.0).build()) - .build(); - SnapshotTestUtil.assertMetadata(snapshot, "temperature", null, null); - Assert.assertEquals(1, snapshot.getDataPoints().size()); - GaugeDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertEquals(Labels.EMPTY, data.getLabels()); - Assert.assertEquals(23.0, data.getValue(), 0.0); - Assert.assertNull(data.getExemplar()); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - } + @Test + public void testMinimalGoodCase() { + GaugeSnapshot snapshot = + GaugeSnapshot.builder() + .name("temperature") + .dataPoint(GaugeDataPointSnapshot.builder().value(23.0).build()) + .build(); + SnapshotTestUtil.assertMetadata(snapshot, "temperature", null, null); + Assert.assertEquals(1, snapshot.getDataPoints().size()); + GaugeDataPointSnapshot data = snapshot.getDataPoints().get(0); + Assert.assertEquals(Labels.EMPTY, data.getLabels()); + Assert.assertEquals(23.0, data.getValue(), 0.0); + Assert.assertNull(data.getExemplar()); + Assert.assertFalse(data.hasCreatedTimestamp()); + Assert.assertFalse(data.hasScrapeTimestamp()); + } - @Test - public void testEmptyGauge() { - GaugeSnapshot snapshot = GaugeSnapshot.builder() - .name("temperature") - .build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); - } + @Test + public void testEmptyGauge() { + GaugeSnapshot snapshot = GaugeSnapshot.builder().name("temperature").build(); + Assert.assertEquals(0, snapshot.getDataPoints().size()); + } - @Test(expected = IllegalArgumentException.class) - public void testTotalSuffixPresent() { - CounterSnapshot.builder().name("test_total").build(); - } + @Test(expected = IllegalArgumentException.class) + public void testTotalSuffixPresent() { + CounterSnapshot.builder().name("test_total").build(); + } - @Test(expected = IllegalArgumentException.class) - public void testTotalSuffixPresentDot() { - CounterSnapshot.builder().name("test.total").build(); - } + @Test(expected = IllegalArgumentException.class) + public void testTotalSuffixPresentDot() { + CounterSnapshot.builder().name("test.total").build(); + } - @Test(expected = IllegalArgumentException.class) - public void testValueMissing() { - CounterDataPointSnapshot.builder().build(); - } + @Test(expected = IllegalArgumentException.class) + public void testValueMissing() { + CounterDataPointSnapshot.builder().build(); + } - @Test(expected = UnsupportedOperationException.class) - public void testDataImmutable() { - GaugeSnapshot snapshot = GaugeSnapshot.builder() - .name("gauge") - .dataPoint(GaugeDataPointSnapshot.builder().labels(Labels.of("a", "a")).value(23.0).build()) - .dataPoint(GaugeDataPointSnapshot.builder().labels(Labels.of("a", "b")).value(23.0).build()) - .build(); - Iterator iterator = snapshot.getDataPoints().iterator(); - iterator.next(); - iterator.remove(); - } + @Test(expected = UnsupportedOperationException.class) + public void testDataImmutable() { + GaugeSnapshot snapshot = + GaugeSnapshot.builder() + .name("gauge") + .dataPoint( + GaugeDataPointSnapshot.builder().labels(Labels.of("a", "a")).value(23.0).build()) + .dataPoint( + GaugeDataPointSnapshot.builder().labels(Labels.of("a", "b")).value(23.0).build()) + .build(); + Iterator iterator = snapshot.getDataPoints().iterator(); + iterator.next(); + iterator.remove(); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java index dd4f2f0cb..78e26d100 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java @@ -1,60 +1,62 @@ package io.prometheus.metrics.model.snapshots; +import java.util.Iterator; import org.junit.Assert; import org.junit.Test; -import java.util.Iterator; - public class InfoSnapshotTest { - @Test - public void testCompleteGoodCase() { - InfoSnapshot snapshot = InfoSnapshot.builder() - .name("target") - .help("Target info") - .dataPoint(InfoSnapshot.InfoDataPointSnapshot.builder() - .labels(Labels.of("instance_id", "127.0.0.1:9100", "service_name", "gateway")) - .build()) - .build(); - Assert.assertEquals("target", snapshot.getMetadata().getName()); - Assert.assertEquals("Target info", snapshot.getMetadata().getHelp()); - Assert.assertFalse(snapshot.getMetadata().hasUnit()); - Assert.assertEquals(1, snapshot.getDataPoints().size()); - } - - @Test - public void testEmptyInfo() { - InfoSnapshot snapshot = InfoSnapshot.builder().name("target").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); - } - - @Test(expected = UnsupportedOperationException.class) - public void testDataImmutable() { - InfoSnapshot snapshot = InfoSnapshot.builder() - .name("target") - .dataPoint(InfoSnapshot.InfoDataPointSnapshot.builder() - .labels(Labels.of("instance_id", "127.0.0.1:9100", "service_name", "gateway.v1")) - .build()) - .dataPoint(InfoSnapshot.InfoDataPointSnapshot.builder() - .labels(Labels.of("instance_id", "127.0.0.1:9200", "service_name", "gateway.v2")) - .build()) - .build(); - Iterator iterator = snapshot.getDataPoints().iterator(); - iterator.next(); - iterator.remove(); - } - - @Test(expected = IllegalArgumentException.class) - public void testNameMustNotIncludeSuffix() { + @Test + public void testCompleteGoodCase() { + InfoSnapshot snapshot = InfoSnapshot.builder() - .name("jvm_info") - .build(); - } - - @Test(expected = IllegalArgumentException.class) - public void testNameMustNotIncludeSuffixDot() { + .name("target") + .help("Target info") + .dataPoint( + InfoSnapshot.InfoDataPointSnapshot.builder() + .labels(Labels.of("instance_id", "127.0.0.1:9100", "service_name", "gateway")) + .build()) + .build(); + Assert.assertEquals("target", snapshot.getMetadata().getName()); + Assert.assertEquals("Target info", snapshot.getMetadata().getHelp()); + Assert.assertFalse(snapshot.getMetadata().hasUnit()); + Assert.assertEquals(1, snapshot.getDataPoints().size()); + } + + @Test + public void testEmptyInfo() { + InfoSnapshot snapshot = InfoSnapshot.builder().name("target").build(); + Assert.assertEquals(0, snapshot.getDataPoints().size()); + } + + @Test(expected = UnsupportedOperationException.class) + public void testDataImmutable() { + InfoSnapshot snapshot = InfoSnapshot.builder() - .name("jvm.info") - .build(); - } + .name("target") + .dataPoint( + InfoSnapshot.InfoDataPointSnapshot.builder() + .labels( + Labels.of("instance_id", "127.0.0.1:9100", "service_name", "gateway.v1")) + .build()) + .dataPoint( + InfoSnapshot.InfoDataPointSnapshot.builder() + .labels( + Labels.of("instance_id", "127.0.0.1:9200", "service_name", "gateway.v2")) + .build()) + .build(); + Iterator iterator = snapshot.getDataPoints().iterator(); + iterator.next(); + iterator.remove(); + } + + @Test(expected = IllegalArgumentException.class) + public void testNameMustNotIncludeSuffix() { + InfoSnapshot.builder().name("jvm_info").build(); + } + + @Test(expected = IllegalArgumentException.class) + public void testNameMustNotIncludeSuffixDot() { + InfoSnapshot.builder().name("jvm.info").build(); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java index acd659dbf..e387d7155 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java @@ -5,33 +5,36 @@ public class MetricSnapshotTest { - @Test(expected = IllegalArgumentException.class) - public void testDuplicateLabels() { - CounterSnapshot.builder() - .name("events") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(Labels.of("path", "/hello", "status", "200")) - .value(1.0) - .build()) - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(Labels.of("path", "/world", "status", "200")) - .value(2.0) - .build()) - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(Labels.of("status", "200", "path", "/hello")) - .value(3.0) - .build()) - .build(); - } + @Test(expected = IllegalArgumentException.class) + public void testDuplicateLabels() { + CounterSnapshot.builder() + .name("events") + .dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(Labels.of("path", "/hello", "status", "200")) + .value(1.0) + .build()) + .dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(Labels.of("path", "/world", "status", "200")) + .value(2.0) + .build()) + .dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(Labels.of("status", "200", "path", "/hello")) + .value(3.0) + .build()) + .build(); + } - @Test - public void testNoData() { - MetricSnapshot snapshot = CounterSnapshot.builder().name("test").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); - } + @Test + public void testNoData() { + MetricSnapshot snapshot = CounterSnapshot.builder().name("test").build(); + Assert.assertEquals(0, snapshot.getDataPoints().size()); + } - @Test(expected = NullPointerException.class) - public void testNullData() { - new CounterSnapshot(new MetricMetadata("test"), null); - } + @Test(expected = NullPointerException.class) + public void testNullData() { + new CounterSnapshot(new MetricMetadata("test"), null); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java index 61b54cb3a..b85fe629f 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java @@ -1,86 +1,96 @@ package io.prometheus.metrics.model.snapshots; +import java.util.Iterator; import org.junit.Assert; import org.junit.Test; -import java.util.Iterator; - public class MetricSnapshotsTest { - @Test - public void testEmpty() { - MetricSnapshots snapshots = MetricSnapshots.builder().build(); - Assert.assertFalse(snapshots.stream().findAny().isPresent()); - } + @Test + public void testEmpty() { + MetricSnapshots snapshots = MetricSnapshots.builder().build(); + Assert.assertFalse(snapshots.stream().findAny().isPresent()); + } - @Test - public void testSort() { - CounterSnapshot c1 = CounterSnapshot.builder() - .name("counter1") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) - .build(); - CounterSnapshot c2 = CounterSnapshot.builder() - .name("counter2") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) - .build(); - CounterSnapshot c3 = CounterSnapshot.builder() - .name("counter3") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) - .build(); - MetricSnapshots snapshots = new MetricSnapshots(c2, c3, c1); - Assert.assertEquals(3, snapshots.size()); - Assert.assertEquals("counter1", snapshots.get(0).getMetadata().getName()); - Assert.assertEquals("counter2", snapshots.get(1).getMetadata().getName()); - Assert.assertEquals("counter3", snapshots.get(2).getMetadata().getName()); - } + @Test + public void testSort() { + CounterSnapshot c1 = + CounterSnapshot.builder() + .name("counter1") + .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) + .build(); + CounterSnapshot c2 = + CounterSnapshot.builder() + .name("counter2") + .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) + .build(); + CounterSnapshot c3 = + CounterSnapshot.builder() + .name("counter3") + .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) + .build(); + MetricSnapshots snapshots = new MetricSnapshots(c2, c3, c1); + Assert.assertEquals(3, snapshots.size()); + Assert.assertEquals("counter1", snapshots.get(0).getMetadata().getName()); + Assert.assertEquals("counter2", snapshots.get(1).getMetadata().getName()); + Assert.assertEquals("counter3", snapshots.get(2).getMetadata().getName()); + } - @Test(expected = IllegalArgumentException.class) - public void testDuplicateName() { - // Q: What if you have a counter named "foo" and a gauge named "foo"? - // A: Great question. You might think this is a valid scenario, because the counter will produce - // the values "foo_total" and "foo_created" while the gauge will produce the value "foo". - // So from that perspective there is no conflict. However, the name for HELP, TYPE, UNIT is the same, - // and that is the conflict. Therefore, you cannot have a counter named "foo" and a gauge named "foo". - CounterSnapshot c = CounterSnapshot.builder() - .name("my_metric") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) - .build(); - GaugeSnapshot g = GaugeSnapshot.builder() - .name("my_metric") - .dataPoint(GaugeSnapshot.GaugeDataPointSnapshot.builder().value(1.0).build()) - .build(); - new MetricSnapshots(c, g); - } + @Test(expected = IllegalArgumentException.class) + public void testDuplicateName() { + // Q: What if you have a counter named "foo" and a gauge named "foo"? + // A: Great question. You might think this is a valid scenario, because the counter will produce + // the values "foo_total" and "foo_created" while the gauge will produce the value "foo". + // So from that perspective there is no conflict. However, the name for HELP, TYPE, UNIT is + // the same, + // and that is the conflict. Therefore, you cannot have a counter named "foo" and a gauge + // named "foo". + CounterSnapshot c = + CounterSnapshot.builder() + .name("my_metric") + .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) + .build(); + GaugeSnapshot g = + GaugeSnapshot.builder() + .name("my_metric") + .dataPoint(GaugeSnapshot.GaugeDataPointSnapshot.builder().value(1.0).build()) + .build(); + new MetricSnapshots(c, g); + } - @Test - public void testBuilder() { - CounterSnapshot counter = CounterSnapshot.builder() - .name("my_metric") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) - .build(); - MetricSnapshots.Builder builder = MetricSnapshots.builder(); - Assert.assertFalse(builder.containsMetricName("my_metric")); - builder.metricSnapshot(counter); - Assert.assertTrue(builder.containsMetricName("my_metric")); - } + @Test + public void testBuilder() { + CounterSnapshot counter = + CounterSnapshot.builder() + .name("my_metric") + .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) + .build(); + MetricSnapshots.Builder builder = MetricSnapshots.builder(); + Assert.assertFalse(builder.containsMetricName("my_metric")); + builder.metricSnapshot(counter); + Assert.assertTrue(builder.containsMetricName("my_metric")); + } - @Test(expected = UnsupportedOperationException.class) - public void testImmutable() { - CounterSnapshot c1 = CounterSnapshot.builder() - .name("counter1") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) - .build(); - CounterSnapshot c2 = CounterSnapshot.builder() - .name("counter2") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) - .build(); - CounterSnapshot c3 = CounterSnapshot.builder() - .name("counter3") - .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) - .build(); - MetricSnapshots snapshots = new MetricSnapshots(c2, c3, c1); - Iterator iterator = snapshots.iterator(); - iterator.next(); - iterator.remove(); - } + @Test(expected = UnsupportedOperationException.class) + public void testImmutable() { + CounterSnapshot c1 = + CounterSnapshot.builder() + .name("counter1") + .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) + .build(); + CounterSnapshot c2 = + CounterSnapshot.builder() + .name("counter2") + .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) + .build(); + CounterSnapshot c3 = + CounterSnapshot.builder() + .name("counter3") + .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) + .build(); + MetricSnapshots snapshots = new MetricSnapshots(c2, c3, c1); + Iterator iterator = snapshots.iterator(); + iterator.next(); + iterator.remove(); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucketsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucketsTest.java index 3c031d682..1aa7a1023 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucketsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucketsTest.java @@ -1,63 +1,54 @@ package io.prometheus.metrics.model.snapshots; +import java.util.Iterator; import org.junit.Assert; import org.junit.Test; -import java.util.Iterator; - public class NativeHistogramBucketsTest { - @Test - public void testGoodCase() { - NativeHistogramBuckets buckets = NativeHistogramBuckets.builder() - .bucket(-10, 12) - .bucket(120, 17) - .build(); - Assert.assertEquals(2, buckets.size()); - Assert.assertEquals(-10, buckets.getBucketIndex(0)); - Assert.assertEquals(12, buckets.getCount(0)); - Assert.assertEquals(120, buckets.getBucketIndex(1)); - Assert.assertEquals(17, buckets.getCount(1)); - } - - @Test - public void testEmpty() { - NativeHistogramBuckets buckets = NativeHistogramBuckets.builder().build(); - Assert.assertEquals(0, buckets.size()); - } - - @Test - public void testSort() { - NativeHistogramBuckets buckets = NativeHistogramBuckets.builder() - .bucket(7, 4) - .bucket(2, 0) - .bucket(5, 3) - .build(); - Assert.assertEquals(3, buckets.size()); - Assert.assertEquals(2, buckets.getBucketIndex(0)); - Assert.assertEquals(5, buckets.getBucketIndex(1)); - Assert.assertEquals(7, buckets.getBucketIndex(2)); - Assert.assertEquals(0, buckets.getCount(0)); - Assert.assertEquals(3, buckets.getCount(1)); - Assert.assertEquals(4, buckets.getCount(2)); - } - - @Test(expected = IllegalArgumentException.class) - public void testDifferentLength() { - int[] bucketIndexes = new int[] {0, 1, 2}; - long[] cumulativeCounts = new long[] {13, 178, 1024, 3000}; - NativeHistogramBuckets.of(bucketIndexes, cumulativeCounts); - } - - @Test(expected = UnsupportedOperationException.class) - public void testImmutable() { - NativeHistogramBuckets buckets = NativeHistogramBuckets.builder() - .bucket(1, 1) - .bucket(2, 1) - .build(); - Iterator iterator = buckets.iterator(); - iterator.next(); - iterator.remove(); - } - + @Test + public void testGoodCase() { + NativeHistogramBuckets buckets = + NativeHistogramBuckets.builder().bucket(-10, 12).bucket(120, 17).build(); + Assert.assertEquals(2, buckets.size()); + Assert.assertEquals(-10, buckets.getBucketIndex(0)); + Assert.assertEquals(12, buckets.getCount(0)); + Assert.assertEquals(120, buckets.getBucketIndex(1)); + Assert.assertEquals(17, buckets.getCount(1)); + } + + @Test + public void testEmpty() { + NativeHistogramBuckets buckets = NativeHistogramBuckets.builder().build(); + Assert.assertEquals(0, buckets.size()); + } + + @Test + public void testSort() { + NativeHistogramBuckets buckets = + NativeHistogramBuckets.builder().bucket(7, 4).bucket(2, 0).bucket(5, 3).build(); + Assert.assertEquals(3, buckets.size()); + Assert.assertEquals(2, buckets.getBucketIndex(0)); + Assert.assertEquals(5, buckets.getBucketIndex(1)); + Assert.assertEquals(7, buckets.getBucketIndex(2)); + Assert.assertEquals(0, buckets.getCount(0)); + Assert.assertEquals(3, buckets.getCount(1)); + Assert.assertEquals(4, buckets.getCount(2)); + } + + @Test(expected = IllegalArgumentException.class) + public void testDifferentLength() { + int[] bucketIndexes = new int[] {0, 1, 2}; + long[] cumulativeCounts = new long[] {13, 178, 1024, 3000}; + NativeHistogramBuckets.of(bucketIndexes, cumulativeCounts); + } + + @Test(expected = UnsupportedOperationException.class) + public void testImmutable() { + NativeHistogramBuckets buckets = + NativeHistogramBuckets.builder().bucket(1, 1).bucket(2, 1).build(); + Iterator iterator = buckets.iterator(); + iterator.next(); + iterator.remove(); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java index 9631f9df3..62f2fc2c8 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java @@ -1,90 +1,95 @@ package io.prometheus.metrics.model.snapshots; +import static io.prometheus.metrics.model.snapshots.PrometheusNaming.*; + import org.junit.Assert; import org.junit.Test; -import static io.prometheus.metrics.model.snapshots.PrometheusNaming.*; - public class PrometheusNamingTest { - @Test - public void testSanitizeMetricName() { - Assert.assertEquals("_abc_def", prometheusName(sanitizeMetricName("0abc.def"))); - Assert.assertEquals("___ab__c0", prometheusName(sanitizeMetricName("___ab.:c0"))); - Assert.assertEquals("my_prefix_my_metric", sanitizeMetricName("my_prefix/my_metric")); - Assert.assertEquals("my_counter", prometheusName(sanitizeMetricName("my_counter_total"))); - Assert.assertEquals("jvm", sanitizeMetricName("jvm.info")); - Assert.assertEquals("jvm", sanitizeMetricName("jvm_info")); - Assert.assertEquals("jvm", sanitizeMetricName("jvm.info")); - Assert.assertEquals("a.b", sanitizeMetricName("a.b")); - Assert.assertEquals("total", sanitizeMetricName("_total")); - Assert.assertEquals("total", sanitizeMetricName("total")); - } + @Test + public void testSanitizeMetricName() { + Assert.assertEquals("_abc_def", prometheusName(sanitizeMetricName("0abc.def"))); + Assert.assertEquals("___ab__c0", prometheusName(sanitizeMetricName("___ab.:c0"))); + Assert.assertEquals("my_prefix_my_metric", sanitizeMetricName("my_prefix/my_metric")); + Assert.assertEquals("my_counter", prometheusName(sanitizeMetricName("my_counter_total"))); + Assert.assertEquals("jvm", sanitizeMetricName("jvm.info")); + Assert.assertEquals("jvm", sanitizeMetricName("jvm_info")); + Assert.assertEquals("jvm", sanitizeMetricName("jvm.info")); + Assert.assertEquals("a.b", sanitizeMetricName("a.b")); + Assert.assertEquals("total", sanitizeMetricName("_total")); + Assert.assertEquals("total", sanitizeMetricName("total")); + } - @Test - public void testSanitizeMetricNameWithUnit() { - Assert.assertEquals("_abc_def_" + Unit.RATIO, prometheusName(sanitizeMetricName("0abc.def", Unit.RATIO))); - Assert.assertEquals("___ab__c0_" + Unit.RATIO, prometheusName(sanitizeMetricName("___ab.:c0", Unit.RATIO))); - Assert.assertEquals("my_prefix_my_metric_" + Unit.RATIO, sanitizeMetricName("my_prefix/my_metric", Unit.RATIO)); - Assert.assertEquals("my_counter_" + Unit.RATIO, prometheusName(sanitizeMetricName("my_counter_total", Unit.RATIO))); - Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm.info", Unit.RATIO)); - Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm_info", Unit.RATIO)); - Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm.info", Unit.RATIO)); - Assert.assertEquals("a.b_" + Unit.RATIO, sanitizeMetricName("a.b", Unit.RATIO)); - Assert.assertEquals("total_" + Unit.RATIO, sanitizeMetricName("_total", Unit.RATIO)); - Assert.assertEquals("total_" + Unit.RATIO, sanitizeMetricName("total", Unit.RATIO)); - } + @Test + public void testSanitizeMetricNameWithUnit() { + Assert.assertEquals( + "_abc_def_" + Unit.RATIO, prometheusName(sanitizeMetricName("0abc.def", Unit.RATIO))); + Assert.assertEquals( + "___ab__c0_" + Unit.RATIO, prometheusName(sanitizeMetricName("___ab.:c0", Unit.RATIO))); + Assert.assertEquals( + "my_prefix_my_metric_" + Unit.RATIO, sanitizeMetricName("my_prefix/my_metric", Unit.RATIO)); + Assert.assertEquals( + "my_counter_" + Unit.RATIO, + prometheusName(sanitizeMetricName("my_counter_total", Unit.RATIO))); + Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm.info", Unit.RATIO)); + Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm_info", Unit.RATIO)); + Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm.info", Unit.RATIO)); + Assert.assertEquals("a.b_" + Unit.RATIO, sanitizeMetricName("a.b", Unit.RATIO)); + Assert.assertEquals("total_" + Unit.RATIO, sanitizeMetricName("_total", Unit.RATIO)); + Assert.assertEquals("total_" + Unit.RATIO, sanitizeMetricName("total", Unit.RATIO)); + } - @Test - public void testSanitizeLabelName() { - Assert.assertEquals("_abc_def", prometheusName(sanitizeLabelName("0abc.def"))); - Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("_abc"))); - Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("__abc"))); - Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("___abc"))); - Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("_.abc"))); - Assert.assertEquals("abc.def", sanitizeLabelName("abc.def")); - Assert.assertEquals("abc.def2", sanitizeLabelName("abc.def2")); - } + @Test + public void testSanitizeLabelName() { + Assert.assertEquals("_abc_def", prometheusName(sanitizeLabelName("0abc.def"))); + Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("_abc"))); + Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("__abc"))); + Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("___abc"))); + Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("_.abc"))); + Assert.assertEquals("abc.def", sanitizeLabelName("abc.def")); + Assert.assertEquals("abc.def2", sanitizeLabelName("abc.def2")); + } - @Test - public void testValidateUnitName() { - Assert.assertNotNull(validateUnitName("secondstotal")); - Assert.assertNotNull(validateUnitName("total")); - Assert.assertNotNull(validateUnitName("seconds_total")); - Assert.assertNotNull(validateUnitName("_total")); - Assert.assertNotNull(validateUnitName("")); + @Test + public void testValidateUnitName() { + Assert.assertNotNull(validateUnitName("secondstotal")); + Assert.assertNotNull(validateUnitName("total")); + Assert.assertNotNull(validateUnitName("seconds_total")); + Assert.assertNotNull(validateUnitName("_total")); + Assert.assertNotNull(validateUnitName("")); - Assert.assertNull(validateUnitName("seconds")); - Assert.assertNull(validateUnitName("2")); - } + Assert.assertNull(validateUnitName("seconds")); + Assert.assertNull(validateUnitName("2")); + } - @Test - public void testSanitizeUnitName() { - Assert.assertEquals("seconds", sanitizeUnitName("seconds")); - Assert.assertEquals("seconds", sanitizeUnitName("seconds_total")); - Assert.assertEquals("seconds", sanitizeUnitName("seconds_total_total")); - Assert.assertEquals("m_s", sanitizeUnitName("m/s")); - Assert.assertEquals("seconds", sanitizeUnitName("secondstotal")); - Assert.assertEquals("2", sanitizeUnitName("2")); - } + @Test + public void testSanitizeUnitName() { + Assert.assertEquals("seconds", sanitizeUnitName("seconds")); + Assert.assertEquals("seconds", sanitizeUnitName("seconds_total")); + Assert.assertEquals("seconds", sanitizeUnitName("seconds_total_total")); + Assert.assertEquals("m_s", sanitizeUnitName("m/s")); + Assert.assertEquals("seconds", sanitizeUnitName("secondstotal")); + Assert.assertEquals("2", sanitizeUnitName("2")); + } - @Test(expected = IllegalArgumentException.class) - public void testInvalidUnitName1() { - sanitizeUnitName("total"); - } + @Test(expected = IllegalArgumentException.class) + public void testInvalidUnitName1() { + sanitizeUnitName("total"); + } - @Test(expected = IllegalArgumentException.class) - public void testInvalidUnitName2() { - sanitizeUnitName("_total"); - } + @Test(expected = IllegalArgumentException.class) + public void testInvalidUnitName2() { + sanitizeUnitName("_total"); + } - @Test(expected = IllegalArgumentException.class) - public void testInvalidUnitName3() { - sanitizeUnitName("%"); - } + @Test(expected = IllegalArgumentException.class) + public void testInvalidUnitName3() { + sanitizeUnitName("%"); + } - @Test(expected = IllegalArgumentException.class) - public void testEmptyUnitName() { - sanitizeUnitName(""); - } + @Test(expected = IllegalArgumentException.class) + public void testEmptyUnitName() { + sanitizeUnitName(""); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/QuantilesTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/QuantilesTest.java index c0956361d..0d66d5632 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/QuantilesTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/QuantilesTest.java @@ -1,51 +1,40 @@ package io.prometheus.metrics.model.snapshots; +import java.util.Iterator; import org.junit.Assert; import org.junit.Test; -import java.util.Iterator; - public class QuantilesTest { - @Test - public void testSort() { - Quantiles quantiles = Quantiles.builder() - .quantile(0.99, 0.23) - .quantile(0.5, 0.2) - .quantile(0.95, 0.22) - .build(); - Assert.assertEquals(3, quantiles.size()); - Assert.assertEquals(0.5, quantiles.get(0).getQuantile(), 0); - Assert.assertEquals(0.2, quantiles.get(0).getValue(), 0); - Assert.assertEquals(0.95, quantiles.get(1).getQuantile(), 0); - Assert.assertEquals(0.22, quantiles.get(1).getValue(), 0); - Assert.assertEquals(0.99, quantiles.get(2).getQuantile(), 0); - Assert.assertEquals(0.23, quantiles.get(2).getValue(), 0); - } + @Test + public void testSort() { + Quantiles quantiles = + Quantiles.builder().quantile(0.99, 0.23).quantile(0.5, 0.2).quantile(0.95, 0.22).build(); + Assert.assertEquals(3, quantiles.size()); + Assert.assertEquals(0.5, quantiles.get(0).getQuantile(), 0); + Assert.assertEquals(0.2, quantiles.get(0).getValue(), 0); + Assert.assertEquals(0.95, quantiles.get(1).getQuantile(), 0); + Assert.assertEquals(0.22, quantiles.get(1).getValue(), 0); + Assert.assertEquals(0.99, quantiles.get(2).getQuantile(), 0); + Assert.assertEquals(0.23, quantiles.get(2).getValue(), 0); + } - @Test(expected = UnsupportedOperationException.class) - public void testImmutable() { - Quantiles quantiles = Quantiles.builder() - .quantile(0.99, 0.23) - .quantile(0.5, 0.2) - .quantile(0.95, 0.22) - .build(); - Iterator iterator = quantiles.iterator(); - iterator.next(); - iterator.remove(); - } + @Test(expected = UnsupportedOperationException.class) + public void testImmutable() { + Quantiles quantiles = + Quantiles.builder().quantile(0.99, 0.23).quantile(0.5, 0.2).quantile(0.95, 0.22).build(); + Iterator iterator = quantiles.iterator(); + iterator.next(); + iterator.remove(); + } - @Test - public void testEmpty() { - Assert.assertEquals(0, Quantiles.EMPTY.size()); - } + @Test + public void testEmpty() { + Assert.assertEquals(0, Quantiles.EMPTY.size()); + } - @Test(expected = IllegalArgumentException.class) - public void testDuplicate() { - Quantiles.builder() - .quantile(0.95, 0.23) - .quantile(0.5, 0.2) - .quantile(0.95, 0.22) - .build(); - } + @Test(expected = IllegalArgumentException.class) + public void testDuplicate() { + Quantiles.builder().quantile(0.95, 0.23).quantile(0.5, 0.2).quantile(0.95, 0.22).build(); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SummarySnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SummarySnapshotTest.java index b5067b17e..4a4a2a355 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SummarySnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SummarySnapshotTest.java @@ -1,105 +1,111 @@ package io.prometheus.metrics.model.snapshots; +import java.util.concurrent.TimeUnit; import org.junit.Assert; import org.junit.Test; -import java.util.concurrent.TimeUnit; - public class SummarySnapshotTest { - @Test - public void testCompleteGoodCase() { - long createdTimestamp = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1); - long scrapeTimestamp = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(2); - long exemplarTimestamp = System.currentTimeMillis(); - SummarySnapshot snapshot = SummarySnapshot.builder() - .name("latency_seconds") - .help("latency in seconds") - .unit(Unit.SECONDS) - .dataPoint(SummarySnapshot.SummaryDataPointSnapshot.builder() - .createdTimestampMillis(createdTimestamp) - .scrapeTimestampMillis(scrapeTimestamp) - .labels(Labels.of("endpoint", "/")) - .quantiles(Quantiles.builder() - .quantile(0.5, 0.2) - .quantile(0.95, 0.22) - .quantile(0.99, 0.23) - .build()) - .exemplars(Exemplars.builder() - .exemplar(Exemplar.builder() - .value(0.2) - .traceId("abc123") - .spanId("123457") - .timestampMillis(exemplarTimestamp) - .build()) - .exemplar(Exemplar.builder() - .value(0.21) - .traceId("abc124") - .spanId("123458") - .timestampMillis(exemplarTimestamp) - .build()) - .build()) - .count(1093) - .sum(218.6) - .build()) - .dataPoint(SummarySnapshot.SummaryDataPointSnapshot.builder() - .labels(Labels.of("endpoint", "/test")) - .count(1093) - .sum(218.6) - .build()) - .build(); - SnapshotTestUtil.assertMetadata(snapshot, "latency_seconds", "latency in seconds", "seconds"); - Assert.assertEquals(2, snapshot.getDataPoints().size()); - SummarySnapshot.SummaryDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertEquals(Labels.of("endpoint", "/"), data.getLabels()); - Assert.assertTrue(data.hasCount()); - Assert.assertEquals(1093, data.getCount()); - Assert.assertTrue(data.hasSum()); - Assert.assertEquals(218.6, data.getSum(), 0); - Assert.assertTrue(data.hasCreatedTimestamp()); - Assert.assertEquals(createdTimestamp, data.getCreatedTimestampMillis()); - Assert.assertTrue(data.hasScrapeTimestamp()); - Assert.assertEquals(scrapeTimestamp, data.getScrapeTimestampMillis()); - Quantiles quantiles = data.getQuantiles(); - Assert.assertEquals(3, quantiles.size()); - // quantiles are tested in QuantilesTest already, skipping here. - Assert.assertEquals(2, data.getExemplars().size()); - // exemplars are tested in ExemplarsTest already, skipping here. + @Test + public void testCompleteGoodCase() { + long createdTimestamp = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1); + long scrapeTimestamp = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(2); + long exemplarTimestamp = System.currentTimeMillis(); + SummarySnapshot snapshot = + SummarySnapshot.builder() + .name("latency_seconds") + .help("latency in seconds") + .unit(Unit.SECONDS) + .dataPoint( + SummarySnapshot.SummaryDataPointSnapshot.builder() + .createdTimestampMillis(createdTimestamp) + .scrapeTimestampMillis(scrapeTimestamp) + .labels(Labels.of("endpoint", "/")) + .quantiles( + Quantiles.builder() + .quantile(0.5, 0.2) + .quantile(0.95, 0.22) + .quantile(0.99, 0.23) + .build()) + .exemplars( + Exemplars.builder() + .exemplar( + Exemplar.builder() + .value(0.2) + .traceId("abc123") + .spanId("123457") + .timestampMillis(exemplarTimestamp) + .build()) + .exemplar( + Exemplar.builder() + .value(0.21) + .traceId("abc124") + .spanId("123458") + .timestampMillis(exemplarTimestamp) + .build()) + .build()) + .count(1093) + .sum(218.6) + .build()) + .dataPoint( + SummarySnapshot.SummaryDataPointSnapshot.builder() + .labels(Labels.of("endpoint", "/test")) + .count(1093) + .sum(218.6) + .build()) + .build(); + SnapshotTestUtil.assertMetadata(snapshot, "latency_seconds", "latency in seconds", "seconds"); + Assert.assertEquals(2, snapshot.getDataPoints().size()); + SummarySnapshot.SummaryDataPointSnapshot data = snapshot.getDataPoints().get(0); + Assert.assertEquals(Labels.of("endpoint", "/"), data.getLabels()); + Assert.assertTrue(data.hasCount()); + Assert.assertEquals(1093, data.getCount()); + Assert.assertTrue(data.hasSum()); + Assert.assertEquals(218.6, data.getSum(), 0); + Assert.assertTrue(data.hasCreatedTimestamp()); + Assert.assertEquals(createdTimestamp, data.getCreatedTimestampMillis()); + Assert.assertTrue(data.hasScrapeTimestamp()); + Assert.assertEquals(scrapeTimestamp, data.getScrapeTimestampMillis()); + Quantiles quantiles = data.getQuantiles(); + Assert.assertEquals(3, quantiles.size()); + // quantiles are tested in QuantilesTest already, skipping here. + Assert.assertEquals(2, data.getExemplars().size()); + // exemplars are tested in ExemplarsTest already, skipping here. - data = snapshot.getDataPoints().get(1); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - Assert.assertTrue(data.hasCount()); - Assert.assertTrue(data.hasSum()); - } + data = snapshot.getDataPoints().get(1); + Assert.assertFalse(data.hasCreatedTimestamp()); + Assert.assertFalse(data.hasScrapeTimestamp()); + Assert.assertTrue(data.hasCount()); + Assert.assertTrue(data.hasSum()); + } - @Test - public void testMinimal() { - SummarySnapshot snapshot = SummarySnapshot.builder() - .name("size_bytes") - .dataPoint(SummarySnapshot.SummaryDataPointSnapshot.builder() - .count(10) - .sum(12.0) - .build()) - .build(); - Assert.assertEquals(1, snapshot.getDataPoints().size()); - Assert.assertEquals(Labels.EMPTY, snapshot.getDataPoints().get(0).getLabels()); - } + @Test + public void testMinimal() { + SummarySnapshot snapshot = + SummarySnapshot.builder() + .name("size_bytes") + .dataPoint( + SummarySnapshot.SummaryDataPointSnapshot.builder().count(10).sum(12.0).build()) + .build(); + Assert.assertEquals(1, snapshot.getDataPoints().size()); + Assert.assertEquals(Labels.EMPTY, snapshot.getDataPoints().get(0).getLabels()); + } - @Test - public void testEmptySnapshot() { - SummarySnapshot snapshot = SummarySnapshot.builder().name("empty_summary").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); - } + @Test + public void testEmptySnapshot() { + SummarySnapshot snapshot = SummarySnapshot.builder().name("empty_summary").build(); + Assert.assertEquals(0, snapshot.getDataPoints().size()); + } - @Test - public void testEmptyData() { - SummarySnapshot.SummaryDataPointSnapshot data = SummarySnapshot.SummaryDataPointSnapshot.builder().build(); - Assert.assertEquals(0, data.getQuantiles().size()); - Assert.assertFalse(data.hasCount()); - Assert.assertFalse(data.hasSum()); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - Assert.assertEquals(0, data.getExemplars().size()); - } + @Test + public void testEmptyData() { + SummarySnapshot.SummaryDataPointSnapshot data = + SummarySnapshot.SummaryDataPointSnapshot.builder().build(); + Assert.assertEquals(0, data.getQuantiles().size()); + Assert.assertFalse(data.hasCount()); + Assert.assertFalse(data.hasSum()); + Assert.assertFalse(data.hasCreatedTimestamp()); + Assert.assertFalse(data.hasScrapeTimestamp()); + Assert.assertEquals(0, data.getExemplars().size()); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java index a6d7973b5..cdb81c9dc 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java @@ -5,83 +5,83 @@ public class UnknownSnapshotTest { - @Test - public void testCompleteGoodCase() { - long exemplarTimestamp = System.currentTimeMillis(); - UnknownSnapshot snapshot = UnknownSnapshot.builder() - .name("my_unknown_seconds") - .help("something in seconds") - .unit(Unit.SECONDS) - .dataPoint(UnknownSnapshot.UnknownDataPointSnapshot.builder() - .value(0.3) - .exemplar(Exemplar.builder() - .value(0.12) - .traceId("abc123") - .spanId("123457") - .timestampMillis(exemplarTimestamp) - .build()) - .labels(Labels.builder() - .label("env", "prod") - .build()) - .build() - ).dataPoint(UnknownSnapshot.UnknownDataPointSnapshot.builder() - .value(0.29) - .labels(Labels.builder() - .label("env", "dev") - .build()) - .build() - ) - .build(); - SnapshotTestUtil.assertMetadata(snapshot, "my_unknown_seconds", "something in seconds", "seconds"); - Assert.assertEquals(2, snapshot.getDataPoints().size()); - UnknownSnapshot.UnknownDataPointSnapshot data = snapshot.getDataPoints().get(1); // env="prod" - Assert.assertEquals(Labels.of("env", "prod"), data.getLabels()); - Assert.assertEquals(0.3, data.getValue(), 0.0); - Assert.assertEquals(0.12, data.getExemplar().getValue(), 0.0); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - } + @Test + public void testCompleteGoodCase() { + long exemplarTimestamp = System.currentTimeMillis(); + UnknownSnapshot snapshot = + UnknownSnapshot.builder() + .name("my_unknown_seconds") + .help("something in seconds") + .unit(Unit.SECONDS) + .dataPoint( + UnknownSnapshot.UnknownDataPointSnapshot.builder() + .value(0.3) + .exemplar( + Exemplar.builder() + .value(0.12) + .traceId("abc123") + .spanId("123457") + .timestampMillis(exemplarTimestamp) + .build()) + .labels(Labels.builder().label("env", "prod").build()) + .build()) + .dataPoint( + UnknownSnapshot.UnknownDataPointSnapshot.builder() + .value(0.29) + .labels(Labels.builder().label("env", "dev").build()) + .build()) + .build(); + SnapshotTestUtil.assertMetadata( + snapshot, "my_unknown_seconds", "something in seconds", "seconds"); + Assert.assertEquals(2, snapshot.getDataPoints().size()); + UnknownSnapshot.UnknownDataPointSnapshot data = snapshot.getDataPoints().get(1); // env="prod" + Assert.assertEquals(Labels.of("env", "prod"), data.getLabels()); + Assert.assertEquals(0.3, data.getValue(), 0.0); + Assert.assertEquals(0.12, data.getExemplar().getValue(), 0.0); + Assert.assertFalse(data.hasCreatedTimestamp()); + Assert.assertFalse(data.hasScrapeTimestamp()); + } - @Test - public void testMinimal() { - UnknownSnapshot snapshot = UnknownSnapshot.builder() - .name("test") - .dataPoint(UnknownSnapshot.UnknownDataPointSnapshot.builder() - .value(1.0) - .build()) - .build(); - Assert.assertEquals(1, snapshot.getDataPoints().size()); - } + @Test + public void testMinimal() { + UnknownSnapshot snapshot = + UnknownSnapshot.builder() + .name("test") + .dataPoint(UnknownSnapshot.UnknownDataPointSnapshot.builder().value(1.0).build()) + .build(); + Assert.assertEquals(1, snapshot.getDataPoints().size()); + } - @Test - public void testEmpty() { - UnknownSnapshot snapshot = UnknownSnapshot.builder().name("test").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); - } + @Test + public void testEmpty() { + UnknownSnapshot snapshot = UnknownSnapshot.builder().name("test").build(); + Assert.assertEquals(0, snapshot.getDataPoints().size()); + } - @Test(expected = IllegalArgumentException.class) - public void testNameMissing() { - UnknownSnapshot.builder().build(); - } + @Test(expected = IllegalArgumentException.class) + public void testNameMissing() { + UnknownSnapshot.builder().build(); + } - @Test(expected = IllegalArgumentException.class) - public void testValueMissing() { - UnknownSnapshot.UnknownDataPointSnapshot.builder().build(); - } + @Test(expected = IllegalArgumentException.class) + public void testValueMissing() { + UnknownSnapshot.UnknownDataPointSnapshot.builder().build(); + } - @Test - public void testUnknownDataPointSnapshot() { - Labels labels = Labels.of("k1", "v1"); - Exemplar exemplar = Exemplar.builder().value(2.0).build(); + @Test + public void testUnknownDataPointSnapshot() { + Labels labels = Labels.of("k1", "v1"); + Exemplar exemplar = Exemplar.builder().value(2.0).build(); - UnknownSnapshot.UnknownDataPointSnapshot data = new UnknownSnapshot.UnknownDataPointSnapshot(1.0, labels, exemplar); - Assert.assertEquals(1.0, data.getValue(), 0.1); - Assert.assertEquals(labels, data.getLabels()); - Assert.assertEquals(exemplar, data.getExemplar()); + UnknownSnapshot.UnknownDataPointSnapshot data = + new UnknownSnapshot.UnknownDataPointSnapshot(1.0, labels, exemplar); + Assert.assertEquals(1.0, data.getValue(), 0.1); + Assert.assertEquals(labels, data.getLabels()); + Assert.assertEquals(exemplar, data.getExemplar()); - data = new UnknownSnapshot.UnknownDataPointSnapshot(1.0, labels, exemplar, 0L); - Assert.assertEquals(1.0, data.getValue(), 0.1); - Assert.assertEquals(labels, data.getLabels()); - Assert.assertEquals(exemplar, data.getExemplar()); - } + data = new UnknownSnapshot.UnknownDataPointSnapshot(1.0, labels, exemplar, 0L); + Assert.assertEquals(1.0, data.getValue(), 0.1); + Assert.assertEquals(labels, data.getLabels()); + Assert.assertEquals(exemplar, data.getExemplar()); + } } diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/src/main/java/io/prometheus/metrics/shaded/io_opentelemetry/PrometheusMetricsShadedOpenTelemetry.java b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/src/main/java/io/prometheus/metrics/shaded/io_opentelemetry/PrometheusMetricsShadedOpenTelemetry.java index 7b0019461..ca831e691 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/src/main/java/io/prometheus/metrics/shaded/io_opentelemetry/PrometheusMetricsShadedOpenTelemetry.java +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/src/main/java/io/prometheus/metrics/shaded/io_opentelemetry/PrometheusMetricsShadedOpenTelemetry.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.shaded.io_opentelemetry; /** - * This module does not need any source code, however, in order to publish it to Maven central it needs JavaDoc. - *

    - * I'm adding this dummy class here to get JavaDoc so I can publish this module to Maven central. + * This module does not need any source code, however, in order to publish it to Maven central it + * needs JavaDoc. + * + *

    I'm adding this dummy class here to get JavaDoc so I can publish this module to Maven central. */ -public class PrometheusMetricsShadedOpenTelemetry { -} +public class PrometheusMetricsShadedOpenTelemetry {} diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/src/main/java/io/prometheus/metrics/shaded/com_google_protobuf/PrometheusMetricsShadedProtobuf.java b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/src/main/java/io/prometheus/metrics/shaded/com_google_protobuf/PrometheusMetricsShadedProtobuf.java index 3f63392a7..9d78ee8e1 100644 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/src/main/java/io/prometheus/metrics/shaded/com_google_protobuf/PrometheusMetricsShadedProtobuf.java +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/src/main/java/io/prometheus/metrics/shaded/com_google_protobuf/PrometheusMetricsShadedProtobuf.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.shaded.com_google_protobuf; /** - * This module does not need any source code, however, in order to publish it to Maven central it needs JavaDoc. - *

    - * I'm adding this dummy class here to get JavaDoc so I can publish this module to Maven central. + * This module does not need any source code, however, in order to publish it to Maven central it + * needs JavaDoc. + * + *

    I'm adding this dummy class here to get JavaDoc so I can publish this module to Maven central. */ -public class PrometheusMetricsShadedProtobuf { -} +public class PrometheusMetricsShadedProtobuf {} diff --git a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java index e1b5a3113..f1b592eaa 100644 --- a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java +++ b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java @@ -23,25 +23,27 @@ import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.Unit; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; - import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Predicate; /** - * Bridge from {@code simpleclient} (version 0.16.0 and older) to the new {@code prometheus-metrics} (version 1.0.0 and newer). - *

    - * Usage: The following line will register all metrics from a {@code simpleclient} {@link CollectorRegistry#defaultRegistry} - * to a {@code prometheus-metrics} {@link PrometheusRegistry#defaultRegistry}: + * Bridge from {@code simpleclient} (version 0.16.0 and older) to the new {@code prometheus-metrics} + * (version 1.0.0 and newer). + * + *

    Usage: The following line will register all metrics from a {@code simpleclient} {@link + * CollectorRegistry#defaultRegistry} to a {@code prometheus-metrics} {@link + * PrometheusRegistry#defaultRegistry}: + * *

    {@code
      * SimpleclientCollector.builder().register();
      * }
    - *

    - * If you have custom registries (not the default registries), use the following snippet: + * + *

    If you have custom registries (not the default registries), use the following snippet: + * *

    {@code
      * CollectorRegistry simpleclientRegistry = ...;
      * PrometheusRegistry prometheusRegistry = ...;
    @@ -52,354 +54,373 @@
      */
     public class SimpleclientCollector implements MultiCollector {
     
    -    private final CollectorRegistry simpleclientRegistry;
    +  private final CollectorRegistry simpleclientRegistry;
     
    -    private SimpleclientCollector(CollectorRegistry simpleclientRegistry) {
    -        this.simpleclientRegistry = simpleclientRegistry;
    -    }
    +  private SimpleclientCollector(CollectorRegistry simpleclientRegistry) {
    +    this.simpleclientRegistry = simpleclientRegistry;
    +  }
     
    -    @Override
    -    public MetricSnapshots collect() {
    -        return convert(simpleclientRegistry.metricFamilySamples());
    -    }
    +  @Override
    +  public MetricSnapshots collect() {
    +    return convert(simpleclientRegistry.metricFamilySamples());
    +  }
     
    -    private MetricSnapshots convert(Enumeration samples) {
    -        MetricSnapshots.Builder result = MetricSnapshots.builder();
    -        while (samples.hasMoreElements()) {
    -            Collector.MetricFamilySamples sample = samples.nextElement();
    -            switch (sample.type) {
    -                case COUNTER:
    -                    result.metricSnapshot(convertCounter(sample));
    -                    break;
    -                case GAUGE:
    -                    result.metricSnapshot(convertGauge(sample));
    -                    break;
    -                case HISTOGRAM:
    -                    result.metricSnapshot(convertHistogram(sample, false));
    -                    break;
    -                case GAUGE_HISTOGRAM:
    -                    result.metricSnapshot(convertHistogram(sample, true));
    -                    break;
    -                case SUMMARY:
    -                    result.metricSnapshot(convertSummary(sample));
    -                    break;
    -                case INFO:
    -                    result.metricSnapshot(convertInfo(sample));
    -                    break;
    -                case STATE_SET:
    -                    result.metricSnapshot(convertStateSet(sample));
    -                    break;
    -                case UNKNOWN:
    -                    result.metricSnapshot(convertUnknown(sample));
    -                    break;
    -                default:
    -                    throw new IllegalStateException(sample.type + ": Unexpected metric type");
    -            }
    -        }
    -        return result.build();
    +  private MetricSnapshots convert(Enumeration samples) {
    +    MetricSnapshots.Builder result = MetricSnapshots.builder();
    +    while (samples.hasMoreElements()) {
    +      Collector.MetricFamilySamples sample = samples.nextElement();
    +      switch (sample.type) {
    +        case COUNTER:
    +          result.metricSnapshot(convertCounter(sample));
    +          break;
    +        case GAUGE:
    +          result.metricSnapshot(convertGauge(sample));
    +          break;
    +        case HISTOGRAM:
    +          result.metricSnapshot(convertHistogram(sample, false));
    +          break;
    +        case GAUGE_HISTOGRAM:
    +          result.metricSnapshot(convertHistogram(sample, true));
    +          break;
    +        case SUMMARY:
    +          result.metricSnapshot(convertSummary(sample));
    +          break;
    +        case INFO:
    +          result.metricSnapshot(convertInfo(sample));
    +          break;
    +        case STATE_SET:
    +          result.metricSnapshot(convertStateSet(sample));
    +          break;
    +        case UNKNOWN:
    +          result.metricSnapshot(convertUnknown(sample));
    +          break;
    +        default:
    +          throw new IllegalStateException(sample.type + ": Unexpected metric type");
    +      }
         }
    +    return result.build();
    +  }
     
    -    private MetricSnapshot convertCounter(Collector.MetricFamilySamples samples) {
    -        CounterSnapshot.Builder counter = CounterSnapshot.builder()
    -                .name(sanitizeMetricName(samples.name))
    -                .help(samples.help)
    -                .unit(convertUnit(samples));
    -        Map dataPoints = new HashMap<>();
    -        for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    -            Labels labels = Labels.of(sample.labelNames, sample.labelValues);
    -            CounterSnapshot.CounterDataPointSnapshot.Builder dataPoint = dataPoints.computeIfAbsent(labels, l -> CounterSnapshot.CounterDataPointSnapshot.builder().labels(labels));
    -            if (sample.name.endsWith("_created")) {
    -                dataPoint.createdTimestampMillis((long) Unit.secondsToMillis(sample.value));
    -            } else {
    -                dataPoint.value(sample.value).exemplar(convertExemplar(sample.exemplar));
    -                if (sample.timestampMs != null) {
    -                    dataPoint.scrapeTimestampMillis(sample.timestampMs);
    -                }
    -            }
    -        }
    -        for (CounterSnapshot.CounterDataPointSnapshot.Builder dataPoint : dataPoints.values()) {
    -            counter.dataPoint(dataPoint.build());
    +  private MetricSnapshot convertCounter(Collector.MetricFamilySamples samples) {
    +    CounterSnapshot.Builder counter =
    +        CounterSnapshot.builder()
    +            .name(sanitizeMetricName(samples.name))
    +            .help(samples.help)
    +            .unit(convertUnit(samples));
    +    Map dataPoints = new HashMap<>();
    +    for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    +      Labels labels = Labels.of(sample.labelNames, sample.labelValues);
    +      CounterSnapshot.CounterDataPointSnapshot.Builder dataPoint =
    +          dataPoints.computeIfAbsent(
    +              labels, l -> CounterSnapshot.CounterDataPointSnapshot.builder().labels(labels));
    +      if (sample.name.endsWith("_created")) {
    +        dataPoint.createdTimestampMillis((long) Unit.secondsToMillis(sample.value));
    +      } else {
    +        dataPoint.value(sample.value).exemplar(convertExemplar(sample.exemplar));
    +        if (sample.timestampMs != null) {
    +          dataPoint.scrapeTimestampMillis(sample.timestampMs);
             }
    -        return counter.build();
    +      }
         }
    -
    -    private MetricSnapshot convertGauge(Collector.MetricFamilySamples samples) {
    -        GaugeSnapshot.Builder gauge = GaugeSnapshot.builder()
    -                .name(sanitizeMetricName(samples.name))
    -                .help(samples.help)
    -                .unit(convertUnit(samples));
    -        for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    -            GaugeSnapshot.GaugeDataPointSnapshot.Builder dataPoint = GaugeSnapshot.GaugeDataPointSnapshot.builder()
    -                    .value(sample.value)
    -                    .labels(Labels.of(sample.labelNames, sample.labelValues))
    -                    .exemplar(convertExemplar(sample.exemplar));
    -            if (sample.timestampMs != null) {
    -                dataPoint.scrapeTimestampMillis(sample.timestampMs);
    -            }
    -            gauge.dataPoint(dataPoint.build());
    -        }
    -        return gauge.build();
    +    for (CounterSnapshot.CounterDataPointSnapshot.Builder dataPoint : dataPoints.values()) {
    +      counter.dataPoint(dataPoint.build());
         }
    +    return counter.build();
    +  }
     
    -    private MetricSnapshot convertHistogram(Collector.MetricFamilySamples samples, boolean isGaugeHistogram) {
    -        HistogramSnapshot.Builder histogram = HistogramSnapshot.builder()
    -                .name(sanitizeMetricName(samples.name))
    -                .help(samples.help)
    -                .unit(convertUnit(samples))
    -                .gaugeHistogram(isGaugeHistogram);
    -        Map dataPoints = new HashMap<>();
    -        Map> cumulativeBuckets = new HashMap<>();
    -        Map exemplars = new HashMap<>();
    -        for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    -            Labels labels = labelsWithout(sample, "le");
    -            dataPoints.computeIfAbsent(labels, l -> HistogramSnapshot.HistogramDataPointSnapshot.builder()
    -                    .labels(labels));
    -            cumulativeBuckets.computeIfAbsent(labels, l -> new HashMap<>());
    -            exemplars.computeIfAbsent(labels, l -> Exemplars.builder());
    -            if (sample.name.endsWith("_sum")) {
    -                dataPoints.get(labels).sum(sample.value);
    -            }
    -            if (sample.name.endsWith("_bucket")) {
    -                addBucket(cumulativeBuckets.get(labels), sample);
    -            }
    -            if (sample.name.endsWith("_created")) {
    -                dataPoints.get(labels).createdTimestampMillis((long) Unit.secondsToMillis(sample.value));
    -            }
    -            if (sample.exemplar != null) {
    -                exemplars.get(labels).exemplar(convertExemplar(sample.exemplar));
    -            }
    -            if (sample.timestampMs != null) {
    -                dataPoints.get(labels).scrapeTimestampMillis(sample.timestampMs);
    -            }
    -        }
    -        for (Labels labels : dataPoints.keySet()) {
    -            histogram.dataPoint(dataPoints.get(labels)
    -                    .classicHistogramBuckets(makeBuckets(cumulativeBuckets.get(labels)))
    -                    .exemplars(exemplars.get(labels).build())
    -                    .build());
    -        }
    -        return histogram.build();
    +  private MetricSnapshot convertGauge(Collector.MetricFamilySamples samples) {
    +    GaugeSnapshot.Builder gauge =
    +        GaugeSnapshot.builder()
    +            .name(sanitizeMetricName(samples.name))
    +            .help(samples.help)
    +            .unit(convertUnit(samples));
    +    for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    +      GaugeSnapshot.GaugeDataPointSnapshot.Builder dataPoint =
    +          GaugeSnapshot.GaugeDataPointSnapshot.builder()
    +              .value(sample.value)
    +              .labels(Labels.of(sample.labelNames, sample.labelValues))
    +              .exemplar(convertExemplar(sample.exemplar));
    +      if (sample.timestampMs != null) {
    +        dataPoint.scrapeTimestampMillis(sample.timestampMs);
    +      }
    +      gauge.dataPoint(dataPoint.build());
         }
    +    return gauge.build();
    +  }
     
    -    private MetricSnapshot convertSummary(Collector.MetricFamilySamples samples) {
    -        SummarySnapshot.Builder summary = SummarySnapshot.builder()
    -                .name(sanitizeMetricName(samples.name))
    -                .help(samples.help)
    -                .unit(convertUnit(samples));
    -        Map dataPoints = new HashMap<>();
    -        Map quantiles = new HashMap<>();
    -        Map exemplars = new HashMap<>();
    -        for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    -            Labels labels = labelsWithout(sample, "quantile");
    -            dataPoints.computeIfAbsent(labels, l -> SummarySnapshot.SummaryDataPointSnapshot.builder()
    -                    .labels(labels));
    -            quantiles.computeIfAbsent(labels, l -> Quantiles.builder());
    -            exemplars.computeIfAbsent(labels, l -> Exemplars.builder());
    -            if (sample.name.endsWith("_sum")) {
    -                dataPoints.get(labels).sum(sample.value);
    -            } else if (sample.name.endsWith("_count")) {
    -                dataPoints.get(labels).count((long) sample.value);
    -            } else if (sample.name.endsWith("_created")) {
    -                dataPoints.get(labels).createdTimestampMillis((long) Unit.secondsToMillis(sample.value));
    -            } else {
    -                for (int i=0; i dataPoints = new HashMap<>();
    +    Map> cumulativeBuckets = new HashMap<>();
    +    Map exemplars = new HashMap<>();
    +    for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    +      Labels labels = labelsWithout(sample, "le");
    +      dataPoints.computeIfAbsent(
    +          labels, l -> HistogramSnapshot.HistogramDataPointSnapshot.builder().labels(labels));
    +      cumulativeBuckets.computeIfAbsent(labels, l -> new HashMap<>());
    +      exemplars.computeIfAbsent(labels, l -> Exemplars.builder());
    +      if (sample.name.endsWith("_sum")) {
    +        dataPoints.get(labels).sum(sample.value);
    +      }
    +      if (sample.name.endsWith("_bucket")) {
    +        addBucket(cumulativeBuckets.get(labels), sample);
    +      }
    +      if (sample.name.endsWith("_created")) {
    +        dataPoints.get(labels).createdTimestampMillis((long) Unit.secondsToMillis(sample.value));
    +      }
    +      if (sample.exemplar != null) {
    +        exemplars.get(labels).exemplar(convertExemplar(sample.exemplar));
    +      }
    +      if (sample.timestampMs != null) {
    +        dataPoints.get(labels).scrapeTimestampMillis(sample.timestampMs);
    +      }
         }
    -
    -    private MetricSnapshot convertStateSet(Collector.MetricFamilySamples samples) {
    -        StateSetSnapshot.Builder stateSet = StateSetSnapshot.builder()
    -                .name(sanitizeMetricName(samples.name))
    -                .help(samples.help);
    -        Map dataPoints = new HashMap<>();
    -        for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    -            Labels labels = labelsWithout(sample, sample.name);
    -            dataPoints.computeIfAbsent(labels, l -> StateSetSnapshot.StateSetDataPointSnapshot.builder().labels(labels));
    -            String stateName = null;
    -            for (int i=0; i dataPoints = new HashMap<>();
    +    Map quantiles = new HashMap<>();
    +    Map exemplars = new HashMap<>();
    +    for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    +      Labels labels = labelsWithout(sample, "quantile");
    +      dataPoints.computeIfAbsent(
    +          labels, l -> SummarySnapshot.SummaryDataPointSnapshot.builder().labels(labels));
    +      quantiles.computeIfAbsent(labels, l -> Quantiles.builder());
    +      exemplars.computeIfAbsent(labels, l -> Exemplars.builder());
    +      if (sample.name.endsWith("_sum")) {
    +        dataPoints.get(labels).sum(sample.value);
    +      } else if (sample.name.endsWith("_count")) {
    +        dataPoints.get(labels).count((long) sample.value);
    +      } else if (sample.name.endsWith("_created")) {
    +        dataPoints.get(labels).createdTimestampMillis((long) Unit.secondsToMillis(sample.value));
    +      } else {
    +        for (int i = 0; i < sample.labelNames.size(); i++) {
    +          if (sample.labelNames.get(i).equals("quantile")) {
    +            quantiles
    +                .get(labels)
    +                .quantile(
    +                    new Quantile(Double.parseDouble(sample.labelValues.get(i)), sample.value));
    +            break;
    +          }
             }
    -        return unknown.build();
    +      }
    +      if (sample.exemplar != null) {
    +        exemplars.get(labels).exemplar(convertExemplar(sample.exemplar));
    +      }
    +      if (sample.timestampMs != null) {
    +        dataPoints.get(labels).scrapeTimestampMillis(sample.timestampMs);
    +      }
         }
    -
    -    private String stripSuffix(String name, String suffix) {
    -        if (name.endsWith(suffix)) {
    -            return name.substring(0, name.length() - suffix.length());
    -        } else {
    -            return name;
    -        }
    +    for (Labels labels : dataPoints.keySet()) {
    +      summary.dataPoint(
    +          dataPoints
    +              .get(labels)
    +              .quantiles(quantiles.get(labels).build())
    +              .exemplars(exemplars.get(labels).build())
    +              .build());
         }
    +    return summary.build();
    +  }
     
    -    private Unit convertUnit(Collector.MetricFamilySamples samples) {
    -        if (samples.unit != null && !samples.unit.isEmpty()) {
    -            return new Unit(samples.unit);
    -        } else {
    -            return null;
    +  private MetricSnapshot convertStateSet(Collector.MetricFamilySamples samples) {
    +    StateSetSnapshot.Builder stateSet =
    +        StateSetSnapshot.builder().name(sanitizeMetricName(samples.name)).help(samples.help);
    +    Map dataPoints = new HashMap<>();
    +    for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    +      Labels labels = labelsWithout(sample, sample.name);
    +      dataPoints.computeIfAbsent(
    +          labels, l -> StateSetSnapshot.StateSetDataPointSnapshot.builder().labels(labels));
    +      String stateName = null;
    +      for (int i = 0; i < sample.labelNames.size(); i++) {
    +        if (sample.labelNames.get(i).equals(sample.name)) {
    +          stateName = sample.labelValues.get(i);
    +          break;
             }
    +      }
    +      if (stateName == null) {
    +        throw new IllegalStateException("Invalid StateSet metric: No state name found.");
    +      }
    +      dataPoints.get(labels).state(stateName, sample.value == 1.0);
    +      if (sample.timestampMs != null) {
    +        dataPoints.get(labels).scrapeTimestampMillis(sample.timestampMs);
    +      }
    +    }
    +    for (StateSetSnapshot.StateSetDataPointSnapshot.Builder dataPoint : dataPoints.values()) {
    +      stateSet.dataPoint(dataPoint.build());
         }
    +    return stateSet.build();
    +  }
     
    -    private ClassicHistogramBuckets makeBuckets(Map cumulativeBuckets) {
    -        List upperBounds = new ArrayList<>(cumulativeBuckets.size());
    -        upperBounds.addAll(cumulativeBuckets.keySet());
    -        Collections.sort(upperBounds);
    -        ClassicHistogramBuckets.Builder result = ClassicHistogramBuckets.builder();
    -        long previousCount = 0L;
    -        for (Double upperBound : upperBounds) {
    -            long cumulativeCount = cumulativeBuckets.get(upperBound);
    -            result.bucket(upperBound, cumulativeCount - previousCount);
    -            previousCount = cumulativeCount;
    -        }
    -        return result.build();
    +  private MetricSnapshot convertUnknown(Collector.MetricFamilySamples samples) {
    +    UnknownSnapshot.Builder unknown =
    +        UnknownSnapshot.builder()
    +            .name(sanitizeMetricName(samples.name))
    +            .help(samples.help)
    +            .unit(convertUnit(samples));
    +    for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    +      UnknownSnapshot.UnknownDataPointSnapshot.Builder dataPoint =
    +          UnknownSnapshot.UnknownDataPointSnapshot.builder()
    +              .value(sample.value)
    +              .labels(Labels.of(sample.labelNames, sample.labelValues))
    +              .exemplar(convertExemplar(sample.exemplar));
    +      if (sample.timestampMs != null) {
    +        dataPoint.scrapeTimestampMillis(sample.timestampMs);
    +      }
    +      unknown.dataPoint(dataPoint.build());
         }
    +    return unknown.build();
    +  }
     
    -    private void addBucket(Map buckets, Collector.MetricFamilySamples.Sample sample) {
    -        for (int i = 0; i < sample.labelNames.size(); i++) {
    -            if (sample.labelNames.get(i).equals("le")) {
    -                double upperBound;
    -                switch (sample.labelValues.get(i)) {
    -                    case "+Inf":
    -                        upperBound = Double.POSITIVE_INFINITY;
    -                        break;
    -                    case "-Inf": // Doesn't make sense as count would always be zero. Catch this anyway.
    -                        upperBound = Double.NEGATIVE_INFINITY;
    -                        break;
    -                    default:
    -                        upperBound = Double.parseDouble(sample.labelValues.get(i));
    -                }
    -                buckets.put(upperBound, (long) sample.value);
    -                return;
    -            }
    -        }
    -        throw new IllegalStateException(sample.name + " does not have a le label.");
    +  private String stripSuffix(String name, String suffix) {
    +    if (name.endsWith(suffix)) {
    +      return name.substring(0, name.length() - suffix.length());
    +    } else {
    +      return name;
         }
    +  }
     
    +  private Unit convertUnit(Collector.MetricFamilySamples samples) {
    +    if (samples.unit != null && !samples.unit.isEmpty()) {
    +      return new Unit(samples.unit);
    +    } else {
    +      return null;
    +    }
    +  }
     
    -    private Labels labelsWithout(Collector.MetricFamilySamples.Sample sample, String excludedLabelName) {
    -        Labels.Builder labels = Labels.builder();
    -        for (int i = 0; i < sample.labelNames.size(); i++) {
    -            if (!sample.labelNames.get(i).equals(excludedLabelName)) {
    -                labels.label(sample.labelNames.get(i), sample.labelValues.get(i));
    -            }
    -        }
    -        return labels.build();
    +  private ClassicHistogramBuckets makeBuckets(Map cumulativeBuckets) {
    +    List upperBounds = new ArrayList<>(cumulativeBuckets.size());
    +    upperBounds.addAll(cumulativeBuckets.keySet());
    +    Collections.sort(upperBounds);
    +    ClassicHistogramBuckets.Builder result = ClassicHistogramBuckets.builder();
    +    long previousCount = 0L;
    +    for (Double upperBound : upperBounds) {
    +      long cumulativeCount = cumulativeBuckets.get(upperBound);
    +      result.bucket(upperBound, cumulativeCount - previousCount);
    +      previousCount = cumulativeCount;
         }
    +    return result.build();
    +  }
     
    -    private MetricSnapshot convertInfo(Collector.MetricFamilySamples samples) {
    -        InfoSnapshot.Builder info = InfoSnapshot.builder()
    -                .name(sanitizeMetricName(samples.name))
    -                .help(samples.help);
    -        for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    -            info.dataPoint(InfoSnapshot.InfoDataPointSnapshot.builder()
    -                    .labels(Labels.of(sample.labelNames, sample.labelValues))
    -                    .build());
    +  private void addBucket(Map buckets, Collector.MetricFamilySamples.Sample sample) {
    +    for (int i = 0; i < sample.labelNames.size(); i++) {
    +      if (sample.labelNames.get(i).equals("le")) {
    +        double upperBound;
    +        switch (sample.labelValues.get(i)) {
    +          case "+Inf":
    +            upperBound = Double.POSITIVE_INFINITY;
    +            break;
    +          case "-Inf": // Doesn't make sense as count would always be zero. Catch this anyway.
    +            upperBound = Double.NEGATIVE_INFINITY;
    +            break;
    +          default:
    +            upperBound = Double.parseDouble(sample.labelValues.get(i));
             }
    -        return info.build();
    +        buckets.put(upperBound, (long) sample.value);
    +        return;
    +      }
         }
    +    throw new IllegalStateException(sample.name + " does not have a le label.");
    +  }
     
    -    private Exemplar convertExemplar(io.prometheus.client.exemplars.Exemplar exemplar) {
    -        if (exemplar == null) {
    -            return null;
    -        }
    -        Exemplar.Builder result = Exemplar.builder().value(exemplar.getValue());
    -        if (exemplar.getTimestampMs() != null) {
    -            result.timestampMillis(exemplar.getTimestampMs());
    -        }
    -        Labels.Builder labels = Labels.builder();
    -        for (int i = 0; i < exemplar.getNumberOfLabels(); i++) {
    -            labels.label(exemplar.getLabelName(i), exemplar.getLabelValue(i));
    -        }
    -        return result.labels(labels.build()).build();
    +  private Labels labelsWithout(
    +      Collector.MetricFamilySamples.Sample sample, String excludedLabelName) {
    +    Labels.Builder labels = Labels.builder();
    +    for (int i = 0; i < sample.labelNames.size(); i++) {
    +      if (!sample.labelNames.get(i).equals(excludedLabelName)) {
    +        labels.label(sample.labelNames.get(i), sample.labelValues.get(i));
    +      }
         }
    +    return labels.build();
    +  }
     
    -    /**
    -     * Currently there are no configuration options for the SimpleclientCollector.
    -     * However, we want to follow the pattern to pass the config everywhere so that
    -     * we can introduce config options later without the need for API changes.
    -     */
    -    public static Builder builder(PrometheusProperties config) {
    -        return new Builder(config);
    +  private MetricSnapshot convertInfo(Collector.MetricFamilySamples samples) {
    +    InfoSnapshot.Builder info =
    +        InfoSnapshot.builder().name(sanitizeMetricName(samples.name)).help(samples.help);
    +    for (Collector.MetricFamilySamples.Sample sample : samples.samples) {
    +      info.dataPoint(
    +          InfoSnapshot.InfoDataPointSnapshot.builder()
    +              .labels(Labels.of(sample.labelNames, sample.labelValues))
    +              .build());
         }
    +    return info.build();
    +  }
     
    -    public static Builder builder() {
    -        return builder(PrometheusProperties.get());
    +  private Exemplar convertExemplar(io.prometheus.client.exemplars.Exemplar exemplar) {
    +    if (exemplar == null) {
    +      return null;
    +    }
    +    Exemplar.Builder result = Exemplar.builder().value(exemplar.getValue());
    +    if (exemplar.getTimestampMs() != null) {
    +      result.timestampMillis(exemplar.getTimestampMs());
         }
    +    Labels.Builder labels = Labels.builder();
    +    for (int i = 0; i < exemplar.getNumberOfLabels(); i++) {
    +      labels.label(exemplar.getLabelName(i), exemplar.getLabelValue(i));
    +    }
    +    return result.labels(labels.build()).build();
    +  }
     
    -    public static class Builder {
    +  /**
    +   * Currently there are no configuration options for the SimpleclientCollector. However, we want to
    +   * follow the pattern to pass the config everywhere so that we can introduce config options later
    +   * without the need for API changes.
    +   */
    +  public static Builder builder(PrometheusProperties config) {
    +    return new Builder(config);
    +  }
     
    -        private final PrometheusProperties config;
    -        private CollectorRegistry collectorRegistry;
    +  public static Builder builder() {
    +    return builder(PrometheusProperties.get());
    +  }
     
    -        private Builder(PrometheusProperties config) {
    -            this.config = config;
    -        }
    +  public static class Builder {
     
    -        public Builder collectorRegistry(CollectorRegistry registry) {
    -            this.collectorRegistry = registry;
    -            return this;
    -        }
    +    private final PrometheusProperties config;
    +    private CollectorRegistry collectorRegistry;
     
    -        public SimpleclientCollector build() {
    -            return collectorRegistry != null ? new SimpleclientCollector(collectorRegistry) : new SimpleclientCollector(CollectorRegistry.defaultRegistry);
    -        }
    +    private Builder(PrometheusProperties config) {
    +      this.config = config;
    +    }
     
    -        public SimpleclientCollector register() {
    -            return register(PrometheusRegistry.defaultRegistry);
    -        }
    +    public Builder collectorRegistry(CollectorRegistry registry) {
    +      this.collectorRegistry = registry;
    +      return this;
    +    }
     
    -        public SimpleclientCollector register(PrometheusRegistry registry) {
    -            SimpleclientCollector result = build();
    -            registry.register(result);
    -            return result;
    -        }
    +    public SimpleclientCollector build() {
    +      return collectorRegistry != null
    +          ? new SimpleclientCollector(collectorRegistry)
    +          : new SimpleclientCollector(CollectorRegistry.defaultRegistry);
    +    }
    +
    +    public SimpleclientCollector register() {
    +      return register(PrometheusRegistry.defaultRegistry);
    +    }
    +
    +    public SimpleclientCollector register(PrometheusRegistry registry) {
    +      SimpleclientCollector result = build();
    +      registry.register(result);
    +      return result;
         }
    +  }
     }
    diff --git a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java
    index 2681ceed7..83e28d982 100644
    --- a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java
    +++ b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java
    @@ -10,10 +10,6 @@
     import io.prometheus.client.exporter.common.TextFormat;
     import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
    -import org.junit.Assert;
    -import org.junit.Before;
    -import org.junit.Test;
    -
     import java.io.ByteArrayOutputStream;
     import java.io.IOException;
     import java.io.StringWriter;
    @@ -22,236 +18,255 @@
     import java.util.Arrays;
     import java.util.Collections;
     import java.util.List;
    +import org.junit.Assert;
    +import org.junit.Before;
    +import org.junit.Test;
     
     public class SimpleclientCollectorTest {
     
    -    private CollectorRegistry origRegistry;
    -    private PrometheusRegistry newRegistry;
    -
    -    @Before
    -    public void setUp() {
    -        origRegistry = new CollectorRegistry();
    -        newRegistry = new PrometheusRegistry();
    -        SimpleclientCollector.builder()
    -                .collectorRegistry(origRegistry)
    -                .register(newRegistry);
    -    }
    -
    -    @Test
    -    public void testCounterComplete() throws IOException, InterruptedException {
    -        Counter counter = Counter.build()
    -                .name("service_time_seconds_total")
    -                .help("total time spent serving")
    -                .labelNames("path", "status")
    -                .register(origRegistry);
    -        counter.labels("/hello", "200").incWithExemplar(0.8, "trace_id", "12345", "span_id", "abcde");
    -        Thread.sleep(3); // make timestamps a bit different
    -        counter.labels("/hello", "500").incWithExemplar(2.4, "trace_id", "23446", "span_id", "bcdef");
    -
    -        Assert.assertEquals(fixTimestamps(sort(origOpenMetrics())), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testCounterMinimal() throws IOException {
    +  private CollectorRegistry origRegistry;
    +  private PrometheusRegistry newRegistry;
    +
    +  @Before
    +  public void setUp() {
    +    origRegistry = new CollectorRegistry();
    +    newRegistry = new PrometheusRegistry();
    +    SimpleclientCollector.builder().collectorRegistry(origRegistry).register(newRegistry);
    +  }
    +
    +  @Test
    +  public void testCounterComplete() throws IOException, InterruptedException {
    +    Counter counter =
             Counter.build()
    -                .name("events")
    -                .help("total number of events")
    -                .register(origRegistry);
    -
    -        Assert.assertEquals(fixTimestamps(sort(origOpenMetrics())), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testGaugeComplete() throws IOException, InterruptedException {
    -        Gauge gauge = Gauge.build()
    -                .name("disk_usage_ratio")
    -                .help("percentage used")
    -                .unit("ratio")
    -                .labelNames("device")
    -                .register(origRegistry);
    -        gauge.labels("/dev/sda1").set(0.2);
    -        Thread.sleep(3);
    -        gauge.labels("/dev/sda2").set(0.7);
    -
    -        Assert.assertEquals(sort(origOpenMetrics()), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testGaugeMinimal() throws IOException, InterruptedException {
    -        Gauge gauge = Gauge.build()
    -                .name("temperature_centigrade")
    -                .help("temperature")
    -                .unit("celsius")
    -                .register(origRegistry);
    -        gauge.set(22.3);
    -
    -        Assert.assertEquals(sort(origOpenMetrics()), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testHistogramComplete() throws IOException, InterruptedException {
    -        Histogram histogram = Histogram.build()
    -                .name("response_size_bytes")
    -                .help("response size in Bytes")
    -                .labelNames("status")
    -                .buckets(64, 256, 512.1)
    -                .register(origRegistry);
    -        histogram.labels("200").observeWithExemplar(38, "trace_id", "1", "span_id", "2");
    -        histogram.labels("200").observeWithExemplar(127, "trace_id", "3", "span_id", "4");
    -        histogram.labels("200").observeWithExemplar(130, "trace_id", "5", "span_id", "6");
    -        histogram.labels("200").observeWithExemplar(40, "trace_id", "7", "span_id", "8");
    -        histogram.labels("200").observeWithExemplar(41, "trace_id", "9", "span_id", "10");
    -        Thread.sleep(3); // make timestamps a bit different
    -        histogram.labels("500").observeWithExemplar(10000, "trace_id", "11", "span_id", "12");
    -
    -        Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testHistogramMinimal() throws IOException, InterruptedException {
    +            .name("service_time_seconds_total")
    +            .help("total time spent serving")
    +            .labelNames("path", "status")
    +            .register(origRegistry);
    +    counter.labels("/hello", "200").incWithExemplar(0.8, "trace_id", "12345", "span_id", "abcde");
    +    Thread.sleep(3); // make timestamps a bit different
    +    counter.labels("/hello", "500").incWithExemplar(2.4, "trace_id", "23446", "span_id", "bcdef");
    +
    +    Assert.assertEquals(fixTimestamps(sort(origOpenMetrics())), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testCounterMinimal() throws IOException {
    +    Counter.build().name("events").help("total number of events").register(origRegistry);
    +
    +    Assert.assertEquals(fixTimestamps(sort(origOpenMetrics())), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testGaugeComplete() throws IOException, InterruptedException {
    +    Gauge gauge =
    +        Gauge.build()
    +            .name("disk_usage_ratio")
    +            .help("percentage used")
    +            .unit("ratio")
    +            .labelNames("device")
    +            .register(origRegistry);
    +    gauge.labels("/dev/sda1").set(0.2);
    +    Thread.sleep(3);
    +    gauge.labels("/dev/sda2").set(0.7);
    +
    +    Assert.assertEquals(sort(origOpenMetrics()), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testGaugeMinimal() throws IOException, InterruptedException {
    +    Gauge gauge =
    +        Gauge.build()
    +            .name("temperature_centigrade")
    +            .help("temperature")
    +            .unit("celsius")
    +            .register(origRegistry);
    +    gauge.set(22.3);
    +
    +    Assert.assertEquals(sort(origOpenMetrics()), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testHistogramComplete() throws IOException, InterruptedException {
    +    Histogram histogram =
             Histogram.build()
    -                .name("request_latency")
    -                .help("request latency")
    -                .register(origRegistry);
    -
    -        Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testSummaryComplete() throws IOException, InterruptedException {
    -        Summary summary = Summary.build()
    -                .name("http_request_duration_seconds")
    -                .help("request duration")
    -                .labelNames("path", "status")
    -                .quantile(0.5, 0.01)
    -                .quantile(0.95, 0.01)
    -                .quantile(0.99, 0.001)
    -                .register(origRegistry);
    -        summary.labels("/", "200").observe(0.2);
    -        Thread.sleep(3);
    -        summary.labels("/info", "200").observe(0.7);
    -        summary.labels("/info", "200").observe(0.8);
    -        summary.labels("/info", "200").observe(0.9);
    -        Thread.sleep(3);
    -        summary.labels("/", "500").observe(0.3);
    -        summary.labels("/", "500").observe(0.31);
    -        summary.labels("/", "500").observe(0.32);
    -
    -        Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testSummaryMinimal() throws IOException, InterruptedException {
    -        Summary summary = Summary.build()
    -                .name("request_size")
    -                .help("request size")
    -                .register(origRegistry);
    -
    -        Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testInfoComplete() throws IOException, InterruptedException {
    -        Info info = Info.build()
    -                .name("version")
    -                .help("version information")
    -                .labelNames("env")
    -                .register(origRegistry);
    -        info.labels("prod").info("major_version", "12", "minor_version", "3");
    -        Thread.sleep(3);
    -        info.labels("dev").info("major_version", "13", "minor_version", "1");
    -
    -        Assert.assertEquals(fixBoolean(sort(origOpenMetrics())), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testInfoMinimal() throws IOException, InterruptedException {
    -        Info info = Info.build()
    -                .name("jvm")
    -                .help("JVM info")
    -                .register(origRegistry);
    -        info.info("version", "17");
    -
    -        Assert.assertEquals(fixBoolean(sort(origOpenMetrics())), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testStateSetComplete() throws IOException {
    -        Collector stateSet = new Collector() {
    -            @Override
    -            public List collect() {
    -                List samples = new ArrayList<>();
    -                samples.add(new Collector.MetricFamilySamples.Sample("state", Arrays.asList("env", "state"), Arrays.asList("dev", "state1"), 1.0));
    -                samples.add(new Collector.MetricFamilySamples.Sample("state", Arrays.asList("env", "state"), Arrays.asList("dev", "state2"), 0.0));
    -                return Collections.singletonList(new Collector.MetricFamilySamples("state", Collector.Type.STATE_SET, "my state", samples));
    -            }
    +            .name("response_size_bytes")
    +            .help("response size in Bytes")
    +            .labelNames("status")
    +            .buckets(64, 256, 512.1)
    +            .register(origRegistry);
    +    histogram.labels("200").observeWithExemplar(38, "trace_id", "1", "span_id", "2");
    +    histogram.labels("200").observeWithExemplar(127, "trace_id", "3", "span_id", "4");
    +    histogram.labels("200").observeWithExemplar(130, "trace_id", "5", "span_id", "6");
    +    histogram.labels("200").observeWithExemplar(40, "trace_id", "7", "span_id", "8");
    +    histogram.labels("200").observeWithExemplar(41, "trace_id", "9", "span_id", "10");
    +    Thread.sleep(3); // make timestamps a bit different
    +    histogram.labels("500").observeWithExemplar(10000, "trace_id", "11", "span_id", "12");
    +
    +    Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testHistogramMinimal() throws IOException, InterruptedException {
    +    Histogram.build().name("request_latency").help("request latency").register(origRegistry);
    +
    +    Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testSummaryComplete() throws IOException, InterruptedException {
    +    Summary summary =
    +        Summary.build()
    +            .name("http_request_duration_seconds")
    +            .help("request duration")
    +            .labelNames("path", "status")
    +            .quantile(0.5, 0.01)
    +            .quantile(0.95, 0.01)
    +            .quantile(0.99, 0.001)
    +            .register(origRegistry);
    +    summary.labels("/", "200").observe(0.2);
    +    Thread.sleep(3);
    +    summary.labels("/info", "200").observe(0.7);
    +    summary.labels("/info", "200").observe(0.8);
    +    summary.labels("/info", "200").observe(0.9);
    +    Thread.sleep(3);
    +    summary.labels("/", "500").observe(0.3);
    +    summary.labels("/", "500").observe(0.31);
    +    summary.labels("/", "500").observe(0.32);
    +
    +    Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testSummaryMinimal() throws IOException, InterruptedException {
    +    Summary summary =
    +        Summary.build().name("request_size").help("request size").register(origRegistry);
    +
    +    Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testInfoComplete() throws IOException, InterruptedException {
    +    Info info =
    +        Info.build()
    +            .name("version")
    +            .help("version information")
    +            .labelNames("env")
    +            .register(origRegistry);
    +    info.labels("prod").info("major_version", "12", "minor_version", "3");
    +    Thread.sleep(3);
    +    info.labels("dev").info("major_version", "13", "minor_version", "1");
    +
    +    Assert.assertEquals(fixBoolean(sort(origOpenMetrics())), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testInfoMinimal() throws IOException, InterruptedException {
    +    Info info = Info.build().name("jvm").help("JVM info").register(origRegistry);
    +    info.info("version", "17");
    +
    +    Assert.assertEquals(fixBoolean(sort(origOpenMetrics())), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testStateSetComplete() throws IOException {
    +    Collector stateSet =
    +        new Collector() {
    +          @Override
    +          public List collect() {
    +            List samples = new ArrayList<>();
    +            samples.add(
    +                new Collector.MetricFamilySamples.Sample(
    +                    "state", Arrays.asList("env", "state"), Arrays.asList("dev", "state1"), 1.0));
    +            samples.add(
    +                new Collector.MetricFamilySamples.Sample(
    +                    "state", Arrays.asList("env", "state"), Arrays.asList("dev", "state2"), 0.0));
    +            return Collections.singletonList(
    +                new Collector.MetricFamilySamples(
    +                    "state", Collector.Type.STATE_SET, "my state", samples));
    +          }
             };
    -        origRegistry.register(stateSet);
    -
    -        Assert.assertEquals(fixBoolean(sort(origOpenMetrics())), sort(newOpenMetrics()));
    -    }
    -
    -    @Test
    -    public void testUnknownComplete() throws IOException {
    -        Collector unknown = new Collector() {
    -            @Override
    -            public List collect() {
    -                List samples = new ArrayList<>();
    -                samples.add(new Collector.MetricFamilySamples.Sample("my_unknown_metric_seconds", Arrays.asList("env", "status"), Arrays.asList("dev", "ok"), 3.0));
    -                samples.add(new Collector.MetricFamilySamples.Sample("my_unknown_metric_seconds", Arrays.asList("env", "status"), Arrays.asList("prod", "error"), 0.0));
    -                return Collections.singletonList(new Collector.MetricFamilySamples("my_unknown_metric_seconds", "seconds", Type.UNKNOWN, "test metric of type unknown", samples));
    -            }
    +    origRegistry.register(stateSet);
    +
    +    Assert.assertEquals(fixBoolean(sort(origOpenMetrics())), sort(newOpenMetrics()));
    +  }
    +
    +  @Test
    +  public void testUnknownComplete() throws IOException {
    +    Collector unknown =
    +        new Collector() {
    +          @Override
    +          public List collect() {
    +            List samples = new ArrayList<>();
    +            samples.add(
    +                new Collector.MetricFamilySamples.Sample(
    +                    "my_unknown_metric_seconds",
    +                    Arrays.asList("env", "status"),
    +                    Arrays.asList("dev", "ok"),
    +                    3.0));
    +            samples.add(
    +                new Collector.MetricFamilySamples.Sample(
    +                    "my_unknown_metric_seconds",
    +                    Arrays.asList("env", "status"),
    +                    Arrays.asList("prod", "error"),
    +                    0.0));
    +            return Collections.singletonList(
    +                new Collector.MetricFamilySamples(
    +                    "my_unknown_metric_seconds",
    +                    "seconds",
    +                    Type.UNKNOWN,
    +                    "test metric of type unknown",
    +                    samples));
    +          }
             };
    -        origRegistry.register(unknown);
    -
    -        Assert.assertEquals(sort(origOpenMetrics()), sort(newOpenMetrics()));
    -    }
    -
    -    private String fixBoolean(String s) {
    -        return s.replaceAll(" 1.0", " 1").replaceAll(" 0.0", " 0");
    -    }
    -
    -    private String sort(String s) {
    -        String[] lines = s.split("\n");
    -        Arrays.sort(lines);
    -        return String.join("\n", lines);
    -    }
    -
    -    private String fixTimestamps(String s) {
    -        // Example of a "_created" timestamp in orig format: 1.694464002939E9
    -        // Example of a "_created" timestamp in new format: 1694464002.939
    -        // The following regex translates the orig timestamp to the new timestamp
    -        return s
    -                .replaceAll("1\\.([0-9]{9})([0-9]{3})E9", "1$1.$2")   // Example: 1.694464002939E9
    -                .replaceAll("1\\.([0-9]{9})([0-9]{2})E9", "1$1.$20")  // Example: 1.69460725747E9
    -                .replaceAll("1\\.([0-9]{9})([0-9])E9", "1$1.$200") // Example: 1.6946072574E9
    -                .replaceAll("1\\.([0-9]{9})E9", "1$1.000")  // Example: 1.712332231E9
    -                .replaceAll("1\\.([0-9]{8})E9", "1$10.000") // Example: 1.71233242E9
    -                .replaceAll("1\\.([0-9]{7})E9", "1$100.000") // Example: 1.7123324E9
    -                .replaceAll("1\\.([0-9]{6})E9", "1$1000.000")
    -                .replaceAll("1\\.([0-9]{5})E9", "1$10000.000")
    -                .replaceAll("1\\.([0-9]{4})E9", "1$100000.000")
    -                .replaceAll("1\\.([0-9]{3})E9", "1$1000000.000")
    -                .replaceAll("1\\.([0-9]{2})E9", "1$10000000.000");
    -    }
    -
    -    private String fixCounts(String s) {
    -        // Example of a "_count" or "_bucket" in orig format: 3.0
    -        // Example of a "_count" or "_bucket" in new format: 3
    -        // The following regex translates the orig bucket counts to the new bucket counts
    -        return s.replaceAll("((_count|_bucket)(\\{[^}]*})? [0-9])\\.0", "$1");
    -    }
    -
    -    private String origOpenMetrics() throws IOException {
    -        StringWriter out = new StringWriter();
    -        TextFormat.writeOpenMetrics100(out, origRegistry.metricFamilySamples());
    -        return out.toString();
    -    }
    -
    -    private String newOpenMetrics() throws IOException {
    -        ByteArrayOutputStream out = new ByteArrayOutputStream();
    -        OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, false);
    -        writer.write(out, newRegistry.scrape());
    -        return out.toString(StandardCharsets.UTF_8.name());
    -    }
    +    origRegistry.register(unknown);
    +
    +    Assert.assertEquals(sort(origOpenMetrics()), sort(newOpenMetrics()));
    +  }
    +
    +  private String fixBoolean(String s) {
    +    return s.replaceAll(" 1.0", " 1").replaceAll(" 0.0", " 0");
    +  }
    +
    +  private String sort(String s) {
    +    String[] lines = s.split("\n");
    +    Arrays.sort(lines);
    +    return String.join("\n", lines);
    +  }
    +
    +  private String fixTimestamps(String s) {
    +    // Example of a "_created" timestamp in orig format: 1.694464002939E9
    +    // Example of a "_created" timestamp in new format: 1694464002.939
    +    // The following regex translates the orig timestamp to the new timestamp
    +    return s.replaceAll("1\\.([0-9]{9})([0-9]{3})E9", "1$1.$2") // Example: 1.694464002939E9
    +        .replaceAll("1\\.([0-9]{9})([0-9]{2})E9", "1$1.$20") // Example: 1.69460725747E9
    +        .replaceAll("1\\.([0-9]{9})([0-9])E9", "1$1.$200") // Example: 1.6946072574E9
    +        .replaceAll("1\\.([0-9]{9})E9", "1$1.000") // Example: 1.712332231E9
    +        .replaceAll("1\\.([0-9]{8})E9", "1$10.000") // Example: 1.71233242E9
    +        .replaceAll("1\\.([0-9]{7})E9", "1$100.000") // Example: 1.7123324E9
    +        .replaceAll("1\\.([0-9]{6})E9", "1$1000.000")
    +        .replaceAll("1\\.([0-9]{5})E9", "1$10000.000")
    +        .replaceAll("1\\.([0-9]{4})E9", "1$100000.000")
    +        .replaceAll("1\\.([0-9]{3})E9", "1$1000000.000")
    +        .replaceAll("1\\.([0-9]{2})E9", "1$10000000.000");
    +  }
    +
    +  private String fixCounts(String s) {
    +    // Example of a "_count" or "_bucket" in orig format: 3.0
    +    // Example of a "_count" or "_bucket" in new format: 3
    +    // The following regex translates the orig bucket counts to the new bucket counts
    +    return s.replaceAll("((_count|_bucket)(\\{[^}]*})? [0-9])\\.0", "$1");
    +  }
    +
    +  private String origOpenMetrics() throws IOException {
    +    StringWriter out = new StringWriter();
    +    TextFormat.writeOpenMetrics100(out, origRegistry.metricFamilySamples());
    +    return out.toString();
    +  }
    +
    +  private String newOpenMetrics() throws IOException {
    +    ByteArrayOutputStream out = new ByteArrayOutputStream();
    +    OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, false);
    +    writer.write(out, newRegistry.scrape());
    +    return out.toString(StandardCharsets.UTF_8.name());
    +  }
     }
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/src/main/java/io/prometheus/metrics/tracer/common/SpanContext.java b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/src/main/java/io/prometheus/metrics/tracer/common/SpanContext.java
    index e71cef98e..7ff30a09f 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/src/main/java/io/prometheus/metrics/tracer/common/SpanContext.java
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/src/main/java/io/prometheus/metrics/tracer/common/SpanContext.java
    @@ -6,19 +6,22 @@ public interface SpanContext {
       String EXEMPLAR_ATTRIBUTE_VALUE = "true";
     
       /**
    -   * @return the current trace id, or {@code null} if this call is not happening within a span context.
    +   * @return the current trace id, or {@code null} if this call is not happening within a span
    +   *     context.
        */
       String getCurrentTraceId();
     
       /**
    -   * @return the current span id, or {@code null} if this call is not happening within a span context.
    +   * @return the current span id, or {@code null} if this call is not happening within a span
    +   *     context.
        */
       String getCurrentSpanId();
    -  
    +
       /**
    -   * @return the state of the current Span. If this value is false a component before in the chain take the decision to not record it. Subsequent calling service have
    -   * to respect this value in order not to have partial TraceID with only some Span in it. This value is important to be sure to choose a recorded Trace in Examplar
    -   * sampling process
    +   * @return the state of the current Span. If this value is false a component before in the chain
    +   *     take the decision to not record it. Subsequent calling service have to respect this value
    +   *     in order not to have partial TraceID with only some Span in it. This value is important to
    +   *     be sure to choose a recorded Trace in Examplar sampling process
        */
       boolean isCurrentSpanSampled();
     
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/src/main/java/io/prometheus/metrics/tracer/initializer/SpanContextSupplier.java b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/src/main/java/io/prometheus/metrics/tracer/initializer/SpanContextSupplier.java
    index caecb6055..11d14ed8f 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/src/main/java/io/prometheus/metrics/tracer/initializer/SpanContextSupplier.java
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/src/main/java/io/prometheus/metrics/tracer/initializer/SpanContextSupplier.java
    @@ -3,43 +3,43 @@
     import io.prometheus.metrics.tracer.common.SpanContext;
     import io.prometheus.metrics.tracer.otel.OpenTelemetrySpanContext;
     import io.prometheus.metrics.tracer.otel_agent.OpenTelemetryAgentSpanContext;
    -
     import java.util.concurrent.atomic.AtomicReference;
     
     public class SpanContextSupplier {
     
    -    private static final AtomicReference spanContextRef = new AtomicReference();
    -
    -    public static void setSpanContext(SpanContext spanContext) {
    -        spanContextRef.set(spanContext);
    -    }
    -
    -    public static boolean hasSpanContext() {
    -        return getSpanContext() != null;
    +  private static final AtomicReference spanContextRef =
    +      new AtomicReference();
    +
    +  public static void setSpanContext(SpanContext spanContext) {
    +    spanContextRef.set(spanContext);
    +  }
    +
    +  public static boolean hasSpanContext() {
    +    return getSpanContext() != null;
    +  }
    +
    +  public static SpanContext getSpanContext() {
    +    return spanContextRef.get();
    +  }
    +
    +  static {
    +    try {
    +      if (OpenTelemetrySpanContext.isAvailable()) {
    +        spanContextRef.set(new OpenTelemetrySpanContext());
    +      }
    +    } catch (NoClassDefFoundError ignored) {
    +      // tracer_otel dependency not found
    +    } catch (UnsupportedClassVersionError ignored) {
    +      // OpenTelemetry requires Java 8, but client_java might run on Java 6.
         }
    -
    -    public static SpanContext getSpanContext() {
    -        return spanContextRef.get();
    -    }
    -
    -    static {
    -        try {
    -            if (OpenTelemetrySpanContext.isAvailable()) {
    -                spanContextRef.set(new OpenTelemetrySpanContext());
    -            }
    -        } catch (NoClassDefFoundError ignored) {
    -            // tracer_otel dependency not found
    -        } catch (UnsupportedClassVersionError ignored) {
    -            // OpenTelemetry requires Java 8, but client_java might run on Java 6.
    -        }
    -        try {
    -            if (OpenTelemetryAgentSpanContext.isAvailable()) {
    -                spanContextRef.set(new OpenTelemetryAgentSpanContext());
    -            }
    -        } catch (NoClassDefFoundError ignored) {
    -            // tracer_otel_agent dependency not found
    -        } catch (UnsupportedClassVersionError ignored) {
    -            // OpenTelemetry requires Java 8, but client_java might run on Java 6.
    -        }
    +    try {
    +      if (OpenTelemetryAgentSpanContext.isAvailable()) {
    +        spanContextRef.set(new OpenTelemetryAgentSpanContext());
    +      }
    +    } catch (NoClassDefFoundError ignored) {
    +      // tracer_otel_agent dependency not found
    +    } catch (UnsupportedClassVersionError ignored) {
    +      // OpenTelemetry requires Java 8, but client_java might run on Java 6.
         }
    +  }
     }
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/src/main/java/io/prometheus/metrics/tracer/otel_agent/OpenTelemetryAgentSpanContext.java b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/src/main/java/io/prometheus/metrics/tracer/otel_agent/OpenTelemetryAgentSpanContext.java
    index 36cba7076..3c757ed6b 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/src/main/java/io/prometheus/metrics/tracer/otel_agent/OpenTelemetryAgentSpanContext.java
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/src/main/java/io/prometheus/metrics/tracer/otel_agent/OpenTelemetryAgentSpanContext.java
    @@ -6,9 +6,9 @@
     import io.prometheus.metrics.tracer.common.SpanContext;
     
     /**
    - * This is exactly the same as the {@code OpenTelemetrySpanContextSupplier}.
    - * However, the {@code io.opentelemetry.api} package is relocated to
    - * {@code io.opentelemetry.javaagent.shaded.io.opentelemetry.api} in the OpenTelemetry agent.
    + * This is exactly the same as the {@code OpenTelemetrySpanContextSupplier}. However, the {@code
    + * io.opentelemetry.api} package is relocated to {@code
    + * io.opentelemetry.javaagent.shaded.io.opentelemetry.api} in the OpenTelemetry agent.
      */
     public class OpenTelemetryAgentSpanContext implements SpanContext {
     
    @@ -21,9 +21,11 @@ public static boolean isAvailable() {
           return true;
         } catch (LinkageError ignored) {
           // NoClassDefFoundError:
    -      //   Either OpenTelemetry is not present, or it is version 0.9.1 or older when io.opentelemetry.api.trace.Span did not exist.
    +      //   Either OpenTelemetry is not present, or it is version 0.9.1 or older when
    +      // io.opentelemetry.api.trace.Span did not exist.
           // IncompatibleClassChangeError:
    -      //   The application uses an OpenTelemetry version between 0.10.0 and 0.15.0 when SpanContext was a class, and not an interface.
    +      //   The application uses an OpenTelemetry version between 0.10.0 and 0.15.0 when SpanContext
    +      // was a class, and not an interface.
           return false;
         }
       }
    diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/src/main/java/io/prometheus/metrics/tracer/otel/OpenTelemetrySpanContext.java b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/src/main/java/io/prometheus/metrics/tracer/otel/OpenTelemetrySpanContext.java
    index dd338cea2..73f8d1316 100644
    --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/src/main/java/io/prometheus/metrics/tracer/otel/OpenTelemetrySpanContext.java
    +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/src/main/java/io/prometheus/metrics/tracer/otel/OpenTelemetrySpanContext.java
    @@ -7,7 +7,7 @@
     
     public class OpenTelemetrySpanContext implements SpanContext {
     
    -	public static boolean isAvailable() {
    +  public static boolean isAvailable() {
         try {
           OpenTelemetrySpanContext test = new OpenTelemetrySpanContext();
           test.getCurrentSpanId();
    @@ -16,32 +16,34 @@ public static boolean isAvailable() {
           return true;
         } catch (LinkageError ignored) {
           // NoClassDefFoundError:
    -      //   Either OpenTelemetry is not present, or it is version 0.9.1 or older when io.opentelemetry.api.trace.Span did not exist.
    +      //   Either OpenTelemetry is not present, or it is version 0.9.1 or older when
    +      // io.opentelemetry.api.trace.Span did not exist.
           // IncompatibleClassChangeError:
    -      //   The application uses an OpenTelemetry version between 0.10.0 and 0.15.0 when SpanContext was a class, and not an interface.
    +      //   The application uses an OpenTelemetry version between 0.10.0 and 0.15.0 when SpanContext
    +      // was a class, and not an interface.
           return false;
         }
       }
     
    -	@Override
    -	public String getCurrentTraceId() {
    -		String traceId = Span.current().getSpanContext().getTraceId();
    -		return TraceId.isValid(traceId) ? traceId : null;
    -	}
    +  @Override
    +  public String getCurrentTraceId() {
    +    String traceId = Span.current().getSpanContext().getTraceId();
    +    return TraceId.isValid(traceId) ? traceId : null;
    +  }
     
    -	@Override
    -	public String getCurrentSpanId() {
    -		String spanId = Span.current().getSpanContext().getSpanId();
    -		return SpanId.isValid(spanId) ? spanId : null;
    -	}
    +  @Override
    +  public String getCurrentSpanId() {
    +    String spanId = Span.current().getSpanContext().getSpanId();
    +    return SpanId.isValid(spanId) ? spanId : null;
    +  }
     
    -	@Override
    -	public boolean isCurrentSpanSampled() {
    -		return Span.current().getSpanContext().isSampled();
    -	}
    +  @Override
    +  public boolean isCurrentSpanSampled() {
    +    return Span.current().getSpanContext().isSampled();
    +  }
     
    -	@Override
    -	public void markCurrentSpanAsExemplar() {
    -		Span.current().setAttribute(EXEMPLAR_ATTRIBUTE_NAME, EXEMPLAR_ATTRIBUTE_VALUE);
    -	}
    +  @Override
    +  public void markCurrentSpanAsExemplar() {
    +    Span.current().setAttribute(EXEMPLAR_ATTRIBUTE_NAME, EXEMPLAR_ATTRIBUTE_VALUE);
    +  }
     }
    
    From caf86d1839f667c1a2dad58a0ca54d0899f6c3b6 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 2 Oct 2024 08:10:06 +0200
    Subject: [PATCH 129/870] Bump org.apache.maven.plugins:maven-jar-plugin from
     2.4 to 3.4.2 (#995)
    
    Bumps [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 2.4 to 3.4.2.
    - [Release notes](https://github.com/apache/maven-jar-plugin/releases)
    - [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-2.4...maven-jar-plugin-3.4.2)
    
    ---
    updated-dependencies:
    - dependency-name: org.apache.maven.plugins:maven-jar-plugin
      dependency-type: direct:production
      update-type: version-update:semver-major
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 5ab8f42e2..1cc04dc57 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -110,7 +110,7 @@
                     
                     
                         maven-jar-plugin
    -                    2.4
    +                    3.4.2
                     
                     
                         maven-deploy-plugin
    
    From 959a8ed288dcdbfa3556fc79fc7253c2b4b446e4 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 2 Oct 2024 08:20:15 +0200
    Subject: [PATCH 130/870] Bump org.apache.tomcat.embed:tomcat-embed-core
     (#1004)
    
    Bumps org.apache.tomcat.embed:tomcat-embed-core from 10.1.24 to 10.1.25.
    
    ---
    updated-dependencies:
    - dependency-name: org.apache.tomcat.embed:tomcat-embed-core
      dependency-type: direct:production
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     examples/example-exporter-servlet-tomcat/pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml
    index 1f9df84c5..08fcd39e3 100644
    --- a/examples/example-exporter-servlet-tomcat/pom.xml
    +++ b/examples/example-exporter-servlet-tomcat/pom.xml
    @@ -50,7 +50,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            10.1.24
    +            10.1.25
             
         
     
    
    From a63c9f63451f85317dfded842cbda4ac23b2e8cd Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 2 Oct 2024 08:25:49 +0200
    Subject: [PATCH 131/870] Bump ch.qos.logback:logback-classic (#1013)
    
    Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.2.11 to 1.2.13.
    - [Commits](https://github.com/qos-ch/logback/compare/v_1.2.11...v_1.2.13)
    
    ---
    updated-dependencies:
    - dependency-name: ch.qos.logback:logback-classic
      dependency-type: direct:development
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     .../integration_tests/it_exemplars_otel_agent/pom.xml           | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/simpleclient-archive/integration_tests/it_exemplars_otel_agent/pom.xml b/simpleclient-archive/integration_tests/it_exemplars_otel_agent/pom.xml
    index 3453178c4..5b81447c6 100644
    --- a/simpleclient-archive/integration_tests/it_exemplars_otel_agent/pom.xml
    +++ b/simpleclient-archive/integration_tests/it_exemplars_otel_agent/pom.xml
    @@ -58,7 +58,7 @@
         
           ch.qos.logback
           logback-classic
    -      1.2.11
    +      1.2.13
           test
         
         
    
    From f2a043963130b2ef673d8ebe4b046216b015007d Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 2 Oct 2024 08:30:48 +0200
    Subject: [PATCH 132/870] Bump io.vertx:vertx-web in
     /simpleclient-archive/simpleclient_vertx4 (#1017)
    
    Bumps io.vertx:vertx-web from 4.3.1 to 4.3.8.
    
    ---
    updated-dependencies:
    - dependency-name: io.vertx:vertx-web
      dependency-type: direct:production
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     simpleclient-archive/simpleclient_vertx4/pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/simpleclient-archive/simpleclient_vertx4/pom.xml b/simpleclient-archive/simpleclient_vertx4/pom.xml
    index 5e365bd2a..d3785bbf0 100644
    --- a/simpleclient-archive/simpleclient_vertx4/pom.xml
    +++ b/simpleclient-archive/simpleclient_vertx4/pom.xml
    @@ -50,7 +50,7 @@
             
                 io.vertx
                 vertx-web
    -            4.3.1
    +            4.3.8
                 provided
             
             
    
    From fd816bdef773b7ea9444df1ffd9d2fb35d22a773 Mon Sep 17 00:00:00 2001
    From: Gregor Zeitlinger 
    Date: Wed, 2 Oct 2024 09:25:15 +0200
    Subject: [PATCH 133/870] update gh action trigger condition  (#1019)
    
    * update trigger condition (trying to find out why outside prs don't trigger)
    
    Signed-off-by: Gregor Zeitlinger 
    
    * exclude archive from dependabot
    
    Signed-off-by: Gregor Zeitlinger 
    
    ---------
    
    Signed-off-by: Gregor Zeitlinger 
    ---
     .github/dependabot.yml                        | 22 ++++++++++++++++++-
     .github/workflows/build.yml                   |  6 ++++-
     .../integration_tests/it_pushgateway/pom.xml  |  2 +-
     .../pom.xml                                   |  2 +-
     .../simpleclient_logback/pom.xml              |  2 +-
     .../simpleclient_vertx4/pom.xml               |  2 +-
     6 files changed, 30 insertions(+), 6 deletions(-)
    
    diff --git a/.github/dependabot.yml b/.github/dependabot.yml
    index b3a1dddd8..5c739e0bb 100644
    --- a/.github/dependabot.yml
    +++ b/.github/dependabot.yml
    @@ -5,6 +5,26 @@ updates:
         schedule:
           interval: weekly
       - package-ecosystem: maven
    -    directory: "/"
    +    directories:
    +      - prometheus-metrics-bom
    +      - prometheus-metrics-core
    +      - prometheus-metrics-config
    +      - prometheus-metrics-model
    +      - prometheus-metrics-tracer
    +      - prometheus-metrics-exposition-formats
    +      - prometheus-metrics-exporter-common
    +      - prometheus-metrics-exporter-servlet-jakarta
    +      - prometheus-metrics-exporter-servlet-javax
    +      - prometheus-metrics-exporter-httpserver
    +      - prometheus-metrics-exporter-opentelemetry
    +      - prometheus-metrics-exporter-pushgateway
    +      - prometheus-metrics-instrumentation-caffeine
    +      - prometheus-metrics-instrumentation-jvm
    +      - prometheus-metrics-instrumentation-dropwizard5
    +      - prometheus-metrics-instrumentation-guava
    +      - prometheus-metrics-simpleclient-bridge
    +      - examples
    +      - benchmarks
    +      - integration-tests
         schedule:
           interval: daily
    diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
    index 835d4dcde..3592f25ff 100644
    --- a/.github/workflows/build.yml
    +++ b/.github/workflows/build.yml
    @@ -1,6 +1,10 @@
     name: Build
     
    -on: [push]
    +on:
    +  push:
    +    branches: [ "main" ]
    +  pull_request:
    +    branches: [ "main" ]
     
     jobs:
       build:
    diff --git a/simpleclient-archive/integration_tests/it_pushgateway/pom.xml b/simpleclient-archive/integration_tests/it_pushgateway/pom.xml
    index 5fd8c8a5a..2eba31efa 100644
    --- a/simpleclient-archive/integration_tests/it_pushgateway/pom.xml
    +++ b/simpleclient-archive/integration_tests/it_pushgateway/pom.xml
    @@ -36,7 +36,7 @@
         
           ch.qos.logback
           logback-classic
    -      1.2.13
    +      1.2.11
           test
         
         
    diff --git a/simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml b/simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml
    index 061733553..71e8c536a 100644
    --- a/simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml
    +++ b/simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml
    @@ -45,7 +45,7 @@
         
           ch.qos.logback
           logback-classic
    -      1.2.13
    +      1.2.11
         
           
               jakarta.servlet
    diff --git a/simpleclient-archive/simpleclient_logback/pom.xml b/simpleclient-archive/simpleclient_logback/pom.xml
    index a92b408b4..96f4fb34d 100644
    --- a/simpleclient-archive/simpleclient_logback/pom.xml
    +++ b/simpleclient-archive/simpleclient_logback/pom.xml
    @@ -41,7 +41,7 @@
             
                 ch.qos.logback
                 logback-classic
    -            1.2.13
    +            1.2.11
             
             
     
    diff --git a/simpleclient-archive/simpleclient_vertx4/pom.xml b/simpleclient-archive/simpleclient_vertx4/pom.xml
    index d3785bbf0..5e365bd2a 100644
    --- a/simpleclient-archive/simpleclient_vertx4/pom.xml
    +++ b/simpleclient-archive/simpleclient_vertx4/pom.xml
    @@ -50,7 +50,7 @@
             
                 io.vertx
                 vertx-web
    -            4.3.8
    +            4.3.1
                 provided
             
             
    
    From 12fbc0d0d078f4094c4b2930ca9b765dca9d4ad3 Mon Sep 17 00:00:00 2001
    From: Mickael Maison 
    Date: Wed, 2 Oct 2024 09:45:20 +0200
    Subject: [PATCH 134/870] Various cleanups in instrumentation-jvm (#1016)
    
    * Various cleanups in instrumentation-jvm
    
    Signed-off-by: Mickael Maison 
    
    * Add comment in ProcessMetricsTest.testGoodCase
    
    Signed-off-by: Mickael Maison 
    
    ---------
    
    Signed-off-by: Mickael Maison 
    Co-authored-by: Gregor Zeitlinger 
    ---
     .../jvm/JvmMemoryPoolAllocationMetrics.java   |  4 +-
     .../jvm/JvmNativeMemoryMetrics.java           |  8 +--
     .../jvm/JvmThreadsMetrics.java                |  2 +-
     .../instrumentation/jvm/ProcessMetrics.java   |  2 +-
     .../jvm/JvmBufferPoolMetricsTest.java         |  4 +-
     .../jvm/JvmClassLoadingMetricsTest.java       |  6 +--
     .../jvm/JvmCompilationMetricsTest.java        | 10 ++--
     .../jvm/JvmGarbageCollectorMetricsTest.java   | 10 ++--
     .../jvm/JvmMemoryMetricsTest.java             | 22 ++++----
     .../JvmMemoryPoolAllocationMetricsTest.java   |  4 +-
     .../jvm/JvmNativeMemoryMetricsTest.java       | 13 +++--
     .../jvm/JvmRuntimeInfoMetricTest.java         |  4 +-
     .../jvm/JvmThreadsMetricsTest.java            | 19 +++----
     .../jvm/ProcessMetricsTest.java               | 50 ++++++++++++-------
     14 files changed, 82 insertions(+), 76 deletions(-)
    
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java
    index 09aab0659..3bd39a59f 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java
    @@ -49,13 +49,11 @@ public class JvmMemoryPoolAllocationMetrics {
       private static final String JVM_MEMORY_POOL_ALLOCATED_BYTES_TOTAL =
           "jvm_memory_pool_allocated_bytes_total";
     
    -  private final PrometheusProperties config;
       private final List garbageCollectorBeans;
     
       private JvmMemoryPoolAllocationMetrics(
           List garbageCollectorBeans, PrometheusProperties config) {
         this.garbageCollectorBeans = garbageCollectorBeans;
    -    this.config = config;
       }
     
       private void register(PrometheusRegistry registry) {
    @@ -80,7 +78,7 @@ private void register(PrometheusRegistry registry) {
     
       static class AllocationCountingNotificationListener implements NotificationListener {
     
    -    private final Map lastMemoryUsage = new HashMap();
    +    private final Map lastMemoryUsage = new HashMap<>();
         private final Counter counter;
     
         AllocationCountingNotificationListener(Counter counter) {
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java
    index 4f02823f1..e350568ac 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java
    @@ -134,12 +134,8 @@ private Consumer makeCallback(Boolean reserved) {
             Matcher matcher = pattern.matcher(summary);
             while (matcher.find()) {
               String category = matcher.group(1);
    -          long value;
    -          if (reserved) {
    -            value = Long.parseLong(matcher.group(2));
    -          } else {
    -            value = Long.parseLong(matcher.group(3));
    -          }
    +          long value =
    +              reserved ? Long.parseLong(matcher.group(2)) : Long.parseLong(matcher.group(3));
               callback.call(value, category);
             }
           }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java
    index 4027551ac..8b6e57ac1 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java
    @@ -155,7 +155,7 @@ private Map getThreadStateCountMap(ThreadMXBean threadBean) {
         ThreadInfo[] allThreads = threadBean.getThreadInfo(threadIds, 0);
     
         // Initialize the map with all thread states
    -    HashMap threadCounts = new HashMap();
    +    Map threadCounts = new HashMap<>();
         for (Thread.State state : Thread.State.values()) {
           threadCounts.put(state.name(), 0);
         }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java
    index f875c104f..bd7fb14b1 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java
    @@ -72,7 +72,7 @@ public class ProcessMetrics {
       private static final String PROCESS_VIRTUAL_MEMORY_BYTES = "process_virtual_memory_bytes";
       private static final String PROCESS_RESIDENT_MEMORY_BYTES = "process_resident_memory_bytes";
     
    -  private static final File PROC_SELF_STATUS = new File("/proc/self/status");
    +  static final File PROC_SELF_STATUS = new File("/proc/self/status");
     
       private final PrometheusProperties config;
       private final OperatingSystemMXBean osBean;
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java
    index df6dddf99..cad2e8eb5 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java
    @@ -1,6 +1,7 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat;
    +import static org.junit.Assert.assertEquals;
     import static org.mockito.Mockito.times;
     import static org.mockito.Mockito.verify;
     import static org.mockito.Mockito.when;
    @@ -11,7 +12,6 @@
     import java.io.IOException;
     import java.lang.management.BufferPoolMXBean;
     import java.util.Arrays;
    -import org.junit.Assert;
     import org.junit.Before;
     import org.junit.Test;
     import org.mockito.Mockito;
    @@ -59,7 +59,7 @@ public void testGoodCase() throws IOException {
                 + "jvm_buffer_pool_used_bytes{pool=\"mapped\"} 2345.0\n"
                 + "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java
    index 4196031bf..0d8d77b51 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java
    @@ -1,6 +1,7 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat;
    +import static org.junit.Assert.assertEquals;
     import static org.mockito.Mockito.times;
     import static org.mockito.Mockito.verify;
     import static org.mockito.Mockito.when;
    @@ -10,14 +11,13 @@
     import io.prometheus.metrics.model.snapshots.MetricSnapshots;
     import java.io.IOException;
     import java.lang.management.ClassLoadingMXBean;
    -import org.junit.Assert;
     import org.junit.Before;
     import org.junit.Test;
     import org.mockito.Mockito;
     
     public class JvmClassLoadingMetricsTest {
     
    -  private ClassLoadingMXBean mockClassLoadingBean = Mockito.mock(ClassLoadingMXBean.class);
    +  private final ClassLoadingMXBean mockClassLoadingBean = Mockito.mock(ClassLoadingMXBean.class);
     
       @Before
       public void setUp() {
    @@ -45,7 +45,7 @@ public void testGoodCase() throws IOException {
                 + "jvm_classes_unloaded_total 500.0\n"
                 + "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java
    index 780d6a949..e966d0c11 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java
    @@ -1,6 +1,7 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat;
    +import static org.junit.Assert.assertEquals;
     import static org.mockito.Mockito.verify;
     import static org.mockito.Mockito.when;
     import static org.mockito.internal.verification.VerificationModeFactory.times;
    @@ -10,18 +11,17 @@
     import io.prometheus.metrics.model.snapshots.MetricSnapshots;
     import java.io.IOException;
     import java.lang.management.CompilationMXBean;
    -import org.junit.Assert;
     import org.junit.Before;
     import org.junit.Test;
     import org.mockito.Mockito;
     
     public class JvmCompilationMetricsTest {
     
    -  private CompilationMXBean mockCompilationBean = Mockito.mock(CompilationMXBean.class);
    +  private final CompilationMXBean mockCompilationBean = Mockito.mock(CompilationMXBean.class);
     
       @Before
       public void setUp() {
    -    when(mockCompilationBean.getTotalCompilationTime()).thenReturn(10000l);
    +    when(mockCompilationBean.getTotalCompilationTime()).thenReturn(10000L);
         when(mockCompilationBean.isCompilationTimeMonitoringSupported()).thenReturn(true);
       }
     
    @@ -39,7 +39,7 @@ public void testGoodCase() throws IOException {
                 + "jvm_compilation_time_seconds_total 10.0\n"
                 + "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    @@ -54,6 +54,6 @@ public void testIgnoredMetricNotScraped() {
         MetricSnapshots snapshots = registry.scrape(filter);
     
         verify(mockCompilationBean, times(0)).getTotalCompilationTime();
    -    Assert.assertEquals(0, snapshots.size());
    +    assertEquals(0, snapshots.size());
       }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java
    index 67ba4f064..5bbf3a427 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java
    @@ -1,6 +1,7 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat;
    +import static org.junit.Assert.assertEquals;
     import static org.mockito.Mockito.times;
     import static org.mockito.Mockito.verify;
     import static org.mockito.Mockito.when;
    @@ -12,15 +13,14 @@
     import java.lang.management.GarbageCollectorMXBean;
     import java.util.Arrays;
     import java.util.concurrent.TimeUnit;
    -import org.junit.Assert;
     import org.junit.Before;
     import org.junit.Test;
     import org.mockito.Mockito;
     
     public class JvmGarbageCollectorMetricsTest {
     
    -  private GarbageCollectorMXBean mockGcBean1 = Mockito.mock(GarbageCollectorMXBean.class);
    -  private GarbageCollectorMXBean mockGcBean2 = Mockito.mock(GarbageCollectorMXBean.class);
    +  private final GarbageCollectorMXBean mockGcBean1 = Mockito.mock(GarbageCollectorMXBean.class);
    +  private final GarbageCollectorMXBean mockGcBean2 = Mockito.mock(GarbageCollectorMXBean.class);
     
       @Before
       public void setUp() {
    @@ -51,7 +51,7 @@ public void testGoodCase() throws IOException {
                 + "jvm_gc_collection_seconds_sum{gc=\"MyGC2\"} 20.0\n"
                 + "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    @@ -67,6 +67,6 @@ public void testIgnoredMetricNotScraped() {
     
         verify(mockGcBean1, times(0)).getCollectionTime();
         verify(mockGcBean1, times(0)).getCollectionCount();
    -    Assert.assertEquals(0, snapshots.size());
    +    assertEquals(0, snapshots.size());
       }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java
    index 167299291..94bdbbee3 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java
    @@ -1,6 +1,7 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat;
    +import static org.junit.Assert.assertEquals;
     import static org.mockito.Mockito.times;
     import static org.mockito.Mockito.verify;
     import static org.mockito.Mockito.when;
    @@ -13,22 +14,21 @@
     import java.lang.management.MemoryPoolMXBean;
     import java.lang.management.MemoryUsage;
     import java.util.Arrays;
    -import org.junit.Assert;
     import org.junit.Before;
     import org.junit.Test;
     import org.mockito.Mockito;
     
     public class JvmMemoryMetricsTest {
     
    -  private MemoryMXBean mockMemoryBean = Mockito.mock(MemoryMXBean.class);
    -  private MemoryPoolMXBean mockPoolsBeanEdenSpace = Mockito.mock(MemoryPoolMXBean.class);
    -  private MemoryPoolMXBean mockPoolsBeanOldGen = Mockito.mock(MemoryPoolMXBean.class);
    -  private MemoryUsage memoryUsageHeap = Mockito.mock(MemoryUsage.class);
    -  private MemoryUsage memoryUsageNonHeap = Mockito.mock(MemoryUsage.class);
    -  private MemoryUsage memoryUsagePoolEdenSpace = Mockito.mock(MemoryUsage.class);
    -  private MemoryUsage memoryUsagePoolOldGen = Mockito.mock(MemoryUsage.class);
    -  private MemoryUsage memoryUsagePoolCollectionEdenSpace = Mockito.mock(MemoryUsage.class);
    -  private MemoryUsage memoryUsagePoolCollectionOldGen = Mockito.mock(MemoryUsage.class);
    +  private final MemoryMXBean mockMemoryBean = Mockito.mock(MemoryMXBean.class);
    +  private final MemoryPoolMXBean mockPoolsBeanEdenSpace = Mockito.mock(MemoryPoolMXBean.class);
    +  private final MemoryPoolMXBean mockPoolsBeanOldGen = Mockito.mock(MemoryPoolMXBean.class);
    +  private final MemoryUsage memoryUsageHeap = Mockito.mock(MemoryUsage.class);
    +  private final MemoryUsage memoryUsageNonHeap = Mockito.mock(MemoryUsage.class);
    +  private final MemoryUsage memoryUsagePoolEdenSpace = Mockito.mock(MemoryUsage.class);
    +  private final MemoryUsage memoryUsagePoolOldGen = Mockito.mock(MemoryUsage.class);
    +  private final MemoryUsage memoryUsagePoolCollectionEdenSpace = Mockito.mock(MemoryUsage.class);
    +  private final MemoryUsage memoryUsagePoolCollectionOldGen = Mockito.mock(MemoryUsage.class);
     
       @Before
       public void setUp() {
    @@ -154,7 +154,7 @@ public void testGoodCase() throws IOException {
                 + "jvm_memory_used_bytes{area=\"nonheap\"} 6.0\n"
                 + "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java
    index 8f90a9cb8..9a75e9e15 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java
    @@ -1,6 +1,7 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.fail;
     
     import io.prometheus.metrics.core.metrics.Counter;
     import io.prometheus.metrics.instrumentation.jvm.JvmMemoryPoolAllocationMetrics.AllocationCountingNotificationListener;
    @@ -8,7 +9,6 @@
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.MetricSnapshot;
     import io.prometheus.metrics.model.snapshots.MetricSnapshots;
    -import org.junit.Assert;
     import org.junit.Test;
     
     public class JvmMemoryPoolAllocationMetricsTest {
    @@ -60,7 +60,7 @@ private double getCountByPool(String metricName, String poolName, MetricSnapshot
             }
           }
         }
    -    Assert.fail("pool " + poolName + " not found.");
    +    fail("pool " + poolName + " not found.");
         return 0.0;
       }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java
    index 13d1cc99f..e5a90e38d 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java
    @@ -1,18 +1,17 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat;
    +import static org.junit.Assert.assertEquals;
     import static org.mockito.Mockito.when;
     
     import io.prometheus.metrics.config.PrometheusProperties;
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
     import io.prometheus.metrics.model.snapshots.MetricSnapshots;
     import java.io.IOException;
    -import junit.framework.TestCase;
    -import org.junit.Assert;
     import org.junit.Test;
     import org.mockito.Mockito;
     
    -public class JvmNativeMemoryMetricsTest extends TestCase {
    +public class JvmNativeMemoryMetricsTest {
     
       @Test
       public void testNativeMemoryTrackingFail() throws IOException {
    @@ -28,7 +27,7 @@ public void testNativeMemoryTrackingFail() throws IOException {
     
         String expected = "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    @@ -45,7 +44,7 @@ public void testNativeMemoryTrackingEmpty() throws IOException {
     
         String expected = "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    @@ -63,7 +62,7 @@ public void testNativeMemoryTrackingDisabled() throws IOException {
     
         String expected = "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    @@ -226,6 +225,6 @@ public void testNativeMemoryTrackingEnabled() throws IOException {
                 + "jvm_native_memory_reserved_bytes{pool=\"Tracing\"} 33097.0\n"
                 + "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java
    index a99178234..1dcaff2d9 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java
    @@ -1,11 +1,11 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat;
    +import static org.junit.Assert.assertEquals;
     
     import io.prometheus.metrics.model.registry.PrometheusRegistry;
     import io.prometheus.metrics.model.snapshots.MetricSnapshots;
     import java.io.IOException;
    -import org.junit.Assert;
     import org.junit.Test;
     
     public class JvmRuntimeInfoMetricTest {
    @@ -27,6 +27,6 @@ public void testGoodCase() throws IOException {
                 + "jvm_runtime_info{runtime=\"OpenJDK Runtime Environment\",vendor=\"Oracle Corporation\",version=\"1.8.0_382-b05\"} 1\n"
                 + "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java
    index e454082b2..3aaa5b94b 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java
    @@ -1,6 +1,8 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat;
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertNotNull;
     import static org.mockito.Mockito.times;
     import static org.mockito.Mockito.verify;
     import static org.mockito.Mockito.when;
    @@ -16,17 +18,16 @@
     import java.util.HashMap;
     import java.util.Map;
     import java.util.concurrent.CountDownLatch;
    -import org.junit.Assert;
     import org.junit.Before;
     import org.junit.Test;
     import org.mockito.Mockito;
     
     public class JvmThreadsMetricsTest {
     
    -  private ThreadMXBean mockThreadsBean = Mockito.mock(ThreadMXBean.class);
    -  private ThreadInfo mockThreadInfoBlocked = Mockito.mock(ThreadInfo.class);
    -  private ThreadInfo mockThreadInfoRunnable1 = Mockito.mock(ThreadInfo.class);
    -  private ThreadInfo mockThreadInfoRunnable2 = Mockito.mock(ThreadInfo.class);
    +  private final ThreadMXBean mockThreadsBean = Mockito.mock(ThreadMXBean.class);
    +  private final ThreadInfo mockThreadInfoBlocked = Mockito.mock(ThreadInfo.class);
    +  private final ThreadInfo mockThreadInfoRunnable1 = Mockito.mock(ThreadInfo.class);
    +  private final ThreadInfo mockThreadInfoRunnable2 = Mockito.mock(ThreadInfo.class);
     
       @Before
       public void setUp() {
    @@ -84,7 +85,7 @@ public void testGoodCase() throws IOException {
                 + "jvm_threads_state{state=\"WAITING\"} 0.0\n"
                 + "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    @@ -133,9 +134,9 @@ public void testInvalidThreadIds() {
     
           Map actual = getCountByState(registry.scrape());
     
    -      Assert.assertEquals(expected.size(), actual.size());
    +      assertEquals(expected.size(), actual.size());
           for (String threadState : expected.keySet()) {
    -        Assert.assertEquals(expected.get(threadState), actual.get(threadState), 0.0);
    +        assertEquals(expected.get(threadState), actual.get(threadState), 0.0);
           }
         } finally {
           for (int i = 0; i < numberOfInvalidThreadIds; i++) {
    @@ -151,7 +152,7 @@ private Map getCountByState(MetricSnapshots snapshots) {
             for (GaugeSnapshot.GaugeDataPointSnapshot data :
                 ((GaugeSnapshot) snapshot).getDataPoints()) {
               String state = data.getLabels().get("state");
    -          Assert.assertNotNull(state);
    +          assertNotNull(state);
               result.put(state, data.getValue());
             }
           }
    diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java
    index 41a5b514b..6dafa1fb3 100644
    --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java
    +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java
    @@ -1,6 +1,7 @@
     package io.prometheus.metrics.instrumentation.jvm;
     
     import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat;
    +import static org.junit.Assert.assertEquals;
     import static org.mockito.ArgumentMatchers.any;
     import static org.mockito.ArgumentMatchers.eq;
     import static org.mockito.Mockito.times;
    @@ -14,20 +15,19 @@
     import java.io.IOException;
     import java.lang.management.RuntimeMXBean;
     import java.util.concurrent.TimeUnit;
    -import org.junit.Assert;
     import org.junit.Before;
     import org.junit.Test;
     import org.mockito.Mockito;
     
     public class ProcessMetricsTest {
     
    -  private com.sun.management.UnixOperatingSystemMXBean sunOsBean =
    +  private final com.sun.management.UnixOperatingSystemMXBean sunOsBean =
           Mockito.mock(com.sun.management.UnixOperatingSystemMXBean.class);
    -  private java.lang.management.OperatingSystemMXBean javaOsBean =
    +  private final java.lang.management.OperatingSystemMXBean javaOsBean =
           Mockito.mock(java.lang.management.OperatingSystemMXBean.class);
    -  private ProcessMetrics.Grepper linuxGrepper = Mockito.mock(ProcessMetrics.Grepper.class);
    -  private ProcessMetrics.Grepper windowsGrepper = Mockito.mock(ProcessMetrics.Grepper.class);
    -  private RuntimeMXBean runtimeBean = Mockito.mock(RuntimeMXBean.class);
    +  private final ProcessMetrics.Grepper linuxGrepper = Mockito.mock(ProcessMetrics.Grepper.class);
    +  private final ProcessMetrics.Grepper windowsGrepper = Mockito.mock(ProcessMetrics.Grepper.class);
    +  private final RuntimeMXBean runtimeBean = Mockito.mock(RuntimeMXBean.class);
     
       @Before
       public void setUp() throws IOException {
    @@ -62,22 +62,34 @@ public void testGoodCase() throws IOException {
                 + "process_max_fds 244.0\n"
                 + "# TYPE process_open_fds gauge\n"
                 + "# HELP process_open_fds Number of open file descriptors.\n"
    -            + "process_open_fds 127.0\n"
    -            + "# TYPE process_resident_memory_bytes gauge\n"
    -            + "# UNIT process_resident_memory_bytes bytes\n"
    -            + "# HELP process_resident_memory_bytes Resident memory size in bytes.\n"
    -            + "process_resident_memory_bytes 1036288.0\n"
    +            + "process_open_fds 127.0\n";
    +    // To allow running this test in non-linux environments
    +    if (ProcessMetrics.PROC_SELF_STATUS.canRead()) {
    +      expected +=
    +          ""
    +              + "# TYPE process_resident_memory_bytes gauge\n"
    +              + "# UNIT process_resident_memory_bytes bytes\n"
    +              + "# HELP process_resident_memory_bytes Resident memory size in bytes.\n"
    +              + "process_resident_memory_bytes 1036288.0\n";
    +    }
    +    expected +=
    +        ""
                 + "# TYPE process_start_time_seconds gauge\n"
                 + "# UNIT process_start_time_seconds seconds\n"
                 + "# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.\n"
    -            + "process_start_time_seconds 37.1\n"
    -            + "# TYPE process_virtual_memory_bytes gauge\n"
    -            + "# UNIT process_virtual_memory_bytes bytes\n"
    -            + "# HELP process_virtual_memory_bytes Virtual memory size in bytes.\n"
    -            + "process_virtual_memory_bytes 6180864.0\n"
    -            + "# EOF\n";
    +            + "process_start_time_seconds 37.1\n";
    +    // To allow running this test in non-linux environments
    +    if (ProcessMetrics.PROC_SELF_STATUS.canRead()) {
    +      expected +=
    +          ""
    +              + "# TYPE process_virtual_memory_bytes gauge\n"
    +              + "# UNIT process_virtual_memory_bytes bytes\n"
    +              + "# HELP process_virtual_memory_bytes Virtual memory size in bytes.\n"
    +              + "process_virtual_memory_bytes 6180864.0\n";
    +    }
    +    expected += "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    @@ -98,7 +110,7 @@ public void testMinimal() throws IOException {
                 + "process_start_time_seconds 37.1\n"
                 + "# EOF\n";
     
    -    Assert.assertEquals(expected, convertToOpenMetricsFormat(snapshots));
    +    assertEquals(expected, convertToOpenMetricsFormat(snapshots));
       }
     
       @Test
    
    From 3d39267cc77381938b50eae2135821386a25d99f Mon Sep 17 00:00:00 2001
    From: Gregor Zeitlinger 
    Date: Wed, 2 Oct 2024 09:57:57 +0200
    Subject: [PATCH 135/870] Limit to 1 open PR at a time until
     https://github.com/dependabot/dependabot-core/issues/10415 is fixed (#1061)
    
    Signed-off-by: Gregor Zeitlinger 
    ---
     .github/dependabot.yml | 2 ++
     1 file changed, 2 insertions(+)
    
    diff --git a/.github/dependabot.yml b/.github/dependabot.yml
    index 5c739e0bb..e6d0d3adc 100644
    --- a/.github/dependabot.yml
    +++ b/.github/dependabot.yml
    @@ -5,6 +5,8 @@ updates:
         schedule:
           interval: weekly
       - package-ecosystem: maven
    +    open-pull-requests-limit: 1 # Limit to 1 open PR at a time until https://github.com/dependabot/dependabot-core/issues/10415 is fixed
    +    # excluding simpleclient_archive from the update is not possible, only includes are supported
         directories:
           - prometheus-metrics-bom
           - prometheus-metrics-core
    
    From 0cd8711638f79994c99a94a8ef59f1944d87f84e Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 2 Oct 2024 10:03:44 +0200
    Subject: [PATCH 136/870] Bump org.apache.maven.plugins:maven-install-plugin
     (#1060)
    
    Bumps [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin) from 2.4 to 3.1.3.
    - [Release notes](https://github.com/apache/maven-install-plugin/releases)
    - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-2.4...maven-install-plugin-3.1.3)
    
    ---
    updated-dependencies:
    - dependency-name: org.apache.maven.plugins:maven-install-plugin
      dependency-type: direct:production
      update-type: version-update:semver-major
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 1cc04dc57..01cb6cd84 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -94,7 +94,7 @@
                     
                     
                         maven-install-plugin
    -                    2.4
    +                    3.1.3
                     
                     
                         maven-resources-plugin
    
    From 06e873a9d64f29edb96df979fe91a0f69ad74819 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 2 Oct 2024 10:12:04 +0200
    Subject: [PATCH 137/870] Bump org.apache.maven.plugins:maven-enforcer-plugin
     (#1059)
    
    Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 1.4.1 to 3.5.0.
    - [Release notes](https://github.com/apache/maven-enforcer/releases)
    - [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-1.4.1...enforcer-3.5.0)
    
    ---
    updated-dependencies:
    - dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
      dependency-type: direct:production
      update-type: version-update:semver-major
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 01cb6cd84..59dd75a1e 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -155,7 +155,7 @@
                     
                     
                         maven-enforcer-plugin
    -                    1.4.1
    +                    3.5.0
                     
                     
                         com.diffplug.spotless
    
    From 26b249a349a9f8d46509edcd04568dbdf006cd2b Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 2 Oct 2024 10:29:10 +0200
    Subject: [PATCH 138/870] Bump org.apache.tomcat.embed:tomcat-embed-core in
     /examples (#1024)
    
    Bumps org.apache.tomcat.embed:tomcat-embed-core from 10.1.24 to 10.1.30.
    
    ---
    updated-dependencies:
    - dependency-name: org.apache.tomcat.embed:tomcat-embed-core
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     .../example-greeting-service/pom.xml                            | 2 +-
     .../example-hello-world-app/pom.xml                             | 2 +-
     examples/example-exporter-servlet-tomcat/pom.xml                | 2 +-
     3 files changed, 3 insertions(+), 3 deletions(-)
    
    diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    index 72ebcbedd..38177339d 100644
    --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    @@ -50,7 +50,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            10.1.24
    +            10.1.30
             
         
     
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    index ae0b36799..1661521a7 100644
    --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    @@ -50,7 +50,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            10.1.24
    +            10.1.30
             
         
     
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml
    index 08fcd39e3..6d59ed9ca 100644
    --- a/examples/example-exporter-servlet-tomcat/pom.xml
    +++ b/examples/example-exporter-servlet-tomcat/pom.xml
    @@ -50,7 +50,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            10.1.25
    +            10.1.30
             
         
     
    
    From c25cd5a8c77ba758cf84bbff91b0fa9edf6c694d Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 2 Oct 2024 10:42:32 +0200
    Subject: [PATCH 139/870] Bump opentelemetry.version from 1.30.1 to 1.42.1
     (#1001)
    
    * Bump opentelemetry.version from 1.30.1 to 1.42.1
    
    Bumps `opentelemetry.version` from 1.30.1 to 1.42.1.
    
    Updates `io.opentelemetry:opentelemetry-api` from 1.30.1 to 1.42.1
    - [Release notes](https://github.com/open-telemetry/opentelemetry-java/releases)
    - [Changelog](https://github.com/open-telemetry/opentelemetry-java/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/open-telemetry/opentelemetry-java/compare/v1.30.1...v1.42.1)
    
    Updates `io.opentelemetry:opentelemetry-sdk` from 1.30.1 to 1.42.1
    - [Release notes](https://github.com/open-telemetry/opentelemetry-java/releases)
    - [Changelog](https://github.com/open-telemetry/opentelemetry-java/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/open-telemetry/opentelemetry-java/compare/v1.30.1...v1.42.1)
    
    Updates `io.opentelemetry:opentelemetry-sdk-testing` from 1.30.1 to 1.42.1
    - [Release notes](https://github.com/open-telemetry/opentelemetry-java/releases)
    - [Changelog](https://github.com/open-telemetry/opentelemetry-java/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/open-telemetry/opentelemetry-java/compare/v1.30.1...v1.42.1)
    
    ---
    updated-dependencies:
    - dependency-name: io.opentelemetry:opentelemetry-api
      dependency-type: direct:production
      update-type: version-update:semver-minor
    - dependency-name: io.opentelemetry:opentelemetry-sdk
      dependency-type: direct:production
      update-type: version-update:semver-minor
    - dependency-name: io.opentelemetry:opentelemetry-sdk-testing
      dependency-type: direct:production
      update-type: version-update:semver-minor
    ...
    
    Signed-off-by: dependabot[bot] 
    
    * update otel
    
    Signed-off-by: Gregor Zeitlinger 
    
    ---------
    
    Signed-off-by: dependabot[bot] 
    Signed-off-by: Gregor Zeitlinger 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     benchmarks/pom.xml                                            | 2 +-
     prometheus-metrics-exporter-opentelemetry/pom.xml             | 2 +-
     .../prometheus-metrics-shaded-opentelemetry/pom.xml           | 4 ++--
     prometheus-metrics-tracer/pom.xml                             | 2 +-
     4 files changed, 5 insertions(+), 5 deletions(-)
    
    diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
    index f9d2f1866..80a201a20 100644
    --- a/benchmarks/pom.xml
    +++ b/benchmarks/pom.xml
    @@ -19,7 +19,7 @@
             1.37
             0.16.0
             3.0.2
    -        1.30.1
    +        1.42.1
         
     
         
    diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml
    index 6c576eae6..448390bb2 100644
    --- a/prometheus-metrics-exporter-opentelemetry/pom.xml
    +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml
    @@ -17,7 +17,7 @@
         
     
         
    -        1.38.0
    +        1.42.1
             io.prometheus.metrics.exporter.opentelemetry
         
     
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    index 415735290..eaf67fa89 100644
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    +++ b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml
    @@ -16,8 +16,8 @@
         
     
         
    -        1.38.0
    -        1_38_0
    +        1.42.1
    +        1_42_1
         
     
         
    diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml
    index 2d10bca44..0a22ec790 100644
    --- a/prometheus-metrics-tracer/pom.xml
    +++ b/prometheus-metrics-tracer/pom.xml
    @@ -37,7 +37,7 @@
           
             io.opentelemetry
             opentelemetry-api
    -        1.38.0
    +        1.42.1
           
         
       
    
    From 131648417a49256a73208b56c1737708f3153108 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 2 Oct 2024 10:49:43 +0200
    Subject: [PATCH 140/870] Bump org.apache.tomcat.embed:tomcat-embed-core from
     10.1.24 to 10.1.30 (#996)
    
    Bumps org.apache.tomcat.embed:tomcat-embed-core from 10.1.24 to 10.1.30.
    
    ---
    updated-dependencies:
    - dependency-name: org.apache.tomcat.embed:tomcat-embed-core
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml       | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    index bb78e0543..306b2eea5 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    @@ -45,7 +45,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            10.1.24
    +            10.1.30
             
         
     
    
    From b7a0be4bcecb1247e7bc53cf399248bc96e04ff3 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 2 Oct 2024 15:35:36 +0200
    Subject: [PATCH 141/870] Bump org.apache.felix:maven-bundle-plugin in
     /prometheus-metrics-tracer (#1083)
    
    Bumps org.apache.felix:maven-bundle-plugin from 2.4.0 to 5.1.9.
    
    ---
    updated-dependencies:
    - dependency-name: org.apache.felix:maven-bundle-plugin
      dependency-type: direct:production
      update-type: version-update:semver-major
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 59dd75a1e..f55a754c2 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -220,7 +220,7 @@
                 
                     org.apache.felix
                     maven-bundle-plugin
    -                2.4.0
    +                5.1.9
                     true
                     
                         
    
    From 2ca4dc8faafdff8c9101ddc37385932b60a9266a Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Mon, 7 Oct 2024 08:18:37 +0200
    Subject: [PATCH 142/870] Bump org.apache.felix:maven-bundle-plugin (#1080)
    
    Bumps org.apache.felix:maven-bundle-plugin from 2.4.0 to 5.1.9.
    
    ---
    updated-dependencies:
    - dependency-name: org.apache.felix:maven-bundle-plugin
      dependency-type: direct:production
      update-type: version-update:semver-major
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    
    From 0327d2f79bb057813ed7c527abfc9303f0fca939 Mon Sep 17 00:00:00 2001
    From: Mickael Maison 
    Date: Mon, 7 Oct 2024 10:14:16 +0200
    Subject: [PATCH 143/870] Various cleanups in prometheus-metrics-core (#1085)
    
    Signed-off-by: Mickael Maison 
    ---
     .../core/exemplars/ExemplarSampler.java       |   2 +-
     .../metrics/core/metrics/Buffer.java          |   2 +-
     .../metrics/core/metrics/CKMSQuantiles.java   |   4 +-
     .../metrics/core/metrics/Histogram.java       |  14 +-
     .../metrics/core/metrics/StatefulMetric.java  |   4 +-
     .../exemplars/SpanContextSupplierTest.java    |   2 +-
     .../core/metrics/CKMSQuantilesTest.java       |   8 +-
     .../metrics/core/metrics/CounterTest.java     |  54 ++---
     .../core/metrics/CounterWithCallbackTest.java |  38 +++-
     .../metrics/core/metrics/GaugeTest.java       |  20 +-
     .../core/metrics/GaugeWithCallbackTest.java   |  38 +++-
     .../metrics/core/metrics/HistogramTest.java   |  51 ++---
     .../metrics/core/metrics/InfoTest.java        |  23 +-
     .../core/metrics/SlidingWindowTest.java       |   7 +-
     .../metrics/core/metrics/StateSetTest.java    |  36 ++--
     .../core/metrics/StatefulMetricTest.java      |  26 +--
     .../metrics/core/metrics/SummaryTest.java     | 197 +++++++++++++++++-
     .../core/metrics/SummaryWithCallbackTest.java |  49 ++++-
     .../metrics/core/metrics/TestUtil.java        |   7 +-
     19 files changed, 452 insertions(+), 130 deletions(-)
    
    diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java
    index b606d5239..0d4a71f63 100644
    --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java
    +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java
    @@ -34,7 +34,7 @@ public class ExemplarSampler {
       private final Exemplar[] exemplars;
       private final Exemplar[]
           customExemplars; // Separate from exemplars, because we don't want custom exemplars
    -  // to be overwritten by automatic exemplar sampling. exemplars.lengt == customExemplars.length
    +  // to be overwritten by automatic exemplar sampling. exemplars.length == customExemplars.length
       private final AtomicBoolean acceptingNewExemplars = new AtomicBoolean(true);
       private final AtomicBoolean acceptingNewCustomExemplars = new AtomicBoolean(true);
       private final SpanContext
    diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java
    index 113a85d55..720c8228c 100644
    --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java
    +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java
    @@ -54,7 +54,7 @@  T run(
         int bufferSize;
         T result;
         synchronized (runLock) {
    -      Long count = observationCount.getAndAdd(signBit);
    +      long count = observationCount.getAndAdd(signBit);
           while (!complete.apply(count)) {
             Thread.yield();
           }
    diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java
    index c86f17c21..adfd5c6d8 100644
    --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java
    +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java
    @@ -38,7 +38,7 @@ final class CKMSQuantiles {
       int n = 0;
     
       /** List of sampled observations, ordered by Sample.value. */
    -  final LinkedList samples = new LinkedList();
    +  final LinkedList samples = new LinkedList<>();
     
       /**
        * Compress is called every compressInterval inserts. Note that the buffer is flushed whenever
    @@ -127,7 +127,7 @@ private void insertBefore(ListIterator iterator, double value, int r) {
       public double get(double q) {
         flush();
     
    -    if (samples.size() == 0) {
    +    if (samples.isEmpty()) {
           return Double.NaN;
         }
     
    diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java
    index 494f7fded..2952222c6 100644
    --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java
    +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java
    @@ -481,8 +481,8 @@ private boolean maybeReset() {
           nativeZeroCount.reset();
           count.reset();
           sum.reset();
    -      for (int i = 0; i < classicBuckets.length; i++) {
    -        classicBuckets[i].reset();
    +      for (LongAdder classicBucket : classicBuckets) {
    +        classicBucket.reset();
           }
           nativeZeroThreshold = nativeMinZeroThreshold;
           nativeSchema = Histogram.this.nativeInitialSchema;
    @@ -592,11 +592,7 @@ private void doubleBucketWidth(Map buckets) {
           buckets.clear();
           for (i = 0; i < keys.length; i++) {
             int index = (keys[i] + 1) / 2;
    -        LongAdder count = buckets.get(index);
    -        if (count == null) {
    -          count = new LongAdder();
    -          buckets.put(index, count);
    -        }
    +        LongAdder count = buckets.computeIfAbsent(index, k -> new LongAdder());
             count.add(values[i]);
           }
         }
    @@ -789,9 +785,9 @@ public Builder classicLinearUpperBounds(double start, double width, int count) {
         }
     
         /**
    -     * Create classic histogram bucxkets with exponential boundaries.
    +     * Create classic histogram buckets with exponential boundaries.
          *
    -     * 

    Example: {@code withClassicExponentialBuckets(1.0, 2.0, 10)} creates bucket bounaries + *

    Example: {@code withClassicExponentialBuckets(1.0, 2.0, 10)} creates bucket boundaries * {@code [1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0]} * * @param start is the first bucket boundary diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java index 188a0c15f..dc61b943d 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java @@ -48,7 +48,7 @@ protected StatefulMetric(Builder builder) { protected abstract MetricSnapshot collect(List labels, List metricData); public MetricSnapshot collect() { - if (labelNames.length == 0 && data.size() == 0) { + if (labelNames.length == 0 && data.isEmpty()) { // This is a metric without labels that has not been used yet. Initialize the data on the fly. labelValues(); } @@ -138,7 +138,7 @@ protected T getNoLabels() { } protected MetricsProperties[] getMetricProperties( - Builder builder, PrometheusProperties prometheusProperties) { + Builder builder, PrometheusProperties prometheusProperties) { String metricName = getMetadata().getName(); if (prometheusProperties.getMetricProperties(metricName) != null) { return new MetricsProperties[] { diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java index b1409b142..cc7005c77 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java @@ -42,7 +42,7 @@ public void markCurrentSpanAsExemplar() {} new ExemplarSamplerConfig( 10, // min retention period in milliseconds 20, // max retention period in milliseconds - 5, // sample interval in millisecnods + 5, // sample interval in milliseconds 1, // number of exemplars null // histogram upper bounds ); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java index e8adc42fe..326b0a463 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java @@ -1,6 +1,8 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import io.prometheus.metrics.core.metrics.CKMSQuantiles.Quantile; import java.util.*; @@ -233,7 +235,7 @@ public void testGetGaussian() { new NormalDistribution( rand, mean, stddev, NormalDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY); - List quantiles = new ArrayList(); + List quantiles = new ArrayList<>(); quantiles.add(new Quantile(0.10, 0.001)); quantiles.add(new Quantile(0.50, 0.01)); quantiles.add(new Quantile(0.90, 0.001)); @@ -297,7 +299,7 @@ public void testIllegalArgumentException() { } private List shuffledValues(int n, Random random) { - List result = new ArrayList(n); + List result = new ArrayList<>(n); for (int i = 0; i < n; i++) { result.add(i + 1.0); } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index 435c5b8fe..0c1408c56 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -2,6 +2,8 @@ import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.junit.rules.ExpectedException.none; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; @@ -14,9 +16,9 @@ import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; import io.prometheus.metrics.tracer.common.SpanContext; import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; +import java.util.Arrays; import java.util.Iterator; import org.junit.After; -import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -24,11 +26,11 @@ public class CounterTest { - Counter noLabels; - Counter labels; + private Counter noLabels; + private Counter labels; private static final long exemplarSampleIntervalMillis = 10; private static final long exemplarMinAgeMillis = 100; - SpanContext origSpanContext; + private SpanContext origSpanContext; @Rule public final ExpectedException thrown = none(); @@ -53,7 +55,10 @@ private CounterSnapshot.CounterDataPointSnapshot getData(Counter counter, String return counter.collect().getDataPoints().stream() .filter(d -> d.getLabels().equals(Labels.of(labels))) .findAny() - .orElseThrow(() -> new RuntimeException("counter with labels " + labels + " not found")); + .orElseThrow( + () -> + new RuntimeException( + "counter with labels " + Arrays.toString(labels) + " not found")); } private double getValue(Counter counter, String... labels) { @@ -61,7 +66,7 @@ private double getValue(Counter counter, String... labels) { } private int getNumberOfLabels(Counter counter) { - return ((CounterSnapshot) counter.collect()).getDataPoints().size(); + return counter.collect().getDataPoints().size(); } @Test @@ -131,30 +136,30 @@ public void testSnapshotComplete() { .build(); counter.labelValues("/", "200").inc(2); counter.labelValues("/", "500").inc(); - CounterSnapshot snapshot = (CounterSnapshot) counter.collect(); - Assert.assertEquals("test_seconds", snapshot.getMetadata().getName()); - Assert.assertEquals("seconds", snapshot.getMetadata().getUnit().toString()); - Assert.assertEquals("help message", snapshot.getMetadata().getHelp()); - Assert.assertEquals(2, snapshot.getDataPoints().size()); + CounterSnapshot snapshot = counter.collect(); + assertEquals("test_seconds", snapshot.getMetadata().getName()); + assertEquals("seconds", snapshot.getMetadata().getUnit().toString()); + assertEquals("help message", snapshot.getMetadata().getHelp()); + assertEquals(2, snapshot.getDataPoints().size()); Iterator iter = snapshot.getDataPoints().iterator(); // data is ordered by labels, so 200 comes before 500 CounterSnapshot.CounterDataPointSnapshot data = iter.next(); - Assert.assertEquals( + assertEquals( Labels.of( "const1name", "const1value", "const2name", "const2value", "path", "/", "status", "200"), data.getLabels()); - Assert.assertEquals(2, data.getValue(), 0.0001); - Assert.assertTrue(data.getCreatedTimestampMillis() >= before); - Assert.assertTrue(data.getCreatedTimestampMillis() <= System.currentTimeMillis()); + assertEquals(2, data.getValue(), 0.0001); + assertTrue(data.getCreatedTimestampMillis() >= before); + assertTrue(data.getCreatedTimestampMillis() <= System.currentTimeMillis()); // 500 data = iter.next(); - Assert.assertEquals( + assertEquals( Labels.of( "const1name", "const1value", "const2name", "const2value", "path", "/", "status", "500"), data.getLabels()); - Assert.assertEquals(1, data.getValue(), 0.0001); - Assert.assertTrue(data.getCreatedTimestampMillis() >= before); - Assert.assertTrue(data.getCreatedTimestampMillis() <= System.currentTimeMillis()); + assertEquals(1, data.getValue(), 0.0001); + assertTrue(data.getCreatedTimestampMillis() >= before); + assertTrue(data.getCreatedTimestampMillis() <= System.currentTimeMillis()); } @Test @@ -175,7 +180,7 @@ public void testIncWithExemplar() throws Exception { private void assertExemplar(Counter counter, double value, String... labels) { Exemplar exemplar = getData(counter).getExemplar(); - Assert.assertEquals(value, exemplar.getValue(), 0.0001); + assertEquals(value, exemplar.getValue(), 0.0001); assertEquals(Labels.of(labels), exemplar.getLabels()); } @@ -230,10 +235,7 @@ public String getCurrentSpanId() { @Override public boolean isCurrentSpanSampled() { callNumber++; - if (callNumber == 2) { - return false; - } - return true; + return callNumber != 2; } @Override @@ -289,9 +291,9 @@ public void testExemplarSamplerDisabled() { .withoutExemplars() .build(); counter.incWithExemplar(3.0, Labels.of("a", "b")); - Assert.assertNull(getData(counter).getExemplar()); + assertNull(getData(counter).getExemplar()); counter.inc(2.0); - Assert.assertNull(getData(counter).getExemplar()); + assertNull(getData(counter).getExemplar()); } @Test(expected = IllegalArgumentException.class) diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterWithCallbackTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterWithCallbackTest.java index f7c18666d..e4af61bde 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterWithCallbackTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterWithCallbackTest.java @@ -1,6 +1,42 @@ package io.prometheus.metrics.core.metrics; +import static org.junit.Assert.assertEquals; + +import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.Test; + public class CounterWithCallbackTest { - // TODO :). Anyway, callbacks are implicitly covered by the JVM metrics tests as well. + @Test + public void testCounter() { + final AtomicInteger value = new AtomicInteger(1); + List labelValues = Arrays.asList("v1", "v2"); + CounterWithCallback counter = + CounterWithCallback.builder() + .name("counter") + .labelNames("l1", "l2") + .callback( + callback -> callback.call(value.doubleValue(), labelValues.toArray(new String[0]))) + .build(); + CounterSnapshot snapshot = counter.collect(); + + assertEquals(1, snapshot.getDataPoints().size()); + CounterSnapshot.CounterDataPointSnapshot datapoint = snapshot.getDataPoints().get(0); + assertEquals(value.doubleValue(), datapoint.getValue(), 0.1); + assertEquals(labelValues.size(), datapoint.getLabels().size()); + + value.incrementAndGet(); + snapshot = counter.collect(); + assertEquals(1, snapshot.getDataPoints().size()); + datapoint = snapshot.getDataPoints().get(0); + assertEquals(value.doubleValue(), datapoint.getValue(), 0.1); + } + + @Test(expected = IllegalArgumentException.class) + public void testCounterNoCallback() { + CounterWithCallback.builder().name("counter").labelNames("l1", "l2").build(); + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java index 678158cbd..0443cc7bf 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java @@ -2,6 +2,7 @@ import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import io.prometheus.metrics.core.datapoints.Timer; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; @@ -11,7 +12,6 @@ import io.prometheus.metrics.tracer.common.SpanContext; import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; import org.junit.After; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -37,11 +37,10 @@ public void tearDown() { } private GaugeSnapshot.GaugeDataPointSnapshot getData(Gauge gauge, String... labels) { - return ((GaugeSnapshot) gauge.collect()) - .getDataPoints().stream() - .filter(data -> data.getLabels().equals(Labels.of(labels))) - .findAny() - .orElseThrow(RuntimeException::new); + return gauge.collect().getDataPoints().stream() + .filter(data -> data.getLabels().equals(Labels.of(labels))) + .findAny() + .orElseThrow(RuntimeException::new); } private double getValue(Gauge gauge, String... labels) { @@ -153,10 +152,7 @@ public String getCurrentSpanId() { @Override public boolean isCurrentSpanSampled() { callNumber++; - if (callNumber == 2) { - return false; - } - return true; + return callNumber != 2; } @Override @@ -206,8 +202,8 @@ public void markCurrentSpanAsExemplar() {} public void testExemplarSamplerDisabled() { Gauge gauge = Gauge.builder().name("test").withoutExemplars().build(); gauge.setWithExemplar(3.0, Labels.of("a", "b")); - Assert.assertNull(getData(gauge).getExemplar()); + assertNull(getData(gauge).getExemplar()); gauge.inc(2.0); - Assert.assertNull(getData(gauge).getExemplar()); + assertNull(getData(gauge).getExemplar()); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeWithCallbackTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeWithCallbackTest.java index f8f54aa69..3a6a4ffac 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeWithCallbackTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeWithCallbackTest.java @@ -1,6 +1,42 @@ package io.prometheus.metrics.core.metrics; +import static org.junit.Assert.assertEquals; + +import io.prometheus.metrics.model.snapshots.GaugeSnapshot; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.Test; + public class GaugeWithCallbackTest { - // TODO :). Anyway, callbacks are implicitly covered by the JVM metrics tests as well. + @Test + public void testGauge() { + final AtomicInteger value = new AtomicInteger(1); + List labelValues = Arrays.asList("v1", "v2"); + GaugeWithCallback gauge = + GaugeWithCallback.builder() + .name("gauge") + .labelNames("l1", "l2") + .callback( + callback -> callback.call(value.doubleValue(), labelValues.toArray(new String[0]))) + .build(); + GaugeSnapshot snapshot = gauge.collect(); + + assertEquals(1, snapshot.getDataPoints().size()); + GaugeSnapshot.GaugeDataPointSnapshot datapoint = snapshot.getDataPoints().get(0); + assertEquals(value.doubleValue(), datapoint.getValue(), 0.1); + assertEquals(labelValues.size(), datapoint.getLabels().size()); + + value.incrementAndGet(); + snapshot = gauge.collect(); + assertEquals(1, snapshot.getDataPoints().size()); + datapoint = snapshot.getDataPoints().get(0); + assertEquals(value.doubleValue(), datapoint.getValue(), 0.1); + } + + @Test(expected = IllegalArgumentException.class) + public void testGaugeNoCallback() { + GaugeWithCallback.builder().name("gauge").labelNames("l1", "l2").build(); + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index da7da5a89..0b9f90260 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -2,7 +2,9 @@ import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import io.prometheus.metrics.core.datapoints.DistributionDataPoint; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; @@ -40,7 +42,6 @@ import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; import org.junit.After; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -828,7 +829,7 @@ public void testNativeBucketIndexToUpperBound() Histogram.builder().name("test").nativeInitialSchema(schemas[i]).build(); Histogram.DataPoint histogramData = histogram.newDataPoint(); double result = (double) method.invoke(histogramData, schemas[i], indexes[i]); - Assert.assertEquals( + assertEquals( "index=" + indexes[i] + ", schema=" + schemas[i], expectedUpperBounds[i], result, @@ -866,7 +867,7 @@ public void testFindBucketIndex() (double) nativeBucketIndexToUpperBound.invoke( histogram.getNoLabels(), schema, bucketIndex); - Assert.assertTrue( + assertTrue( "Bucket index " + bucketIndex + " with schema " @@ -925,9 +926,8 @@ public void testDefaults() throws IOException { + "} }"; String expectedTextFormat = "" - + // default classic buckets - "# TYPE test histogram\n" + + "# TYPE test histogram\n" + "test_bucket{le=\"0.005\"} 0\n" + "test_bucket{le=\"0.01\"} 0\n" + "test_bucket{le=\"0.025\"} 0\n" @@ -946,13 +946,13 @@ public void testDefaults() throws IOException { // protobuf Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(snapshot); - Assert.assertEquals(expectedProtobuf, TextFormat.printer().shortDebugString(protobufData)); + assertEquals(expectedProtobuf, TextFormat.printer().shortDebugString(protobufData)); // text ByteArrayOutputStream out = new ByteArrayOutputStream(); OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, true); writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expectedTextFormat, out.toString()); + assertEquals(expectedTextFormat, out.toString()); } @Test @@ -1154,13 +1154,12 @@ private void assertExemplar(Histogram histogram, double value, String... labels) } } Exemplar exemplar = data.getExemplars().get(lowerBound, upperBound); - Assert.assertNotNull( - "No exemplar found in bucket [" + lowerBound + ", " + upperBound + "]", exemplar); - Assert.assertEquals(value, exemplar.getValue(), 0.0); - Assert.assertEquals("" + exemplar.getLabels(), labels.length / 2, exemplar.getLabels().size()); + assertNotNull("No exemplar found in bucket [" + lowerBound + ", " + upperBound + "]", exemplar); + assertEquals(value, exemplar.getValue(), 0.0); + assertEquals("" + exemplar.getLabels(), labels.length / 2, exemplar.getLabels().size()); for (int i = 0; i < labels.length; i += 2) { - Assert.assertEquals(labels[i], exemplar.getLabels().getName(i / 2)); - Assert.assertEquals(labels[i + 1], exemplar.getLabels().getValue(i / 2)); + assertEquals(labels[i], exemplar.getLabels().getName(i / 2)); + assertEquals(labels[i + 1], exemplar.getLabels().getValue(i / 2)); } } @@ -1271,7 +1270,7 @@ public void testDuplicateClassicBuckets() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - Assert.assertEquals(Arrays.asList(0.0, 3.0, 17.0, 21.0, Double.POSITIVE_INFINITY), upperBounds); + assertEquals(Arrays.asList(0.0, 3.0, 17.0, 21.0, Double.POSITIVE_INFINITY), upperBounds); } @Test @@ -1281,7 +1280,7 @@ public void testUnsortedBuckets() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - Assert.assertEquals(Arrays.asList(0.1, 0.2, Double.POSITIVE_INFINITY), upperBounds); + assertEquals(Arrays.asList(0.1, 0.2, Double.POSITIVE_INFINITY), upperBounds); } @Test @@ -1291,7 +1290,7 @@ public void testEmptyBuckets() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - Assert.assertEquals(Collections.singletonList(Double.POSITIVE_INFINITY), upperBounds); + assertEquals(Collections.singletonList(Double.POSITIVE_INFINITY), upperBounds); } @Test @@ -1305,7 +1304,7 @@ public void testBucketsIncludePositiveInfinity() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - Assert.assertEquals(Arrays.asList(0.01, 0.1, 1.0, Double.POSITIVE_INFINITY), upperBounds); + assertEquals(Arrays.asList(0.01, 0.1, 1.0, Double.POSITIVE_INFINITY), upperBounds); } @Test @@ -1316,7 +1315,7 @@ public void testLinearBuckets() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - Assert.assertEquals( + assertEquals( Arrays.asList(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, Double.POSITIVE_INFINITY), upperBounds); } @@ -1473,10 +1472,10 @@ public void testObserveMultithreaded() List snapshots = future.get(5, TimeUnit.SECONDS); long count = 0; for (HistogramSnapshot snapshot : snapshots) { - Assert.assertEquals(1, snapshot.getDataPoints().size()); + assertEquals(1, snapshot.getDataPoints().size()); HistogramSnapshot.HistogramDataPointSnapshot data = snapshot.getDataPoints().stream().findFirst().orElseThrow(RuntimeException::new); - Assert.assertTrue( + assertTrue( data.getCount() >= (count + 1000)); // 1000 own observations plus the ones from other threads count = data.getCount(); @@ -1485,11 +1484,10 @@ public void testObserveMultithreaded() maxCount = count; } } - Assert.assertEquals( - nThreads * 10_000, maxCount); // the last collect() has seen all observations - Assert.assertEquals(getBucket(histogram, 2.5, "status", "200").getCount(), nThreads * 10_000); + assertEquals(nThreads * 10_000, maxCount); // the last collect() has seen all observations + assertEquals(getBucket(histogram, 2.5, "status", "200").getCount(), nThreads * 10_000); executor.shutdown(); - Assert.assertTrue(executor.awaitTermination(5, TimeUnit.SECONDS)); + assertTrue(executor.awaitTermination(5, TimeUnit.SECONDS)); } private HistogramSnapshot.HistogramDataPointSnapshot getData( @@ -1497,6 +1495,9 @@ private HistogramSnapshot.HistogramDataPointSnapshot getData( return histogram.collect().getDataPoints().stream() .filter(d -> d.getLabels().equals(Labels.of(labels))) .findAny() - .orElseThrow(() -> new RuntimeException("histogram with labels " + labels + " not found")); + .orElseThrow( + () -> + new RuntimeException( + "histogram with labels " + Arrays.toString(labels) + " not found")); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index 4175ae733..e527a3340 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -11,7 +11,6 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; -import org.junit.Assert; import org.junit.Test; public class InfoTest { @@ -35,21 +34,21 @@ public void testInfoStrippedFromName() { } @Test - public void testAddAndRemove() throws IOException { + public void testAddAndRemove() { Info info = Info.builder().name("test_info").labelNames("a", "b").build(); - Assert.assertEquals(0, info.collect().getDataPoints().size()); + assertEquals(0, info.collect().getDataPoints().size()); info.addLabelValues("val1", "val2"); - Assert.assertEquals(1, info.collect().getDataPoints().size()); + assertEquals(1, info.collect().getDataPoints().size()); info.addLabelValues("val1", "val2"); // already exist, so no change - Assert.assertEquals(1, info.collect().getDataPoints().size()); + assertEquals(1, info.collect().getDataPoints().size()); info.addLabelValues("val2", "val2"); - Assert.assertEquals(2, info.collect().getDataPoints().size()); + assertEquals(2, info.collect().getDataPoints().size()); info.remove("val1", "val3"); // does not exist, so no change - Assert.assertEquals(2, info.collect().getDataPoints().size()); + assertEquals(2, info.collect().getDataPoints().size()); info.remove("val1", "val2"); - Assert.assertEquals(1, info.collect().getDataPoints().size()); + assertEquals(1, info.collect().getDataPoints().size()); info.remove("val2", "val2"); - Assert.assertEquals(0, info.collect().getDataPoints().size()); + assertEquals(0, info.collect().getDataPoints().size()); } @Test @@ -61,9 +60,9 @@ public void testSet() throws IOException { .labelNames("service.version") .build(); info.setLabelValues("1.0.0"); - Assert.assertEquals(1, info.collect().getDataPoints().size()); + assertEquals(1, info.collect().getDataPoints().size()); info.setLabelValues("2.0.0"); - Assert.assertEquals(1, info.collect().getDataPoints().size()); + assertEquals(1, info.collect().getDataPoints().size()); assertTextFormat( "target_info{service_instance_id=\"123\",service_name=\"test\",service_version=\"2.0.0\"} 1\n", info); @@ -76,7 +75,7 @@ public void testConstLabelsOnly() throws IOException { .name("target_info") .constLabels(Labels.of("service.name", "test", "service.instance.id", "123")) .build(); - Assert.assertEquals(1, info.collect().getDataPoints().size()); + assertEquals(1, info.collect().getDataPoints().size()); assertTextFormat("target_info{service_instance_id=\"123\",service_name=\"test\"} 1\n", info); } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java index ce43b141c..54639e7b6 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java @@ -1,9 +1,10 @@ package io.prometheus.metrics.core.metrics; +import static org.junit.Assert.assertEquals; + import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicLong; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -18,11 +19,11 @@ public void observe(double value) { } void assertValues(double... expectedValues) { - ArrayList expectedList = new ArrayList<>(); + List expectedList = new ArrayList<>(); for (double expectedValue : expectedValues) { expectedList.add(expectedValue); } - Assert.assertEquals( + assertEquals( "Start time: " + startTime + ", current time: " diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java index 776aeacde..ddb2c4e9b 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java @@ -1,7 +1,12 @@ package io.prometheus.metrics.core.metrics; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.StateSetSnapshot; +import java.util.Arrays; import org.junit.Assert; import org.junit.Test; @@ -34,16 +39,16 @@ public void testEnumStateSet() { stateSet.labelValues("dev").setTrue(MyFeatureFlag.EXPERIMENTAL_FEATURE_2); stateSet.labelValues("prod").setFalse(MyFeatureFlag.EXPERIMENTAL_FEATURE_2); StateSetSnapshot snapshot = stateSet.collect(); - Assert.assertEquals(2, snapshot.getDataPoints().size()); - Assert.assertEquals(2, getData(stateSet, "environment", "dev").size()); - Assert.assertEquals("feature1", getData(stateSet, "environment", "dev").getName(0)); - Assert.assertFalse(getData(stateSet, "environment", "dev").isTrue(0)); - Assert.assertEquals("feature2", getData(stateSet, "environment", "dev").getName(1)); - Assert.assertTrue(getData(stateSet, "environment", "dev").isTrue(1)); - Assert.assertEquals(2, getData(stateSet, "environment", "prod").size()); - Assert.assertEquals("feature1", getData(stateSet, "environment", "prod").getName(0)); + assertEquals(2, snapshot.getDataPoints().size()); + assertEquals(2, getData(stateSet, "environment", "dev").size()); + assertEquals("feature1", getData(stateSet, "environment", "dev").getName(0)); + assertFalse(getData(stateSet, "environment", "dev").isTrue(0)); + assertEquals("feature2", getData(stateSet, "environment", "dev").getName(1)); + assertTrue(getData(stateSet, "environment", "dev").isTrue(1)); + assertEquals(2, getData(stateSet, "environment", "prod").size()); + assertEquals("feature1", getData(stateSet, "environment", "prod").getName(0)); Assert.assertFalse(getData(stateSet, "environment", "prod").isTrue(0)); - Assert.assertEquals("feature2", getData(stateSet, "environment", "prod").getName(1)); + assertEquals("feature2", getData(stateSet, "environment", "prod").getName(1)); Assert.assertFalse(getData(stateSet, "environment", "prod").isTrue(1)); } @@ -51,12 +56,12 @@ public void testEnumStateSet() { public void testDefaultFalse() { StateSet stateSet = StateSet.builder().name("test").states("state1", "state2", "state3").build(); - Assert.assertEquals(3, getData(stateSet).size()); - Assert.assertEquals("state1", getData(stateSet).getName(0)); + assertEquals(3, getData(stateSet).size()); + assertEquals("state1", getData(stateSet).getName(0)); Assert.assertFalse(getData(stateSet).isTrue(0)); - Assert.assertEquals("state2", getData(stateSet).getName(1)); + assertEquals("state2", getData(stateSet).getName(1)); Assert.assertFalse(getData(stateSet).isTrue(1)); - Assert.assertEquals("state3", getData(stateSet).getName(2)); + assertEquals("state3", getData(stateSet).getName(2)); Assert.assertFalse(getData(stateSet).isTrue(2)); } @@ -64,7 +69,10 @@ private StateSetSnapshot.StateSetDataPointSnapshot getData(StateSet stateSet, St return stateSet.collect().getDataPoints().stream() .filter(d -> d.getLabels().equals(Labels.of(labels))) .findAny() - .orElseThrow(() -> new RuntimeException("stateset with labels " + labels + " not found")); + .orElseThrow( + () -> + new RuntimeException( + "stateset with labels " + Arrays.toString(labels) + " not found")); } @Test(expected = IllegalStateException.class) diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java index d77ec6e83..a3ddbcc84 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java @@ -1,8 +1,10 @@ package io.prometheus.metrics.core.metrics; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + import java.lang.reflect.Field; import java.util.Map; -import org.junit.Assert; import org.junit.Test; public class StatefulMetricTest { @@ -28,8 +30,8 @@ public void testLabelRemoveWhileCollecting() throws Exception { counter.remove("c", "d"); counter.remove("e", "f"); } - Assert.assertNotNull(entry.getKey()); - Assert.assertNotNull(entry.getValue()); + assertNotNull(entry.getKey()); + assertNotNull(entry.getValue()); } } @@ -39,31 +41,31 @@ public void testClear() { counter.labelValues("a", "b").inc(3.0); counter.labelValues("c", "d").inc(3.0); counter.labelValues("a", "b").inc(); - Assert.assertEquals(2, counter.collect().getDataPoints().size()); + assertEquals(2, counter.collect().getDataPoints().size()); counter.clear(); - Assert.assertEquals(0, counter.collect().getDataPoints().size()); + assertEquals(0, counter.collect().getDataPoints().size()); counter.labelValues("a", "b").inc(); - Assert.assertEquals(1, counter.collect().getDataPoints().size()); + assertEquals(1, counter.collect().getDataPoints().size()); } @Test public void testClearNoLabels() { Counter counter = Counter.builder().name("test").build(); counter.inc(); - Assert.assertEquals(1, counter.collect().getDataPoints().size()); - Assert.assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + assertEquals(1, counter.collect().getDataPoints().size()); + assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); counter.clear(); // No labels is always present, but as no value has been observed after clear() the value should // be 0.0 - Assert.assertEquals(1, counter.collect().getDataPoints().size()); - Assert.assertEquals(0.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + assertEquals(1, counter.collect().getDataPoints().size()); + assertEquals(0.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); // Making inc() works correctly after clear() counter.inc(); - Assert.assertEquals(1, counter.collect().getDataPoints().size()); - Assert.assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + assertEquals(1, counter.collect().getDataPoints().size()); + assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java index d5bc791a8..365ff1824 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java @@ -1,5 +1,200 @@ package io.prometheus.metrics.core.metrics; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import io.prometheus.metrics.core.datapoints.Timer; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.prometheus.metrics.model.snapshots.Label; +import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.model.snapshots.Quantile; +import io.prometheus.metrics.model.snapshots.Quantiles; +import io.prometheus.metrics.model.snapshots.SummarySnapshot; +import io.prometheus.metrics.model.snapshots.Unit; +import java.util.List; +import org.junit.Before; +import org.junit.Test; + public class SummaryTest { - // TODO, port the SummaryTest from simpleclient over. + + private final Label label = new Label("name", "value"); + private final Labels labels = Labels.builder().label(label.getName(), label.getValue()).build(); + + private PrometheusRegistry registry; + private Summary noLabels; + private Summary withLabels; + private Summary withLabelsAndQuantiles; + private Summary noLabelsAndQuantiles; + + @Before + public void setUp() { + registry = new PrometheusRegistry(); + noLabels = + Summary.builder().name("nolabels").unit(Unit.SECONDS).help("help").register(registry); + withLabels = + Summary.builder() + .name("labels") + .unit(Unit.SECONDS) + .help("help") + .labelNames(label.getName()) + .register(registry); + noLabelsAndQuantiles = + Summary.builder() + .quantile(0.5, 0.05) + .quantile(0.9, 0.01) + .quantile(0.99, 0.001) + .name("no_labels_and_quantiles") + .unit(Unit.SECONDS) + .help("help") + .register(registry); + withLabelsAndQuantiles = + Summary.builder() + .quantile(0.5) + .quantile(0.9) + .quantile(0.99) + .name("labels_and_quantiles") + .unit(Unit.SECONDS) + .help("help") + .labelNames(label.getName()) + .register(registry); + } + + @Test + public void testObserve() { + noLabels.observe(2); + assertEquals(1, getCount(noLabels, Labels.EMPTY)); + assertEquals(2.0, getSum(noLabels, Labels.EMPTY), .001); + noLabels.observe(3); + assertEquals(2, getCount(noLabels, Labels.EMPTY)); + assertEquals(5.0, getSum(noLabels, Labels.EMPTY), .001); + + withLabels.labelValues(label.getValue()).observe(4); + assertEquals(1, getCount(withLabels, labels)); + assertEquals(4.0, getSum(withLabels, labels), .001); + + withLabels.labelValues(label.getValue()).observeWithExemplar(6, labels); + assertEquals(2, getCount(withLabels, labels)); + assertEquals(10.0, getSum(withLabels, labels), .001); + } + + @Test + public void testNegativeAmount() { + noLabels.observe(-1); + noLabels.observe(-3); + assertEquals(2, getCount(noLabels, Labels.EMPTY)); + assertEquals(-4.0, getSum(noLabels, Labels.EMPTY), .001); + } + + @Test + public void testQuantiles() { + int nSamples = 1000000; // simulate one million samples + + for (int i = 1; i <= nSamples; i++) { + // In this test, we observe the numbers from 1 to nSamples, + // because that makes it easy to verify if the quantiles are correct. + withLabelsAndQuantiles.labelValues(label.getValue()).observe(i); + noLabelsAndQuantiles.observe(i); + } + assertEquals( + getQuantile(noLabelsAndQuantiles, 0.5, Labels.EMPTY), 0.5 * nSamples, 0.05 * nSamples); + assertEquals( + getQuantile(noLabelsAndQuantiles, 0.9, Labels.EMPTY), 0.9 * nSamples, 0.01 * nSamples); + assertEquals( + getQuantile(noLabelsAndQuantiles, 0.99, Labels.EMPTY), 0.99 * nSamples, 0.001 * nSamples); + + assertEquals(getQuantile(withLabelsAndQuantiles, 0.5, labels), 0.5 * nSamples, 0.05 * nSamples); + assertEquals(getQuantile(withLabelsAndQuantiles, 0.9, labels), 0.9 * nSamples, 0.01 * nSamples); + assertEquals( + getQuantile(withLabelsAndQuantiles, 0.99, labels), 0.99 * nSamples, 0.001 * nSamples); + } + + @Test + public void testMaxAge() throws InterruptedException { + Summary summary = + Summary.builder() + .quantile(0.99, 0.001) + .maxAgeSeconds(1) // After 1s, all observations will be discarded. + .numberOfAgeBuckets(2) // We got 2 buckets, so we discard one bucket every 500ms. + .name("short_attention_span") + .help("help") + .register(registry); + summary.observe(8.0); + assertEquals(8.0, getQuantile(summary, 0.99, Labels.EMPTY), 0.0); // From bucket 1. + Thread.sleep(600); + assertEquals(8.0, getQuantile(summary, 0.99, Labels.EMPTY), 0.0); // From bucket 2. + Thread.sleep(600); + assertEquals( + Double.NaN, + getQuantile(summary, 0.99, Labels.EMPTY), + 0.0); // Bucket 1 again, now it is empty. + } + + @Test + public void testTimer() { + int result = noLabels.time(() -> 123); + assertEquals(123, result); + assertEquals(1, getCount(noLabels, Labels.EMPTY)); + + try (Timer timer = noLabels.startTimer()) { + timer.observeDuration(); + assertEquals(2, getCount(noLabels, Labels.EMPTY), .001); + } + } + + @Test + public void noLabelsDefaultZeroValue() { + assertEquals(0.0, getCount(noLabels, Labels.EMPTY), .001); + assertEquals(0.0, getSum(noLabels, Labels.EMPTY), .001); + } + + @Test(expected = IllegalArgumentException.class) + public void testBuilderInvalidNumberOfAgeBuckets() { + Summary.builder().name("name").numberOfAgeBuckets(-1).build(); + } + + @Test(expected = IllegalArgumentException.class) + public void testBuilderInvalidMaxAge() { + Summary.builder().name("name").maxAgeSeconds(-1).build(); + } + + @Test(expected = IllegalArgumentException.class) + public void testBuilderInvalidQuantile() { + Summary.builder().name("name").quantile(42).build(); + } + + @Test(expected = IllegalArgumentException.class) + public void testBuilderInvalidQuantileError() { + Summary.builder().name("name").quantile(0.5, 20).build(); + } + + private double getQuantile(Summary summary, double quantile, Labels labels) { + SummarySnapshot.SummaryDataPointSnapshot datapoint = getDatapoint(summary, labels); + Quantiles quantiles = datapoint.getQuantiles(); + for (Quantile q : quantiles) { + if (q.getQuantile() == quantile) { + return q.getValue(); + } + } + fail("Unable to find quantile"); + return 0.0; + } + + private SummarySnapshot.SummaryDataPointSnapshot getDatapoint(Summary summary, Labels labels) { + SummarySnapshot snapshot = summary.collect(); + List datapoints = snapshot.getDataPoints(); + assertEquals(1, datapoints.size()); + SummarySnapshot.SummaryDataPointSnapshot datapoint = datapoints.get(0); + assertEquals(labels, datapoint.getLabels()); + return datapoint; + } + + private long getCount(Summary summary, Labels labels) { + SummarySnapshot.SummaryDataPointSnapshot datapoint = getDatapoint(summary, labels); + return datapoint.getCount(); + } + + private double getSum(Summary summary, Labels labels) { + SummarySnapshot.SummaryDataPointSnapshot datapoint = getDatapoint(summary, labels); + return datapoint.getSum(); + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java index 8231d86f2..ba1df05ff 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java @@ -1,6 +1,53 @@ package io.prometheus.metrics.core.metrics; +import static org.junit.Assert.assertEquals; + +import io.prometheus.metrics.model.snapshots.Quantile; +import io.prometheus.metrics.model.snapshots.Quantiles; +import io.prometheus.metrics.model.snapshots.SummarySnapshot; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.Test; + public class SummaryWithCallbackTest { - // TODO :). Anyway, callbacks are implicitly covered by the JVM metrics tests as well. + @Test + public void testGauge() { + final AtomicInteger count = new AtomicInteger(1); + final AtomicInteger sum = new AtomicInteger(1); + final Quantiles quantiles = Quantiles.of(new Quantile(0.5, 10)); + List labelValues = Arrays.asList("v1", "v2"); + SummaryWithCallback gauge = + SummaryWithCallback.builder() + .name("summary") + .labelNames("l1", "l2") + .callback( + callback -> { + callback.call( + count.get(), sum.get(), quantiles, labelValues.toArray(new String[0])); + }) + .build(); + SummarySnapshot snapshot = gauge.collect(); + + assertEquals(1, snapshot.getDataPoints().size()); + SummarySnapshot.SummaryDataPointSnapshot datapoint = snapshot.getDataPoints().get(0); + assertEquals(count.get(), datapoint.getCount()); + assertEquals(sum.doubleValue(), datapoint.getSum(), 0.1); + assertEquals(quantiles, datapoint.getQuantiles()); + assertEquals(labelValues.size(), datapoint.getLabels().size()); + + count.incrementAndGet(); + sum.incrementAndGet(); + snapshot = gauge.collect(); + assertEquals(1, snapshot.getDataPoints().size()); + datapoint = snapshot.getDataPoints().get(0); + assertEquals(count.get(), datapoint.getCount()); + assertEquals(sum.doubleValue(), datapoint.getSum(), 0.1); + } + + @Test(expected = IllegalArgumentException.class) + public void testSummaryNoCallback() { + SummaryWithCallback.builder().name("summary").labelNames("l1", "l2").build(); + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java index 95a8b90fb..6a242a8be 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java @@ -1,13 +1,14 @@ package io.prometheus.metrics.core.metrics; +import static org.junit.Assert.assertEquals; + import io.prometheus.metrics.model.snapshots.Exemplar; -import org.junit.Assert; public class TestUtil { public static void assertExemplarEquals(Exemplar expected, Exemplar actual) { // ignore timestamp - Assert.assertEquals(expected.getValue(), actual.getValue(), 0.00001); - Assert.assertEquals(expected.getLabels(), actual.getLabels()); + assertEquals(expected.getValue(), actual.getValue(), 0.00001); + assertEquals(expected.getLabels(), actual.getLabels()); } } From 5e282c85b95b6d3d131cef53958b4975baa11c0e Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 7 Oct 2024 15:30:09 +0200 Subject: [PATCH 144/870] convert to junit 5 / use assertj everywhere (#1092) * include common test dependencies by default Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to assertj Signed-off-by: Gregor Zeitlinger * convert to junit5 Signed-off-by: Gregor Zeitlinger * convert to junit5 Signed-off-by: Gregor Zeitlinger * convert to junit5 Signed-off-by: Gregor Zeitlinger * convert to junit5 Signed-off-by: Gregor Zeitlinger * convert to junit5 Signed-off-by: Gregor Zeitlinger * convert to junit5 Signed-off-by: Gregor Zeitlinger * convert to junit5 Signed-off-by: Gregor Zeitlinger * convert to junit5 Signed-off-by: Gregor Zeitlinger * convert to junit5 Signed-off-by: Gregor Zeitlinger * convert to junit5 Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .../ManualCompleteMetricsTest.java | 2 +- .../prometheus/client/it/common/Volume.java | 10 +- .../it-exporter/it-exporter-test/pom.xml | 13 +- .../metrics/it/exporter/test/ExporterIT.java | 168 ++++--- .../it/exporter/test/HttpServerIT.java | 10 + .../metrics/it/exporter/test/JettyIT.java | 10 + .../metrics/it/exporter/test/TomcatIT.java | 10 + integration-tests/it-pushgateway/pom.xml | 4 + .../it/pushgateway/PushGatewayTestApp.java | 2 +- .../metrics/it/pushgateway/PushGatewayIT.java | 35 +- pom.xml | 28 ++ prometheus-metrics-config/pom.xml | 10 - .../PrometheusPropertiesLoaderTests.java | 45 +- .../config/PrometheusPropertiesTest.java | 22 +- prometheus-metrics-core/pom.xml | 6 - .../metrics/core/datapoints/TimerApiTest.java | 2 +- .../core/exemplars/ExemplarSamplerTest.java | 19 +- .../exemplars/SpanContextSupplierTest.java | 23 +- .../core/metrics/CKMSQuantilesTest.java | 72 +-- .../metrics/core/metrics/CounterTest.java | 150 ++++--- .../core/metrics/CounterWithCallbackTest.java | 24 +- .../metrics/core/metrics/GaugeTest.java | 50 +-- .../core/metrics/GaugeWithCallbackTest.java | 23 +- .../metrics/core/metrics/HistogramTest.java | 267 +++++------ .../metrics/core/metrics/InfoTest.java | 45 +- .../core/metrics/SlidingWindowTest.java | 30 +- .../metrics/core/metrics/StateSetTest.java | 51 ++- .../core/metrics/StatefulMetricTest.java | 30 +- .../metrics/core/metrics/SummaryTest.java | 104 +++-- .../core/metrics/SummaryWithCallbackTest.java | 30 +- .../metrics/core/metrics/TestUtil.java | 10 +- .../metrics/core/metrics/TodoTest.java | 2 +- .../pom.xml | 6 - .../exporter/opentelemetry/ExemplarTest.java | 49 +- .../pom.xml | 23 +- .../pushgateway/BasicAuthPushGatewayTest.java | 22 +- .../BearerTokenPushGatewayTest.java | 21 +- .../exporter/pushgateway/PushGatewayTest.java | 103 +++-- prometheus-metrics-exposition-formats/pom.xml | 8 - .../ExpositionFormatsTest.java | 420 ++++++------------ .../pom.xml | 22 +- .../caffeine/CacheMetricsCollectorTest.java | 29 +- .../pom.xml | 21 +- .../dropwizard5/DropwizardExportsTest.java | 94 ++-- .../labels/CustomLabelMapperTest.java | 37 +- .../labels/GraphiteNamePatternTest.java | 21 +- .../dropwizard5/labels/MapperConfigTest.java | 33 +- .../pom.xml | 22 - .../guava/CacheMetricsCollectorTest.java | 14 +- .../pom.xml | 12 - .../jvm/ExampleExporterForManualTesting.java | 2 +- .../jvm/JvmBufferPoolMetricsTest.java | 15 +- .../jvm/JvmClassLoadingMetricsTest.java | 15 +- .../jvm/JvmCompilationMetricsTest.java | 17 +- .../jvm/JvmGarbageCollectorMetricsTest.java | 17 +- .../jvm/JvmMemoryMetricsTest.java | 15 +- .../JvmMemoryPoolAllocationMetricsTest.java | 23 +- .../instrumentation/jvm/JvmMetricsTest.java | 11 +- .../jvm/JvmNativeMemoryMetricsTest.java | 17 +- .../jvm/JvmRuntimeInfoMetricTest.java | 11 +- .../jvm/JvmThreadsMetricsTest.java | 23 +- .../jvm/ProcessMetricsTest.java | 29 +- .../metrics/instrumentation/jvm/TestUtil.java | 2 +- prometheus-metrics-model/pom.xml | 10 - .../model/registry/MetricNameFilterTest.java | 29 +- .../MultiCollectorNameFilterTest.java | 131 +++--- .../registry/PrometheusRegistryTest.java | 35 +- .../ClassicHistogramBucketsTest.java | 89 ++-- .../model/snapshots/CounterSnapshotTest.java | 59 +-- .../metrics/model/snapshots/ExemplarTest.java | 63 +-- .../model/snapshots/ExemplarsTest.java | 37 +- .../model/snapshots/GaugeSnapshotTest.java | 64 +-- .../snapshots/HistogramSnapshotTest.java | 143 +++--- .../model/snapshots/InfoSnapshotTest.java | 32 +- .../metrics/model/snapshots/LabelsTest.java | 84 ++-- .../model/snapshots/MetricMetadataTest.java | 53 ++- .../model/snapshots/MetricSnapshotTest.java | 56 +-- .../model/snapshots/MetricSnapshotsTest.java | 31 +- .../snapshots/NativeHistogramBucketsTest.java | 43 +- .../model/snapshots/PrometheusNamingTest.java | 116 ++--- .../model/snapshots/QuantilesTest.java | 40 +- .../model/snapshots/SnapshotTestUtil.java | 12 +- .../model/snapshots/StateSetSnapshotTest.java | 102 +++-- .../model/snapshots/SummarySnapshotTest.java | 59 +-- .../metrics/model/snapshots/UnitTest.java | 20 +- .../model/snapshots/UnknownSnapshotTest.java | 47 +- .../pom.xml | 6 - .../bridge/SimpleclientCollectorTest.java | 35 +- .../simpleclient_graphite_bridge/pom.xml | 7 - .../client/bridge/GraphiteTest.java | 2 +- .../simpleclient_hibernate/pom.xml | 17 +- .../HibernateStatisticsCollector.java | 2 +- .../HibernateStatisticsCollectorTest.java | 4 +- .../simpleclient_httpserver/pom.xml | 12 - .../client/exporter/TestDaemonFlags.java | 2 +- .../client/exporter/TestHTTPServer.java | 2 +- .../simpleclient_jetty/pom.xml | 6 - .../jetty/JettyStatisticsCollectorTest.java | 2 +- .../simpleclient_jetty_jdk8/pom.xml | 6 - ...euedThreadPoolStatisticsCollectorTest.java | 2 +- .../simpleclient_log4j/pom.xml | 14 - .../log4j/InstrumentedAppenderTest.java | 2 +- .../simpleclient_log4j2/pom.xml | 14 - .../log4j2/InstrumentedAppenderTest.java | 2 +- .../simpleclient_logback/pom.xml | 15 - .../logback/InstrumentedAppenderTest.java | 2 +- .../simpleclient_servlet/pom.xml | 18 - .../simpleclient_servlet_common/pom.xml | 13 - .../servlet/common/exporter/ExporterTest.java | 2 +- .../servlet/common/filter/FilterTest.java | 2 +- .../simpleclient_servlet_jakarta/pom.xml | 18 - .../simpleclient_spring_web/pom.xml | 6 - .../client/spring/web/MethodTimerAppTest.java | 4 +- .../client/spring/web/MethodTimerTest.java | 2 +- .../simpleclient_vertx/pom.xml | 13 - .../client/vertx/MetricsHandlerTest.java | 2 +- .../simpleclient_vertx4/pom.xml | 13 - .../client/vertx/MetricsHandlerTest.java | 2 +- 118 files changed, 1926 insertions(+), 2139 deletions(-) create mode 100644 integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/HttpServerIT.java create mode 100644 integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/JettyIT.java create mode 100644 integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java diff --git a/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java b/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java index b8b8ef98b..7a2715647 100644 --- a/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java +++ b/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java @@ -17,7 +17,7 @@ import java.util.Random; */ -public class ManualCompleteMetricsTest { +class ManualCompleteMetricsTest { // This contains a complete set of all metric types, and target_info and otel_scope_info. // I used this to expose in Prometheus format and OTLP format at the same time and compare the diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java index 783ccb7a5..af5b0918e 100644 --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/Volume.java @@ -1,6 +1,8 @@ package io.prometheus.client.it.common; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; import java.io.File; import java.io.IOException; @@ -8,7 +10,6 @@ import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.util.function.Predicate; -import org.junit.Assert; /** Temporary directory in ./target/ to be mounted as a volume in Docker containers. */ public class Volume { @@ -21,8 +22,9 @@ private Volume(Path tmpDir) { public static Volume create(String prefix) throws IOException, URISyntaxException { Path targetDir = Paths.get(Volume.class.getResource("/").toURI()).getParent(); - Assert.assertEquals( - "failed to locate target/ directory", "target", targetDir.getFileName().toString()); + assertThat(targetDir.getFileName().toString()) + .as("failed to locate target/ directory") + .isEqualTo("target"); return new Volume(Files.createTempDirectory(targetDir, prefix + "-")); } @@ -59,7 +61,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) } }); } else { - Assert.fail(src + ": No such file or directory"); + fail(src + ": No such file or directory"); } return this; } diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 899a17f10..5135e35e1 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 @@ -15,6 +16,10 @@ Integration Tests for Exporters + + true + + The Apache Software License, Version 2.0 @@ -37,12 +42,6 @@ prometheus-metrics-exposition-formats ${project.version} - - junit - junit - 4.13.2 - test - org.testcontainers testcontainers diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index 949f71840..b0e319190 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -1,6 +1,8 @@ package io.prometheus.metrics.it.exporter.test; import static java.nio.charset.StandardCharsets.UTF_8; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; import io.prometheus.client.it.common.LogConsumer; import io.prometheus.client.it.common.Volume; @@ -20,30 +22,17 @@ import java.util.concurrent.TimeUnit; import java.util.zip.GZIPInputStream; import org.apache.commons.io.IOUtils; -import org.junit.After; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; import org.testcontainers.containers.BindMode; import org.testcontainers.containers.GenericContainer; -@RunWith(Parameterized.class) -public class ExporterIT { +abstract class ExporterIT { private final GenericContainer sampleAppContainer; private final Volume sampleAppVolume; private final String sampleApp; - @Parameterized.Parameters(name = "{0}") - public static String[] sampleApps() { - return new String[] { - "exporter-httpserver-sample", - "exporter-servlet-tomcat-sample", - "exporter-servlet-jetty-sample", - }; - } - public ExporterIT(String sampleApp) throws IOException, URISyntaxException { this.sampleApp = sampleApp; this.sampleAppVolume = @@ -57,7 +46,7 @@ public ExporterIT(String sampleApp) throws IOException, URISyntaxException { .withExposedPorts(9400); } - @After + @AfterEach public void tearDown() throws IOException { sampleAppContainer.stop(); sampleAppVolume.remove(); @@ -70,22 +59,22 @@ public void testOpenMetricsTextFormat() throws IOException { .start(); Response response = scrape("GET", "", "Accept", "application/openmetrics-text; version=1.0.0; charset=utf-8"); - Assert.assertEquals(200, response.status); + assertThat(response.status).isEqualTo(200); assertContentType( "application/openmetrics-text; version=1.0.0; charset=utf-8", response.getHeader("Content-Type")); - Assert.assertNull(response.getHeader("Content-Encoding")); - Assert.assertNull(response.getHeader("Transfer-Encoding")); - Assert.assertEquals( - Integer.toString(response.body.length), response.getHeader("Content-Length")); + assertThat(response.getHeader("Content-Encoding")).isNull(); + assertThat(response.getHeader("Transfer-Encoding")).isNull(); + assertThat(response.getHeader("Content-Length")) + .isEqualTo(Integer.toString(response.body.length)); String bodyString = new String(response.body); - Assert.assertTrue( - bodyString.contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1")); - Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"inside\"} 23.0")); - Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"outside\"} 27.0")); - Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); - // OpenMetrics text format has a UNIT. - Assert.assertTrue(bodyString.contains("# UNIT uptime_seconds seconds")); + assertThat(bodyString) + .contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1") + .contains("temperature_celsius{location=\"inside\"} 23.0") + .contains("temperature_celsius{location=\"outside\"} 27.0") + .contains("uptime_seconds_total 17.0") + // OpenMetrics text format has a UNIT. + .contains("# UNIT uptime_seconds seconds"); } @Test @@ -94,21 +83,21 @@ public void testPrometheusTextFormat() throws IOException { .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") .start(); Response response = scrape("GET", ""); - Assert.assertEquals(200, response.status); + assertThat(response.status).isEqualTo(200); assertContentType( "text/plain; version=0.0.4; charset=utf-8", response.getHeader("Content-Type")); - Assert.assertNull(response.getHeader("Content-Encoding")); - Assert.assertNull(response.getHeader("Transfer-Encoding")); - Assert.assertEquals( - Integer.toString(response.body.length), response.getHeader("Content-Length")); + assertThat(response.getHeader("Content-Encoding")).isNull(); + assertThat(response.getHeader("Transfer-Encoding")).isNull(); + assertThat(response.getHeader("Content-Length")) + .isEqualTo(Integer.toString(response.body.length)); String bodyString = new String(response.body); - Assert.assertTrue( - bodyString.contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1")); - Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"inside\"} 23.0")); - Assert.assertTrue(bodyString.contains("temperature_celsius{location=\"outside\"} 27.0")); - Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); - // Prometheus text format does not have a UNIT. - Assert.assertFalse(bodyString.contains("# UNIT uptime_seconds seconds")); + assertThat(bodyString) + .contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1") + .contains("temperature_celsius{location=\"inside\"} 23.0") + .contains("temperature_celsius{location=\"outside\"} 27.0") + .contains("uptime_seconds_total 17.0") + // Prometheus text format does not have a UNIT. + .doesNotContain("# UNIT uptime_seconds seconds"); } @Test @@ -122,24 +111,24 @@ public void testPrometheusProtobufFormat() throws IOException { "", "Accept", "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited"); - Assert.assertEquals(200, response.status); + assertThat(response.status).isEqualTo(200); assertContentType( "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited", response.getHeader("Content-Type")); - Assert.assertNull(response.getHeader("Content-Encoding")); - Assert.assertNull(response.getHeader("Transfer-Encoding")); - Assert.assertEquals( - Integer.toString(response.body.length), response.getHeader("Content-Length")); + assertThat(response.getHeader("Content-Encoding")).isNull(); + assertThat(response.getHeader("Transfer-Encoding")).isNull(); + assertThat(response.getHeader("Content-Length")) + .isEqualTo(Integer.toString(response.body.length)); List metrics = new ArrayList<>(); InputStream in = new ByteArrayInputStream(response.body); while (in.available() > 0) { metrics.add(Metrics.MetricFamily.parseDelimitedFrom(in)); } - Assert.assertEquals(3, metrics.size()); + assertThat(metrics.size()).isEqualTo(3); // metrics are sorted by name - Assert.assertEquals("integration_test_info", metrics.get(0).getName()); - Assert.assertEquals("temperature_celsius", metrics.get(1).getName()); - Assert.assertEquals("uptime_seconds_total", metrics.get(2).getName()); + assertThat(metrics.get(0).getName()).isEqualTo("integration_test_info"); + assertThat(metrics.get(1).getName()).isEqualTo("temperature_celsius"); + assertThat(metrics.get(2).getName()).isEqualTo("uptime_seconds_total"); } @Test @@ -155,16 +144,16 @@ public void testCompression() throws IOException { "application/openmetrics-text; version=1.0.0; charset=utf-8", "Accept-Encoding", "gzip"); - Assert.assertEquals(200, response.status); - Assert.assertEquals("gzip", response.getHeader("Content-Encoding")); + assertThat(response.status).isEqualTo(200); + assertThat(response.getHeader("Content-Encoding")).isEqualTo("gzip"); if (response.getHeader("Content-Length") != null) { // The servlet container might set a content length as the body is very small. - Assert.assertEquals( - Integer.toString(response.body.length), response.getHeader("Content-Length")); - Assert.assertNull(response.getHeader("Transfer-Encoding")); + assertThat(response.getHeader("Content-Length")) + .isEqualTo(Integer.toString(response.body.length)); + assertThat(response.getHeader("Transfer-Encoding")).isNull(); } else { // If no content length is set, transfer-encoding chunked must be used. - Assert.assertEquals("chunked", response.getHeader("Transfer-Encoding")); + assertThat(response.getHeader("Transfer-Encoding")).isEqualTo("chunked"); } assertContentType( "application/openmetrics-text; version=1.0.0; charset=utf-8", @@ -173,7 +162,7 @@ public void testCompression() throws IOException { new String( IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(response.body))), UTF_8); - Assert.assertTrue(body.contains("uptime_seconds_total 17.0")); + assertThat(body).contains("uptime_seconds_total 17.0"); } @Test @@ -182,8 +171,8 @@ public void testErrorHandling() throws IOException { .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "error") .start(); Response response = scrape("GET", ""); - Assert.assertEquals(500, response.status); - Assert.assertTrue(new String(response.body, UTF_8).contains("Simulating an error.")); + assertThat(response.status).isEqualTo(500); + assertThat(new String(response.body, UTF_8)).contains("Simulating an error."); } @Test @@ -193,11 +182,11 @@ public void testHeadRequest() throws IOException { .start(); Response fullResponse = scrape("GET", ""); int size = fullResponse.body.length; - Assert.assertTrue(size > 0); + assertThat(size > 0).isTrue(); Response headResponse = scrape("HEAD", ""); - Assert.assertEquals(200, headResponse.status); - Assert.assertEquals(Integer.toString(size), headResponse.getHeader("Content-Length")); - Assert.assertEquals(0, headResponse.body.length); + assertThat(headResponse.status).isEqualTo(200); + assertThat(headResponse.getHeader("Content-Length")).isEqualTo(Integer.toString(size)); + assertThat(headResponse.body.length).isZero(); } @Test @@ -206,11 +195,12 @@ public void testDebug() throws IOException { .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") .start(); Response response = scrape("GET", "debug=openmetrics"); - Assert.assertEquals(200, response.status); + assertThat(response.status).isEqualTo(200); assertContentType("text/plain; charset=utf-8", response.getHeader("Content-Type")); String bodyString = new String(response.body, UTF_8); - Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); - Assert.assertTrue(bodyString.contains("# UNIT uptime_seconds seconds")); + assertThat(bodyString) + .contains("uptime_seconds_total 17.0") + .contains("# UNIT uptime_seconds seconds"); } @Test @@ -224,15 +214,15 @@ public void testNameFilter() throws IOException { nameParam("integration_test_info") + "&" + nameParam("uptime_seconds_total"), "Accept", "application/openmetrics-text; version=1.0.0; charset=utf-8"); - Assert.assertEquals(200, response.status); + assertThat(response.status).isEqualTo(200); assertContentType( "application/openmetrics-text; version=1.0.0; charset=utf-8", response.getHeader("Content-Type")); String bodyString = new String(response.body, UTF_8); - Assert.assertTrue( - bodyString.contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1")); - Assert.assertTrue(bodyString.contains("uptime_seconds_total 17.0")); - Assert.assertFalse(bodyString.contains("temperature_celsius")); + assertThat(bodyString) + .contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1") + .contains("uptime_seconds_total 17.0") + .doesNotContain("temperature_celsius"); } @Test @@ -246,13 +236,13 @@ public void testEmptyResponseOpenMetrics() throws IOException { nameParam("none_existing"), "Accept", "application/openmetrics-text; version=1.0.0; charset=utf-8"); - Assert.assertEquals(200, response.status); + assertThat(response.status).isEqualTo(200); assertContentType( "application/openmetrics-text; version=1.0.0; charset=utf-8", response.getHeader("Content-Type")); - Assert.assertEquals( - Integer.toString(response.body.length), response.getHeader("Content-Length")); - Assert.assertEquals("# EOF\n", new String(response.body, UTF_8)); + assertThat(response.getHeader("Content-Length")) + .isEqualTo(Integer.toString(response.body.length)); + assertThat(new String(response.body, UTF_8)).isEqualTo("# EOF\n"); } @Test @@ -261,14 +251,14 @@ public void testEmptyResponseText() throws IOException { .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") .start(); Response response = scrape("GET", nameParam("none_existing")); - Assert.assertEquals(200, response.status); + assertThat(response.status).isEqualTo(200); assertContentType( "text/plain; version=0.0.4; charset=utf-8", response.getHeader("Content-Type")); if (response.getHeader("Content-Length") != null) { // HTTPServer does not send a zero content length, which is ok - Assert.assertEquals("0", response.getHeader("Content-Length")); + assertThat(response.getHeader("Content-Length")).isEqualTo("0"); } - Assert.assertEquals(0, response.body.length); + assertThat(response.body.length).isZero(); } @Test @@ -282,11 +272,11 @@ public void testEmptyResponseProtobuf() throws IOException { nameParam("none_existing"), "Accept", "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited"); - Assert.assertEquals(200, response.status); + assertThat(response.status).isEqualTo(200); assertContentType( "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited", response.getHeader("Content-Type")); - Assert.assertEquals(0, response.body.length); + assertThat(response.body.length).isZero(); } @Test @@ -302,13 +292,13 @@ public void testEmptyResponseGzipOpenMetrics() throws IOException { "application/openmetrics-text; version=1.0.0; charset=utf-8", "Accept-Encoding", "gzip"); - Assert.assertEquals(200, response.status); - Assert.assertEquals("gzip", response.getHeader("Content-Encoding")); + assertThat(response.status).isEqualTo(200); + assertThat(response.getHeader("Content-Encoding")).isEqualTo("gzip"); String body = new String( IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(response.body))), UTF_8); - Assert.assertEquals("# EOF\n", body); + assertThat(body).isEqualTo("# EOF\n"); } @Test @@ -317,13 +307,13 @@ public void testEmptyResponseGzipText() throws IOException { .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") .start(); Response response = scrape("GET", nameParam("none_existing"), "Accept-Encoding", "gzip"); - Assert.assertEquals(200, response.status); - Assert.assertEquals("gzip", response.getHeader("Content-Encoding")); + assertThat(response.status).isEqualTo(200); + assertThat(response.getHeader("Content-Encoding")).isEqualTo("gzip"); String body = new String( IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(response.body))), UTF_8); - Assert.assertEquals(0, body.length()); + assertThat(body.length()).isZero(); } private String nameParam(String name) throws UnsupportedEncodingException { @@ -336,13 +326,13 @@ public void testDebugUnknown() throws IOException { .withCommand("java", "-jar", "/app/" + sampleApp + ".jar", "9400", "success") .start(); Response response = scrape("GET", "debug=unknown"); - Assert.assertEquals(500, response.status); + assertThat(response.status).isEqualTo(500); assertContentType("text/plain; charset=utf-8", response.getHeader("Content-Type")); } private void assertContentType(String expected, String actual) { if (!expected.replace(" ", "").equals(actual)) { - Assert.assertEquals(expected, actual); + assertThat(actual).isEqualTo(expected); } } @@ -386,7 +376,7 @@ private Response scrape(String method, String queryString, String... requestHead if (exception != null) { exception.printStackTrace(); } - Assert.fail("timeout while getting metrics from " + url); + fail("timeout while getting metrics from " + url); return null; // will not happen } diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/HttpServerIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/HttpServerIT.java new file mode 100644 index 000000000..4c7e61472 --- /dev/null +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/HttpServerIT.java @@ -0,0 +1,10 @@ +package io.prometheus.metrics.it.exporter.test; + +import java.io.IOException; +import java.net.URISyntaxException; + +class HttpServerIT extends ExporterIT { + public HttpServerIT() throws IOException, URISyntaxException { + super("exporter-httpserver-sample"); + } +} diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/JettyIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/JettyIT.java new file mode 100644 index 000000000..a3d3e7da6 --- /dev/null +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/JettyIT.java @@ -0,0 +1,10 @@ +package io.prometheus.metrics.it.exporter.test; + +import java.io.IOException; +import java.net.URISyntaxException; + +class JettyIT extends ExporterIT { + public JettyIT() throws IOException, URISyntaxException { + super("exporter-servlet-jetty-sample"); + } +} diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java new file mode 100644 index 000000000..ea5e6b69d --- /dev/null +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java @@ -0,0 +1,10 @@ +package io.prometheus.metrics.it.exporter.test; + +import java.io.IOException; +import java.net.URISyntaxException; + +class TomcatIT extends ExporterIT { + public TomcatIT() throws IOException, URISyntaxException { + super("exporter-servlet-tomcat-sample"); + } +} diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index 25ce45b12..1956f1dad 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -16,6 +16,10 @@ Integration tests for the Pushgateway Exporter + + true + + The Apache Software License, Version 2.0 diff --git a/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java b/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java index 6376b03fb..61032600b 100644 --- a/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java +++ b/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java @@ -18,7 +18,7 @@ import javax.net.ssl.X509TrustManager; /** Example application using the {@link PushGateway}. */ -public class PushGatewayTestApp { +class PushGatewayTestApp { public static void main(String[] args) throws IOException { if (args.length != 1) { diff --git a/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java b/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java index 7e1198a55..cf11671f3 100644 --- a/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java +++ b/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java @@ -1,5 +1,9 @@ package io.prometheus.metrics.it.pushgateway; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; +import static org.assertj.core.data.Offset.offset; + import com.jayway.jsonpath.Criteria; import com.jayway.jsonpath.Filter; import com.jayway.jsonpath.JsonPath; @@ -10,10 +14,9 @@ import java.net.URISyntaxException; import java.util.concurrent.TimeUnit; import net.minidev.json.JSONArray; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.testcontainers.containers.BindMode; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.Network; @@ -27,7 +30,7 @@ public class PushGatewayIT { private GenericContainer prometheusContainer; private Volume sampleAppVolume; - @Before + @BeforeEach public void setUp() throws IOException, URISyntaxException { Network network = Network.newNetwork(); sampleAppVolume = Volume.create("it-pushgateway").copy("pushgateway-test-app.jar"); @@ -53,7 +56,7 @@ public void setUp() throws IOException, URISyntaxException { .withLogConsumer(LogConsumer.withPrefix("prometheus")); } - @After + @AfterEach public void tearDown() throws IOException { prometheusContainer.stop(); pushGatewayContainer.stop(); @@ -177,13 +180,13 @@ public void testProtobuf() throws IOException, InterruptedException { private void assertMetrics() throws IOException, InterruptedException { double value = getValue("my_batch_job_duration_seconds", "job", "pushgateway-test-app"); - Assert.assertEquals(0.5, value, 0.0); + assertThat(value).isCloseTo(0.5, offset(0.0)); value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "512"); - Assert.assertEquals(0.0, value, 0.0); + assertThat(value).isCloseTo(0.0, offset(0.0)); value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "1024"); - Assert.assertEquals(2.0, value, 0.0); + assertThat(value).isCloseTo(2.0, offset(0.0)); value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "+Inf"); - Assert.assertEquals(3.0, value, 0.0); + assertThat(value).isCloseTo(3.0, offset(0.0)); } private double getValue(String name, String... labels) throws IOException, InterruptedException { @@ -195,13 +198,13 @@ private double getValue(String name, String... labels) throws IOException, Inter JSONArray result = JsonPath.parse(scrapeResponseJson) .read("$.data.result" + Filter.filter(criteria) + ".value[1]"); - Assert.assertEquals(1, result.size()); - return Double.valueOf(result.get(0).toString()); + assertThat(result.size()).isOne(); + return Double.parseDouble(result.get(0).toString()); } private void assertNativeHistogram() throws IOException, InterruptedException { double count = getNativeHistogramCount("file_sizes_bytes", "pushgateway-test-app"); - Assert.assertEquals(3, count, 0.0); + assertThat(count).isCloseTo(3, offset(0.0)); } private double getNativeHistogramCount(String name, String job) @@ -211,7 +214,7 @@ private double getNativeHistogramCount(String name, String job) JSONArray result = JsonPath.parse(scrapeResponseJson) .read("$.data.result" + Filter.filter(criteria) + ".value[1]"); - return Double.valueOf(result.get(0).toString()); + return Double.parseDouble(result.get(0).toString()); } private String scrape(String query) throws IOException, InterruptedException { @@ -242,7 +245,7 @@ private String scrape(String query) throws IOException, InterruptedException { Thread.sleep(250); timeRemaining -= 250; } - Assert.fail("timeout while scraping " + url); + fail("timeout while scraping " + url); return null; } @@ -251,7 +254,7 @@ private void awaitTermination(GenericContainer container, long timeout, TimeU long waitTimeMillis = 0; while (container.isRunning()) { if (waitTimeMillis > unit.toMillis(timeout)) { - Assert.fail( + fail( container.getContainerName() + " did not terminate after " + timeout diff --git a/pom.xml b/pom.xml index f55a754c2..75f31709f 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,7 @@ UTF-8 --module-name-need-to-be-overriden-- + 5.11.2 @@ -87,6 +88,33 @@ + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + org.junit.jupiter + junit-jupiter-params + ${junit-jupiter.version} + test + + + org.mockito + mockito-core + 5.12.0 + test + + + org.assertj + assertj-core + 3.26.3 + test + + + diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index 2d1e95c88..94f2904cb 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -35,14 +35,4 @@ fabian@fstab.de - - - - - junit - junit - 4.13.2 - test - - diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java index 8d16eadb7..9da800c27 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java @@ -1,25 +1,25 @@ package io.prometheus.metrics.config; +import static org.assertj.core.api.Assertions.assertThat; + import java.util.Properties; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** Tests for {@link PrometheusPropertiesLoader}. */ -public class PrometheusPropertiesLoaderTests { +class PrometheusPropertiesLoaderTests { @Test public void propertiesShouldBeLoadedFromPropertiesFile() { PrometheusProperties prometheusProperties = PrometheusPropertiesLoader.load(); - Assert.assertEquals( - 11, - prometheusProperties.getDefaultMetricProperties().getHistogramClassicUpperBounds().size()); - Assert.assertEquals( - 4, - prometheusProperties - .getMetricProperties("http_duration_seconds") - .getHistogramClassicUpperBounds() - .size()); - Assert.assertTrue(prometheusProperties.getExporterProperties().getExemplarsOnAllMetricTypes()); + assertThat(prometheusProperties.getDefaultMetricProperties().getHistogramClassicUpperBounds()) + .hasSize(11); + assertThat( + prometheusProperties + .getMetricProperties("http_duration_seconds") + .getHistogramClassicUpperBounds()) + .hasSize(4); + assertThat(prometheusProperties.getExporterProperties().getExemplarsOnAllMetricTypes()) + .isTrue(); } @Test @@ -32,15 +32,14 @@ public void externalPropertiesShouldOverridePropertiesFile() { properties.setProperty("io.prometheus.exporter.exemplarsOnAllMetricTypes", "false"); PrometheusProperties prometheusProperties = PrometheusPropertiesLoader.load(properties); - Assert.assertEquals( - 2, - prometheusProperties.getDefaultMetricProperties().getHistogramClassicUpperBounds().size()); - Assert.assertEquals( - 3, - prometheusProperties - .getMetricProperties("http_duration_seconds") - .getHistogramClassicUpperBounds() - .size()); - Assert.assertFalse(prometheusProperties.getExporterProperties().getExemplarsOnAllMetricTypes()); + assertThat(prometheusProperties.getDefaultMetricProperties().getHistogramClassicUpperBounds()) + .hasSize(2); + assertThat( + prometheusProperties + .getMetricProperties("http_duration_seconds") + .getHistogramClassicUpperBounds()) + .hasSize(3); + assertThat(prometheusProperties.getExporterProperties().getExemplarsOnAllMetricTypes()) + .isFalse(); } } diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java index f9ef25a7a..cce7213a6 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java @@ -1,24 +1,20 @@ package io.prometheus.metrics.config; +import static org.assertj.core.api.Assertions.assertThat; + import java.io.IOException; import java.io.InputStream; import java.util.Properties; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class PrometheusPropertiesTest { +class PrometheusPropertiesTest { @Test public void testPrometheusConfig() { PrometheusProperties result = PrometheusProperties.get(); - Assert.assertEquals( - 11, result.getDefaultMetricProperties().getHistogramClassicUpperBounds().size()); - Assert.assertEquals( - 4, - result - .getMetricProperties("http_duration_seconds") - .getHistogramClassicUpperBounds() - .size()); + assertThat(result.getDefaultMetricProperties().getHistogramClassicUpperBounds()).hasSize(11); + assertThat(result.getMetricProperties("http_duration_seconds").getHistogramClassicUpperBounds()) + .hasSize(4); } @Test @@ -30,8 +26,8 @@ public void testEmptyUpperBounds() throws IOException { .getResourceAsStream("emptyUpperBounds.properties")) { properties.load(stream); } - Assert.assertEquals(1, properties.size()); + assertThat(properties).hasSize(1); MetricsProperties.load("io.prometheus.metrics", properties); - Assert.assertEquals(0, properties.size()); + assertThat(properties).isEmpty(); } } diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index fd3c9a04f..5afaac18a 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -66,11 +66,5 @@ 3.6.1 test - - junit - junit - 4.13.2 - test - diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java index 8c015f591..70755b938 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.core.datapoints; -public class TimerApiTest { +class TimerApiTest { // TODO: Port this from the simpleclient SimpleTimerTest } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java index 9d51ae17b..1572eb645 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java @@ -1,16 +1,17 @@ package io.prometheus.metrics.core.exemplars; +import static org.assertj.core.api.Assertions.assertThat; + import io.prometheus.metrics.core.util.Scheduler; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.Exemplars; import io.prometheus.metrics.model.snapshots.Label; import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class ExemplarSamplerTest { +class ExemplarSamplerTest { private final int tick = 10; // Time step in milliseconds. Make this larger if the test is flaky. private final int sampleInterval = 10 * tick; // do not change this @@ -60,12 +61,12 @@ public void testCustomExemplarsBuckets() throws Exception { private io.prometheus.metrics.tracer.common.SpanContext origContext; - @Before + @BeforeEach public void setUp() { origContext = SpanContextSupplier.getSpanContext(); } - @After + @AfterEach public void tearDown() { SpanContextSupplier.setSpanContext(origContext); } @@ -185,7 +186,7 @@ public void testDefaultExemplarsNoBuckets() throws Exception { private void assertExemplars(ExemplarSampler sampler, double... values) { Exemplars exemplars = sampler.collect(); - Assert.assertEquals(values.length, exemplars.size()); + assertThat(exemplars.size()).isEqualTo(values.length); for (double value : values) { boolean found = false; for (Exemplar exemplar : exemplars) { @@ -194,7 +195,7 @@ private void assertExemplars(ExemplarSampler sampler, double... values) { break; } } - Assert.assertTrue(value + " not found", found); + assertThat(found).as(value + " not found").isTrue(); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java index cc7005c77..6c89b48a5 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/SpanContextSupplierTest.java @@ -1,15 +1,18 @@ package io.prometheus.metrics.core.exemplars; import static io.prometheus.metrics.model.snapshots.Exemplar.TRACE_ID; +import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.metrics.config.ExemplarsProperties; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.Exemplars; import io.prometheus.metrics.tracer.common.SpanContext; import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; -import org.junit.*; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class SpanContextSupplierTest { +class SpanContextSupplierTest { public SpanContext makeSpanContext(String traceId, String spanId) { @@ -47,12 +50,12 @@ public void markCurrentSpanAsExemplar() {} null // histogram upper bounds ); - @Before + @BeforeEach public void setUp() { origSpanContext = SpanContextSupplier.getSpanContext(); } - @After + @AfterEach public void tearDown() { SpanContextSupplier.setSpanContext(origSpanContext); } @@ -71,9 +74,9 @@ public void testConstructorInjection() { SpanContextSupplier.setSpanContext(spanContextB); exemplarSampler.observe(1.0); Exemplars exemplars = exemplarSampler.collect(); - Assert.assertEquals(1, exemplars.size()); + assertThat(exemplars.size()).isOne(); Exemplar exemplar = exemplars.get(0); - Assert.assertEquals("A", exemplar.getLabels().get(TRACE_ID)); + assertThat(exemplar.getLabels().get(TRACE_ID)).isEqualTo("A"); } /** @@ -89,17 +92,17 @@ public void testUpdateSpanContext() throws InterruptedException { SpanContextSupplier.setSpanContext(spanContextB); exemplarSampler.observe(1.0); Exemplars exemplars = exemplarSampler.collect(); - Assert.assertEquals(1, exemplars.size()); + assertThat(exemplars.size()).isOne(); Exemplar exemplar = exemplars.get(0); - Assert.assertEquals("B", exemplar.getLabels().get(TRACE_ID)); + assertThat(exemplar.getLabels().get(TRACE_ID)).isEqualTo("B"); Thread.sleep(15); // more than the minimum retention period defined in config above. SpanContextSupplier.setSpanContext(spanContextA); exemplarSampler.observe(1.0); exemplars = exemplarSampler.collect(); - Assert.assertEquals(1, exemplars.size()); + assertThat(exemplars.size()).isOne(); exemplar = exemplars.get(0); - Assert.assertEquals("A", exemplar.getLabels().get(TRACE_ID)); + assertThat(exemplar.getLabels().get(TRACE_ID)).isEqualTo("A"); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java index 326b0a463..19f32f677 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CKMSQuantilesTest.java @@ -1,17 +1,17 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; +import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.metrics.CKMSQuantiles.Quantile; import java.util.*; import org.apache.commons.math3.distribution.NormalDistribution; import org.apache.commons.math3.random.JDKRandomGenerator; import org.apache.commons.math3.random.RandomGenerator; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class CKMSQuantilesTest { +class CKMSQuantilesTest { private final Quantile qMin = new Quantile(0.0, 0.00); private final Quantile q50 = new Quantile(0.5, 0.01); @@ -22,7 +22,7 @@ public class CKMSQuantilesTest { @Test public void testGetOnEmptyValues() { CKMSQuantiles ckms = new CKMSQuantiles(q50, q95, q99); - assertTrue(Double.isNaN(ckms.get(q95.quantile))); + assertThat(Double.isNaN(ckms.get(q95.quantile))).isTrue(); } @Test @@ -95,7 +95,7 @@ public void testGetWithAMillionElements() { ckms.insert(v); } validateResults(ckms); - assertTrue("sample size should be way below 1_000_000", ckms.samples.size() < 1000); + assertThat(ckms.samples).as("sample size should be way below 1_000_000").hasSizeLessThan(1000); } @Test @@ -108,7 +108,7 @@ public void testMin() { } validateResults(ckms); ckms.compress(); - assertEquals(2, ckms.samples.size()); + assertThat(ckms.samples).hasSize(2); } @Test @@ -121,7 +121,7 @@ public void testMax() { } validateResults(ckms); ckms.compress(); - assertEquals(2, ckms.samples.size()); + assertThat(ckms.samples).hasSize(2); } @Test @@ -134,7 +134,7 @@ public void testMinMax() { } validateResults(ckms); ckms.compress(); - assertEquals(2, ckms.samples.size()); + assertThat(ckms.samples).hasSize(2); } @Test @@ -146,7 +146,7 @@ public void testMinAndOthers() { ckms.insert(v); } validateResults(ckms); - assertTrue(ckms.samples.size() < 200); // should be a lot less than input.size() + assertThat(ckms.samples).hasSizeLessThan(200); // should be a lot less than input.size() } @Test @@ -158,7 +158,7 @@ public void testMaxAndOthers() { ckms.insert(v); } validateResults(ckms); - assertTrue(ckms.samples.size() < 200); // should be a lot less than input.size() + assertThat(ckms.samples).hasSizeLessThan(200); // should be a lot less than input.size() } @Test @@ -170,7 +170,7 @@ public void testMinMaxAndOthers() { ckms.insert(v); } validateResults(ckms); - assertTrue(ckms.samples.size() < 200); // should be a lot less than input.size() + assertThat(ckms.samples).hasSizeLessThan(200); // should be a lot less than input.size() } @Test @@ -183,7 +183,7 @@ public void testExactQuantile() { } validateResults(ckms); // With epsilon == 0 we need to keep all inputs in samples. - assertEquals(input.size(), ckms.samples.size()); + assertThat(ckms.samples).hasSameSizeAs(input); } @Test @@ -196,7 +196,7 @@ public void testExactAndOthers() { } validateResults(ckms); // With epsilon == 0 we need to keep all inputs in samples. - assertEquals(input.size(), ckms.samples.size()); + assertThat(ckms.samples).hasSameSizeAs(input); } @Test @@ -209,7 +209,7 @@ public void testExactAndMin() { } validateResults(ckms); // With epsilon == 0 we need to keep all inputs in samples. - assertEquals(input.size(), ckms.samples.size()); + assertThat(ckms.samples).hasSameSizeAs(input); } @Test @@ -260,15 +260,18 @@ public void testGetGaussian() { // ε-approximate quantiles relaxes the requirement // to finding an item with rank between (φ−ε)n and (φ+ε)n. - assertEquals(p10, ckms.get(0.1), errorBoundsNormalDistribution(0.1, 0.001, normalDistribution)); - assertEquals(mean, ckms.get(0.5), errorBoundsNormalDistribution(0.5, 0.01, normalDistribution)); - assertEquals(p90, ckms.get(0.9), errorBoundsNormalDistribution(0.9, 0.001, normalDistribution)); - assertEquals( - p95, ckms.get(0.95), errorBoundsNormalDistribution(0.95, 0.001, normalDistribution)); - assertEquals( - p99, ckms.get(0.99), errorBoundsNormalDistribution(0.99, 0.001, normalDistribution)); - - assertTrue("sample size should be below 1000", ckms.samples.size() < 1000); + assertThat(ckms.get(0.1)) + .isCloseTo(p10, offset(errorBoundsNormalDistribution(0.1, 0.001, normalDistribution))); + assertThat(ckms.get(0.5)) + .isCloseTo(mean, offset(errorBoundsNormalDistribution(0.5, 0.01, normalDistribution))); + assertThat(ckms.get(0.9)) + .isCloseTo(p90, offset(errorBoundsNormalDistribution(0.9, 0.001, normalDistribution))); + assertThat(ckms.get(0.95)) + .isCloseTo(p95, offset(errorBoundsNormalDistribution(0.95, 0.001, normalDistribution))); + assertThat(ckms.get(0.99)) + .isCloseTo(p99, offset(errorBoundsNormalDistribution(0.99, 0.001, normalDistribution))); + + assertThat(ckms.samples).as("sample size should be below 1000").hasSizeLessThan(1000); } double errorBoundsNormalDistribution(double p, double epsilon, NormalDistribution nd) { @@ -285,14 +288,14 @@ public void testIllegalArgumentException() { try { new Quantile(-1, 0); } catch (IllegalArgumentException e) { - assertEquals("Quantile must be between 0 and 1", e.getMessage()); + assertThat(e.getMessage()).isEqualTo("Quantile must be between 0 and 1"); } catch (Exception e) { fail("Wrong exception thrown" + e); } try { new Quantile(0.95, 2); } catch (IllegalArgumentException e) { - assertEquals("Epsilon must be between 0 and 1", e.getMessage()); + assertThat(e.getMessage()).isEqualTo("Epsilon must be between 0 and 1"); } catch (Exception e) { fail("Wrong exception thrown" + e); } @@ -314,14 +317,17 @@ private void validateSamples(CKMSQuantiles ckms) { for (CKMSQuantiles.Sample sample : ckms.samples) { String msg = "invalid sample " + sample + ": count=" + ckms.n + " r=" + r + " f(r)=" + ckms.f(r); - assertTrue(msg, sample.g + sample.delta <= ckms.f(r)); - assertTrue( - "Samples not ordered. Keep in mind that insertBatch() takes a sorted array as parameter.", - prev <= sample.value); + assertThat(sample.g + sample.delta).as(msg).isLessThanOrEqualTo(ckms.f(r)); + assertThat(prev) + .as( + "Samples not ordered. Keep in mind that insertBatch() takes a sorted array as parameter.") + .isLessThanOrEqualTo(sample.value); prev = sample.value; r += sample.g; } - assertEquals("the sum of all g's must be the total number of observations", r, ckms.n); + assertThat(ckms.n) + .as("the sum of all g's must be the total number of observations") + .isEqualTo(r); } /** @@ -365,7 +371,7 @@ private void validateResults(CKMSQuantiles ckms) { + ckms.n + "=" + (q.quantile * ckms.n); - assertTrue(errorMessage, ok); + assertThat(ok).as(errorMessage).isTrue(); } } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index 0c1408c56..087b230d2 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -1,16 +1,16 @@ package io.prometheus.metrics.core.metrics; import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.rules.ExpectedException.none; +import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.Exemplar; +import io.prometheus.metrics.model.snapshots.Label; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.Unit; import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; @@ -18,13 +18,11 @@ import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; import java.util.Arrays; import java.util.Iterator; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class CounterTest { +class CounterTest { private Counter noLabels; private Counter labels; @@ -32,9 +30,7 @@ public class CounterTest { private static final long exemplarMinAgeMillis = 100; private SpanContext origSpanContext; - @Rule public final ExpectedException thrown = none(); - - @Before + @BeforeEach public void setUp() throws NoSuchFieldException, IllegalAccessException { noLabels = Counter.builder().name("nolabels").build(); labels = @@ -46,7 +42,7 @@ public void setUp() throws NoSuchFieldException, IllegalAccessException { ExemplarSamplerConfigTestUtil.setMinRetentionPeriodMillis(labels, exemplarMinAgeMillis); } - @After + @AfterEach public void tearDown() { SpanContextSupplier.setSpanContext(origSpanContext); } @@ -72,38 +68,38 @@ private int getNumberOfLabels(Counter counter) { @Test public void testIncrement() { noLabels.inc(); - assertEquals(1.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(1.0, offset(.001)); noLabels.inc(2); - assertEquals(3.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(3.0, offset(.001)); noLabels.labelValues().inc(4); - assertEquals(7.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(7.0, offset(.001)); noLabels.labelValues().inc(); - assertEquals(8.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(8.0, offset(.001)); } @Test public void testNegativeIncrementFails() { - thrown.expect(IllegalArgumentException.class); - thrown.expectMessage("Negative increment -1 is illegal for Counter metrics."); - noLabels.inc(-1); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> noLabels.inc(-1)) + .withMessage("Negative increment -1 is illegal for Counter metrics."); } @Test public void testEmptyCountersHaveNoLabels() { - assertEquals(1, getNumberOfLabels(noLabels)); - assertEquals(0, getNumberOfLabels(labels)); + assertThat(getNumberOfLabels(noLabels)).isOne(); + assertThat(getNumberOfLabels(labels)).isZero(); } @Test public void testLabels() { - assertEquals(0, getNumberOfLabels(labels)); + assertThat(getNumberOfLabels(labels)).isZero(); labels.labelValues("a").inc(); - assertEquals(1, getNumberOfLabels(labels)); - assertEquals(1.0, getValue(labels, "l", "a"), .001); + assertThat(getNumberOfLabels(labels)).isOne(); + assertThat(getValue(labels, "l", "a")).isCloseTo(1.0, offset(.001)); labels.labelValues("b").inc(3); - assertEquals(2, getNumberOfLabels(labels)); - assertEquals(1.0, getValue(labels, "l", "a"), .001); - assertEquals(3.0, getValue(labels, "l", "b"), .001); + assertThat(getNumberOfLabels(labels)).isEqualTo(2); + assertThat(getValue(labels, "l", "a")).isCloseTo(1.0, offset(.001)); + assertThat(getValue(labels, "l", "b")).isCloseTo(3.0, offset(.001)); } @Test @@ -117,9 +113,9 @@ public void testTotalStrippedFromName() { }) { Counter counter = Counter.builder().name(name).unit(Unit.SECONDS).build(); Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(counter.collect()); - assertEquals( - "name: \"my_counter_seconds_total\" type: COUNTER metric { counter { value: 0.0 } }", - TextFormat.printer().shortDebugString(protobufData)); + assertThat(TextFormat.printer().shortDebugString(protobufData)) + .isEqualTo( + "name: \"my_counter_seconds_total\" type: COUNTER metric { counter { value: 0.0 } }"); } } @@ -137,29 +133,45 @@ public void testSnapshotComplete() { counter.labelValues("/", "200").inc(2); counter.labelValues("/", "500").inc(); CounterSnapshot snapshot = counter.collect(); - assertEquals("test_seconds", snapshot.getMetadata().getName()); - assertEquals("seconds", snapshot.getMetadata().getUnit().toString()); - assertEquals("help message", snapshot.getMetadata().getHelp()); - assertEquals(2, snapshot.getDataPoints().size()); + assertThat(snapshot.getMetadata().getName()).isEqualTo("test_seconds"); + assertThat(snapshot.getMetadata().getUnit()).hasToString("seconds"); + assertThat(snapshot.getMetadata().getHelp()).isEqualTo("help message"); + assertThat(snapshot.getDataPoints()).hasSize(2); Iterator iter = snapshot.getDataPoints().iterator(); // data is ordered by labels, so 200 comes before 500 CounterSnapshot.CounterDataPointSnapshot data = iter.next(); - assertEquals( - Labels.of( - "const1name", "const1value", "const2name", "const2value", "path", "/", "status", "200"), - data.getLabels()); - assertEquals(2, data.getValue(), 0.0001); - assertTrue(data.getCreatedTimestampMillis() >= before); - assertTrue(data.getCreatedTimestampMillis() <= System.currentTimeMillis()); + assertThat((Iterable) data.getLabels()) + .isEqualTo( + Labels.of( + "const1name", + "const1value", + "const2name", + "const2value", + "path", + "/", + "status", + "200")); + assertThat(data.getValue()).isCloseTo(2, offset(0.0001)); + assertThat(data.getCreatedTimestampMillis()) + .isGreaterThanOrEqualTo(before) + .isLessThanOrEqualTo(System.currentTimeMillis()); // 500 data = iter.next(); - assertEquals( - Labels.of( - "const1name", "const1value", "const2name", "const2value", "path", "/", "status", "500"), - data.getLabels()); - assertEquals(1, data.getValue(), 0.0001); - assertTrue(data.getCreatedTimestampMillis() >= before); - assertTrue(data.getCreatedTimestampMillis() <= System.currentTimeMillis()); + assertThat((Iterable) data.getLabels()) + .isEqualTo( + Labels.of( + "const1name", + "const1value", + "const2name", + "const2value", + "path", + "/", + "status", + "500")); + assertThat(data.getValue()).isCloseTo(1, offset(0.0001)); + assertThat(data.getCreatedTimestampMillis()) + .isGreaterThanOrEqualTo(before) + .isLessThanOrEqualTo(System.currentTimeMillis()); } @Test @@ -180,8 +192,8 @@ public void testIncWithExemplar() throws Exception { private void assertExemplar(Counter counter, double value, String... labels) { Exemplar exemplar = getData(counter).getExemplar(); - assertEquals(value, exemplar.getValue(), 0.0001); - assertEquals(Labels.of(labels), exemplar.getLabels()); + assertThat(exemplar.getValue()).isCloseTo(value, offset(0.0001)); + assertThat((Iterable) exemplar.getLabels()).isEqualTo(Labels.of(labels)); } @Test @@ -291,26 +303,32 @@ public void testExemplarSamplerDisabled() { .withoutExemplars() .build(); counter.incWithExemplar(3.0, Labels.of("a", "b")); - assertNull(getData(counter).getExemplar()); + assertThat(getData(counter).getExemplar()).isNull(); counter.inc(2.0); - assertNull(getData(counter).getExemplar()); + assertThat(getData(counter).getExemplar()).isNull(); } - @Test(expected = IllegalArgumentException.class) + @Test public void testConstLabelsFirst() { - Counter.builder() - .name("test_total") - .constLabels(Labels.of("const_a", "const_b")) - .labelNames("const.a") - .build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + Counter.builder() + .name("test_total") + .constLabels(Labels.of("const_a", "const_b")) + .labelNames("const.a") + .build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testConstLabelsSecond() { - Counter.builder() - .name("test_total") - .labelNames("const.a") - .constLabels(Labels.of("const_a", "const_b")) - .build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + Counter.builder() + .name("test_total") + .labelNames("const.a") + .constLabels(Labels.of("const_a", "const_b")) + .build()); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterWithCallbackTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterWithCallbackTest.java index e4af61bde..47c5f5c57 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterWithCallbackTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterWithCallbackTest.java @@ -1,14 +1,16 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class CounterWithCallbackTest { +class CounterWithCallbackTest { @Test public void testCounter() { @@ -23,20 +25,22 @@ public void testCounter() { .build(); CounterSnapshot snapshot = counter.collect(); - assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints().size()).isOne(); CounterSnapshot.CounterDataPointSnapshot datapoint = snapshot.getDataPoints().get(0); - assertEquals(value.doubleValue(), datapoint.getValue(), 0.1); - assertEquals(labelValues.size(), datapoint.getLabels().size()); + assertThat(datapoint.getValue()).isCloseTo(value.doubleValue(), offset(0.1)); + assertThat(datapoint.getLabels().size()).isEqualTo(labelValues.size()); value.incrementAndGet(); snapshot = counter.collect(); - assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints().size()).isOne(); datapoint = snapshot.getDataPoints().get(0); - assertEquals(value.doubleValue(), datapoint.getValue(), 0.1); + assertThat(datapoint.getValue()).isCloseTo(value.doubleValue(), offset(0.1)); } - @Test(expected = IllegalArgumentException.class) + @Test public void testCounterNoCallback() { - CounterWithCallback.builder().name("counter").labelNames("l1", "l2").build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> CounterWithCallback.builder().name("counter").labelNames("l1", "l2").build()); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java index 0443cc7bf..1e48d63c0 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.core.metrics; import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.datapoints.Timer; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; @@ -11,11 +11,11 @@ import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.tracer.common.SpanContext; import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class GaugeTest { +class GaugeTest { private static final long exemplarSampleIntervalMillis = 10; private static final long exemplarMinAgeMillis = 100; @@ -24,14 +24,14 @@ public class GaugeTest { private SpanContext origSpanContext; - @Before + @BeforeEach public void setUp() { noLabels = Gauge.builder().name("nolabels").build(); labels = Gauge.builder().name("labels").labelNames("l").build(); origSpanContext = SpanContextSupplier.getSpanContext(); } - @After + @AfterEach public void tearDown() { SpanContextSupplier.setSpanContext(origSpanContext); } @@ -50,33 +50,33 @@ private double getValue(Gauge gauge, String... labels) { @Test public void testIncrement() { noLabels.inc(); - assertEquals(1.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(1.0, offset(.001)); noLabels.inc(2); - assertEquals(3.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(3.0, offset(.001)); noLabels.inc(4); - assertEquals(7.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(7.0, offset(.001)); noLabels.inc(); - assertEquals(8.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(8.0, offset(.001)); } @Test public void testDecrement() { noLabels.dec(); - assertEquals(-1.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(-1.0, offset(.001)); noLabels.dec(2); - assertEquals(-3.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(-3.0, offset(.001)); noLabels.dec(4); - assertEquals(-7.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(-7.0, offset(.001)); noLabels.dec(); - assertEquals(-8.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(-8.0, offset(.001)); } @Test public void testSet() { noLabels.set(42); - assertEquals(42, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(42, offset(.001)); noLabels.set(7); - assertEquals(7.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(7.0, offset(.001)); } @Test @@ -84,21 +84,21 @@ public void testTimer() throws InterruptedException { try (Timer timer = noLabels.startTimer()) { Thread.sleep(12); } - assertEquals( - 0.012, getValue(noLabels), 0.005); // 5ms delta should be enough so this isn't flaky + assertThat(getValue(noLabels)) + .isCloseTo(0.012, offset(0.005)); // 5ms delta should be enough so this isn't flaky } @Test public void noLabelsDefaultZeroValue() { - assertEquals(0.0, getValue(noLabels), .001); + assertThat(getValue(noLabels)).isCloseTo(0.0, offset(.001)); } @Test public void testLabels() { labels.labelValues("a").inc(); labels.labelValues("b").inc(3); - assertEquals(1.0, getValue(labels, "l", "a"), .001); - assertEquals(3.0, getValue(labels, "l", "b"), .001); + assertThat(getValue(labels, "l", "a")).isCloseTo(1.0, offset(.001)); + assertThat(getValue(labels, "l", "b")).isCloseTo(3.0, offset(.001)); } @Test @@ -202,8 +202,8 @@ public void markCurrentSpanAsExemplar() {} public void testExemplarSamplerDisabled() { Gauge gauge = Gauge.builder().name("test").withoutExemplars().build(); gauge.setWithExemplar(3.0, Labels.of("a", "b")); - assertNull(getData(gauge).getExemplar()); + assertThat(getData(gauge).getExemplar()).isNull(); gauge.inc(2.0); - assertNull(getData(gauge).getExemplar()); + assertThat(getData(gauge).getExemplar()).isNull(); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeWithCallbackTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeWithCallbackTest.java index 3a6a4ffac..92a2d605e 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeWithCallbackTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeWithCallbackTest.java @@ -1,14 +1,16 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class GaugeWithCallbackTest { +class GaugeWithCallbackTest { @Test public void testGauge() { @@ -23,20 +25,21 @@ public void testGauge() { .build(); GaugeSnapshot snapshot = gauge.collect(); - assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints().size()).isOne(); GaugeSnapshot.GaugeDataPointSnapshot datapoint = snapshot.getDataPoints().get(0); - assertEquals(value.doubleValue(), datapoint.getValue(), 0.1); - assertEquals(labelValues.size(), datapoint.getLabels().size()); + assertThat(datapoint.getValue()).isCloseTo(value.doubleValue(), offset(0.1)); + assertThat(datapoint.getLabels().size()).isEqualTo(labelValues.size()); value.incrementAndGet(); snapshot = gauge.collect(); - assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints().size()).isOne(); datapoint = snapshot.getDataPoints().get(0); - assertEquals(value.doubleValue(), datapoint.getValue(), 0.1); + assertThat(datapoint.getValue()).isCloseTo(value.doubleValue(), offset(0.1)); } - @Test(expected = IllegalArgumentException.class) + @Test public void testGaugeNoCallback() { - GaugeWithCallback.builder().name("gauge").labelNames("l1", "l2").build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> GaugeWithCallback.builder().name("gauge").labelNames("l1", "l2").build()); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index 0b9f90260..1eb1121ad 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -1,10 +1,9 @@ package io.prometheus.metrics.core.metrics; import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.datapoints.DistributionDataPoint; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; @@ -41,11 +40,11 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class HistogramTest { +class HistogramTest { private static final double RESET_DURATION_REACHED = -123.456; // just a random value indicating that we should simulate that the reset duration @@ -53,12 +52,12 @@ public class HistogramTest { private SpanContext origSpanContext; - @Before + @BeforeEach public void setUp() { origSpanContext = SpanContextSupplier.getSpanContext(); } - @After + @AfterEach public void tearDown() { SpanContextSupplier.setSpanContext(origSpanContext); } @@ -93,10 +92,9 @@ private void run() throws NoSuchFieldException, IllegalAccessException { new PrometheusProtobufWriter().convert(histogram.collect()); String expectedWithMetadata = "name: \"test\" type: HISTOGRAM metric { histogram { " + expected + " } }"; - assertEquals( - "test \"" + name + "\" failed", - expectedWithMetadata, - TextFormat.printer().shortDebugString(protobufData)); + assertThat(TextFormat.printer().shortDebugString(protobufData)) + .as("test \"" + name + "\" failed") + .isEqualTo(expectedWithMetadata); } } @@ -829,11 +827,9 @@ public void testNativeBucketIndexToUpperBound() Histogram.builder().name("test").nativeInitialSchema(schemas[i]).build(); Histogram.DataPoint histogramData = histogram.newDataPoint(); double result = (double) method.invoke(histogramData, schemas[i], indexes[i]); - assertEquals( - "index=" + indexes[i] + ", schema=" + schemas[i], - expectedUpperBounds[i], - result, - 0.0000000000001); + assertThat(result) + .as("index=" + indexes[i] + ", schema=" + schemas[i]) + .isCloseTo(expectedUpperBounds[i], offset(0.0000000000001)); } } @@ -867,19 +863,20 @@ public void testFindBucketIndex() (double) nativeBucketIndexToUpperBound.invoke( histogram.getNoLabels(), schema, bucketIndex); - assertTrue( - "Bucket index " - + bucketIndex - + " with schema " - + schema - + " has range [" - + lowerBound - + ", " - + upperBound - + "]. Value " - + value - + " is outside of that range.", - lowerBound < value && upperBound >= value); + assertThat(lowerBound < value && upperBound >= value) + .as( + "Bucket index " + + bucketIndex + + " with schema " + + schema + + " has range [" + + lowerBound + + ", " + + upperBound + + "]. Value " + + value + + " is outside of that range.") + .isTrue(); } } } @@ -891,8 +888,7 @@ public void testDefaults() throws IOException { histogram.observe(0.5); HistogramSnapshot snapshot = histogram.collect(); String expectedProtobuf = - "" - + "name: \"test\" " + "name: \"test\" " + "type: HISTOGRAM " + "metric { " + "histogram { " @@ -925,9 +921,8 @@ public void testDefaults() throws IOException { + "positive_delta: 1 " + "} }"; String expectedTextFormat = - "" - // default classic buckets - + "# TYPE test histogram\n" + // default classic buckets + "# TYPE test histogram\n" + "test_bucket{le=\"0.005\"} 0\n" + "test_bucket{le=\"0.01\"} 0\n" + "test_bucket{le=\"0.025\"} 0\n" @@ -946,13 +941,13 @@ public void testDefaults() throws IOException { // protobuf Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(snapshot); - assertEquals(expectedProtobuf, TextFormat.printer().shortDebugString(protobufData)); + assertThat(TextFormat.printer().shortDebugString(protobufData)).isEqualTo(expectedProtobuf); // text ByteArrayOutputStream out = new ByteArrayOutputStream(); OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, true); writer.write(out, MetricSnapshots.of(snapshot)); - assertEquals(expectedTextFormat, out.toString()); + assertThat(out).hasToString(expectedTextFormat); } @Test @@ -1012,14 +1007,14 @@ public void markCurrentSpanAsExemplar() {} HistogramSnapshot snapshot = histogram.collect(); assertExemplarEquals(ex1a, getExemplar(snapshot, 1.0, "path", "/hello")); assertExemplarEquals(ex1b, getExemplar(snapshot, 1.0, "path", "/world")); - assertNull(getExemplar(snapshot, 2.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 2.0, "path", "/world")); - assertNull(getExemplar(snapshot, 3.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 3.0, "path", "/world")); - assertNull(getExemplar(snapshot, 4.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 4.0, "path", "/world")); - assertNull(getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/hello")); - assertNull(getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/world")); + assertThat(getExemplar(snapshot, 2.0, "path", "/hello")).isNull(); + assertThat(getExemplar(snapshot, 2.0, "path", "/world")).isNull(); + assertThat(getExemplar(snapshot, 3.0, "path", "/hello")).isNull(); + assertThat(getExemplar(snapshot, 3.0, "path", "/world")).isNull(); + assertThat(getExemplar(snapshot, 4.0, "path", "/hello")).isNull(); + assertThat(getExemplar(snapshot, 4.0, "path", "/world")).isNull(); + assertThat(getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/hello")).isNull(); + assertThat(getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/world")).isNull(); Thread.sleep(sampleIntervalMillis + 1); histogram.labelValues("/hello").observe(4.5); @@ -1028,12 +1023,12 @@ public void markCurrentSpanAsExemplar() {} snapshot = histogram.collect(); assertExemplarEquals(ex1a, getExemplar(snapshot, 1.0, "path", "/hello")); assertExemplarEquals(ex1b, getExemplar(snapshot, 1.0, "path", "/world")); - assertNull(getExemplar(snapshot, 2.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 2.0, "path", "/world")); - assertNull(getExemplar(snapshot, 3.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 3.0, "path", "/world")); - assertNull(getExemplar(snapshot, 4.0, "path", "/hello")); - assertNull(getExemplar(snapshot, 4.0, "path", "/world")); + assertThat(getExemplar(snapshot, 2.0, "path", "/hello")).isNull(); + assertThat(getExemplar(snapshot, 2.0, "path", "/world")).isNull(); + assertThat(getExemplar(snapshot, 3.0, "path", "/hello")).isNull(); + assertThat(getExemplar(snapshot, 3.0, "path", "/world")).isNull(); + assertThat(getExemplar(snapshot, 4.0, "path", "/hello")).isNull(); + assertThat(getExemplar(snapshot, 4.0, "path", "/world")).isNull(); assertExemplarEquals(ex2a, getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/hello")); assertExemplarEquals(ex2b, getExemplar(snapshot, Double.POSITIVE_INFINITY, "path", "/world")); @@ -1154,12 +1149,16 @@ private void assertExemplar(Histogram histogram, double value, String... labels) } } Exemplar exemplar = data.getExemplars().get(lowerBound, upperBound); - assertNotNull("No exemplar found in bucket [" + lowerBound + ", " + upperBound + "]", exemplar); - assertEquals(value, exemplar.getValue(), 0.0); - assertEquals("" + exemplar.getLabels(), labels.length / 2, exemplar.getLabels().size()); + assertThat(exemplar) + .as("No exemplar found in bucket [" + lowerBound + ", " + upperBound + "]") + .isNotNull(); + assertThat(exemplar.getValue()).isCloseTo(value, offset(0.0)); + assertThat(exemplar.getLabels().size()) + .as("" + exemplar.getLabels()) + .isEqualTo(labels.length / 2); for (int i = 0; i < labels.length; i += 2) { - assertEquals(labels[i], exemplar.getLabels().getName(i / 2)); - assertEquals(labels[i + 1], exemplar.getLabels().getValue(i / 2)); + assertThat(exemplar.getLabels().getName(i / 2)).isEqualTo(labels[i]); + assertThat(exemplar.getLabels().getValue(i / 2)).isEqualTo(labels[i + 1]); } } @@ -1207,59 +1206,69 @@ public void markCurrentSpanAsExemplar() {} histogram.labelValues("/hello").observe(3.11); histogram.labelValues("/world").observe(3.12); - assertEquals(1, getData(histogram, "path", "/hello").getExemplars().size()); + assertThat(getData(histogram, "path", "/hello").getExemplars().size()).isOne(); assertExemplarEquals( ex1, getData(histogram, "path", "/hello").getExemplars().iterator().next()); - assertEquals(1, getData(histogram, "path", "/world").getExemplars().size()); + assertThat(getData(histogram, "path", "/world").getExemplars().size()).isOne(); assertExemplarEquals( ex2, getData(histogram, "path", "/world").getExemplars().iterator().next()); histogram .labelValues("/world") .observeWithExemplar(3.13, Labels.of("key1", "value1", "key2", "value2")); - assertEquals(1, getData(histogram, "path", "/hello").getExemplars().size()); + assertThat(getData(histogram, "path", "/hello").getExemplars().size()).isOne(); assertExemplarEquals( ex1, getData(histogram, "path", "/hello").getExemplars().iterator().next()); - assertEquals(2, getData(histogram, "path", "/world").getExemplars().size()); + assertThat(getData(histogram, "path", "/world").getExemplars().size()).isEqualTo(2); Exemplars exemplars = getData(histogram, "path", "/world").getExemplars(); List exemplarList = new ArrayList<>(exemplars.size()); for (Exemplar exemplar : exemplars) { exemplarList.add(exemplar); } exemplarList.sort(Comparator.comparingDouble(Exemplar::getValue)); - assertEquals(2, exemplars.size()); + assertThat(exemplars.size()).isEqualTo(2); assertExemplarEquals(ex2, exemplarList.get(0)); assertExemplarEquals(ex3, exemplarList.get(1)); } - @Test(expected = IllegalArgumentException.class) + @Test public void testIllegalLabelName() { - Histogram.builder().name("test").labelNames("label", "le"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Histogram.builder().name("test").labelNames("label", "le")); } - @Test(expected = IllegalArgumentException.class) + @Test public void testIllegalLabelNameConstLabels() { - Histogram.builder().name("test").constLabels(Labels.of("label1", "value1", "le", "0.3")); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + Histogram.builder() + .name("test") + .constLabels(Labels.of("label1", "value1", "le", "0.3"))); } - @Test(expected = IllegalArgumentException.class) + @Test public void testIllegalLabelNamePrefix() { - Histogram.builder().name("test").labelNames("__hello"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Histogram.builder().name("test").labelNames("__hello")); } - @Test(expected = IllegalArgumentException.class) + @Test public void testIllegalName() { - Histogram.builder().name("my_namespace/server.durations"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Histogram.builder().name("my_namespace/server.durations")); } - @Test(expected = IllegalArgumentException.class) + @Test public void testNoName() { - Histogram.builder().build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Histogram.builder().build()); } - @Test(expected = NullPointerException.class) + @Test public void testNullName() { - Histogram.builder().name(null); + assertThatExceptionOfType(NullPointerException.class) + .isThrownBy(() -> Histogram.builder().name(null)); } @Test @@ -1270,7 +1279,8 @@ public void testDuplicateClassicBuckets() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - assertEquals(Arrays.asList(0.0, 3.0, 17.0, 21.0, Double.POSITIVE_INFINITY), upperBounds); + assertThat(upperBounds) + .isEqualTo(Arrays.asList(0.0, 3.0, 17.0, 21.0, Double.POSITIVE_INFINITY)); } @Test @@ -1280,7 +1290,7 @@ public void testUnsortedBuckets() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - assertEquals(Arrays.asList(0.1, 0.2, Double.POSITIVE_INFINITY), upperBounds); + assertThat(upperBounds).isEqualTo(Arrays.asList(0.1, 0.2, Double.POSITIVE_INFINITY)); } @Test @@ -1290,7 +1300,7 @@ public void testEmptyBuckets() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - assertEquals(Collections.singletonList(Double.POSITIVE_INFINITY), upperBounds); + assertThat(upperBounds).isEqualTo(Collections.singletonList(Double.POSITIVE_INFINITY)); } @Test @@ -1304,7 +1314,7 @@ public void testBucketsIncludePositiveInfinity() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - assertEquals(Arrays.asList(0.01, 0.1, 1.0, Double.POSITIVE_INFINITY), upperBounds); + assertThat(upperBounds).isEqualTo(Arrays.asList(0.01, 0.1, 1.0, Double.POSITIVE_INFINITY)); } @Test @@ -1315,9 +1325,10 @@ public void testLinearBuckets() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - assertEquals( - Arrays.asList(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, Double.POSITIVE_INFINITY), - upperBounds); + assertThat(upperBounds) + .isEqualTo( + Arrays.asList( + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, Double.POSITIVE_INFINITY)); } @Test @@ -1328,20 +1339,22 @@ public void testExponentialBuckets() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getUpperBound) .collect(Collectors.toList()); - assertEquals(Arrays.asList(2.0, 5.0, 12.5, Double.POSITIVE_INFINITY), upperBounds); + assertThat(upperBounds).isEqualTo(Arrays.asList(2.0, 5.0, 12.5, Double.POSITIVE_INFINITY)); } - @Test(expected = RuntimeException.class) + @Test public void testBucketsIncludeNaN() { - Histogram.builder().name("test").classicUpperBounds(0.01, 0.1, 1.0, Double.NaN); + assertThatExceptionOfType(RuntimeException.class) + .isThrownBy( + () -> Histogram.builder().name("test").classicUpperBounds(0.01, 0.1, 1.0, Double.NaN)); } @Test public void testNoLabelsDefaultZeroValue() { Histogram noLabels = Histogram.builder().name("test").build(); - assertEquals(0.0, getBucket(noLabels, 0.005).getCount(), 0.0); - assertEquals(0, getData(noLabels).getCount()); - assertEquals(0.0, getData(noLabels).getSum(), 0.0); + assertThat(getBucket(noLabels, 0.005).getCount()).isZero(); + assertThat(getData(noLabels).getCount()).isZero(); + assertThat(getData(noLabels).getSum()).isCloseTo(0.0, offset(0.0)); } private ClassicHistogramBucket getBucket(Histogram histogram, double le, String... labels) { @@ -1355,18 +1368,18 @@ private ClassicHistogramBucket getBucket(Histogram histogram, double le, String. public void testObserve() { Histogram noLabels = Histogram.builder().name("test").build(); noLabels.observe(2); - assertEquals(1, getData(noLabels).getCount()); - assertEquals(2.0, getData(noLabels).getSum(), .0); - assertEquals(0.0, getBucket(noLabels, 1).getCount(), .0); - assertEquals(1.0, getBucket(noLabels, 2.5).getCount(), .0); + assertThat(getData(noLabels).getCount()).isOne(); + assertThat(getData(noLabels).getSum()).isCloseTo(2.0, offset(.0)); + assertThat(getBucket(noLabels, 1).getCount()).isZero(); + assertThat(getBucket(noLabels, 2.5).getCount()).isOne(); noLabels.observe(4); - assertEquals(2.0, getData(noLabels).getCount(), .0); - assertEquals(6.0, getData(noLabels).getSum(), .0); - assertEquals(0.0, getBucket(noLabels, 1).getCount(), .0); - assertEquals(1.0, getBucket(noLabels, 2.5).getCount(), .0); - assertEquals(1.0, getBucket(noLabels, 5).getCount(), .0); - assertEquals(0.0, getBucket(noLabels, 10).getCount(), .0); - assertEquals(0.0, getBucket(noLabels, Double.POSITIVE_INFINITY).getCount(), .0); + assertThat(getData(noLabels).getCount()).isEqualTo(2); + assertThat(getData(noLabels).getSum()).isCloseTo(6.0, offset(.0)); + assertThat(getBucket(noLabels, 1).getCount()).isZero(); + assertThat(getBucket(noLabels, 2.5).getCount()).isOne(); + assertThat(getBucket(noLabels, 5).getCount()).isOne(); + assertThat(getBucket(noLabels, 10).getCount()).isZero(); + assertThat(getBucket(noLabels, Double.POSITIVE_INFINITY).getCount()).isZero(); } @Test @@ -1384,8 +1397,8 @@ public void testNegativeAmount() { histogram.observe(i); expectedCount++; expectedSum += i; - assertEquals(expectedSum, getData(histogram).getSum(), .001); - assertEquals(expectedCount, getData(histogram).getCount(), .001); + assertThat(getData(histogram).getSum()).isCloseTo(expectedSum, offset(.001)); + assertThat(getData(histogram).getCount()).isEqualTo((long) expectedCount); } List expectedBucketCounts = Arrays.asList(2L, 5L, 5L, 5L, 5L, 0L); // buckets -10, -5, 0, 5, 10, +Inf @@ -1393,22 +1406,22 @@ public void testNegativeAmount() { getData(histogram).getClassicBuckets().stream() .map(ClassicHistogramBucket::getCount) .collect(Collectors.toList()); - assertEquals(expectedBucketCounts, actualBucketCounts); + assertThat(actualBucketCounts).isEqualTo(expectedBucketCounts); } @Test public void testBoundaryConditions() { Histogram histogram = Histogram.builder().name("test").build(); histogram.observe(2.5); - assertEquals(0, getBucket(histogram, 1).getCount()); - assertEquals(1, getBucket(histogram, 2.5).getCount()); + assertThat(getBucket(histogram, 1).getCount()).isZero(); + assertThat(getBucket(histogram, 2.5).getCount()).isOne(); histogram.observe(Double.POSITIVE_INFINITY); - assertEquals(0, getBucket(histogram, 1).getCount()); - assertEquals(1, getBucket(histogram, 2.5).getCount()); - assertEquals(0, getBucket(histogram, 5).getCount()); - assertEquals(0, getBucket(histogram, 10).getCount()); - assertEquals(1, getBucket(histogram, Double.POSITIVE_INFINITY).getCount()); + assertThat(getBucket(histogram, 1).getCount()).isZero(); + assertThat(getBucket(histogram, 2.5).getCount()).isOne(); + assertThat(getBucket(histogram, 5).getCount()).isZero(); + assertThat(getBucket(histogram, 10).getCount()).isZero(); + assertThat(getBucket(histogram, Double.POSITIVE_INFINITY).getCount()).isOne(); } @Test @@ -1426,17 +1439,17 @@ public void testObserveWithLabels() { getData(histogram, "env", "prod", "path", "/hello", "status", "200"); HistogramSnapshot.HistogramDataPointSnapshot data500 = getData(histogram, "env", "prod", "path", "/hello", "status", "500"); - assertEquals(2, data200.getCount()); - assertEquals(0.31, data200.getSum(), 0.0000001); - assertEquals(1, data500.getCount()); - assertEquals(0.19, data500.getSum(), 0.0000001); + assertThat(data200.getCount()).isEqualTo(2); + assertThat(data200.getSum()).isCloseTo(0.31, offset(0.0000001)); + assertThat(data500.getCount()).isOne(); + assertThat(data500.getSum()).isCloseTo(0.19, offset(0.0000001)); histogram.labelValues("/hello", "200").observe(0.13); data200 = getData(histogram, "env", "prod", "path", "/hello", "status", "200"); data500 = getData(histogram, "env", "prod", "path", "/hello", "status", "500"); - assertEquals(3, data200.getCount()); - assertEquals(0.44, data200.getSum(), 0.0000001); - assertEquals(1, data500.getCount()); - assertEquals(0.19, data500.getSum(), 0.0000001); + assertThat(data200.getCount()).isEqualTo(3); + assertThat(data200.getSum()).isCloseTo(0.44, offset(0.0000001)); + assertThat(data500.getCount()).isOne(); + assertThat(data500.getSum()).isCloseTo(0.19, offset(0.0000001)); } @Test @@ -1472,22 +1485,23 @@ public void testObserveMultithreaded() List snapshots = future.get(5, TimeUnit.SECONDS); long count = 0; for (HistogramSnapshot snapshot : snapshots) { - assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints().size()).isOne(); HistogramSnapshot.HistogramDataPointSnapshot data = snapshot.getDataPoints().stream().findFirst().orElseThrow(RuntimeException::new); - assertTrue( - data.getCount() - >= (count + 1000)); // 1000 own observations plus the ones from other threads + assertThat(data.getCount()) + .isGreaterThanOrEqualTo( + (count + 1000)); // 1000 own observations plus the ones from other threads count = data.getCount(); } if (count > maxCount) { maxCount = count; } } - assertEquals(nThreads * 10_000, maxCount); // the last collect() has seen all observations - assertEquals(getBucket(histogram, 2.5, "status", "200").getCount(), nThreads * 10_000); + assertThat(maxCount) + .isEqualTo(nThreads * 10_000); // the last collect() has seen all observations + assertThat(nThreads * 10_000).isEqualTo(getBucket(histogram, 2.5, "status", "200").getCount()); executor.shutdown(); - assertTrue(executor.awaitTermination(5, TimeUnit.SECONDS)); + assertThat(executor.awaitTermination(5, TimeUnit.SECONDS)).isTrue(); } private HistogramSnapshot.HistogramDataPointSnapshot getData( @@ -1495,9 +1509,6 @@ private HistogramSnapshot.HistogramDataPointSnapshot getData( return histogram.collect().getDataPoints().stream() .filter(d -> d.getLabels().equals(Labels.of(labels))) .findAny() - .orElseThrow( - () -> - new RuntimeException( - "histogram with labels " + Arrays.toString(labels) + " not found")); + .orElseThrow(() -> new RuntimeException("histogram with labels " + labels + " not found")); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index e527a3340..efdf211bb 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -1,6 +1,7 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; @@ -11,9 +12,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class InfoTest { +class InfoTest { @Test public void testInfoStrippedFromName() { @@ -26,9 +27,9 @@ public void testInfoStrippedFromName() { Info info = Info.builder().name(name).labelNames(labelName).build(); info.addLabelValues("value"); Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(info.collect()); - assertEquals( - "name: \"jvm_runtime_info\" type: GAUGE metric { label { name: \"my_key\" value: \"value\" } gauge { value: 1.0 } }", - TextFormat.printer().shortDebugString(protobufData)); + assertThat(TextFormat.printer().shortDebugString(protobufData)) + .isEqualTo( + "name: \"jvm_runtime_info\" type: GAUGE metric { label { name: \"my_key\" value: \"value\" } gauge { value: 1.0 } }"); } } } @@ -36,19 +37,19 @@ public void testInfoStrippedFromName() { @Test public void testAddAndRemove() { Info info = Info.builder().name("test_info").labelNames("a", "b").build(); - assertEquals(0, info.collect().getDataPoints().size()); + assertThat(info.collect().getDataPoints()).isEmpty(); info.addLabelValues("val1", "val2"); - assertEquals(1, info.collect().getDataPoints().size()); + assertThat(info.collect().getDataPoints()).hasSize(1); info.addLabelValues("val1", "val2"); // already exist, so no change - assertEquals(1, info.collect().getDataPoints().size()); + assertThat(info.collect().getDataPoints()).hasSize(1); info.addLabelValues("val2", "val2"); - assertEquals(2, info.collect().getDataPoints().size()); + assertThat(info.collect().getDataPoints()).hasSize(2); info.remove("val1", "val3"); // does not exist, so no change - assertEquals(2, info.collect().getDataPoints().size()); + assertThat(info.collect().getDataPoints()).hasSize(2); info.remove("val1", "val2"); - assertEquals(1, info.collect().getDataPoints().size()); + assertThat(info.collect().getDataPoints()).hasSize(1); info.remove("val2", "val2"); - assertEquals(0, info.collect().getDataPoints().size()); + assertThat(info.collect().getDataPoints()).isEmpty(); } @Test @@ -60,9 +61,9 @@ public void testSet() throws IOException { .labelNames("service.version") .build(); info.setLabelValues("1.0.0"); - assertEquals(1, info.collect().getDataPoints().size()); + assertThat(info.collect().getDataPoints()).hasSize(1); info.setLabelValues("2.0.0"); - assertEquals(1, info.collect().getDataPoints().size()); + assertThat(info.collect().getDataPoints()).hasSize(1); assertTextFormat( "target_info{service_instance_id=\"123\",service_name=\"test\",service_version=\"2.0.0\"} 1\n", info); @@ -75,18 +76,22 @@ public void testConstLabelsOnly() throws IOException { .name("target_info") .constLabels(Labels.of("service.name", "test", "service.instance.id", "123")) .build(); - assertEquals(1, info.collect().getDataPoints().size()); + assertThat(info.collect().getDataPoints()).hasSize(1); assertTextFormat("target_info{service_instance_id=\"123\",service_name=\"test\"} 1\n", info); } - @Test(expected = IllegalArgumentException.class) + @Test public void testConstLabelsDuplicate1() { - Info.builder().constLabels(Labels.of("a_1", "val1")).labelNames("a.1").build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> Info.builder().constLabels(Labels.of("a_1", "val1")).labelNames("a.1").build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testConstLabelsDuplicate2() { - Info.builder().labelNames("a_1").constLabels(Labels.of("a.1", "val1")).build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> Info.builder().labelNames("a_1").constLabels(Labels.of("a.1", "val1")).build()); } private void assertTextFormat(String expected, Info info) throws IOException { diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java index 54639e7b6..334724a81 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java @@ -1,14 +1,14 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicLong; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class SlidingWindowTest { +class SlidingWindowTest { class Observer { @@ -19,19 +19,19 @@ public void observe(double value) { } void assertValues(double... expectedValues) { - List expectedList = new ArrayList<>(); + ArrayList expectedList = new ArrayList<>(); for (double expectedValue : expectedValues) { expectedList.add(expectedValue); } - assertEquals( - "Start time: " - + startTime - + ", current time: " - + currentTimeMillis.get() - + ", elapsed time: " - + (currentTimeMillis.get() - startTime), - expectedList, - values); + assertThat(values) + .as( + "Start time: " + + startTime + + ", current time: " + + currentTimeMillis.get() + + ", elapsed time: " + + (currentTimeMillis.get() - startTime)) + .isEqualTo(expectedList); } } @@ -42,7 +42,7 @@ void assertValues(double... expectedValues) { private final int ageBuckets = 5; private final long timeBetweenRotateMillis = maxAgeSeconds * 1000 / ageBuckets + 2; - @Before + @BeforeEach public void setUp() { startTime = System.currentTimeMillis(); currentTimeMillis.set(startTime); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java index ddb2c4e9b..a419e876c 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java @@ -1,16 +1,14 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.StateSetSnapshot; import java.util.Arrays; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class StateSetTest { +class StateSetTest { enum MyFeatureFlag { EXPERIMENTAL_FEATURE_1 { @@ -39,30 +37,30 @@ public void testEnumStateSet() { stateSet.labelValues("dev").setTrue(MyFeatureFlag.EXPERIMENTAL_FEATURE_2); stateSet.labelValues("prod").setFalse(MyFeatureFlag.EXPERIMENTAL_FEATURE_2); StateSetSnapshot snapshot = stateSet.collect(); - assertEquals(2, snapshot.getDataPoints().size()); - assertEquals(2, getData(stateSet, "environment", "dev").size()); - assertEquals("feature1", getData(stateSet, "environment", "dev").getName(0)); - assertFalse(getData(stateSet, "environment", "dev").isTrue(0)); - assertEquals("feature2", getData(stateSet, "environment", "dev").getName(1)); - assertTrue(getData(stateSet, "environment", "dev").isTrue(1)); - assertEquals(2, getData(stateSet, "environment", "prod").size()); - assertEquals("feature1", getData(stateSet, "environment", "prod").getName(0)); - Assert.assertFalse(getData(stateSet, "environment", "prod").isTrue(0)); - assertEquals("feature2", getData(stateSet, "environment", "prod").getName(1)); - Assert.assertFalse(getData(stateSet, "environment", "prod").isTrue(1)); + assertThat(snapshot.getDataPoints()).hasSize(2); + assertThat(getData(stateSet, "environment", "dev").size()).isEqualTo(2); + assertThat(getData(stateSet, "environment", "dev").getName(0)).isEqualTo("feature1"); + assertThat(getData(stateSet, "environment", "dev").isTrue(0)).isFalse(); + assertThat(getData(stateSet, "environment", "dev").getName(1)).isEqualTo("feature2"); + assertThat(getData(stateSet, "environment", "dev").isTrue(1)).isTrue(); + assertThat(getData(stateSet, "environment", "prod").size()).isEqualTo(2); + assertThat(getData(stateSet, "environment", "prod").getName(0)).isEqualTo("feature1"); + assertThat(getData(stateSet, "environment", "prod").isTrue(0)).isFalse(); + assertThat(getData(stateSet, "environment", "prod").getName(1)).isEqualTo("feature2"); + assertThat(getData(stateSet, "environment", "prod").isTrue(1)).isFalse(); } @Test public void testDefaultFalse() { StateSet stateSet = StateSet.builder().name("test").states("state1", "state2", "state3").build(); - assertEquals(3, getData(stateSet).size()); - assertEquals("state1", getData(stateSet).getName(0)); - Assert.assertFalse(getData(stateSet).isTrue(0)); - assertEquals("state2", getData(stateSet).getName(1)); - Assert.assertFalse(getData(stateSet).isTrue(1)); - assertEquals("state3", getData(stateSet).getName(2)); - Assert.assertFalse(getData(stateSet).isTrue(2)); + assertThat(getData(stateSet).size()).isEqualTo(3); + assertThat(getData(stateSet).getName(0)).isEqualTo("state1"); + assertThat(getData(stateSet).isTrue(0)).isFalse(); + assertThat(getData(stateSet).getName(1)).isEqualTo("state2"); + assertThat(getData(stateSet).isTrue(1)).isFalse(); + assertThat(getData(stateSet).getName(2)).isEqualTo("state3"); + assertThat(getData(stateSet).isTrue(2)).isFalse(); } private StateSetSnapshot.StateSetDataPointSnapshot getData(StateSet stateSet, String... labels) { @@ -75,8 +73,9 @@ private StateSetSnapshot.StateSetDataPointSnapshot getData(StateSet stateSet, St "stateset with labels " + Arrays.toString(labels) + " not found")); } - @Test(expected = IllegalStateException.class) + @Test public void testStatesCannotBeEmpty() { - StateSet.builder().name("invalid").build(); + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> StateSet.builder().name("invalid").build()); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java index a3ddbcc84..d05cf145a 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java @@ -1,13 +1,13 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; import java.lang.reflect.Field; import java.util.Map; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class StatefulMetricTest { +class StatefulMetricTest { @Test public void testLabelRemoveWhileCollecting() throws Exception { @@ -30,8 +30,8 @@ public void testLabelRemoveWhileCollecting() throws Exception { counter.remove("c", "d"); counter.remove("e", "f"); } - assertNotNull(entry.getKey()); - assertNotNull(entry.getValue()); + assertThat(entry.getKey()).isNotNull(); + assertThat(entry.getValue()).isNotNull(); } } @@ -41,31 +41,31 @@ public void testClear() { counter.labelValues("a", "b").inc(3.0); counter.labelValues("c", "d").inc(3.0); counter.labelValues("a", "b").inc(); - assertEquals(2, counter.collect().getDataPoints().size()); + assertThat(counter.collect().getDataPoints()).hasSize(2); counter.clear(); - assertEquals(0, counter.collect().getDataPoints().size()); + assertThat(counter.collect().getDataPoints()).isEmpty(); counter.labelValues("a", "b").inc(); - assertEquals(1, counter.collect().getDataPoints().size()); + assertThat(counter.collect().getDataPoints()).hasSize(1); } @Test public void testClearNoLabels() { Counter counter = Counter.builder().name("test").build(); counter.inc(); - assertEquals(1, counter.collect().getDataPoints().size()); - assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + assertThat(counter.collect().getDataPoints()).hasSize(1); + assertThat(counter.collect().getDataPoints().get(0).getValue()).isCloseTo(1.0, offset(0.0)); counter.clear(); // No labels is always present, but as no value has been observed after clear() the value should // be 0.0 - assertEquals(1, counter.collect().getDataPoints().size()); - assertEquals(0.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + assertThat(counter.collect().getDataPoints()).hasSize(1); + assertThat(counter.collect().getDataPoints().get(0).getValue()).isCloseTo(0.0, offset(0.0)); // Making inc() works correctly after clear() counter.inc(); - assertEquals(1, counter.collect().getDataPoints().size()); - assertEquals(1.0, counter.collect().getDataPoints().get(0).getValue(), 0.0); + assertThat(counter.collect().getDataPoints()).hasSize(1); + assertThat(counter.collect().getDataPoints().get(0).getValue()).isCloseTo(1.0, offset(0.0)); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java index 365ff1824..dbabb1a93 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java @@ -1,7 +1,9 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.api.Assertions.fail; +import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.datapoints.Timer; import io.prometheus.metrics.model.registry.PrometheusRegistry; @@ -12,10 +14,10 @@ import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.Unit; import java.util.List; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class SummaryTest { +class SummaryTest { private final Label label = new Label("name", "value"); private final Labels labels = Labels.builder().label(label.getName(), label.getValue()).build(); @@ -26,7 +28,7 @@ public class SummaryTest { private Summary withLabelsAndQuantiles; private Summary noLabelsAndQuantiles; - @Before + @BeforeEach public void setUp() { registry = new PrometheusRegistry(); noLabels = @@ -62,27 +64,27 @@ public void setUp() { @Test public void testObserve() { noLabels.observe(2); - assertEquals(1, getCount(noLabels, Labels.EMPTY)); - assertEquals(2.0, getSum(noLabels, Labels.EMPTY), .001); + assertThat(getCount(noLabels, Labels.EMPTY)).isOne(); + assertThat(getSum(noLabels, Labels.EMPTY)).isCloseTo(2.0, offset(.001)); noLabels.observe(3); - assertEquals(2, getCount(noLabels, Labels.EMPTY)); - assertEquals(5.0, getSum(noLabels, Labels.EMPTY), .001); + assertThat(getCount(noLabels, Labels.EMPTY)).isEqualTo(2); + assertThat(getSum(noLabels, Labels.EMPTY)).isCloseTo(5.0, offset(.001)); withLabels.labelValues(label.getValue()).observe(4); - assertEquals(1, getCount(withLabels, labels)); - assertEquals(4.0, getSum(withLabels, labels), .001); + assertThat(getCount(withLabels, labels)).isOne(); + assertThat(getSum(withLabels, labels)).isCloseTo(4.0, offset(.001)); withLabels.labelValues(label.getValue()).observeWithExemplar(6, labels); - assertEquals(2, getCount(withLabels, labels)); - assertEquals(10.0, getSum(withLabels, labels), .001); + assertThat(getCount(withLabels, labels)).isEqualTo(2); + assertThat(getSum(withLabels, labels)).isCloseTo(10.0, offset(.001)); } @Test public void testNegativeAmount() { noLabels.observe(-1); noLabels.observe(-3); - assertEquals(2, getCount(noLabels, Labels.EMPTY)); - assertEquals(-4.0, getSum(noLabels, Labels.EMPTY), .001); + assertThat(getCount(noLabels, Labels.EMPTY)).isEqualTo(2); + assertThat(getSum(noLabels, Labels.EMPTY)).isCloseTo(-4.0, offset(.001)); } @Test @@ -95,17 +97,19 @@ public void testQuantiles() { withLabelsAndQuantiles.labelValues(label.getValue()).observe(i); noLabelsAndQuantiles.observe(i); } - assertEquals( - getQuantile(noLabelsAndQuantiles, 0.5, Labels.EMPTY), 0.5 * nSamples, 0.05 * nSamples); - assertEquals( - getQuantile(noLabelsAndQuantiles, 0.9, Labels.EMPTY), 0.9 * nSamples, 0.01 * nSamples); - assertEquals( - getQuantile(noLabelsAndQuantiles, 0.99, Labels.EMPTY), 0.99 * nSamples, 0.001 * nSamples); - - assertEquals(getQuantile(withLabelsAndQuantiles, 0.5, labels), 0.5 * nSamples, 0.05 * nSamples); - assertEquals(getQuantile(withLabelsAndQuantiles, 0.9, labels), 0.9 * nSamples, 0.01 * nSamples); - assertEquals( - getQuantile(withLabelsAndQuantiles, 0.99, labels), 0.99 * nSamples, 0.001 * nSamples); + assertThat(0.5 * nSamples) + .isCloseTo(getQuantile(noLabelsAndQuantiles, 0.5, Labels.EMPTY), offset(0.05 * nSamples)); + assertThat(0.9 * nSamples) + .isCloseTo(getQuantile(noLabelsAndQuantiles, 0.9, Labels.EMPTY), offset(0.01 * nSamples)); + assertThat(0.99 * nSamples) + .isCloseTo(getQuantile(noLabelsAndQuantiles, 0.99, Labels.EMPTY), offset(0.001 * nSamples)); + + assertThat(0.5 * nSamples) + .isCloseTo(getQuantile(withLabelsAndQuantiles, 0.5, labels), offset(0.05 * nSamples)); + assertThat(0.9 * nSamples) + .isCloseTo(getQuantile(withLabelsAndQuantiles, 0.9, labels), offset(0.01 * nSamples)); + assertThat(0.99 * nSamples) + .isCloseTo(getQuantile(withLabelsAndQuantiles, 0.99, labels), offset(0.001 * nSamples)); } @Test @@ -119,52 +123,56 @@ public void testMaxAge() throws InterruptedException { .help("help") .register(registry); summary.observe(8.0); - assertEquals(8.0, getQuantile(summary, 0.99, Labels.EMPTY), 0.0); // From bucket 1. + assertThat(getQuantile(summary, 0.99, Labels.EMPTY)) + .isCloseTo(8.0, offset(0.0)); // From bucket 1. Thread.sleep(600); - assertEquals(8.0, getQuantile(summary, 0.99, Labels.EMPTY), 0.0); // From bucket 2. + assertThat(getQuantile(summary, 0.99, Labels.EMPTY)) + .isCloseTo(8.0, offset(0.0)); // From bucket 2. Thread.sleep(600); - assertEquals( - Double.NaN, - getQuantile(summary, 0.99, Labels.EMPTY), - 0.0); // Bucket 1 again, now it is empty. + assertThat(getQuantile(summary, 0.99, Labels.EMPTY)) + .isCloseTo(Double.NaN, offset(0.0)); // Bucket 1 again, now it is empty. } @Test public void testTimer() { int result = noLabels.time(() -> 123); - assertEquals(123, result); - assertEquals(1, getCount(noLabels, Labels.EMPTY)); + assertThat(result).isEqualTo(123); + assertThat(getCount(noLabels, Labels.EMPTY)).isOne(); try (Timer timer = noLabels.startTimer()) { timer.observeDuration(); - assertEquals(2, getCount(noLabels, Labels.EMPTY), .001); + assertThat(getCount(noLabels, Labels.EMPTY)).isEqualTo(2); } } @Test public void noLabelsDefaultZeroValue() { - assertEquals(0.0, getCount(noLabels, Labels.EMPTY), .001); - assertEquals(0.0, getSum(noLabels, Labels.EMPTY), .001); + assertThat(getCount(noLabels, Labels.EMPTY)).isZero(); + assertThat(getSum(noLabels, Labels.EMPTY)).isCloseTo(0.0, offset(.001)); } - @Test(expected = IllegalArgumentException.class) + @Test public void testBuilderInvalidNumberOfAgeBuckets() { - Summary.builder().name("name").numberOfAgeBuckets(-1).build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Summary.builder().name("name").numberOfAgeBuckets(-1).build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testBuilderInvalidMaxAge() { - Summary.builder().name("name").maxAgeSeconds(-1).build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Summary.builder().name("name").maxAgeSeconds(-1).build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testBuilderInvalidQuantile() { - Summary.builder().name("name").quantile(42).build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Summary.builder().name("name").quantile(42).build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testBuilderInvalidQuantileError() { - Summary.builder().name("name").quantile(0.5, 20).build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Summary.builder().name("name").quantile(0.5, 20).build()); } private double getQuantile(Summary summary, double quantile, Labels labels) { @@ -182,9 +190,9 @@ private double getQuantile(Summary summary, double quantile, Labels labels) { private SummarySnapshot.SummaryDataPointSnapshot getDatapoint(Summary summary, Labels labels) { SummarySnapshot snapshot = summary.collect(); List datapoints = snapshot.getDataPoints(); - assertEquals(1, datapoints.size()); + assertThat(datapoints.size()).isOne(); SummarySnapshot.SummaryDataPointSnapshot datapoint = datapoints.get(0); - assertEquals(labels, datapoint.getLabels()); + assertThat((Iterable) datapoint.getLabels()).isEqualTo(labels); return datapoint; } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java index ba1df05ff..929efc597 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryWithCallbackTest.java @@ -1,6 +1,8 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.model.snapshots.Quantile; import io.prometheus.metrics.model.snapshots.Quantiles; @@ -8,9 +10,9 @@ import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class SummaryWithCallbackTest { +class SummaryWithCallbackTest { @Test public void testGauge() { @@ -30,24 +32,26 @@ public void testGauge() { .build(); SummarySnapshot snapshot = gauge.collect(); - assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints().size()).isOne(); SummarySnapshot.SummaryDataPointSnapshot datapoint = snapshot.getDataPoints().get(0); - assertEquals(count.get(), datapoint.getCount()); - assertEquals(sum.doubleValue(), datapoint.getSum(), 0.1); - assertEquals(quantiles, datapoint.getQuantiles()); - assertEquals(labelValues.size(), datapoint.getLabels().size()); + assertThat(datapoint.getCount()).isEqualTo(count.get()); + assertThat(datapoint.getSum()).isCloseTo(sum.doubleValue(), offset(0.1)); + assertThat(datapoint.getQuantiles()).isEqualTo(quantiles); + assertThat(datapoint.getLabels().size()).isEqualTo(labelValues.size()); count.incrementAndGet(); sum.incrementAndGet(); snapshot = gauge.collect(); - assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints().size()).isOne(); datapoint = snapshot.getDataPoints().get(0); - assertEquals(count.get(), datapoint.getCount()); - assertEquals(sum.doubleValue(), datapoint.getSum(), 0.1); + assertThat(datapoint.getCount()).isEqualTo(count.get()); + assertThat(datapoint.getSum()).isCloseTo(sum.doubleValue(), offset(0.1)); } - @Test(expected = IllegalArgumentException.class) + @Test public void testSummaryNoCallback() { - SummaryWithCallback.builder().name("summary").labelNames("l1", "l2").build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> SummaryWithCallback.builder().name("summary").labelNames("l1", "l2").build()); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java index 6a242a8be..8d9a5bd0f 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TestUtil.java @@ -1,14 +1,16 @@ package io.prometheus.metrics.core.metrics; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.model.snapshots.Exemplar; +import io.prometheus.metrics.model.snapshots.Label; -public class TestUtil { +class TestUtil { public static void assertExemplarEquals(Exemplar expected, Exemplar actual) { // ignore timestamp - assertEquals(expected.getValue(), actual.getValue(), 0.00001); - assertEquals(expected.getLabels(), actual.getLabels()); + assertThat(actual.getValue()).isCloseTo(expected.getValue(), offset(0.00001)); + assertThat((Iterable) actual.getLabels()).isEqualTo(expected.getLabels()); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TodoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TodoTest.java index be6d17784..417226b94 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TodoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/TodoTest.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.core.metrics; -public class TodoTest { +class TodoTest { // if a metric with labels is created but never used it has no data. // The registry's collect() method should skip those metrics to avoid illegal protobuf or text diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 448390bb2..0247be420 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -51,12 +51,6 @@ - - junit - junit - 4.13.2 - test - org.wiremock wiremock diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java index 5af5193f6..def62834f 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java @@ -5,13 +5,15 @@ import static com.github.tomakehurst.wiremock.client.WireMock.ok; import static com.github.tomakehurst.wiremock.client.WireMock.post; import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.verify; import static java.util.concurrent.TimeUnit.SECONDS; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.awaitility.Awaitility.await; import com.github.tomakehurst.wiremock.http.Request; -import com.github.tomakehurst.wiremock.junit.WireMockRule; +import com.github.tomakehurst.wiremock.junit5.WireMockTest; import com.github.tomakehurst.wiremock.matching.MatchResult; import com.github.tomakehurst.wiremock.matching.ValueMatcher; import com.google.protobuf.InvalidProtocolBufferException; @@ -28,12 +30,12 @@ import io.prometheus.metrics.core.metrics.Counter; import io.prometheus.metrics.model.registry.PrometheusRegistry; import org.awaitility.core.ConditionTimeoutException; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class ExemplarTest { +@WireMockTest(httpPort = 4317) +class ExemplarTest { private static final String ENDPOINT_PATH = "/v1/metrics"; private static final int TIMEOUT = 3; private static final String INSTRUMENTATION_SCOPE_NAME = "testInstrumentationScope"; @@ -41,9 +43,8 @@ public class ExemplarTest { public static final String TEST_COUNTER_NAME = "test_counter"; private Counter testCounter; private OpenTelemetryExporter openTelemetryExporter; - @Rule public WireMockRule wireMockRule = new WireMockRule(4317); - @Before + @BeforeEach public void setUp() { openTelemetryExporter = OpenTelemetryExporter.builder() @@ -54,7 +55,7 @@ public void setUp() { testCounter = Counter.builder().name(TEST_COUNTER_NAME).withExemplars().register(); - wireMockRule.stubFor( + stubFor( post(ENDPOINT_PATH) .withHeader("Content-Type", containing("application/x-protobuf")) .willReturn( @@ -62,7 +63,7 @@ public void setUp() { .withBody("{\"partialSuccess\":{}}"))); } - @After + @AfterEach public void tearDown() { PrometheusRegistry.defaultRegistry.unregister(testCounter); openTelemetryExporter.close(); @@ -93,7 +94,7 @@ public void sampledExemplarIsForwarded() { }); } - @Test(expected = ConditionTimeoutException.class) + @Test public void notSampledExemplarIsNotForwarded() { try (SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().setSampler(Sampler.alwaysOff()).build()) { @@ -105,17 +106,21 @@ public void notSampledExemplarIsNotForwarded() { } } - await() - .atMost(TIMEOUT, SECONDS) - .ignoreException(com.github.tomakehurst.wiremock.client.VerificationException.class) - .until( - () -> { - verify( - postRequestedFor(urlEqualTo(ENDPOINT_PATH)) - .withHeader("Content-Type", equalTo("application/x-protobuf")) - .andMatching(getExemplarCountMatcher(1))); - return true; - }); + assertThatExceptionOfType(ConditionTimeoutException.class) + .isThrownBy( + () -> + await() + .atMost(TIMEOUT, SECONDS) + .ignoreException( + com.github.tomakehurst.wiremock.client.VerificationException.class) + .until( + () -> { + verify( + postRequestedFor(urlEqualTo(ENDPOINT_PATH)) + .withHeader("Content-Type", equalTo("application/x-protobuf")) + .andMatching(getExemplarCountMatcher(1))); + return true; + })); } private static ValueMatcher getExemplarCountMatcher(int expectedCount) { diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index 8b6e22525..8272ac9d7 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 @@ -29,12 +30,12 @@ - + brian-brazil Brian Brazil brian.brazil@boxever.com - - + + fstab Fabian Stäber fabian@fstab.de @@ -47,21 +48,9 @@ prometheus-metrics-exporter-common ${project.version} - - junit - junit - 4.13.2 - test - - - org.mock-server - mockserver-netty - 5.15.0 - test - org.mock-server - mockserver-junit-rule-no-dependencies + mockserver-netty-no-dependencies 5.15.0 test diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java index 7fbb32b10..598172eaa 100644 --- a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java @@ -6,34 +6,38 @@ import io.prometheus.metrics.core.metrics.Gauge; import io.prometheus.metrics.model.registry.PrometheusRegistry; import java.io.IOException; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockserver.client.MockServerClient; -import org.mockserver.junit.MockServerRule; +import org.mockserver.integration.ClientAndServer; -public class BasicAuthPushGatewayTest { - - @Rule public MockServerRule mockServerRule = new MockServerRule(this); +class BasicAuthPushGatewayTest { private MockServerClient mockServerClient; PrometheusRegistry registry; Gauge gauge; PushGateway pushGateway; - @Before + @BeforeEach public void setUp() { + mockServerClient = ClientAndServer.startClientAndServer(0); registry = new PrometheusRegistry(); gauge = Gauge.builder().name("g").help("help").build(); pushGateway = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .basicAuth("testUser", "testPwd") .registry(registry) .job("j") .build(); } + @AfterEach + void tearDown() { + mockServerClient.stop(); + } + @Test public void testAuthorizedPush() throws IOException { mockServerClient diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java index 144a0f24f..09e6ff5e9 100644 --- a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BearerTokenPushGatewayTest.java @@ -6,34 +6,39 @@ import io.prometheus.metrics.core.metrics.Gauge; import io.prometheus.metrics.model.registry.PrometheusRegistry; import java.io.IOException; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockserver.client.MockServerClient; -import org.mockserver.junit.MockServerRule; +import org.mockserver.integration.ClientAndServer; -public class BearerTokenPushGatewayTest { +class BearerTokenPushGatewayTest { - @Rule public MockServerRule mockServerRule = new MockServerRule(this); private MockServerClient mockServerClient; PrometheusRegistry registry; Gauge gauge; PushGateway pushGateway; - @Before + @BeforeEach public void setUp() { + mockServerClient = ClientAndServer.startClientAndServer(0); registry = new PrometheusRegistry(); gauge = Gauge.builder().name("g").help("help").build(); pushGateway = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .bearerToken("xxx") .registry(registry) .job("j") .build(); } + @AfterEach + void tearDown() { + mockServerClient.stop(); + } + @Test public void testAuthorizedPush() throws IOException { mockServerClient diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java index ce88300db..27617913b 100644 --- a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/PushGatewayTest.java @@ -1,6 +1,7 @@ package io.prometheus.metrics.exporter.pushgateway; -import static org.junit.rules.ExpectedException.none; +import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockserver.model.HttpRequest.request; import static org.mockserver.model.HttpResponse.response; @@ -10,35 +11,40 @@ import java.lang.reflect.Field; import java.net.InetAddress; import java.net.URL; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockserver.client.MockServerClient; -import org.mockserver.junit.MockServerRule; +import org.mockserver.integration.ClientAndServer; -public class PushGatewayTest { +class PushGatewayTest { - @Rule public final ExpectedException thrown = none(); - - @Rule public MockServerRule mockServerRule = new MockServerRule(this); private MockServerClient mockServerClient; PrometheusRegistry registry; Gauge gauge; - @Before + @BeforeEach public void setUp() { + mockServerClient = ClientAndServer.startClientAndServer(0); registry = new PrometheusRegistry(); gauge = Gauge.builder().name("g").help("help").build(); } - @Test(expected = RuntimeException.class) + @AfterEach + void tearDown() { + mockServerClient.stop(); + } + + @Test public void testInvalidURLThrowsRuntimeException() { - PushGateway.builder() - .address("::") - .build(); // ":" is interpreted as port number, so parsing fails + assertThatExceptionOfType(RuntimeException.class) + .isThrownBy( + () -> { + PushGateway.builder() + .address("::") + .build(); // ":" is interpreted as port number, so parsing fails + }); } @Test @@ -46,8 +52,8 @@ public void testMultipleSlashesAreStrippedFromURL() throws NoSuchFieldException, IllegalAccessException { final PushGateway pushGateway = PushGateway.builder().address("example.com:1234/context///path//").job("test").build(); - Assert.assertEquals( - "http://example.com:1234/context/path/metrics/job/test", getUrl(pushGateway).toString()); + assertThat(getUrl(pushGateway)) + .hasToString("http://example.com:1234/context/path/metrics/job/test"); } private URL getUrl(PushGateway pushGateway) throws IllegalAccessException, NoSuchFieldException { @@ -63,7 +69,7 @@ public void testPush() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .job("j") .build(); @@ -77,7 +83,7 @@ public void testPush200Response() throws IOException { .respond(response().withStatusCode(200)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .job("j") .build(); @@ -85,22 +91,25 @@ public void testPush200Response() throws IOException { } @Test - public void testNon202ResponseThrows() throws IOException { + public void testNon202ResponseThrows() { mockServerClient .when(request().withMethod("PUT").withPath("/metrics/job/j")) .respond(response().withStatusCode(500)); - thrown.expect(IOException.class); - thrown.expectMessage( - "Response code from http://localhost:" - + mockServerRule.getPort() - + "/metrics/job/j was 500"); - PushGateway pg = - PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) - .registry(registry) - .job("j") - .build(); - pg.push(); + assertThatExceptionOfType(IOException.class) + .isThrownBy( + () -> { + PushGateway pg = + PushGateway.builder() + .address("localhost:" + mockServerClient.getPort()) + .registry(registry) + .job("j") + .build(); + pg.push(); + }) + .withMessageContaining( + "Response code from http://localhost:" + + mockServerClient.getPort() + + "/metrics/job/j was 500"); } @Test @@ -110,7 +119,7 @@ public void testPushCollector() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .job("j") .build(); @@ -124,7 +133,7 @@ public void testPushWithGroupingKey() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .job("j") .groupingKey("l", "v") @@ -139,7 +148,7 @@ public void testPushWithMultiGroupingKey() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .job("j") .groupingKey("l", "v") @@ -155,7 +164,7 @@ public void testPushWithEmptyLabelGroupingKey() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .job("j") .groupingKey("l", "v") @@ -172,7 +181,7 @@ public void testPushWithGroupingKeyWithSlashes() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .job("a/b") .groupingKey("l", "v") @@ -188,7 +197,7 @@ public void testPushCollectorWithGroupingKey() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .job("j") .groupingKey("l", "v") @@ -203,7 +212,7 @@ public void testPushAdd() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .job("j") .build(); @@ -216,7 +225,7 @@ public void testPushAddCollector() throws IOException { .when(request().withMethod("POST").withPath("/metrics/job/j")) .respond(response().withStatusCode(202)); PushGateway pg = - PushGateway.builder().address("localhost:" + mockServerRule.getPort()).job("j").build(); + PushGateway.builder().address("localhost:" + mockServerClient.getPort()).job("j").build(); pg.pushAdd(gauge); } @@ -227,7 +236,7 @@ public void testPushAddWithGroupingKey() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .groupingKey("l", "v") .job("j") @@ -242,7 +251,7 @@ public void testPushAddCollectorWithGroupingKey() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .registry(registry) .groupingKey("l", "v") .job("j") @@ -256,7 +265,7 @@ public void testDelete() throws IOException { .when(request().withMethod("DELETE").withPath("/metrics/job/j")) .respond(response().withStatusCode(202)); PushGateway pg = - PushGateway.builder().address("localhost:" + mockServerRule.getPort()).job("j").build(); + PushGateway.builder().address("localhost:" + mockServerClient.getPort()).job("j").build(); pg.delete(); } @@ -267,7 +276,7 @@ public void testDeleteWithGroupingKey() throws IOException { .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .job("j") .groupingKey("l", "v") .build(); @@ -277,13 +286,13 @@ public void testDeleteWithGroupingKey() throws IOException { @Test public void testInstanceIpGroupingKey() throws IOException { String ip = InetAddress.getLocalHost().getHostAddress(); - Assert.assertFalse(ip.isEmpty()); + assertThat(ip).isNotEmpty(); mockServerClient .when(request().withMethod("DELETE").withPath("/metrics/job/j/instance/" + ip + "/l/v")) .respond(response().withStatusCode(202)); PushGateway pg = PushGateway.builder() - .address("localhost:" + mockServerRule.getPort()) + .address("localhost:" + mockServerClient.getPort()) .job("j") .groupingKey("l", "v") .instanceIpGroupingKey() diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index b745e62cc..e7de1e28b 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -53,14 +53,6 @@ 1.3.1 - - - - junit - junit - 4.13.2 - test - diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index 1ce3f2840..307b88938 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -1,5 +1,7 @@ package io.prometheus.metrics.expositionformats; +import static org.assertj.core.api.Assertions.assertThat; + import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; import io.prometheus.metrics.model.snapshots.*; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; @@ -9,10 +11,9 @@ import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; import java.io.ByteArrayOutputStream; import java.io.IOException; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class ExpositionFormatsTest { +class ExpositionFormatsTest { private final String exemplar1String = "{env=\"prod\",span_id=\"12345\",trace_id=\"abcde\"} 1.7 1672850685.829"; @@ -80,8 +81,7 @@ public class ExpositionFormatsTest { @Test public void testCounterComplete() throws IOException { String openMetricsText = - "" - + "# TYPE service_time_seconds counter\n" + "# TYPE service_time_seconds counter\n" + "# UNIT service_time_seconds seconds\n" + "# HELP service_time_seconds total time spent serving\n" + "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " @@ -106,8 +106,7 @@ public void testCounterComplete() throws IOException { + "\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP service_time_seconds_total total time spent serving\n" + "# HELP service_time_seconds_total total time spent serving\n" + "# TYPE service_time_seconds_total counter\n" + "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " + scrapeTimestamp1s @@ -128,8 +127,7 @@ public void testCounterComplete() throws IOException { + scrapeTimestamp2s + "\n"; String openMetricsTextWithoutCreated = - "" - + "# TYPE service_time_seconds counter\n" + "# TYPE service_time_seconds counter\n" + "# UNIT service_time_seconds seconds\n" + "# HELP service_time_seconds total time spent serving\n" + "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " @@ -144,8 +142,7 @@ public void testCounterComplete() throws IOException { + "\n" + "# EOF\n"; String prometheusTextWithoutCreated = - "" - + "# HELP service_time_seconds_total total time spent serving\n" + "# HELP service_time_seconds_total total time spent serving\n" + "# TYPE service_time_seconds_total counter\n" + "service_time_seconds_total{path=\"/hello\",status=\"200\"} 0.8 " + scrapeTimestamp1s @@ -154,10 +151,8 @@ public void testCounterComplete() throws IOException { + scrapeTimestamp2s + "\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"service_time_seconds_total\" " + // @formatter:off + "name: \"service_time_seconds_total\" " + "help: \"total time spent serving\" " + "type: COUNTER " + "metric { " @@ -213,11 +208,10 @@ public void testCounterComplete() throws IOException { @Test public void testCounterMinimal() throws IOException { - String openMetricsText = - "" + "# TYPE my_counter counter\n" + "my_counter_total 1.1\n" + "# EOF\n"; - String prometheusText = "" + "# TYPE my_counter_total counter\n" + "my_counter_total 1.1\n"; + String openMetricsText = "# TYPE my_counter counter\n" + "my_counter_total 1.1\n" + "# EOF\n"; + String prometheusText = "# TYPE my_counter_total counter\n" + "my_counter_total 1.1\n"; String prometheusProtobuf = - "" + "name: \"my_counter_total\" type: COUNTER metric { counter { value: 1.1 } }"; + "name: \"my_counter_total\" type: COUNTER metric { counter { value: 1.1 } }"; CounterSnapshot counter = CounterSnapshot.builder() .name("my_counter") @@ -233,21 +227,17 @@ public void testCounterMinimal() throws IOException { @Test public void testCounterWithDots() throws IOException { String openMetricsText = - "" - + "# TYPE my_request_count counter\n" + "# TYPE my_request_count counter\n" + "my_request_count_total{http_path=\"/hello\"} 3.0 # " + exemplarWithDotsString + "\n" + "# EOF\n"; String prometheusText = - "" - + "# TYPE my_request_count_total counter\n" + "# TYPE my_request_count_total counter\n" + "my_request_count_total{http_path=\"/hello\"} 3.0\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"my_request_count_total\" " + // @formatter:off + "name: \"my_request_count_total\" " + "type: COUNTER " + "metric { " + "label { name: \"http_path\" value: \"/hello\" } " @@ -277,8 +267,7 @@ public void testCounterWithDots() throws IOException { @Test public void testGaugeComplete() throws IOException { String openMetricsText = - "" - + "# TYPE disk_usage_ratio gauge\n" + "# TYPE disk_usage_ratio gauge\n" + "# UNIT disk_usage_ratio ratio\n" + "# HELP disk_usage_ratio percentage used\n" + "disk_usage_ratio{device=\"/dev/sda1\"} 0.2 " @@ -289,8 +278,7 @@ public void testGaugeComplete() throws IOException { + "\n" + "# EOF\n"; String openMetricsTextWithExemplarsOnAllTimeSeries = - "" - + "# TYPE disk_usage_ratio gauge\n" + "# TYPE disk_usage_ratio gauge\n" + "# UNIT disk_usage_ratio ratio\n" + "# HELP disk_usage_ratio percentage used\n" + "disk_usage_ratio{device=\"/dev/sda1\"} 0.2 " @@ -305,8 +293,7 @@ public void testGaugeComplete() throws IOException { + "\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP disk_usage_ratio percentage used\n" + "# HELP disk_usage_ratio percentage used\n" + "# TYPE disk_usage_ratio gauge\n" + "disk_usage_ratio{device=\"/dev/sda1\"} 0.2 " + scrapeTimestamp1s @@ -315,10 +302,8 @@ public void testGaugeComplete() throws IOException { + scrapeTimestamp2s + "\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"disk_usage_ratio\" " + // @formatter:off + "name: \"disk_usage_ratio\" " + "help: \"percentage used\" " + "type: GAUGE " + "metric { " @@ -363,11 +348,11 @@ public void testGaugeComplete() throws IOException { @Test public void testGaugeMinimal() throws IOException { String openMetricsText = - "" + "# TYPE temperature_centigrade gauge\n" + "temperature_centigrade 22.3\n" + "# EOF\n"; + "# TYPE temperature_centigrade gauge\n" + "temperature_centigrade 22.3\n" + "# EOF\n"; String prometheusText = - "" + "# TYPE temperature_centigrade gauge\n" + "temperature_centigrade 22.3\n"; + "# TYPE temperature_centigrade gauge\n" + "temperature_centigrade 22.3\n"; String prometheusProtobuf = - "" + "name: \"temperature_centigrade\" type: GAUGE metric { gauge { value: 22.3 } }"; + "name: \"temperature_centigrade\" type: GAUGE metric { gauge { value: 22.3 } }"; GaugeSnapshot gauge = GaugeSnapshot.builder() .name("temperature_centigrade") @@ -383,15 +368,13 @@ public void testGaugeMinimal() throws IOException { @Test public void testGaugeWithDots() throws IOException { String openMetricsText = - "" - + "# TYPE my_temperature_celsius gauge\n" + "# TYPE my_temperature_celsius gauge\n" + "# UNIT my_temperature_celsius celsius\n" + "# HELP my_temperature_celsius Temperature\n" + "my_temperature_celsius{location_id=\"data-center-1\"} 23.0\n" + "# EOF\n"; String openMetricsTextWithExemplarsOnAllTimeSeries = - "" - + "# TYPE my_temperature_celsius gauge\n" + "# TYPE my_temperature_celsius gauge\n" + "# UNIT my_temperature_celsius celsius\n" + "# HELP my_temperature_celsius Temperature\n" + "my_temperature_celsius{location_id=\"data-center-1\"} 23.0 # " @@ -399,15 +382,12 @@ public void testGaugeWithDots() throws IOException { + "\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP my_temperature_celsius Temperature\n" + "# HELP my_temperature_celsius Temperature\n" + "# TYPE my_temperature_celsius gauge\n" + "my_temperature_celsius{location_id=\"data-center-1\"} 23.0\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"my_temperature_celsius\" " + // @formatter:off + "name: \"my_temperature_celsius\" " + "help: \"Temperature\" " + "type: GAUGE " + "metric { " @@ -440,8 +420,7 @@ public void testGaugeWithDots() throws IOException { @Test public void testSummaryComplete() throws IOException { String openMetricsText = - "" - + "# TYPE http_request_duration_seconds summary\n" + "# TYPE http_request_duration_seconds summary\n" + "# UNIT http_request_duration_seconds seconds\n" + "# HELP http_request_duration_seconds request duration\n" + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " @@ -486,8 +465,7 @@ public void testSummaryComplete() throws IOException { + "\n" + "# EOF\n"; String openMetricsTextWithExemplarsOnAllTimeSeries = - "" - + "# TYPE http_request_duration_seconds summary\n" + "# TYPE http_request_duration_seconds summary\n" + "# UNIT http_request_duration_seconds seconds\n" + "# HELP http_request_duration_seconds request duration\n" + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " @@ -548,8 +526,7 @@ public void testSummaryComplete() throws IOException { + "\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP http_request_duration_seconds request duration\n" + "# HELP http_request_duration_seconds request duration\n" + "# TYPE http_request_duration_seconds summary\n" + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp1s @@ -594,8 +571,7 @@ public void testSummaryComplete() throws IOException { + scrapeTimestamp2s + "\n"; String openMetricsTextWithoutCreated = - "" - + "# TYPE http_request_duration_seconds summary\n" + "# TYPE http_request_duration_seconds summary\n" + "# UNIT http_request_duration_seconds seconds\n" + "# HELP http_request_duration_seconds request duration\n" + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " @@ -630,8 +606,7 @@ public void testSummaryComplete() throws IOException { + "\n" + "# EOF\n"; String prometheusTextWithoutCreated = - "" - + "# HELP http_request_duration_seconds request duration\n" + "# HELP http_request_duration_seconds request duration\n" + "# TYPE http_request_duration_seconds summary\n" + "http_request_duration_seconds{status=\"200\",quantile=\"0.5\"} 225.3 " + scrapeTimestamp1s @@ -664,10 +639,8 @@ public void testSummaryComplete() throws IOException { + scrapeTimestamp2s + "\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"http_request_duration_seconds\" " + // @formatter:off + "name: \"http_request_duration_seconds\" " + "help: \"request duration\" " + "type: SUMMARY " + "metric { " @@ -689,7 +662,6 @@ public void testSummaryComplete() throws IOException { + "quantile { quantile: 0.9 value: 240.7 } " + "quantile { quantile: 0.95 value: 245.1 } " + "} " - + "" + "timestamp_ms: 1672850585820 " + "}"; // @formatter:on @@ -741,24 +713,20 @@ public void testSummaryComplete() throws IOException { @Test public void testSummaryWithoutQuantiles() throws IOException { String openMetricsText = - "" - + "# TYPE latency_seconds summary\n" + "# TYPE latency_seconds summary\n" + "# UNIT latency_seconds seconds\n" + "# HELP latency_seconds latency\n" + "latency_seconds_count 3\n" + "latency_seconds_sum 1.2\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP latency_seconds latency\n" + "# HELP latency_seconds latency\n" + "# TYPE latency_seconds summary\n" + "latency_seconds_count 3\n" + "latency_seconds_sum 1.2\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"latency_seconds\" " + // @formatter:off + "name: \"latency_seconds\" " + "help: \"latency\" " + "type: SUMMARY " + "metric { " @@ -785,17 +753,14 @@ public void testSummaryWithoutQuantiles() throws IOException { @Test public void testSummaryNoCountAndSum() throws IOException { String openMetricsText = - "" - + "# TYPE latency_seconds summary\n" + "# TYPE latency_seconds summary\n" + "latency_seconds{quantile=\"0.95\"} 200.0\n" + "# EOF\n"; String prometheusText = - "" + "# TYPE latency_seconds summary\n" + "latency_seconds{quantile=\"0.95\"} 200.0\n"; + "# TYPE latency_seconds summary\n" + "latency_seconds{quantile=\"0.95\"} 200.0\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"latency_seconds\" " + // @formatter:off + "name: \"latency_seconds\" " + "type: SUMMARY " + "metric { " + "summary { " @@ -821,13 +786,11 @@ public void testSummaryNoCountAndSum() throws IOException { @Test public void testSummaryJustCount() throws IOException { String openMetricsText = - "" + "# TYPE latency_seconds summary\n" + "latency_seconds_count 1\n" + "# EOF\n"; - String prometheusText = "" + "# TYPE latency_seconds summary\n" + "latency_seconds_count 1\n"; + "# TYPE latency_seconds summary\n" + "latency_seconds_count 1\n" + "# EOF\n"; + String prometheusText = "# TYPE latency_seconds summary\n" + "latency_seconds_count 1\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"latency_seconds\" " + // @formatter:off + "name: \"latency_seconds\" " + "type: SUMMARY " + "metric { " + "summary { " @@ -850,13 +813,11 @@ public void testSummaryJustCount() throws IOException { @Test public void testSummaryJustSum() throws IOException { String openMetricsText = - "" + "# TYPE latency_seconds summary\n" + "latency_seconds_sum 12.3\n" + "# EOF\n"; - String prometheusText = "" + "# TYPE latency_seconds summary\n" + "latency_seconds_sum 12.3\n"; + "# TYPE latency_seconds summary\n" + "latency_seconds_sum 12.3\n" + "# EOF\n"; + String prometheusText = "# TYPE latency_seconds summary\n" + "latency_seconds_sum 12.3\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"latency_seconds\" " + // @formatter:off + "name: \"latency_seconds\" " + "type: SUMMARY " + "metric { " + "summary { " @@ -897,21 +858,17 @@ public void testSummaryEmptyData() throws IOException { @Test public void testSummaryEmptyAndNonEmpty() throws IOException { String openMetricsText = - "" - + "# TYPE latency_seconds summary\n" + "# TYPE latency_seconds summary\n" + "latency_seconds_count{path=\"/v2\"} 2\n" + "latency_seconds_sum{path=\"/v2\"} 10.7\n" + "# EOF\n"; String prometheusText = - "" - + "# TYPE latency_seconds summary\n" + "# TYPE latency_seconds summary\n" + "latency_seconds_count{path=\"/v2\"} 2\n" + "latency_seconds_sum{path=\"/v2\"} 10.7\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"latency_seconds\" " + // @formatter:off + "name: \"latency_seconds\" " + "type: SUMMARY " + "metric { " + "label { name: \"path\" value: \"/v2\" } " @@ -943,16 +900,14 @@ public void testSummaryEmptyAndNonEmpty() throws IOException { @Test public void testSummaryWithDots() throws IOException { String openMetricsText = - "" - + "# TYPE my_request_duration_seconds summary\n" + "# TYPE my_request_duration_seconds summary\n" + "# UNIT my_request_duration_seconds seconds\n" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "my_request_duration_seconds_count{http_path=\"/hello\"} 1\n" + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n" + "# EOF\n"; String openMetricsTextWithExemplarsOnAllTimeSeries = - "" - + "# TYPE my_request_duration_seconds summary\n" + "# TYPE my_request_duration_seconds summary\n" + "# UNIT my_request_duration_seconds seconds\n" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "my_request_duration_seconds_count{http_path=\"/hello\"} 1 # " @@ -961,16 +916,13 @@ public void testSummaryWithDots() throws IOException { + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP my_request_duration_seconds Request duration in seconds\n" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "# TYPE my_request_duration_seconds summary\n" + "my_request_duration_seconds_count{http_path=\"/hello\"} 1\n" + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.03\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"my_request_duration_seconds\" " + // @formatter:off + "name: \"my_request_duration_seconds\" " + "help: \"Request duration in seconds\" " + "type: SUMMARY " + "metric { " @@ -1002,8 +954,7 @@ public void testSummaryWithDots() throws IOException { @Test public void testClassicHistogramComplete() throws Exception { String openMetricsText = - "" - + "# TYPE response_size_bytes histogram\n" + "# TYPE response_size_bytes histogram\n" + "# UNIT response_size_bytes bytes\n" + "# HELP response_size_bytes help\n" + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " @@ -1053,8 +1004,7 @@ public void testClassicHistogramComplete() throws Exception { + "\n" + "# EOF\n"; String openMetricsTextWithExemplarsOnAllTimeSeries = - "" - + "# TYPE response_size_bytes histogram\n" + "# TYPE response_size_bytes histogram\n" + "# UNIT response_size_bytes bytes\n" + "# HELP response_size_bytes help\n" + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " @@ -1108,8 +1058,7 @@ public void testClassicHistogramComplete() throws Exception { + "\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP response_size_bytes help\n" + "# HELP response_size_bytes help\n" + "# TYPE response_size_bytes histogram\n" + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + scrapeTimestamp1s @@ -1151,8 +1100,7 @@ public void testClassicHistogramComplete() throws Exception { + scrapeTimestamp2s + "\n"; String openMetricsTextWithoutCreated = - "" - + "# TYPE response_size_bytes histogram\n" + "# TYPE response_size_bytes histogram\n" + "# UNIT response_size_bytes bytes\n" + "# HELP response_size_bytes help\n" + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " @@ -1192,8 +1140,7 @@ public void testClassicHistogramComplete() throws Exception { + "\n" + "# EOF\n"; String prometheusTextWithoutCreated = - "" - + "# HELP response_size_bytes help\n" + "# HELP response_size_bytes help\n" + "# TYPE response_size_bytes histogram\n" + "response_size_bytes_bucket{status=\"200\",le=\"2.2\"} 2 " + scrapeTimestamp1s @@ -1223,10 +1170,8 @@ public void testClassicHistogramComplete() throws Exception { + scrapeTimestamp2s + "\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"response_size_bytes\" " + // @formatter:off + "name: \"response_size_bytes\" " + "help: \"help\" " + "type: HISTOGRAM " + "metric { " @@ -1317,20 +1262,16 @@ public void testClassicHistogramMinimal() throws Exception { // In OpenMetrics a histogram can have a _count if and only if it has a _sum. // In Prometheus format, a histogram can have a _count without a _sum. String openMetricsText = - "" - + "# TYPE request_latency_seconds histogram\n" + "# TYPE request_latency_seconds histogram\n" + "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + "# EOF\n"; String prometheusText = - "" - + "# TYPE request_latency_seconds histogram\n" + "# TYPE request_latency_seconds histogram\n" + "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + "request_latency_seconds_count 2\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"request_latency_seconds\" " + // @formatter:off + "name: \"request_latency_seconds\" " + "type: HISTOGRAM " + "metric { " + "histogram { " @@ -1363,23 +1304,19 @@ public void testClassicHistogramMinimal() throws Exception { @Test public void testClassicHistogramCountAndSum() throws Exception { String openMetricsText = - "" - + "# TYPE request_latency_seconds histogram\n" + "# TYPE request_latency_seconds histogram\n" + "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + "request_latency_seconds_count 2\n" + "request_latency_seconds_sum 3.2\n" + "# EOF\n"; String prometheusText = - "" - + "# TYPE request_latency_seconds histogram\n" + "# TYPE request_latency_seconds histogram\n" + "request_latency_seconds_bucket{le=\"+Inf\"} 2\n" + "request_latency_seconds_count 2\n" + "request_latency_seconds_sum 3.2\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"request_latency_seconds\" " + // @formatter:off + "name: \"request_latency_seconds\" " + "type: HISTOGRAM " + "metric { " + "histogram { " @@ -1414,8 +1351,7 @@ public void testClassicHistogramCountAndSum() throws Exception { @Test public void testClassicGaugeHistogramComplete() throws IOException { String openMetricsText = - "" - + "# TYPE cache_size_bytes gaugehistogram\n" + "# TYPE cache_size_bytes gaugehistogram\n" + "# UNIT cache_size_bytes bytes\n" + "# HELP cache_size_bytes number of bytes in the cache\n" + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " @@ -1462,8 +1398,7 @@ public void testClassicGaugeHistogramComplete() throws IOException { + "\n" + "# EOF\n"; String openMetricsTextWithExemplarsOnAllTimeSeries = - "" - + "# TYPE cache_size_bytes gaugehistogram\n" + "# TYPE cache_size_bytes gaugehistogram\n" + "# UNIT cache_size_bytes bytes\n" + "# HELP cache_size_bytes number of bytes in the cache\n" + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " @@ -1514,8 +1449,7 @@ public void testClassicGaugeHistogramComplete() throws IOException { + "\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP cache_size_bytes number of bytes in the cache\n" + "# HELP cache_size_bytes number of bytes in the cache\n" + "# TYPE cache_size_bytes histogram\n" + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + scrapeTimestamp1s @@ -1558,8 +1492,7 @@ public void testClassicGaugeHistogramComplete() throws IOException { + scrapeTimestamp2s + "\n"; String openMetricsTextWithoutCreated = - "" - + "# TYPE cache_size_bytes gaugehistogram\n" + "# TYPE cache_size_bytes gaugehistogram\n" + "# UNIT cache_size_bytes bytes\n" + "# HELP cache_size_bytes number of bytes in the cache\n" + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " @@ -1596,8 +1529,7 @@ public void testClassicGaugeHistogramComplete() throws IOException { + "\n" + "# EOF\n"; String prometheusTextWithoutCreated = - "" - + "# HELP cache_size_bytes number of bytes in the cache\n" + "# HELP cache_size_bytes number of bytes in the cache\n" + "# TYPE cache_size_bytes histogram\n" + "cache_size_bytes_bucket{db=\"items\",le=\"2.0\"} 3 " + scrapeTimestamp1s @@ -1628,10 +1560,8 @@ public void testClassicGaugeHistogramComplete() throws IOException { + scrapeTimestamp2s + "\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"cache_size_bytes\" " + // @formatter:off + "name: \"cache_size_bytes\" " + "help: \"number of bytes in the cache\" " + "type: GAUGE_HISTOGRAM " + "metric { " @@ -1719,21 +1649,17 @@ public void testClassicGaugeHistogramMinimal() throws IOException { // In OpenMetrics a histogram can have a _count if and only if it has a _sum. // In Prometheus format, a histogram can have a _count without a _sum. String openMetricsText = - "" - + "# TYPE queue_size_bytes gaugehistogram\n" + "# TYPE queue_size_bytes gaugehistogram\n" + "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + "# EOF\n"; String prometheusText = - "" - + "# TYPE queue_size_bytes histogram\n" + "# TYPE queue_size_bytes histogram\n" + "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + "# TYPE queue_size_bytes_gcount gauge\n" + "queue_size_bytes_gcount 130\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"queue_size_bytes\" " + // @formatter:off + "name: \"queue_size_bytes\" " + "type: GAUGE_HISTOGRAM " + "metric { " + "histogram { " @@ -1767,25 +1693,21 @@ public void testClassicGaugeHistogramMinimal() throws IOException { @Test public void testClassicGaugeHistogramCountAndSum() throws IOException { String openMetricsText = - "" - + "# TYPE queue_size_bytes gaugehistogram\n" + "# TYPE queue_size_bytes gaugehistogram\n" + "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + "queue_size_bytes_gcount 130\n" + "queue_size_bytes_gsum 27000.0\n" + "# EOF\n"; String prometheusText = - "" - + "# TYPE queue_size_bytes histogram\n" + "# TYPE queue_size_bytes histogram\n" + "queue_size_bytes_bucket{le=\"+Inf\"} 130\n" + "# TYPE queue_size_bytes_gcount gauge\n" + "queue_size_bytes_gcount 130\n" + "# TYPE queue_size_bytes_gsum gauge\n" + "queue_size_bytes_gsum 27000.0\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"queue_size_bytes\" " + // @formatter:off + "name: \"queue_size_bytes\" " + "type: GAUGE_HISTOGRAM " + "metric { " + "histogram { " @@ -1821,8 +1743,7 @@ public void testClassicGaugeHistogramCountAndSum() throws IOException { @Test public void testClassicHistogramWithDots() throws IOException { String openMetricsText = - "" - + "# TYPE my_request_duration_seconds histogram\n" + "# TYPE my_request_duration_seconds histogram\n" + "# UNIT my_request_duration_seconds seconds\n" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 130 # " @@ -1832,8 +1753,7 @@ public void testClassicHistogramWithDots() throws IOException { + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n" + "# EOF\n"; String openMetricsTextWithExemplarsOnAllTimeSeries = - "" - + "# TYPE my_request_duration_seconds histogram\n" + "# TYPE my_request_duration_seconds histogram\n" + "# UNIT my_request_duration_seconds seconds\n" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 130 # " @@ -1845,17 +1765,14 @@ public void testClassicHistogramWithDots() throws IOException { + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP my_request_duration_seconds Request duration in seconds\n" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "# TYPE my_request_duration_seconds histogram\n" + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 130\n" + "my_request_duration_seconds_count{http_path=\"/hello\"} 130\n" + "my_request_duration_seconds_sum{http_path=\"/hello\"} 0.01\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"my_request_duration_seconds\" " + // @formatter:off + "name: \"my_request_duration_seconds\" " + "help: \"Request duration in seconds\" " + "type: HISTOGRAM " + "metric { " @@ -1896,8 +1813,7 @@ public void testClassicHistogramWithDots() throws IOException { @Test public void testNativeHistogramComplete() throws IOException { String openMetricsText = - "" - + "# TYPE response_size_bytes histogram\n" + "# TYPE response_size_bytes histogram\n" + "# UNIT response_size_bytes bytes\n" + "# HELP response_size_bytes help\n" + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " @@ -1934,8 +1850,7 @@ public void testNativeHistogramComplete() throws IOException { + "\n" + "# EOF\n"; String openMetricsTextWithExemplarsOnAllTimeSeries = - "" - + "# TYPE response_size_bytes histogram\n" + "# TYPE response_size_bytes histogram\n" + "# UNIT response_size_bytes bytes\n" + "# HELP response_size_bytes help\n" + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " @@ -1976,8 +1891,7 @@ public void testNativeHistogramComplete() throws IOException { + "\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP response_size_bytes help\n" + "# HELP response_size_bytes help\n" + "# TYPE response_size_bytes histogram\n" + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s @@ -2010,8 +1924,7 @@ public void testNativeHistogramComplete() throws IOException { + scrapeTimestamp2s + "\n"; String openMetricsTextWithoutCreated = - "" - + "# TYPE response_size_bytes histogram\n" + "# TYPE response_size_bytes histogram\n" + "# UNIT response_size_bytes bytes\n" + "# HELP response_size_bytes help\n" + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " @@ -2038,8 +1951,7 @@ public void testNativeHistogramComplete() throws IOException { + "\n" + "# EOF\n"; String prometheusTextWithoutCreated = - "" - + "# HELP response_size_bytes help\n" + "# HELP response_size_bytes help\n" + "# TYPE response_size_bytes histogram\n" + "response_size_bytes_bucket{status=\"200\",le=\"+Inf\"} 2 " + scrapeTimestamp1s @@ -2060,10 +1972,8 @@ public void testNativeHistogramComplete() throws IOException { + scrapeTimestamp2s + "\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"response_size_bytes\" " + // @formatter:off + "name: \"response_size_bytes\" " + "help: \"help\" " + "type: HISTOGRAM " + "metric { " @@ -2214,20 +2124,16 @@ public void testNativeHistogramComplete() throws IOException { @Test public void testNativeHistogramMinimal() throws IOException { String openMetricsText = - "" - + "# TYPE latency_seconds histogram\n" + "# TYPE latency_seconds histogram\n" + "latency_seconds_bucket{le=\"+Inf\"} 0\n" + "# EOF\n"; String prometheusText = - "" - + "# TYPE latency_seconds histogram\n" + "# TYPE latency_seconds histogram\n" + "latency_seconds_bucket{le=\"+Inf\"} 0\n" + "latency_seconds_count 0\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"latency_seconds\" " + // @formatter:off + "name: \"latency_seconds\" " + "type: HISTOGRAM " + "metric { " + "histogram { " @@ -2252,8 +2158,7 @@ public void testNativeHistogramMinimal() throws IOException { @Test public void testNativeHistogramWithDots() throws IOException { String openMetricsText = - "" - + "# TYPE my_request_duration_seconds histogram\n" + "# TYPE my_request_duration_seconds histogram\n" + "# UNIT my_request_duration_seconds seconds\n" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 4 # " @@ -2263,8 +2168,7 @@ public void testNativeHistogramWithDots() throws IOException { + "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n" + "# EOF\n"; String openMetricsTextWithExemplarsOnAllTimeSeries = - "" - + "# TYPE my_request_duration_seconds histogram\n" + "# TYPE my_request_duration_seconds histogram\n" + "# UNIT my_request_duration_seconds seconds\n" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 4 # " @@ -2276,17 +2180,14 @@ public void testNativeHistogramWithDots() throws IOException { + "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP my_request_duration_seconds Request duration in seconds\n" + "# HELP my_request_duration_seconds Request duration in seconds\n" + "# TYPE my_request_duration_seconds histogram\n" + "my_request_duration_seconds_bucket{http_path=\"/hello\",le=\"+Inf\"} 4\n" + "my_request_duration_seconds_count{http_path=\"/hello\"} 4\n" + "my_request_duration_seconds_sum{http_path=\"/hello\"} 3.2\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"my_request_duration_seconds\" " + // @formatter:off + "name: \"my_request_duration_seconds\" " + "help: \"Request duration in seconds\" " + "type: HISTOGRAM " + "metric { " @@ -2334,14 +2235,12 @@ public void testNativeHistogramWithDots() throws IOException { @Test public void testInfo() throws IOException { String openMetrics = - "" - + "# TYPE version info\n" + "# TYPE version info\n" + "# HELP version version information\n" + "version_info{version=\"1.2.3\"} 1\n" + "# EOF\n"; String prometheus = - "" - + "# HELP version_info version information\n" + "# HELP version_info version information\n" + "# TYPE version_info gauge\n" + "version_info{version=\"1.2.3\"} 1\n"; InfoSnapshot info = @@ -2362,25 +2261,20 @@ public void testInfo() throws IOException { @Test public void testInfoWithDots() throws IOException { String openMetricsText = - "" - + "# TYPE jvm_status info\n" + "# TYPE jvm_status info\n" + "# HELP jvm_status JVM status info\n" + "jvm_status_info{jvm_version=\"1.2.3\"} 1\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP jvm_status_info JVM status info\n" + "# HELP jvm_status_info JVM status info\n" + "# TYPE jvm_status_info gauge\n" + "jvm_status_info{jvm_version=\"1.2.3\"} 1\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"jvm_status_info\" " + // @formatter:off + "name: \"jvm_status_info\" " + "help: \"JVM status info\" " + "type: GAUGE " + "metric { " - + "" + "label { name: \"jvm_version\" value: \"1.2.3\" } " + "gauge { value: 1.0 } " + "}"; @@ -2402,8 +2296,7 @@ public void testInfoWithDots() throws IOException { @Test public void testStateSetComplete() throws IOException { String openMetrics = - "" - + "# TYPE state stateset\n" + "# TYPE state stateset\n" + "# HELP state complete state set example\n" + "state{env=\"dev\",state=\"state1\"} 1 " + scrapeTimestamp1s @@ -2419,8 +2312,7 @@ public void testStateSetComplete() throws IOException { + "\n" + "# EOF\n"; String prometheus = - "" - + "# HELP state complete state set example\n" + "# HELP state complete state set example\n" + "# TYPE state gauge\n" + "state{env=\"dev\",state=\"state1\"} 1 " + scrapeTimestamp1s @@ -2462,13 +2354,12 @@ public void testStateSetComplete() throws IOException { @Test public void testStateSetMinimal() throws IOException { String openMetrics = - "" - + "# TYPE state stateset\n" + "# TYPE state stateset\n" + "state{state=\"a\"} 1\n" + "state{state=\"bb\"} 0\n" + "# EOF\n"; String prometheus = - "" + "# TYPE state gauge\n" + "state{state=\"a\"} 1\n" + "state{state=\"bb\"} 0\n"; + "# TYPE state gauge\n" + "state{state=\"a\"} 1\n" + "state{state=\"bb\"} 0\n"; StateSetSnapshot stateSet = StateSetSnapshot.builder() .name("state") @@ -2487,23 +2378,19 @@ public void testStateSetMinimal() throws IOException { @Test public void testStateSetWithDots() throws IOException { String openMetricsText = - "" - + "# TYPE my_application_state stateset\n" + "# TYPE my_application_state stateset\n" + "# HELP my_application_state My application state\n" + "my_application_state{data_center=\"us east\",my_application_state=\"feature.enabled\"} 1\n" + "my_application_state{data_center=\"us east\",my_application_state=\"is.alpha.version\"} 0\n" + "# EOF\n"; String prometheusText = - "" - + "# HELP my_application_state My application state\n" + "# HELP my_application_state My application state\n" + "# TYPE my_application_state gauge\n" + "my_application_state{data_center=\"us east\",my_application_state=\"feature.enabled\"} 1\n" + "my_application_state{data_center=\"us east\",my_application_state=\"is.alpha.version\"} 0\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"my_application_state\" " + // @formatter:off + "name: \"my_application_state\" " + "help: \"My application state\" " + "type: GAUGE " + "metric { " @@ -2535,8 +2422,7 @@ public void testStateSetWithDots() throws IOException { @Test public void testUnknownComplete() throws IOException { String openMetrics = - "" - + "# TYPE my_special_thing_bytes unknown\n" + "# TYPE my_special_thing_bytes unknown\n" + "# UNIT my_special_thing_bytes bytes\n" + "# HELP my_special_thing_bytes help message\n" + "my_special_thing_bytes{env=\"dev\"} 0.2 " @@ -2547,8 +2433,7 @@ public void testUnknownComplete() throws IOException { + "\n" + "# EOF\n"; String openMetricsWithExemplarsOnAllTimeSeries = - "" - + "# TYPE my_special_thing_bytes unknown\n" + "# TYPE my_special_thing_bytes unknown\n" + "# UNIT my_special_thing_bytes bytes\n" + "# HELP my_special_thing_bytes help message\n" + "my_special_thing_bytes{env=\"dev\"} 0.2 " @@ -2563,8 +2448,7 @@ public void testUnknownComplete() throws IOException { + "\n" + "# EOF\n"; String prometheus = - "" - + "# HELP my_special_thing_bytes help message\n" + "# HELP my_special_thing_bytes help message\n" + "# TYPE my_special_thing_bytes untyped\n" + "my_special_thing_bytes{env=\"dev\"} 0.2 " + scrapeTimestamp1s @@ -2602,8 +2486,8 @@ public void testUnknownComplete() throws IOException { @Test public void testUnknownMinimal() throws IOException { - String openMetrics = "" + "# TYPE other unknown\n" + "other 22.3\n" + "# EOF\n"; - String prometheus = "" + "# TYPE other untyped\n" + "other 22.3\n"; + String openMetrics = "# TYPE other unknown\n" + "other 22.3\n" + "# EOF\n"; + String prometheus = "# TYPE other untyped\n" + "other 22.3\n"; UnknownSnapshot unknown = UnknownSnapshot.builder() .name("other") @@ -2618,15 +2502,13 @@ public void testUnknownMinimal() throws IOException { @Test public void testUnknownWithDots() throws IOException { String openMetrics = - "" - + "# TYPE some_unknown_metric_bytes unknown\n" + "# TYPE some_unknown_metric_bytes unknown\n" + "# UNIT some_unknown_metric_bytes bytes\n" + "# HELP some_unknown_metric_bytes help message\n" + "some_unknown_metric_bytes{test_env=\"7\"} 0.7\n" + "# EOF\n"; String openMetricsWithExemplarsOnAllTimeSeries = - "" - + "# TYPE some_unknown_metric_bytes unknown\n" + "# TYPE some_unknown_metric_bytes unknown\n" + "# UNIT some_unknown_metric_bytes bytes\n" + "# HELP some_unknown_metric_bytes help message\n" + "some_unknown_metric_bytes{test_env=\"7\"} 0.7 # " @@ -2634,15 +2516,12 @@ public void testUnknownWithDots() throws IOException { + "\n" + "# EOF\n"; String prometheus = - "" - + "# HELP some_unknown_metric_bytes help message\n" + "# HELP some_unknown_metric_bytes help message\n" + "# TYPE some_unknown_metric_bytes untyped\n" + "some_unknown_metric_bytes{test_env=\"7\"} 0.7\n"; String prometheusProtobuf = - "" - + - // @formatter:off - "name: \"some_unknown_metric_bytes\" " + // @formatter:off + "name: \"some_unknown_metric_bytes\" " + "help: \"help message\" " + "type: UNTYPED " + "metric { " @@ -2672,14 +2551,12 @@ public void testUnknownWithDots() throws IOException { @Test public void testHelpEscape() throws IOException { String openMetrics = - "" - + "# TYPE test counter\n" + "# TYPE test counter\n" + "# HELP test Some text and \\n some \\\" escaping\n" + "test_total 1.0\n" + "# EOF\n"; String prometheus = - "" - + "# HELP test_total Some text and \\n some \" escaping\n" + "# HELP test_total Some text and \\n some \" escaping\n" + "# TYPE test_total counter\n" + "test_total 1.0\n"; CounterSnapshot counter = @@ -2697,14 +2574,11 @@ public void testHelpEscape() throws IOException { @Test public void testLabelValueEscape() throws IOException { String openMetrics = - "" - + "# TYPE test counter\n" + "# TYPE test counter\n" + "test_total{a=\"x\",b=\"escaping\\\" example \\n \"} 1.0\n" + "# EOF\n"; String prometheus = - "" - + "# TYPE test_total counter\n" - + "test_total{a=\"x\",b=\"escaping\\\" example \\n \"} 1.0\n"; + "# TYPE test_total counter\n" + "test_total{a=\"x\",b=\"escaping\\\" example \\n \"} 1.0\n"; CounterSnapshot counter = CounterSnapshot.builder() .name("test") @@ -2723,7 +2597,7 @@ private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) thr ByteArrayOutputStream out = new ByteArrayOutputStream(); OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, false); writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expected, out.toString()); + assertThat(out).hasToString(expected); } private void assertOpenMetricsTextWithExemplarsOnAllTimeSeries( @@ -2731,7 +2605,7 @@ private void assertOpenMetricsTextWithExemplarsOnAllTimeSeries( ByteArrayOutputStream out = new ByteArrayOutputStream(); OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expected, out.toString()); + assertThat(out).hasToString(expected); } private void assertOpenMetricsTextWithoutCreated(String expected, MetricSnapshot snapshot) @@ -2739,14 +2613,14 @@ private void assertOpenMetricsTextWithoutCreated(String expected, MetricSnapshot ByteArrayOutputStream out = new ByteArrayOutputStream(); OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, false); writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expected, out.toString()); + assertThat(out).hasToString(expected); } private void assertPrometheusText(String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(true); writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expected, out.toString()); + assertThat(out).hasToString(expected); } private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot snapshot) @@ -2754,13 +2628,13 @@ private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot ByteArrayOutputStream out = new ByteArrayOutputStream(); PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(false); writer.write(out, MetricSnapshots.of(snapshot)); - Assert.assertEquals(expected, out.toString()); + assertThat(out).hasToString(expected); } private void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { PrometheusProtobufWriter writer = new PrometheusProtobufWriter(); Metrics.MetricFamily protobufData = writer.convert(snapshot); String actual = TextFormat.printer().shortDebugString(protobufData); - Assert.assertEquals(expected, actual); + assertThat(actual).isEqualTo(expected); } } diff --git a/prometheus-metrics-instrumentation-caffeine/pom.xml b/prometheus-metrics-instrumentation-caffeine/pom.xml index a1b560251..a12f26918 100644 --- a/prometheus-metrics-instrumentation-caffeine/pom.xml +++ b/prometheus-metrics-instrumentation-caffeine/pom.xml @@ -54,28 +54,8 @@ 3.1.8 provided - - - - junit - junit - 4.13.2 - test - - - - org.mockito - mockito-core - 5.12.0 - test - - - org.assertj - assertj-core - 3.26.3 - test - + io.prometheus prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java index acbfe3e1e..f74d5d041 100644 --- a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java +++ b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java @@ -1,7 +1,7 @@ package io.prometheus.metrics.instrumentation.caffeine; -import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -20,26 +20,15 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; -import java.util.concurrent.Executor; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class CacheMetricsCollectorTest { +class CacheMetricsCollectorTest { @Test public void cacheExposesMetricsForHitMissAndEviction() { + // Run cleanup in same thread, to remove async behavior with evictions final Cache cache = - Caffeine.newBuilder() - .maximumSize(2) - .recordStats() - .executor( - new Executor() { - @Override - public void execute(Runnable command) { - // Run cleanup in same thread, to remove async behavior with evictions - command.run(); - } - }) - .build(); + Caffeine.newBuilder().maximumSize(2).recordStats().executor(Runnable::run).build(); final CacheMetricsCollector collector = new CacheMetricsCollector(); collector.addCache("users", cache); @@ -83,7 +72,7 @@ public void execute(Runnable command) { + "caffeine_cache_requests_total{cache=\"users\"} 3.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(registry)); + assertThat(convertToOpenMetricsFormat(registry)).isEqualTo(expected); } @SuppressWarnings("unchecked") @@ -122,7 +111,7 @@ public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { (SummarySnapshot.SummaryDataPointSnapshot) getDataPointSnapshot(registry, "caffeine_cache_load_duration_seconds", "loadingusers"); - assertEquals(3, loadDuration.getCount()); + assertThat(loadDuration.getCount()).isEqualTo(3); assertThat(loadDuration.getSum()).isGreaterThan(0); } @@ -131,7 +120,7 @@ private void assertCounterMetric( final CounterSnapshot.CounterDataPointSnapshot dataPointSnapshot = (CounterSnapshot.CounterDataPointSnapshot) getDataPointSnapshot(registry, name, cacheName); - assertEquals(value, dataPointSnapshot.getValue(), 0); + assertThat(dataPointSnapshot.getValue()).isCloseTo(value, offset(0.0)); } private DataPointSnapshot getDataPointSnapshot( diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index 085e6de74..8de53d0f0 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -54,26 +54,7 @@ 5.0.0 provided - - - junit - junit - 4.13.2 - test - - - org.assertj - assertj-core - 3.25.3 - test - - - org.mockito - mockito-core - 5.12.0 - test - - + io.prometheus prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java index 0473329ce..11402fa7e 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExportsTest.java @@ -1,7 +1,7 @@ package io.prometheus.metrics.instrumentation.dropwizard5; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; import io.dropwizard.metrics5.*; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; @@ -13,16 +13,15 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.concurrent.TimeUnit; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class DropwizardExportsTest { +class DropwizardExportsTest { private PrometheusRegistry registry = new PrometheusRegistry(); private MetricRegistry metricRegistry; - @Before + @BeforeEach public void setUp() { metricRegistry = new MetricRegistry(); DropwizardExports.builder().dropwizardRegistry(metricRegistry).register(registry); @@ -37,11 +36,12 @@ public void testCounter() { + "foo_bar_total 1.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat()); + assertThat(convertToOpenMetricsFormat()).isEqualTo(expected); } @Test public void testGauge() { + // don't convert to lambda, as we need to test the type Gauge integerGauge = new Gauge() { @Override @@ -102,41 +102,29 @@ public Boolean getValue() { + "long_gauge 1234.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat()); + assertThat(convertToOpenMetricsFormat()).isEqualTo(expected); } @Test public void testInvalidGaugeType() { - Gauge invalidGauge = - new Gauge() { - @Override - public String getValue() { - return "foobar"; - } - }; + Gauge invalidGauge = () -> "foobar"; metricRegistry.register("invalid_gauge", invalidGauge); String expected = "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat()); + assertThat(convertToOpenMetricsFormat()).isEqualTo(expected); } @Test public void testGaugeReturningNullValue() { - Gauge invalidGauge = - new Gauge() { - @Override - public String getValue() { - return null; - } - }; + Gauge invalidGauge = () -> null; metricRegistry.register("invalid_gauge", invalidGauge); String expected = "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat()); + assertThat(convertToOpenMetricsFormat()).isEqualTo(expected); } @Test - public void testHistogram() throws IOException { + public void testHistogram() { // just test the standard mapper final MetricRegistry metricRegistry = new MetricRegistry(); PrometheusRegistry pmRegistry = new PrometheusRegistry(); @@ -181,31 +169,31 @@ public void testHistogram() throws IOException { // The following asserts the values, but allows an error of 1.0 for quantile values. MetricSnapshots snapshots = pmRegistry.scrape(name -> name.equals("hist")); - Assert.assertEquals(1, snapshots.size()); + assertThat(snapshots.size()).isOne(); SummarySnapshot snapshot = (SummarySnapshot) snapshots.get(0); - Assert.assertEquals("hist", snapshot.getMetadata().getName()); - Assert.assertEquals( - "Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram)", - snapshot.getMetadata().getHelp()); - Assert.assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getMetadata().getName()).isEqualTo("hist"); + assertThat(snapshot.getMetadata().getHelp()) + .isEqualTo( + "Generated from Dropwizard metric import (metric=hist, type=io.dropwizard.metrics5.Histogram)"); + assertThat(snapshot.getDataPoints().size()).isOne(); SummarySnapshot.SummaryDataPointSnapshot dataPoint = snapshot.getDataPoints().get(0); - Assert.assertTrue(dataPoint.hasCount()); - Assert.assertEquals(100, dataPoint.getCount()); - Assert.assertFalse(dataPoint.hasSum()); + assertThat(dataPoint.hasCount()).isTrue(); + assertThat(dataPoint.getCount()).isEqualTo(100); + assertThat(dataPoint.hasSum()).isFalse(); Quantiles quantiles = dataPoint.getQuantiles(); - Assert.assertEquals(6, quantiles.size()); - Assert.assertEquals(0.5, quantiles.get(0).getQuantile(), 0.0); - Assert.assertEquals(49.0, quantiles.get(0).getValue(), 1.0); - Assert.assertEquals(0.75, quantiles.get(1).getQuantile(), 0.0); - Assert.assertEquals(74.0, quantiles.get(1).getValue(), 1.0); - Assert.assertEquals(0.95, quantiles.get(2).getQuantile(), 0.0); - Assert.assertEquals(94.0, quantiles.get(2).getValue(), 1.0); - Assert.assertEquals(0.98, quantiles.get(3).getQuantile(), 0.0); - Assert.assertEquals(97.0, quantiles.get(3).getValue(), 1.0); - Assert.assertEquals(0.99, quantiles.get(4).getQuantile(), 0.0); - Assert.assertEquals(98.0, quantiles.get(4).getValue(), 1.0); - Assert.assertEquals(0.999, quantiles.get(5).getQuantile(), 0.0); - Assert.assertEquals(99.0, quantiles.get(5).getValue(), 1.0); + assertThat(quantiles.size()).isEqualTo(6); + assertThat(quantiles.get(0).getQuantile()).isCloseTo(0.5, offset(0.0)); + assertThat(quantiles.get(0).getValue()).isCloseTo(49.0, offset(1.0)); + assertThat(quantiles.get(1).getQuantile()).isCloseTo(0.75, offset(0.0)); + assertThat(quantiles.get(1).getValue()).isCloseTo(74.0, offset(1.0)); + assertThat(quantiles.get(2).getQuantile()).isCloseTo(0.95, offset(0.0)); + assertThat(quantiles.get(2).getValue()).isCloseTo(94.0, offset(1.0)); + assertThat(quantiles.get(3).getQuantile()).isCloseTo(0.98, offset(0.0)); + assertThat(quantiles.get(3).getValue()).isCloseTo(97.0, offset(1.0)); + assertThat(quantiles.get(4).getQuantile()).isCloseTo(0.99, offset(0.0)); + assertThat(quantiles.get(4).getValue()).isCloseTo(98.0, offset(1.0)); + assertThat(quantiles.get(5).getQuantile()).isCloseTo(0.999, offset(0.0)); + assertThat(quantiles.get(5).getValue()).isCloseTo(99.0, offset(1.0)); } @Test @@ -219,7 +207,7 @@ public void testMeter() { + "# HELP meter Generated from Dropwizard metric import (metric=meter_total, type=io.dropwizard.metrics5.Meter)\n" + "meter_total 2.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat()); + assertThat(convertToOpenMetricsFormat()).isEqualTo(expected); } @Test @@ -237,15 +225,15 @@ public void testTimer() throws InterruptedException { (SummarySnapshot.SummaryDataPointSnapshot) exports.collect().stream().flatMap(i -> i.getDataPoints().stream()).findFirst().get(); // We slept for 1Ms so we ensure that all timers are above 1ms: - assertTrue(dataPointSnapshot.getQuantiles().size() > 1); + assertThat(dataPointSnapshot.getQuantiles().size()).isGreaterThan(1); dataPointSnapshot .getQuantiles() .forEach( i -> { System.out.println(i.getQuantile() + " : " + i.getValue()); - assertTrue(i.getValue() > timeSpentMillis / 1000d); + assertThat(i.getValue()).isGreaterThan(timeSpentMillis / 1000d); }); - assertEquals(1, dataPointSnapshot.getCount()); + assertThat(dataPointSnapshot.getCount()).isOne(); } @Test @@ -286,7 +274,7 @@ public void testThatMetricHelpUsesOriginalDropwizardName() { + "my_application_namedTimer1{quantile=\"0.999\"} 0.0\n" + "my_application_namedTimer1_count 0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat()); + assertThat(convertToOpenMetricsFormat()).isEqualTo(expected); } private static class ExampleDoubleGauge implements Gauge { diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java index 5d1950111..ac0b0a328 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/CustomLabelMapperTest.java @@ -1,6 +1,7 @@ package io.prometheus.metrics.instrumentation.dropwizard5.labels; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import io.dropwizard.metrics5.MetricFilter; import io.dropwizard.metrics5.MetricRegistry; @@ -11,21 +12,21 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.*; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class CustomLabelMapperTest { +class CustomLabelMapperTest { private MetricRegistry metricRegistry; - @Before + @BeforeEach public void setUp() { metricRegistry = new MetricRegistry(); } - @Test(expected = IllegalArgumentException.class) + @Test public void test_WHEN_EmptyConfig_THEN_Fail() { - final CustomLabelMapper converter = - new CustomLabelMapper(Collections.emptyList()); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new CustomLabelMapper(Collections.emptyList())); } @Test @@ -48,7 +49,7 @@ public void test_WHEN_NoMatches_THEN_ShouldReturnDefaultSample() { + "app_okhttpclient_client_HttpClient_service_total 1.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + assertThat(convertToOpenMetricsFormat(dropwizardExports.collect())).isEqualTo(expected); } @Test @@ -76,12 +77,12 @@ public void test_WHEN_OneMatch_THEN_ShouldReturnConverted() { + "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" + "app_okhttpclient_client_HttpClient_total{service=\"greatService\"} 1.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + assertThat(convertToOpenMetricsFormat(dropwizardExports.collect())).isEqualTo(expected); } @Test public void test_WHEN_MoreMatches_THEN_ShouldReturnFirstOne() { - final Map labels = new HashMap(); + final Map labels = new HashMap<>(); labels.put("service", "${0}"); final MapperConfig mapperConfig = new MapperConfig( @@ -105,12 +106,12 @@ public void test_WHEN_MoreMatches_THEN_ShouldReturnFirstOne() { + "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.total, type=io.dropwizard.metrics5.Counter)\n" + "app_okhttpclient_client_HttpClient_total{service=\"greatService\"} 1.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + assertThat(convertToOpenMetricsFormat(dropwizardExports.collect())).isEqualTo(expected); } @Test public void test_WHEN_MoreMatchesReverseOrder_THEN_ShouldReturnFirstOne() { - final Map labels = new LinkedHashMap(); + final Map labels = new LinkedHashMap<>(); labels.put("service", "${0}"); labels.put("status", "${1}"); final MapperConfig mapperConfig = @@ -140,12 +141,12 @@ public void test_WHEN_MoreMatchesReverseOrder_THEN_ShouldReturnFirstOne() { + "# HELP app_okhttpclient_client_HttpClient Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" + "app_okhttpclient_client_HttpClient_total{service=\"greatService\",status=\"400\"} 1.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + assertThat(convertToOpenMetricsFormat(dropwizardExports.collect())).isEqualTo(expected); } @Test public void test_WHEN_MoreToFormatInLabelsAndName_THEN_ShouldReturnCorrectSample() { - final Map labels = new LinkedHashMap(); + final Map labels = new LinkedHashMap<>(); labels.put("service", "${0}_${1}"); labels.put("status", "s_${1}"); final MapperConfig mapperConfig = @@ -171,12 +172,12 @@ public void test_WHEN_MoreToFormatInLabelsAndName_THEN_ShouldReturnCorrectSample + "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" + "app_okhttpclient_client_HttpClient_greatService_total{service=\"greatService_400\",status=\"s_400\"} 1.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + assertThat(convertToOpenMetricsFormat(dropwizardExports.collect())).isEqualTo(expected); } @Test public void test_WHEN_AdditionalLabels_THEN_ShouldReturnCorrectSample() { - final Map labels = new LinkedHashMap(); + final Map labels = new LinkedHashMap<>(); labels.put("service", "${0}"); labels.put("status", "s_${1}"); labels.put("client", "sampleClient"); @@ -198,7 +199,7 @@ public void test_WHEN_AdditionalLabels_THEN_ShouldReturnCorrectSample() { + "# HELP app_okhttpclient_client_HttpClient_greatService Generated from Dropwizard metric import (metric=app.okhttpclient.client.HttpClient.greatService.400, type=io.dropwizard.metrics5.Counter)\n" + "app_okhttpclient_client_HttpClient_greatService_total{client=\"sampleClient\",service=\"greatService\",status=\"s_400\"} 1.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(dropwizardExports.collect())); + assertThat(convertToOpenMetricsFormat(dropwizardExports.collect())).isEqualTo(expected); } private String convertToOpenMetricsFormat(MetricSnapshots snapshots) { diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java index 9e8316d0b..ed27d7f22 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/GraphiteNamePatternTest.java @@ -1,18 +1,20 @@ package io.prometheus.metrics.instrumentation.dropwizard5.labels; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.assertj.core.api.Assertions; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class GraphiteNamePatternTest { +class GraphiteNamePatternTest { - @Test(expected = IllegalArgumentException.class) + @Test public void createNew_WHEN_InvalidPattern_THEN_ShouldThrowException() { - final List invalidPatterns = + List invalidPatterns = Arrays.asList( "", "a", @@ -29,15 +31,10 @@ public void createNew_WHEN_InvalidPattern_THEN_ShouldThrowException() { "org.com*pany.*", "org.test.contr.oller.gather.status..400", "org.test.controller.gather.status..400"); - final GraphiteNamePattern graphiteNamePattern = new GraphiteNamePattern(""); for (String pattern : invalidPatterns) { - try { - new GraphiteNamePattern(pattern); - - Assertions.failBecauseExceptionWasNotThrown(IllegalArgumentException.class); - } catch (IllegalArgumentException e) { - Assertions.assertThat(e).hasMessageContaining(pattern); - } + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new GraphiteNamePattern(pattern)) + .withMessageContaining(pattern); } } diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java index 7bf7b6520..a17963e0d 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/test/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfigTest.java @@ -1,48 +1,50 @@ package io.prometheus.metrics.instrumentation.dropwizard5.labels; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class MapperConfigTest { +class MapperConfigTest { @Test public void setMatch_WHEN_ExpressionMatchesPattern_AllGood() { final MapperConfig mapperConfig = new MapperConfig(); mapperConfig.setMatch("com.company.meter.*"); - assertEquals("com.company.meter.*", mapperConfig.getMatch()); + assertThat(mapperConfig.getMatch()).isEqualTo("com.company.meter.*"); } - @Test(expected = IllegalArgumentException.class) + @Test public void setMatch_WHEN_ExpressionDoesnNotMatchPattern_ThrowException() { - final MapperConfig mapperConfig = new MapperConfig(); - mapperConfig.setMatch("com.company.meter.**.yay"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new MapperConfig().setMatch("com.company.meter.**.yay")); } @Test public void setLabels_WHEN_ExpressionMatchesPattern_AllGood() { final MapperConfig mapperConfig = new MapperConfig(); - final Map labels = new HashMap(); + final Map labels = new HashMap<>(); labels.put("valid", "${0}"); mapperConfig.setLabels(labels); - assertEquals(labels, mapperConfig.getLabels()); + assertThat(mapperConfig.getLabels()).isEqualTo(labels); } - @Test(expected = IllegalArgumentException.class) + @Test public void setLabels_WHEN_ExpressionDoesnNotMatchPattern_ThrowException() { final MapperConfig mapperConfig = new MapperConfig(); - final Map labels = new HashMap(); + final Map labels = new HashMap<>(); labels.put("valid", "${0}"); labels.put("not valid", "${0}"); - mapperConfig.setLabels(labels); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> mapperConfig.setLabels(labels)); } @Test public void toString_WHEN_EmptyConfig_AllGood() { final MapperConfig mapperConfig = new MapperConfig(); - assertEquals("MapperConfig{match=null, name=null, labels={}}", mapperConfig.toString()); + assertThat(mapperConfig).hasToString("MapperConfig{match=null, name=null, labels={}}"); } @Test @@ -51,8 +53,7 @@ public void toString_WHEN_FullyConfigured_AllGood() { mapperConfig.setMatch("com.company.meter.*.foo"); mapperConfig.setName("foo"); mapperConfig.setLabels(Collections.singletonMap("type", "${0}")); - assertEquals( - "MapperConfig{match=com.company.meter.*.foo, name=foo, labels={type=${0}}}", - mapperConfig.toString()); + assertThat(mapperConfig) + .hasToString("MapperConfig{match=com.company.meter.*.foo, name=foo, labels={type=${0}}}"); } } diff --git a/prometheus-metrics-instrumentation-guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml index a4103e051..a93bc7960 100644 --- a/prometheus-metrics-instrumentation-guava/pom.xml +++ b/prometheus-metrics-instrumentation-guava/pom.xml @@ -54,28 +54,6 @@ 33.2.1-jre provided - - - - junit - junit - 4.13.2 - test - - - - org.mockito - mockito-core - 5.12.0 - test - - - org.assertj - assertj-core - 3.26.3 - test - - io.prometheus prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java b/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java index 96de845a8..3931520ff 100644 --- a/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java +++ b/prometheus-metrics-instrumentation-guava/src/test/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollectorTest.java @@ -1,7 +1,7 @@ package io.prometheus.metrics.instrumentation.guava; -import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -20,9 +20,9 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class CacheMetricsCollectorTest { +class CacheMetricsCollectorTest { @Test public void cacheExposesMetricsForHitMissAndEviction() { @@ -68,7 +68,7 @@ public void cacheExposesMetricsForHitMissAndEviction() { + "guava_cache_size{cache=\"users\"} 2.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(registry)); + assertThat(convertToOpenMetricsFormat(registry)).isEqualTo(expected); } @SuppressWarnings("unchecked") @@ -107,7 +107,7 @@ public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { (SummarySnapshot.SummaryDataPointSnapshot) getDataPointSnapshot(registry, "guava_cache_load_duration_seconds", "loadingusers"); - assertEquals(3, loadDuration.getCount()); + assertThat(loadDuration.getCount()).isEqualTo(3); assertThat(loadDuration.getSum()).isGreaterThan(0); } @@ -116,7 +116,7 @@ private void assertCounterMetric( final CounterSnapshot.CounterDataPointSnapshot dataPointSnapshot = (CounterSnapshot.CounterDataPointSnapshot) getDataPointSnapshot(registry, name, cacheName); - assertEquals(value, dataPointSnapshot.getValue(), 0); + assertThat(dataPointSnapshot.getValue()).isCloseTo(value, offset(0.0)); } private DataPointSnapshot getDataPointSnapshot( diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index c847500db..c0a847509 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -49,18 +49,6 @@ - - junit - junit - 4.13.2 - test - - - org.mockito - mockito-core - 5.12.0 - test - io.prometheus prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ExampleExporterForManualTesting.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ExampleExporterForManualTesting.java index b3d1c8169..0bea87baf 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ExampleExporterForManualTesting.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ExampleExporterForManualTesting.java @@ -3,7 +3,7 @@ import io.prometheus.metrics.exporter.httpserver.HTTPServer; import java.io.IOException; -public class ExampleExporterForManualTesting { +class ExampleExporterForManualTesting { public static void main(String[] args) throws IOException, InterruptedException { diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java index cad2e8eb5..5d4523351 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetricsTest.java @@ -1,7 +1,7 @@ package io.prometheus.metrics.instrumentation.jvm; import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -12,16 +12,16 @@ import java.io.IOException; import java.lang.management.BufferPoolMXBean; import java.util.Arrays; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class JvmBufferPoolMetricsTest { +class JvmBufferPoolMetricsTest { private final BufferPoolMXBean directBuffer = Mockito.mock(BufferPoolMXBean.class); private final BufferPoolMXBean mappedBuffer = Mockito.mock(BufferPoolMXBean.class); - @Before + @BeforeEach public void setUp() { when(directBuffer.getName()).thenReturn("direct"); when(directBuffer.getCount()).thenReturn(2L); @@ -42,8 +42,7 @@ public void testGoodCase() throws IOException { MetricSnapshots snapshots = registry.scrape(); String expected = - "" - + "# TYPE jvm_buffer_pool_capacity_bytes gauge\n" + "# TYPE jvm_buffer_pool_capacity_bytes gauge\n" + "# UNIT jvm_buffer_pool_capacity_bytes bytes\n" + "# HELP jvm_buffer_pool_capacity_bytes Bytes capacity of a given JVM buffer pool.\n" + "jvm_buffer_pool_capacity_bytes{pool=\"direct\"} 3456.0\n" @@ -59,7 +58,7 @@ public void testGoodCase() throws IOException { + "jvm_buffer_pool_used_bytes{pool=\"mapped\"} 2345.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java index 0d8d77b51..6070aebba 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetricsTest.java @@ -1,7 +1,7 @@ package io.prometheus.metrics.instrumentation.jvm; import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -11,15 +11,15 @@ import io.prometheus.metrics.model.snapshots.MetricSnapshots; import java.io.IOException; import java.lang.management.ClassLoadingMXBean; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class JvmClassLoadingMetricsTest { +class JvmClassLoadingMetricsTest { private final ClassLoadingMXBean mockClassLoadingBean = Mockito.mock(ClassLoadingMXBean.class); - @Before + @BeforeEach public void setUp() { when(mockClassLoadingBean.getLoadedClassCount()).thenReturn(1000); when(mockClassLoadingBean.getTotalLoadedClassCount()).thenReturn(2000L); @@ -33,8 +33,7 @@ public void testGoodCase() throws IOException { MetricSnapshots snapshots = registry.scrape(); String expected = - "" - + "# TYPE jvm_classes_currently_loaded gauge\n" + "# TYPE jvm_classes_currently_loaded gauge\n" + "# HELP jvm_classes_currently_loaded The number of classes that are currently loaded in the JVM\n" + "jvm_classes_currently_loaded 1000.0\n" + "# TYPE jvm_classes_loaded counter\n" @@ -45,7 +44,7 @@ public void testGoodCase() throws IOException { + "jvm_classes_unloaded_total 500.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java index e966d0c11..caddb89ea 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetricsTest.java @@ -1,7 +1,7 @@ package io.prometheus.metrics.instrumentation.jvm; import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.internal.verification.VerificationModeFactory.times; @@ -11,15 +11,15 @@ import io.prometheus.metrics.model.snapshots.MetricSnapshots; import java.io.IOException; import java.lang.management.CompilationMXBean; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class JvmCompilationMetricsTest { +class JvmCompilationMetricsTest { private final CompilationMXBean mockCompilationBean = Mockito.mock(CompilationMXBean.class); - @Before + @BeforeEach public void setUp() { when(mockCompilationBean.getTotalCompilationTime()).thenReturn(10000L); when(mockCompilationBean.isCompilationTimeMonitoringSupported()).thenReturn(true); @@ -32,14 +32,13 @@ public void testGoodCase() throws IOException { MetricSnapshots snapshots = registry.scrape(); String expected = - "" - + "# TYPE jvm_compilation_time_seconds counter\n" + "# TYPE jvm_compilation_time_seconds counter\n" + "# UNIT jvm_compilation_time_seconds seconds\n" + "# HELP jvm_compilation_time_seconds The total time in seconds taken for HotSpot class compilation\n" + "jvm_compilation_time_seconds_total 10.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test @@ -54,6 +53,6 @@ public void testIgnoredMetricNotScraped() { MetricSnapshots snapshots = registry.scrape(filter); verify(mockCompilationBean, times(0)).getTotalCompilationTime(); - assertEquals(0, snapshots.size()); + assertThat(snapshots.size()).isZero(); } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java index 5bbf3a427..3a09b4ef0 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetricsTest.java @@ -1,7 +1,7 @@ package io.prometheus.metrics.instrumentation.jvm; import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -13,16 +13,16 @@ import java.lang.management.GarbageCollectorMXBean; import java.util.Arrays; import java.util.concurrent.TimeUnit; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class JvmGarbageCollectorMetricsTest { +class JvmGarbageCollectorMetricsTest { private final GarbageCollectorMXBean mockGcBean1 = Mockito.mock(GarbageCollectorMXBean.class); private final GarbageCollectorMXBean mockGcBean2 = Mockito.mock(GarbageCollectorMXBean.class); - @Before + @BeforeEach public void setUp() { when(mockGcBean1.getName()).thenReturn("MyGC1"); when(mockGcBean1.getCollectionCount()).thenReturn(100L); @@ -41,8 +41,7 @@ public void testGoodCase() throws IOException { MetricSnapshots snapshots = registry.scrape(); String expected = - "" - + "# TYPE jvm_gc_collection_seconds summary\n" + "# TYPE jvm_gc_collection_seconds summary\n" + "# UNIT jvm_gc_collection_seconds seconds\n" + "# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.\n" + "jvm_gc_collection_seconds_count{gc=\"MyGC1\"} 100\n" @@ -51,7 +50,7 @@ public void testGoodCase() throws IOException { + "jvm_gc_collection_seconds_sum{gc=\"MyGC2\"} 20.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test @@ -67,6 +66,6 @@ public void testIgnoredMetricNotScraped() { verify(mockGcBean1, times(0)).getCollectionTime(); verify(mockGcBean1, times(0)).getCollectionCount(); - assertEquals(0, snapshots.size()); + assertThat(snapshots.size()).isZero(); } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java index 94bdbbee3..a10bb1b7b 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetricsTest.java @@ -1,7 +1,7 @@ package io.prometheus.metrics.instrumentation.jvm; import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -14,11 +14,11 @@ import java.lang.management.MemoryPoolMXBean; import java.lang.management.MemoryUsage; import java.util.Arrays; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class JvmMemoryMetricsTest { +class JvmMemoryMetricsTest { private final MemoryMXBean mockMemoryBean = Mockito.mock(MemoryMXBean.class); private final MemoryPoolMXBean mockPoolsBeanEdenSpace = Mockito.mock(MemoryPoolMXBean.class); @@ -30,7 +30,7 @@ public class JvmMemoryMetricsTest { private final MemoryUsage memoryUsagePoolCollectionEdenSpace = Mockito.mock(MemoryUsage.class); private final MemoryUsage memoryUsagePoolCollectionOldGen = Mockito.mock(MemoryUsage.class); - @Before + @BeforeEach public void setUp() { when(mockMemoryBean.getHeapMemoryUsage()).thenReturn(memoryUsageHeap); when(mockMemoryBean.getNonHeapMemoryUsage()).thenReturn(memoryUsageNonHeap); @@ -88,8 +88,7 @@ public void testGoodCase() throws IOException { MetricSnapshots snapshots = registry.scrape(); String expected = - "" - + "# TYPE jvm_memory_committed_bytes gauge\n" + "# TYPE jvm_memory_committed_bytes gauge\n" + "# UNIT jvm_memory_committed_bytes bytes\n" + "# HELP jvm_memory_committed_bytes Committed (bytes) of a given JVM memory area.\n" + "jvm_memory_committed_bytes{area=\"heap\"} 4.0\n" @@ -154,7 +153,7 @@ public void testGoodCase() throws IOException { + "jvm_memory_used_bytes{area=\"nonheap\"} 6.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java index 9a75e9e15..d9714e30c 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java @@ -1,7 +1,8 @@ package io.prometheus.metrics.instrumentation.jvm; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; +import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.metrics.Counter; import io.prometheus.metrics.instrumentation.jvm.JvmMemoryPoolAllocationMetrics.AllocationCountingNotificationListener; @@ -9,9 +10,9 @@ import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class JvmMemoryPoolAllocationMetricsTest { +class JvmMemoryPoolAllocationMetricsTest { @Test public void testListenerLogic() { @@ -22,31 +23,31 @@ public void testListenerLogic() { // Increase by 123 listener.handleMemoryPool("TestPool", 0, 123); - assertEquals(123, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + assertThat(getCountByPool("test", "TestPool", registry.scrape())).isCloseTo(123, offset(0.0)); // No increase listener.handleMemoryPool("TestPool", 123, 123); - assertEquals(123, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + assertThat(getCountByPool("test", "TestPool", registry.scrape())).isCloseTo(123, offset(0.0)); // No increase, then decrease to 0 listener.handleMemoryPool("TestPool", 123, 0); - assertEquals(123, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + assertThat(getCountByPool("test", "TestPool", registry.scrape())).isCloseTo(123, offset(0.0)); // No increase, then increase by 7 listener.handleMemoryPool("TestPool", 0, 7); - assertEquals(130, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + assertThat(getCountByPool("test", "TestPool", registry.scrape())).isCloseTo(130, offset(0.0)); // Increase by 10, then decrease to 10 listener.handleMemoryPool("TestPool", 17, 10); - assertEquals(140, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + assertThat(getCountByPool("test", "TestPool", registry.scrape())).isCloseTo(140, offset(0.0)); // Increase by 7, then increase by 3 listener.handleMemoryPool("TestPool", 17, 20); - assertEquals(150, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + assertThat(getCountByPool("test", "TestPool", registry.scrape())).isCloseTo(150, offset(0.0)); // Decrease to 17, then increase by 3 listener.handleMemoryPool("TestPool", 17, 20); - assertEquals(153, getCountByPool("test", "TestPool", registry.scrape()), 0.0); + assertThat(getCountByPool("test", "TestPool", registry.scrape())).isCloseTo(153, offset(0.0)); } private double getCountByPool(String metricName, String poolName, MetricSnapshots snapshots) { diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java index f0df40538..ab8b0d61d 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java @@ -1,19 +1,18 @@ package io.prometheus.metrics.instrumentation.jvm; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class JvmMetricsTest { +class JvmMetricsTest { @Test public void testRegisterIdempotent() { PrometheusRegistry registry = new PrometheusRegistry(); - assertEquals(0, registry.scrape().size()); + assertThat(registry.scrape().size()).isZero(); JvmMetrics.builder().register(registry); - assertTrue(registry.scrape().size() > 0); + assertThat(registry.scrape().size()).isGreaterThan(0); JvmMetrics.builder().register(registry); } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java index e5a90e38d..3bc424985 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java @@ -1,17 +1,17 @@ package io.prometheus.metrics.instrumentation.jvm; import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import java.io.IOException; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class JvmNativeMemoryMetricsTest { +class JvmNativeMemoryMetricsTest { @Test public void testNativeMemoryTrackingFail() throws IOException { @@ -27,7 +27,7 @@ public void testNativeMemoryTrackingFail() throws IOException { String expected = "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test @@ -44,7 +44,7 @@ public void testNativeMemoryTrackingEmpty() throws IOException { String expected = "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test @@ -62,7 +62,7 @@ public void testNativeMemoryTrackingDisabled() throws IOException { String expected = "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test @@ -172,8 +172,7 @@ public void testNativeMemoryTrackingEnabled() throws IOException { MetricSnapshots snapshots = registry.scrape(); String expected = - "" - + "# TYPE jvm_native_memory_committed_bytes gauge\n" + "# TYPE jvm_native_memory_committed_bytes gauge\n" + "# UNIT jvm_native_memory_committed_bytes bytes\n" + "# HELP jvm_native_memory_committed_bytes Committed bytes of a given JVM. Committed memory represents the amount of memory the JVM is using right now.\n" + "jvm_native_memory_committed_bytes{pool=\"Arena Chunk\"} 503216.0\n" @@ -225,6 +224,6 @@ public void testNativeMemoryTrackingEnabled() throws IOException { + "jvm_native_memory_reserved_bytes{pool=\"Tracing\"} 33097.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java index 1dcaff2d9..35057bd51 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetricTest.java @@ -1,14 +1,14 @@ package io.prometheus.metrics.instrumentation.jvm; import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import java.io.IOException; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class JvmRuntimeInfoMetricTest { +class JvmRuntimeInfoMetricTest { @Test public void testGoodCase() throws IOException { @@ -21,12 +21,11 @@ public void testGoodCase() throws IOException { MetricSnapshots snapshots = registry.scrape(); String expected = - "" - + "# TYPE jvm_runtime info\n" + "# TYPE jvm_runtime info\n" + "# HELP jvm_runtime JVM runtime info\n" + "jvm_runtime_info{runtime=\"OpenJDK Runtime Environment\",vendor=\"Oracle Corporation\",version=\"1.8.0_382-b05\"} 1\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java index 3aaa5b94b..effd79117 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.instrumentation.jvm; import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -18,18 +18,18 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.CountDownLatch; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class JvmThreadsMetricsTest { +class JvmThreadsMetricsTest { private final ThreadMXBean mockThreadsBean = Mockito.mock(ThreadMXBean.class); private final ThreadInfo mockThreadInfoBlocked = Mockito.mock(ThreadInfo.class); private final ThreadInfo mockThreadInfoRunnable1 = Mockito.mock(ThreadInfo.class); private final ThreadInfo mockThreadInfoRunnable2 = Mockito.mock(ThreadInfo.class); - @Before + @BeforeEach public void setUp() { when(mockThreadsBean.getThreadCount()).thenReturn(300); when(mockThreadsBean.getDaemonThreadCount()).thenReturn(200); @@ -55,8 +55,7 @@ public void testGoodCase() throws IOException { MetricSnapshots snapshots = registry.scrape(); String expected = - "" - + "# TYPE jvm_threads_current gauge\n" + "# TYPE jvm_threads_current gauge\n" + "# HELP jvm_threads_current Current thread count of a JVM\n" + "jvm_threads_current 300.0\n" + "# TYPE jvm_threads_daemon gauge\n" @@ -85,7 +84,7 @@ public void testGoodCase() throws IOException { + "jvm_threads_state{state=\"WAITING\"} 0.0\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test @@ -134,9 +133,9 @@ public void testInvalidThreadIds() { Map actual = getCountByState(registry.scrape()); - assertEquals(expected.size(), actual.size()); + assertThat(actual).hasSameSizeAs(expected); for (String threadState : expected.keySet()) { - assertEquals(expected.get(threadState), actual.get(threadState), 0.0); + assertThat(actual.get(threadState)).isCloseTo(expected.get(threadState), offset(0.0)); } } finally { for (int i = 0; i < numberOfInvalidThreadIds; i++) { @@ -152,7 +151,7 @@ private Map getCountByState(MetricSnapshots snapshots) { for (GaugeSnapshot.GaugeDataPointSnapshot data : ((GaugeSnapshot) snapshot).getDataPoints()) { String state = data.getLabels().get("state"); - assertNotNull(state); + assertThat(state).isNotNull(); result.put(state, data.getValue()); } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java index 6dafa1fb3..2a447a5ec 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetricsTest.java @@ -1,7 +1,7 @@ package io.prometheus.metrics.instrumentation.jvm; import static io.prometheus.metrics.instrumentation.jvm.TestUtil.convertToOpenMetricsFormat; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; @@ -15,11 +15,11 @@ import java.io.IOException; import java.lang.management.RuntimeMXBean; import java.util.concurrent.TimeUnit; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class ProcessMetricsTest { +class ProcessMetricsTest { private final com.sun.management.UnixOperatingSystemMXBean sunOsBean = Mockito.mock(com.sun.management.UnixOperatingSystemMXBean.class); @@ -29,7 +29,7 @@ public class ProcessMetricsTest { private final ProcessMetrics.Grepper windowsGrepper = Mockito.mock(ProcessMetrics.Grepper.class); private final RuntimeMXBean runtimeBean = Mockito.mock(RuntimeMXBean.class); - @Before + @BeforeEach public void setUp() throws IOException { when(sunOsBean.getProcessCpuTime()).thenReturn(TimeUnit.MILLISECONDS.toNanos(72)); when(sunOsBean.getOpenFileDescriptorCount()).thenReturn(127L); @@ -52,8 +52,7 @@ public void testGoodCase() throws IOException { MetricSnapshots snapshots = registry.scrape(); String expected = - "" - + "# TYPE process_cpu_seconds counter\n" + "# TYPE process_cpu_seconds counter\n" + "# UNIT process_cpu_seconds seconds\n" + "# HELP process_cpu_seconds Total user and system CPU time spent in seconds.\n" + "process_cpu_seconds_total 0.072\n" @@ -66,30 +65,27 @@ public void testGoodCase() throws IOException { // To allow running this test in non-linux environments if (ProcessMetrics.PROC_SELF_STATUS.canRead()) { expected += - "" - + "# TYPE process_resident_memory_bytes gauge\n" + "# TYPE process_resident_memory_bytes gauge\n" + "# UNIT process_resident_memory_bytes bytes\n" + "# HELP process_resident_memory_bytes Resident memory size in bytes.\n" + "process_resident_memory_bytes 1036288.0\n"; } expected += - "" - + "# TYPE process_start_time_seconds gauge\n" + "# TYPE process_start_time_seconds gauge\n" + "# UNIT process_start_time_seconds seconds\n" + "# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.\n" + "process_start_time_seconds 37.1\n"; // To allow running this test in non-linux environments if (ProcessMetrics.PROC_SELF_STATUS.canRead()) { expected += - "" - + "# TYPE process_virtual_memory_bytes gauge\n" + "# TYPE process_virtual_memory_bytes gauge\n" + "# UNIT process_virtual_memory_bytes bytes\n" + "# HELP process_virtual_memory_bytes Virtual memory size in bytes.\n" + "process_virtual_memory_bytes 6180864.0\n"; } expected += "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test @@ -103,14 +99,13 @@ public void testMinimal() throws IOException { MetricSnapshots snapshots = registry.scrape(); String expected = - "" - + "# TYPE process_start_time_seconds gauge\n" + "# TYPE process_start_time_seconds gauge\n" + "# UNIT process_start_time_seconds seconds\n" + "# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.\n" + "process_start_time_seconds 37.1\n" + "# EOF\n"; - assertEquals(expected, convertToOpenMetricsFormat(snapshots)); + assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } @Test diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/TestUtil.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/TestUtil.java index a86517368..70a093f4b 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/TestUtil.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/TestUtil.java @@ -6,7 +6,7 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; -public class TestUtil { +class TestUtil { static String convertToOpenMetricsFormat(MetricSnapshots snapshots) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index 8d3051dfe..82bbf96cf 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -35,14 +35,4 @@ fabian@fstab.de - - - - - junit - junit - 4.13.2 - test - - diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java index 6c7917bda..0dc9cdee1 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MetricNameFilterTest.java @@ -1,21 +1,16 @@ package io.prometheus.metrics.model.registry; +import static org.assertj.core.api.Assertions.assertThat; + import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -public class MetricNameFilterTest { +import org.junit.jupiter.api.Test; - private PrometheusRegistry registry; +class MetricNameFilterTest { - @Before - public void setUp() { - registry = new PrometheusRegistry(); - } + private final PrometheusRegistry registry = new PrometheusRegistry(); @Test public void testCounter() { @@ -44,28 +39,28 @@ public void testCounter() { .build()); MetricNameFilter filter = MetricNameFilter.builder().build(); - Assert.assertEquals(2, registry.scrape(filter).size()); + assertThat(registry.scrape(filter).size()).isEqualTo(2); filter = MetricNameFilter.builder().nameMustStartWith("counter1").build(); MetricSnapshots snapshots = registry.scrape(filter); - Assert.assertEquals(1, snapshots.size()); - Assert.assertEquals("counter1", snapshots.get(0).getMetadata().getName()); + assertThat(snapshots.size()).isOne(); + assertThat(snapshots.get(0).getMetadata().getName()).isEqualTo("counter1"); filter = MetricNameFilter.builder().nameMustNotStartWith("counter1").build(); snapshots = registry.scrape(filter); - Assert.assertEquals(1, snapshots.size()); - Assert.assertEquals("counter2", snapshots.get(0).getMetadata().getName()); + assertThat(snapshots.size()).isOne(); + assertThat(snapshots.get(0).getMetadata().getName()).isEqualTo("counter2"); filter = MetricNameFilter.builder().nameMustBeEqualTo("counter2_total", "counter1_total").build(); snapshots = registry.scrape(filter); - Assert.assertEquals(2, snapshots.size()); + assertThat(snapshots.size()).isEqualTo(2); filter = MetricNameFilter.builder() .nameMustBeEqualTo("counter1_total") .nameMustNotBeEqualTo("counter1_total") .build(); - Assert.assertEquals(0, registry.scrape(filter).size()); + assertThat(registry.scrape(filter).size()).isZero(); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java index b302f4508..b8810316f 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/MultiCollectorNameFilterTest.java @@ -1,100 +1,89 @@ package io.prometheus.metrics.model.registry; +import static org.assertj.core.api.Assertions.assertThat; + import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.function.Predicate; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -public class MultiCollectorNameFilterTest { - - private final boolean[] collectCalled = {false}; - private PrometheusRegistry registry; - private Predicate includedNames = null; - private List prometheusNames = new ArrayList<>(); - - @Before - public void setUp() { - registry = new PrometheusRegistry(); - collectCalled[0] = false; - includedNames = null; - prometheusNames = Collections.emptyList(); - - registry.register( - new MultiCollector() { - @Override - public MetricSnapshots collect() { - collectCalled[0] = true; - return MetricSnapshots.builder() - .metricSnapshot( - CounterSnapshot.builder() - .name("counter_1") - .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) - .build()) - .metricSnapshot( - GaugeSnapshot.builder() - .name("gauge_2") - .dataPoint(GaugeDataPointSnapshot.builder().value(1.0).build()) - .build()) - .build(); - } - - @Override - public List getPrometheusNames() { - return prometheusNames; - } - }); +import java.util.concurrent.atomic.AtomicBoolean; +import org.junit.jupiter.api.Test; + +class MultiCollectorNameFilterTest { + + private static class Registry extends PrometheusRegistry { + private final AtomicBoolean collectCalled = new AtomicBoolean(); + + public Registry(List prometheusNames) { + register( + new MultiCollector() { + @Override + public MetricSnapshots collect() { + collectCalled.set(true); + return MetricSnapshots.builder() + .metricSnapshot( + CounterSnapshot.builder() + .name("counter_1") + .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) + .build()) + .metricSnapshot( + GaugeSnapshot.builder() + .name("gauge_2") + .dataPoint(GaugeDataPointSnapshot.builder().value(1.0).build()) + .build()) + .build(); + } + + @Override + public List getPrometheusNames() { + return prometheusNames; + } + }); + } + + public boolean collectCalled() { + return collectCalled.get(); + } } @Test public void testPartialFilter() { - - includedNames = name -> name.equals("counter_1"); - - MetricSnapshots snapshots = registry.scrape(includedNames); - Assert.assertTrue(collectCalled[0]); - Assert.assertEquals(1, snapshots.size()); - Assert.assertEquals("counter_1", snapshots.get(0).getMetadata().getName()); + Registry registry = new Registry(Collections.emptyList()); + MetricSnapshots snapshots = registry.scrape(name -> name.equals("counter_1")); + assertThat(registry.collectCalled()).isTrue(); + assertThat(snapshots.size()).isOne(); + assertThat(snapshots.get(0).getMetadata().getName()).isEqualTo("counter_1"); } @Test public void testPartialFilterWithPrometheusNames() { + Registry registry = new Registry(Arrays.asList("counter_1", "gauge_2")); - includedNames = name -> name.equals("counter_1"); - prometheusNames = Arrays.asList("counter_1", "gauge_2"); - - MetricSnapshots snapshots = registry.scrape(includedNames); - Assert.assertTrue(collectCalled[0]); - Assert.assertEquals(1, snapshots.size()); - Assert.assertEquals("counter_1", snapshots.get(0).getMetadata().getName()); + MetricSnapshots snapshots = registry.scrape(name -> name.equals("counter_1")); + assertThat(registry.collectCalled()).isTrue(); + assertThat(snapshots.size()).isOne(); + assertThat(snapshots.get(0).getMetadata().getName()).isEqualTo("counter_1"); } @Test public void testCompleteFilter_CollectCalled() { - - includedNames = name -> !name.equals("counter_1") && !name.equals("gauge_2"); - - MetricSnapshots snapshots = registry.scrape(includedNames); - Assert.assertTrue(collectCalled[0]); - Assert.assertEquals(0, snapshots.size()); + Registry registry = new Registry(Collections.emptyList()); + MetricSnapshots snapshots = + registry.scrape(name -> !name.equals("counter_1") && !name.equals("gauge_2")); + assertThat(registry.collectCalled()).isTrue(); + assertThat(snapshots.size()).isZero(); } @Test public void testCompleteFilter_CollectNotCalled() { - - includedNames = name -> !name.equals("counter_1") && !name.equals("gauge_2"); - prometheusNames = Arrays.asList("counter_1", "gauge_2"); - - MetricSnapshots snapshots = registry.scrape(includedNames); - Assert.assertFalse(collectCalled[0]); - Assert.assertEquals(0, snapshots.size()); + Registry registry = new Registry(Arrays.asList("counter_1", "gauge_2")); + MetricSnapshots snapshots = + registry.scrape(name -> !name.equals("counter_1") && !name.equals("gauge_2")); + assertThat(registry.collectCalled()).isFalse(); + assertThat(snapshots.size()).isZero(); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java index c5dd287d7..55e8b0be4 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java @@ -1,15 +1,18 @@ package io.prometheus.metrics.model.registry; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.api.Assertions.fail; + import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import java.util.Arrays; import java.util.List; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class PrometheusRegistryTest { +class PrometheusRegistryTest { Collector noName = () -> GaugeSnapshot.builder().name("no_name_gauge").build(); @@ -90,18 +93,19 @@ public void registerNoName() { try { registry.scrape(); } catch (IllegalStateException e) { - Assert.assertTrue( - e.getMessage().contains("duplicate") && e.getMessage().contains("no_name_gauge")); + assertThat(e.getMessage().contains("duplicate") && e.getMessage().contains("no_name_gauge")) + .isTrue(); return; } - Assert.fail("Expected duplicate name exception"); + fail("Expected duplicate name exception"); } - @Test(expected = IllegalStateException.class) + @Test public void registerDuplicateName() { PrometheusRegistry registry = new PrometheusRegistry(); registry.register(counterA1); - registry.register(counterA2); + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> registry.register(counterA2)); } @Test @@ -111,22 +115,23 @@ public void registerOk() { registry.register(counterB); registry.register(gaugeA); MetricSnapshots snapshots = registry.scrape(); - Assert.assertEquals(3, snapshots.size()); + assertThat(snapshots.size()).isEqualTo(3); registry.unregister(counterB); snapshots = registry.scrape(); - Assert.assertEquals(2, snapshots.size()); + assertThat(snapshots.size()).isEqualTo(2); registry.register(counterB); snapshots = registry.scrape(); - Assert.assertEquals(3, snapshots.size()); + assertThat(snapshots.size()).isEqualTo(3); } - @Test(expected = IllegalStateException.class) + @Test public void registerDuplicateMultiCollector() { PrometheusRegistry registry = new PrometheusRegistry(); registry.register(multiCollector); - registry.register(multiCollector); + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> registry.register(multiCollector)); } @Test @@ -134,10 +139,10 @@ public void registerOkMultiCollector() { PrometheusRegistry registry = new PrometheusRegistry(); registry.register(multiCollector); MetricSnapshots snapshots = registry.scrape(); - Assert.assertEquals(2, snapshots.size()); + assertThat(snapshots.size()).isEqualTo(2); registry.unregister(multiCollector); snapshots = registry.scrape(); - Assert.assertEquals(0, snapshots.size()); + assertThat(snapshots.size()).isZero(); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java index 082981431..278a8fafc 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java @@ -1,10 +1,13 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; + import java.util.Iterator; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class ClassicHistogramBucketsTest { +class ClassicHistogramBucketsTest { @Test public void testGoodCase() { @@ -15,7 +18,7 @@ public void testGoodCase() { .bucket(1024, 3) .bucket(Double.POSITIVE_INFINITY, 8) .build(); - Assert.assertEquals(4, buckets.size()); + assertThat(buckets.size()).isEqualTo(4); } @Test @@ -26,64 +29,80 @@ public void testSort() { .bucket(2, 0) .bucket(Double.POSITIVE_INFINITY, 3) .build(); - Assert.assertEquals(3, buckets.size()); - Assert.assertEquals(2, buckets.getUpperBound(0), 0.0); - Assert.assertEquals(7, buckets.getUpperBound(1), 0.0); - Assert.assertEquals(Double.POSITIVE_INFINITY, buckets.getUpperBound(2), 0.0); - Assert.assertEquals(0, buckets.getCount(0)); - Assert.assertEquals(2, buckets.getCount(1)); - Assert.assertEquals(3, buckets.getCount(2)); + assertThat(buckets.size()).isEqualTo(3); + assertThat(buckets.getUpperBound(0)).isCloseTo(2, offset(0.0)); + assertThat(buckets.getUpperBound(1)).isCloseTo(7, offset(0.0)); + assertThat(buckets.getUpperBound(2)).isCloseTo(Double.POSITIVE_INFINITY, offset(0.0)); + assertThat(buckets.getCount(0)).isZero(); + assertThat(buckets.getCount(1)).isEqualTo(2); + assertThat(buckets.getCount(2)).isEqualTo(3); } @Test public void testMinimalBuckets() { ClassicHistogramBuckets buckets = ClassicHistogramBuckets.builder().bucket(Double.POSITIVE_INFINITY, 0).build(); - Assert.assertEquals(1, buckets.size()); + assertThat(buckets.size()).isOne(); } - @Test(expected = IllegalArgumentException.class) + @Test public void testInfBucketMissing() { - ClassicHistogramBuckets.builder().bucket(Double.NEGATIVE_INFINITY, 0).build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> ClassicHistogramBuckets.builder().bucket(Double.NEGATIVE_INFINITY, 0).build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testNegativeCount() { - ClassicHistogramBuckets.builder().bucket(0.0, 10).bucket(Double.POSITIVE_INFINITY, -1).build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + ClassicHistogramBuckets.builder() + .bucket(0.0, 10) + .bucket(Double.POSITIVE_INFINITY, -1) + .build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testNaNBoundary() { - ClassicHistogramBuckets.builder() - .bucket(0.0, 1) - .bucket(Double.NaN, 2) - .bucket(Double.POSITIVE_INFINITY, 0) - .build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + ClassicHistogramBuckets.builder() + .bucket(0.0, 1) + .bucket(Double.NaN, 2) + .bucket(Double.POSITIVE_INFINITY, 0) + .build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testDuplicateBoundary() { - ClassicHistogramBuckets.builder() - .bucket(1.0, 1) - .bucket(2.0, 2) - .bucket(1.0, 2) - .bucket(Double.POSITIVE_INFINITY, 0) - .build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + ClassicHistogramBuckets.builder() + .bucket(1.0, 1) + .bucket(2.0, 2) + .bucket(1.0, 2) + .bucket(Double.POSITIVE_INFINITY, 0) + .build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testEmptyBuckets() { - ClassicHistogramBuckets.builder().build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> ClassicHistogramBuckets.builder().build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testDifferentLength() { double[] upperBounds = new double[] {0.7, 1.3, Double.POSITIVE_INFINITY}; long[] counts = new long[] {13, 178, 1024, 3000}; - ClassicHistogramBuckets.of(upperBounds, counts); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> ClassicHistogramBuckets.of(upperBounds, counts)); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testImmutable() { ClassicHistogramBuckets buckets = ClassicHistogramBuckets.builder() @@ -93,6 +112,6 @@ public void testImmutable() { .build(); Iterator iterator = buckets.iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/CounterSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/CounterSnapshotTest.java index 96e8df4c9..e381e5903 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/CounterSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/CounterSnapshotTest.java @@ -1,12 +1,15 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; + import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; import java.util.Iterator; import java.util.concurrent.TimeUnit; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class CounterSnapshotTest { +class CounterSnapshotTest { @Test public void testCompleteGoodCase() { @@ -47,22 +50,22 @@ public void testCompleteGoodCase() { .build(); SnapshotTestUtil.assertMetadata( snapshot, "http_server_requests_seconds", "total time spent serving requests", "seconds"); - Assert.assertEquals(2, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).hasSize(2); CounterDataPointSnapshot data = snapshot .getDataPoints() .get(0); // data is sorted by labels, so the first one should be path="/hello" - Assert.assertEquals(Labels.of("path", "/hello"), data.getLabels()); - Assert.assertEquals(2.0, data.getValue(), 0.0); - Assert.assertEquals(4.0, data.getExemplar().getValue(), 0.0); - Assert.assertEquals(createdTimestamp2, data.getCreatedTimestampMillis()); - Assert.assertFalse(data.hasScrapeTimestamp()); + assertThat((Iterable) data.getLabels()).isEqualTo(Labels.of("path", "/hello")); + assertThat(data.getValue()).isCloseTo(2.0, offset(0.0)); + assertThat(data.getExemplar().getValue()).isCloseTo(4.0, offset(0.0)); + assertThat(data.getCreatedTimestampMillis()).isEqualTo(createdTimestamp2); + assertThat(data.hasScrapeTimestamp()).isFalse(); data = snapshot.getDataPoints().get(1); - Assert.assertEquals(Labels.of("path", "/world"), data.getLabels()); - Assert.assertEquals(1.0, data.getValue(), 0.0); - Assert.assertEquals(3.0, data.getExemplar().getValue(), 0.0); - Assert.assertEquals(createdTimestamp1, data.getCreatedTimestampMillis()); - Assert.assertFalse(data.hasScrapeTimestamp()); + assertThat((Iterable) data.getLabels()).isEqualTo(Labels.of("path", "/world")); + assertThat(data.getValue()).isCloseTo(1.0, offset(0.0)); + assertThat(data.getExemplar().getValue()).isCloseTo(3.0, offset(0.0)); + assertThat(data.getCreatedTimestampMillis()).isEqualTo(createdTimestamp1); + assertThat(data.hasScrapeTimestamp()).isFalse(); } @Test @@ -73,32 +76,34 @@ public void testMinimalGoodCase() { .dataPoint(CounterDataPointSnapshot.builder().value(1.0).build()) .build(); SnapshotTestUtil.assertMetadata(snapshot, "events", null, null); - Assert.assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).hasSize(1); CounterDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertEquals(Labels.EMPTY, data.getLabels()); - Assert.assertEquals(1.0, data.getValue(), 0.0); - Assert.assertNull(data.getExemplar()); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); + assertThat((Iterable) data.getLabels()).isEmpty(); + assertThat(data.getValue()).isCloseTo(1.0, offset(0.0)); + assertThat(data.getExemplar()).isNull(); + assertThat(data.hasCreatedTimestamp()).isFalse(); + assertThat(data.hasScrapeTimestamp()).isFalse(); } @Test public void testEmptyCounter() { CounterSnapshot snapshot = CounterSnapshot.builder().name("events").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).isEmpty(); } - @Test(expected = IllegalArgumentException.class) + @Test public void testTotalSuffixPresent() { - CounterSnapshot.builder().name("test_total").build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> CounterSnapshot.builder().name("test_total").build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testValueMissing() { - CounterDataPointSnapshot.builder().build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> CounterDataPointSnapshot.builder().build()); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testDataImmutable() { CounterSnapshot snapshot = CounterSnapshot.builder() @@ -110,6 +115,6 @@ public void testDataImmutable() { .build(); Iterator iterator = snapshot.getDataPoints().iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarTest.java index 1a94b12f1..ebc875d5f 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarTest.java @@ -1,9 +1,13 @@ package io.prometheus.metrics.model.snapshots; -import org.junit.Assert; -import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; -public class ExemplarTest { +import org.assertj.core.api.IterableAssert; +import org.junit.jupiter.api.Test; + +class ExemplarTest { @Test public void testGoodCaseComplete() { @@ -16,47 +20,52 @@ public void testGoodCaseComplete() { .timestampMillis(timestamp) .labels(Labels.of("path", "/", "error", "none")) .build(); - Assert.assertEquals(2.2, exemplar.getValue(), 0.0); - Assert.assertEquals( - Labels.of( - Exemplar.TRACE_ID, - "abc123abc123", - Exemplar.SPAN_ID, - "def456def456", - "path", - "/", - "error", - "none"), - exemplar.getLabels()); - Assert.assertTrue(exemplar.hasTimestamp()); - Assert.assertEquals(timestamp, exemplar.getTimestampMillis()); + assertThat(exemplar.getValue()).isCloseTo(2.2, offset(0.0)); + assertLabels(exemplar.getLabels()) + .isEqualTo( + Labels.of( + Exemplar.TRACE_ID, + "abc123abc123", + Exemplar.SPAN_ID, + "def456def456", + "path", + "/", + "error", + "none")); + assertThat(exemplar.hasTimestamp()).isTrue(); + assertThat(exemplar.getTimestampMillis()).isEqualTo(timestamp); } - @Test(expected = IllegalStateException.class) + @Test public void testValueMissing() { - Exemplar.builder().build(); + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> Exemplar.builder().build()); } @Test public void testMinimal() { Exemplar exemplar = Exemplar.builder().value(0.0).build(); - Assert.assertEquals(0.0, exemplar.getValue(), 0.0); - Assert.assertEquals(Labels.EMPTY, exemplar.getLabels()); - Assert.assertFalse(exemplar.hasTimestamp()); + assertThat(exemplar.getValue()).isCloseTo(0.0, offset(0.0)); + assertLabels(exemplar.getLabels()).isEqualTo(Labels.EMPTY); + assertThat(exemplar.hasTimestamp()).isFalse(); } @Test public void testLabelsMergeTraceId() { Exemplar exemplar = Exemplar.builder().value(0.0).labels(Labels.of("a", "b")).traceId("abc").build(); - Assert.assertEquals(Labels.of("a", "b", "trace_id", "abc"), exemplar.getLabels()); + assertLabels(exemplar.getLabels()).isEqualTo(Labels.of("a", "b", "trace_id", "abc")); + } + + private static IterableAssert assertLabels(Labels labels) { + return assertThat((Iterable) labels); } @Test public void testLabelsMergeSpanId() { Exemplar exemplar = Exemplar.builder().value(0.0).labels(Labels.of("a", "b")).spanId("abc").build(); - Assert.assertEquals(Labels.of("a", "b", "span_id", "abc"), exemplar.getLabels()); + assertLabels(exemplar.getLabels()).isEqualTo(Labels.of("a", "b", "span_id", "abc")); } @Test @@ -68,13 +77,13 @@ public void testLabelsMergeTraceIdAndSpanId() { .spanId("abc") .traceId("def") .build(); - Assert.assertEquals( - Labels.of("span_id", "abc", "a", "b", "trace_id", "def"), exemplar.getLabels()); + assertLabels(exemplar.getLabels()) + .isEqualTo(Labels.of("span_id", "abc", "a", "b", "trace_id", "def")); } @Test public void testLabelsMergeNone() { Exemplar exemplar = Exemplar.builder().value(0.0).labels(Labels.of("a", "b")).build(); - Assert.assertEquals(Labels.of("a", "b"), exemplar.getLabels()); + assertLabels(exemplar.getLabels()).isEqualTo(Labels.of("a", "b")); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java index 93a1c1efa..74a3fbe8a 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java @@ -1,10 +1,13 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; + import java.util.Iterator; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class ExemplarsTest { +class ExemplarsTest { @Test public void testUpperBound() { @@ -13,19 +16,19 @@ public void testUpperBound() { Exemplar.builder().value(1.0).build(), Exemplar.builder().value(3.0).build(), Exemplar.builder().value(2.0).build()); - Assert.assertEquals(3, exemplars.size()); - Assert.assertEquals(1.0, exemplars.get(0).getValue(), 0.0); - Assert.assertEquals(3.0, exemplars.get(1).getValue(), 0.0); - Assert.assertEquals(2.0, exemplars.get(2).getValue(), 0.0); - Assert.assertEquals(1.0, exemplars.get(0.0, Double.POSITIVE_INFINITY).getValue(), 0.0); - Assert.assertEquals(1.0, exemplars.get(0.0, 1.0).getValue(), 0.0); - Assert.assertEquals(3.0, exemplars.get(1.0, 4.0).getValue(), 0.0); - Assert.assertEquals(3.0, exemplars.get(2.0, 3.0).getValue(), 0.0); - Assert.assertEquals(2.0, exemplars.get(1.0, 2.1).getValue(), 0.0); - Assert.assertNull(exemplars.get(2.0, 2.1)); + assertThat(exemplars.size()).isEqualTo(3); + assertThat(exemplars.get(0).getValue()).isCloseTo(1.0, offset(0.0)); + assertThat(exemplars.get(1).getValue()).isCloseTo(3.0, offset(0.0)); + assertThat(exemplars.get(2).getValue()).isCloseTo(2.0, offset(0.0)); + assertThat(exemplars.get(0.0, Double.POSITIVE_INFINITY).getValue()).isCloseTo(1.0, offset(0.0)); + assertThat(exemplars.get(0.0, 1.0).getValue()).isCloseTo(1.0, offset(0.0)); + assertThat(exemplars.get(1.0, 4.0).getValue()).isCloseTo(3.0, offset(0.0)); + assertThat(exemplars.get(2.0, 3.0).getValue()).isCloseTo(3.0, offset(0.0)); + assertThat(exemplars.get(1.0, 2.1).getValue()).isCloseTo(2.0, offset(0.0)); + assertThat(exemplars.get(2.0, 2.1)).isNull(); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testImmutable() { Exemplars exemplars = Exemplars.of( @@ -34,7 +37,7 @@ public void testImmutable() { Exemplar.builder().value(2.0).build()); Iterator iterator = exemplars.iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } @Test @@ -47,8 +50,8 @@ public void testGet() { Exemplar.builder().timestampMillis(System.currentTimeMillis()).value(1.0).build(); Exemplars exemplars = Exemplars.of(oldest, newest, middle); Exemplar result = exemplars.get(1.1, 1.9); // newest is not within these bounds - Assert.assertSame(result, middle); + assertThat(middle).isSameAs(result); result = exemplars.get(0.9, Double.POSITIVE_INFINITY); - Assert.assertSame(result, newest); + assertThat(newest).isSameAs(result); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/GaugeSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/GaugeSnapshotTest.java index fe7f386ba..1fd55d67e 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/GaugeSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/GaugeSnapshotTest.java @@ -1,12 +1,15 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; + import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; import java.util.Iterator; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class GaugeSnapshotTest { +class GaugeSnapshotTest { @Test public void testCompleteGoodCase() { @@ -42,22 +45,22 @@ public void testCompleteGoodCase() { .build()) .build(); SnapshotTestUtil.assertMetadata(snapshot, "cache_size_bytes", "cache size in Bytes", "bytes"); - Assert.assertEquals(2, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).hasSize(2); GaugeDataPointSnapshot data = snapshot .getDataPoints() .get(0); // data is sorted by labels, so the first one should be path="/hello" - Assert.assertEquals(Labels.of("env", "dev"), data.getLabels()); - Assert.assertEquals(128.0, data.getValue(), 0.0); - Assert.assertEquals(128.0, data.getExemplar().getValue(), 0.0); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); + assertThat((Iterable) data.getLabels()).isEqualTo(Labels.of("env", "dev")); + assertThat(data.getValue()).isCloseTo(128.0, offset(0.0)); + assertThat(data.getExemplar().getValue()).isCloseTo(128.0, offset(0.0)); + assertThat(data.hasCreatedTimestamp()).isFalse(); + assertThat(data.hasScrapeTimestamp()).isFalse(); data = snapshot.getDataPoints().get(1); - Assert.assertEquals(Labels.of("env", "prod"), data.getLabels()); - Assert.assertEquals(1024.0, data.getValue(), 0.0); - Assert.assertEquals(1024.0, data.getExemplar().getValue(), 0.0); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); + assertThat((Iterable) data.getLabels()).isEqualTo(Labels.of("env", "prod")); + assertThat(data.getValue()).isCloseTo(1024.0, offset(0.0)); + assertThat(data.getExemplar().getValue()).isCloseTo(1024.0, offset(0.0)); + assertThat(data.hasCreatedTimestamp()).isFalse(); + assertThat(data.hasScrapeTimestamp()).isFalse(); } @Test @@ -68,37 +71,40 @@ public void testMinimalGoodCase() { .dataPoint(GaugeDataPointSnapshot.builder().value(23.0).build()) .build(); SnapshotTestUtil.assertMetadata(snapshot, "temperature", null, null); - Assert.assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints().size()).isOne(); GaugeDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertEquals(Labels.EMPTY, data.getLabels()); - Assert.assertEquals(23.0, data.getValue(), 0.0); - Assert.assertNull(data.getExemplar()); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); + assertThat((Iterable) data.getLabels()).isEmpty(); + assertThat(data.getValue()).isCloseTo(23.0, offset(0.0)); + assertThat(data.getExemplar()).isNull(); + assertThat(data.hasCreatedTimestamp()).isFalse(); + assertThat(data.hasScrapeTimestamp()).isFalse(); } @Test public void testEmptyGauge() { GaugeSnapshot snapshot = GaugeSnapshot.builder().name("temperature").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints().size()).isZero(); } - @Test(expected = IllegalArgumentException.class) + @Test public void testTotalSuffixPresent() { - CounterSnapshot.builder().name("test_total").build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> CounterSnapshot.builder().name("test_total").build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testTotalSuffixPresentDot() { - CounterSnapshot.builder().name("test.total").build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> CounterSnapshot.builder().name("test.total").build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testValueMissing() { - CounterDataPointSnapshot.builder().build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> CounterDataPointSnapshot.builder().build()); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testDataImmutable() { GaugeSnapshot snapshot = GaugeSnapshot.builder() @@ -110,6 +116,6 @@ public void testDataImmutable() { .build(); Iterator iterator = snapshot.getDataPoints().iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java index e8e53e219..2f8aeb730 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java @@ -1,12 +1,15 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; + import io.prometheus.metrics.model.snapshots.HistogramSnapshot.HistogramDataPointSnapshot; import java.util.Iterator; import java.util.concurrent.TimeUnit; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class HistogramSnapshotTest { +class HistogramSnapshotTest { @Test public void testGoodCaseComplete() { @@ -82,94 +85,94 @@ public void testGoodCaseComplete() { SnapshotTestUtil.assertMetadata( snapshot, "request_size_bytes", "request sizes in bytes", "bytes"); - Assert.assertEquals(2, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).hasSize(2); HistogramDataPointSnapshot data = snapshot .getDataPoints() .get(0); // data is sorted by labels, so the first one should be path="/" - Assert.assertTrue(data.hasSum()); - Assert.assertTrue(data.hasCount()); - Assert.assertTrue(data.hasCreatedTimestamp()); - Assert.assertTrue(data.hasScrapeTimestamp()); - Assert.assertEquals(22, data.getCount()); - Assert.assertEquals(27000.0, data.getSum(), 0.0); - Assert.assertEquals(Labels.of("path", "/"), data.getLabels()); - Assert.assertEquals( - exemplar1.getValue(), data.getExemplars().get(128.0, 1024.0).getValue(), 0.0); - Assert.assertEquals(createdTimestamp, data.getCreatedTimestampMillis()); - Assert.assertEquals(scrapeTimestamp, data.getScrapeTimestampMillis()); + assertThat(data.hasSum()).isTrue(); + assertThat(data.hasCount()).isTrue(); + assertThat(data.hasCreatedTimestamp()).isTrue(); + assertThat(data.hasScrapeTimestamp()).isTrue(); + assertThat(data.getCount()).isEqualTo(22); + assertThat(data.getSum()).isCloseTo(27000.0, offset(0.0)); + assertThat((Iterable) data.getLabels()).isEqualTo(Labels.of("path", "/")); + assertThat(data.getExemplars().get(128.0, 1024.0).getValue()) + .isCloseTo(exemplar1.getValue(), offset(0.0)); + assertThat(data.getCreatedTimestampMillis()).isEqualTo(createdTimestamp); + assertThat(data.getScrapeTimestampMillis()).isEqualTo(scrapeTimestamp); // classic histogram 1 int i = 0; for (ClassicHistogramBucket bucket : data.getClassicBuckets()) { switch (i++) { case 0: - Assert.assertEquals(128.0, bucket.getUpperBound(), 0.0); - Assert.assertEquals(7, bucket.getCount()); + assertThat(bucket.getUpperBound()).isCloseTo(128.0, offset(0.0)); + assertThat(bucket.getCount()).isEqualTo(7); break; case 1: - Assert.assertEquals(1024.0, bucket.getUpperBound(), 0.0); - Assert.assertEquals(15, bucket.getCount()); + assertThat(bucket.getUpperBound()).isCloseTo(1024.0, offset(0.0)); + assertThat(bucket.getCount()).isEqualTo(15); break; case 2: - Assert.assertEquals(Double.POSITIVE_INFINITY, bucket.getUpperBound(), 0.0); - Assert.assertEquals(0, bucket.getCount()); + assertThat(bucket.getUpperBound()).isCloseTo(Double.POSITIVE_INFINITY, offset(0.0)); + assertThat(bucket.getCount()).isZero(); break; } } - Assert.assertEquals("expecting 3 classic histogram buckets", 3, i); + assertThat(i).as("expecting 3 classic histogram buckets").isEqualTo(3); // native histogram 1 - Assert.assertEquals(5, data.getNativeSchema()); - Assert.assertEquals(2, data.getNativeZeroCount()); - Assert.assertEquals(0.0000001, data.getNativeZeroThreshold(), 0.0000001); - Assert.assertEquals(3, data.getNativeBucketsForPositiveValues().size()); + assertThat(data.getNativeSchema()).isEqualTo(5); + assertThat(data.getNativeZeroCount()).isEqualTo(2); + assertThat(data.getNativeZeroThreshold()).isCloseTo(0.0000001, offset(0.0000001)); + assertThat(data.getNativeBucketsForPositiveValues().size()).isEqualTo(3); i = 0; for (NativeHistogramBucket bucket : data.getNativeBucketsForPositiveValues()) { switch (i++) { case 0: - Assert.assertEquals(1, bucket.getBucketIndex()); - Assert.assertEquals(12, bucket.getCount()); + assertThat(bucket.getBucketIndex()).isOne(); + assertThat(bucket.getCount()).isEqualTo(12); break; case 1: - Assert.assertEquals(2, bucket.getBucketIndex()); - Assert.assertEquals(3, bucket.getCount()); + assertThat(bucket.getBucketIndex()).isEqualTo(2); + assertThat(bucket.getCount()).isEqualTo(3); break; case 2: - Assert.assertEquals(4, bucket.getBucketIndex()); - Assert.assertEquals(2, bucket.getCount()); + assertThat(bucket.getBucketIndex()).isEqualTo(4); + assertThat(bucket.getCount()).isEqualTo(2); break; } } - Assert.assertEquals("expecting 3 native buckets for positive values", 3, i); + assertThat(i).as("expecting 3 native buckets for positive values").isEqualTo(3); i = 0; - Assert.assertEquals(2, data.getNativeBucketsForNegativeValues().size()); + assertThat(data.getNativeBucketsForNegativeValues().size()).isEqualTo(2); for (NativeHistogramBucket bucket : data.getNativeBucketsForNegativeValues()) { switch (i++) { case 0: - Assert.assertEquals(-1, bucket.getBucketIndex()); - Assert.assertEquals(1, bucket.getCount()); + assertThat(bucket.getBucketIndex()).isEqualTo(-1); + assertThat(bucket.getCount()).isOne(); break; case 1: - Assert.assertEquals(0, bucket.getBucketIndex()); - Assert.assertEquals(2, bucket.getCount()); + assertThat(bucket.getBucketIndex()).isZero(); + assertThat(bucket.getCount()).isEqualTo(2); break; } } - Assert.assertEquals("expecting 2 native buckets for positive values", 2, i); + assertThat(i).as("expecting 2 native buckets for positive values").isEqualTo(2); // classic histogram 2 (it's ok that this is incomplete, because we covered it with the other // tests) data = snapshot.getDataPoints().get(1); - Assert.assertEquals(6, data.getCount()); + assertThat(data.getCount()).isEqualTo(6); // native histogram 2 (it's ok that this is incomplete, because we covered it with the other // tests) - Assert.assertEquals(5, data.getNativeSchema()); - Assert.assertEquals(0, data.getNativeZeroCount()); - Assert.assertEquals(0, data.getNativeZeroThreshold(), 0); + assertThat(data.getNativeSchema()).isEqualTo(5); + assertThat(data.getNativeZeroCount()).isZero(); + assertThat(data.getNativeZeroThreshold()).isZero(); } @Test public void testEmptyHistogram() { HistogramSnapshot snapshot = HistogramSnapshot.builder().name("empty_histogram").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).isEmpty(); } @Test @@ -185,8 +188,8 @@ public void testMinimalClassicHistogram() { .build()) .build(); HistogramDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertFalse(data.hasSum()); - Assert.assertEquals(1, snapshot.getDataPoints().get(0).getClassicBuckets().size()); + assertThat(data.hasSum()).isFalse(); + assertThat(snapshot.getDataPoints().get(0).getClassicBuckets().size()).isOne(); } @Test @@ -196,17 +199,17 @@ public void testMinimalNativeHistogram() { .name("hist") .dataPoint(HistogramDataPointSnapshot.builder().nativeSchema(5).build()) .build(); - Assert.assertEquals("hist", snapshot.getMetadata().getName()); - Assert.assertFalse(snapshot.getMetadata().hasUnit()); - Assert.assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getMetadata().getName()).isEqualTo("hist"); + assertThat(snapshot.getMetadata().hasUnit()).isFalse(); + assertThat(snapshot.getDataPoints().size()).isOne(); HistogramDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - Assert.assertTrue(data.hasCount()); - Assert.assertEquals(0, data.getCount()); - Assert.assertFalse(data.hasSum()); - Assert.assertEquals(0, data.getNativeBucketsForNegativeValues().size()); - Assert.assertEquals(0, data.getNativeBucketsForPositiveValues().size()); + assertThat(data.hasCreatedTimestamp()).isFalse(); + assertThat(data.hasScrapeTimestamp()).isFalse(); + assertThat(data.hasCount()).isTrue(); + assertThat(data.getCount()).isZero(); + assertThat(data.hasSum()).isFalse(); + assertThat(data.getNativeBucketsForNegativeValues().size()).isZero(); + assertThat(data.getNativeBucketsForPositiveValues().size()).isZero(); } @Test @@ -225,25 +228,26 @@ public void testClassicCount() { .build()) .build(); HistogramDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertFalse(data.hasSum()); - Assert.assertTrue(data.hasCount()); - Assert.assertEquals(5, data.getCount()); + assertThat(data.hasSum()).isFalse(); + assertThat(data.hasCount()).isTrue(); + assertThat(data.getCount()).isEqualTo(5); } - @Test(expected = IllegalArgumentException.class) + @Test public void testEmptyData() { // This will fail because one of nativeSchema and classicHistogramBuckets is required - HistogramDataPointSnapshot.builder().build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> HistogramDataPointSnapshot.builder().build()); } @Test public void testEmptyNativeData() { HistogramDataPointSnapshot data = HistogramDataPointSnapshot.builder().nativeSchema(5).build(); - Assert.assertEquals(0, data.getNativeBucketsForNegativeValues().size()); - Assert.assertEquals(0, data.getNativeBucketsForPositiveValues().size()); + assertThat(data.getNativeBucketsForNegativeValues().size()).isZero(); + assertThat(data.getNativeBucketsForPositiveValues().size()).isZero(); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testDataImmutable() { HistogramSnapshot snapshot = HistogramSnapshot.builder() @@ -265,13 +269,16 @@ public void testDataImmutable() { .build(); Iterator iterator = snapshot.getDataPoints().iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } - @Test(expected = IllegalArgumentException.class) + @Test public void testEmptyClassicBuckets() { - new HistogramDataPointSnapshot( - ClassicHistogramBuckets.EMPTY, Double.NaN, Labels.EMPTY, Exemplars.EMPTY, 0L); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + new HistogramDataPointSnapshot( + ClassicHistogramBuckets.EMPTY, Double.NaN, Labels.EMPTY, Exemplars.EMPTY, 0L)); } @Test diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java index 78e26d100..423b57da7 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java @@ -1,10 +1,12 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + import java.util.Iterator; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class InfoSnapshotTest { +class InfoSnapshotTest { @Test public void testCompleteGoodCase() { @@ -17,19 +19,19 @@ public void testCompleteGoodCase() { .labels(Labels.of("instance_id", "127.0.0.1:9100", "service_name", "gateway")) .build()) .build(); - Assert.assertEquals("target", snapshot.getMetadata().getName()); - Assert.assertEquals("Target info", snapshot.getMetadata().getHelp()); - Assert.assertFalse(snapshot.getMetadata().hasUnit()); - Assert.assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getMetadata().getName()).isEqualTo("target"); + assertThat(snapshot.getMetadata().getHelp()).isEqualTo("Target info"); + assertThat(snapshot.getMetadata().hasUnit()).isFalse(); + assertThat(snapshot.getDataPoints().size()).isOne(); } @Test public void testEmptyInfo() { InfoSnapshot snapshot = InfoSnapshot.builder().name("target").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).isEmpty(); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testDataImmutable() { InfoSnapshot snapshot = InfoSnapshot.builder() @@ -47,16 +49,18 @@ public void testDataImmutable() { .build(); Iterator iterator = snapshot.getDataPoints().iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } - @Test(expected = IllegalArgumentException.class) + @Test public void testNameMustNotIncludeSuffix() { - InfoSnapshot.builder().name("jvm_info").build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> InfoSnapshot.builder().name("jvm_info").build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testNameMustNotIncludeSuffixDot() { - InfoSnapshot.builder().name("jvm.info").build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> InfoSnapshot.builder().name("jvm.info").build()); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelsTest.java index e7ae37723..4d68b82a8 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelsTest.java @@ -1,18 +1,19 @@ package io.prometheus.metrics.model.snapshots; -import static org.junit.Assert.assertNotEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import org.junit.Assert; -import org.junit.Test; +import org.assertj.core.api.IterableAssert; +import org.junit.jupiter.api.Test; -public class LabelsTest { +class LabelsTest { private > void assertLessThan(T a, T b) { - Assert.assertTrue(a.compareTo(b) < 0); + assertThat(a).isLessThan(b); } private > void assertGreaterThan(T a, T b) { - Assert.assertTrue(a.compareTo(b) > 0); + assertThat(a).isGreaterThan(b); } @Test @@ -21,8 +22,12 @@ public void testCompareDifferentLabelNames() { Labels labels2 = Labels.of("env", "prod", "status1", "200"); assertGreaterThan(labels1, labels2); assertLessThan(labels2, labels1); - assertNotEquals(labels1, labels2); - assertNotEquals(labels2, labels1); + assertLabels(labels2).isNotEqualTo(labels1); + assertLabels(labels1).isNotEqualTo(labels2); + } + + private static IterableAssert assertLabels(Labels labels) { + return assertThat((Iterable) labels); } @Test @@ -32,8 +37,8 @@ public void testCompareSameLabelNames() { Labels labels2 = Labels.of("env", "prod", "status", "500"); assertLessThan(labels1, labels2); assertGreaterThan(labels2, labels1); - assertNotEquals(labels1, labels2); - assertNotEquals(labels2, labels1); + assertLabels(labels2).isNotEqualTo(labels1); + assertLabels(labels1).isNotEqualTo(labels2); } @Test @@ -42,8 +47,8 @@ public void testCompareDifferentNumberOfLabels() { Labels labels2 = Labels.of("env", "prod", "status", "200", "x_code", "none"); assertLessThan(labels1, labels2); assertGreaterThan(labels2, labels1); - assertNotEquals(labels1, labels2); - assertNotEquals(labels2, labels1); + assertLabels(labels2).isNotEqualTo(labels1); + assertLabels(labels1).isNotEqualTo(labels2); } @Test @@ -57,51 +62,54 @@ public void testComparePrometheusNames() { public void testEqualsHashcodeDots() { Labels labels1 = Labels.of("my_a", "val"); Labels labels2 = Labels.of("my.a", "val"); - Assert.assertEquals(labels1, labels2); - Assert.assertEquals(labels1.hashCode(), labels2.hashCode()); + assertLabels(labels2).isEqualTo(labels1).hasSameHashCodeAs(labels1); } + @SuppressWarnings({"unchecked", "rawtypes"}) @Test public void testCompareEquals() { Labels labels1 = Labels.of("env", "prod", "status", "200"); Labels labels2 = Labels.of("env", "prod", "status", "200"); - Assert.assertEquals(0, labels1.compareTo(labels2)); - Assert.assertEquals(0, labels2.compareTo(labels1)); - Assert.assertEquals(labels1, labels2); - Assert.assertEquals(labels2, labels1); + assertThat((Comparable) labels1).isEqualByComparingTo(labels2); + assertThat((Comparable) labels2).isEqualByComparingTo(labels1); + assertLabels(labels2).isEqualTo(labels1); + assertLabels(labels1).isEqualTo(labels2); } - @Test(expected = IllegalArgumentException.class) + @Test public void testIllegalLabelName() { - Labels.of("my_service/status", "200"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Labels.of("my_service/status", "200")); } - @Test(expected = IllegalArgumentException.class) + @Test public void testReservedLabelName() { - Labels.of("__name__", "requests_total"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Labels.of("__name__", "requests_total")); } - @Test(expected = IllegalArgumentException.class) + @Test public void testDuplicateLabelName() { - Labels.of("name1", "value1", "name2", "value2", "name1", "value3"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Labels.of("name1", "value1", "name2", "value2", "name1", "value3")); } @Test public void testMakePrometheusNames() { String[] names = new String[] {}; String[] prometheusNames = Labels.makePrometheusNames(names); - Assert.assertSame(names, prometheusNames); + assertThat(prometheusNames).isSameAs(names); names = new String[] {"no_dots", "at_all"}; prometheusNames = Labels.makePrometheusNames(names); - Assert.assertSame(names, prometheusNames); + assertThat(prometheusNames).isSameAs(names); names = new String[] {"dots", "here.it.is"}; prometheusNames = Labels.makePrometheusNames(names); - Assert.assertNotSame(names, prometheusNames); - Assert.assertSame(names[0], prometheusNames[0]); - Assert.assertEquals("here.it.is", names[1]); - Assert.assertEquals("here_it_is", prometheusNames[1]); + assertThat(prometheusNames).isNotSameAs(names); + assertThat(prometheusNames[0]).isSameAs(names[0]); + assertThat(names[1]).isEqualTo("here.it.is"); + assertThat(prometheusNames[1]).isEqualTo("here_it_is"); } @Test @@ -109,20 +117,22 @@ public void testMerge() { Labels labels1 = Labels.of("key.1", "value 1", "key.3", "value 3"); Labels labels2 = Labels.of("key_2", "value 2"); Labels merged = labels2.merge(labels1); - Assert.assertEquals("key.1", merged.getName(0)); - Assert.assertEquals("key_2", merged.getName(1)); - Assert.assertEquals("key.3", merged.getName(2)); + assertThat(merged.getName(0)).isEqualTo("key.1"); + assertThat(merged.getName(1)).isEqualTo("key_2"); + assertThat(merged.getName(2)).isEqualTo("key.3"); } - @Test(expected = IllegalArgumentException.class) + @Test public void testMergeDuplicateName() { Labels labels1 = Labels.of("key_one", "v1"); Labels labels2 = Labels.of("key.one", "v2"); - labels2.merge(labels1); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> labels2.merge(labels1)); } - @Test(expected = IllegalArgumentException.class) + @Test public void testDuplicateName() { - Labels.of("key_one", "v1", "key.one", "v2"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Labels.of("key_one", "v1", "key.one", "v2")); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java index 9a3a980bc..fab885488 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricMetadataTest.java @@ -1,26 +1,33 @@ package io.prometheus.metrics.model.snapshots; import static io.prometheus.metrics.model.snapshots.PrometheusNaming.sanitizeMetricName; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class MetricMetadataTest { +class MetricMetadataTest { - @Test(expected = IllegalArgumentException.class) + @Test public void testEmptyName() { - new MetricMetadata(""); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new MetricMetadata("")); } - @Test(expected = IllegalArgumentException.class) + @Test public void testNullName() { - new MetricMetadata(null); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new MetricMetadata(null)); } - @Test(expected = IllegalArgumentException.class) + @Test public void testIllegalName() { - new MetricMetadata( - "my_namespace/http_server_duration"); // let's see when we decide to allow slashes :) + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + new MetricMetadata( + "my_namespace/http_server_duration")); // let's see when we decide to allow + // slashes :) } @Test @@ -30,38 +37,40 @@ public void testSanitizationIllegalCharacters() { sanitizeMetricName("my_namespace/http.server.duration", Unit.SECONDS), "help string", Unit.SECONDS); - Assert.assertEquals("my_namespace_http.server.duration_seconds", metadata.getName()); - Assert.assertEquals("my_namespace_http_server_duration_seconds", metadata.getPrometheusName()); - Assert.assertEquals("help string", metadata.getHelp()); - Assert.assertEquals("seconds", metadata.getUnit().toString()); + assertThat(metadata.getName()).isEqualTo("my_namespace_http.server.duration_seconds"); + assertThat(metadata.getPrometheusName()).isEqualTo("my_namespace_http_server_duration_seconds"); + assertThat(metadata.getHelp()).isEqualTo("help string"); + assertThat(metadata.getUnit().toString()).isEqualTo("seconds"); } @Test public void testSanitizationCounter() { MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("my_events_total")); - Assert.assertEquals("my_events", metadata.getName()); + assertThat(metadata.getName()).isEqualTo("my_events"); } @Test public void testSanitizationInfo() { MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("target_info")); - Assert.assertEquals("target", metadata.getName()); + assertThat(metadata.getName()).isEqualTo("target"); } @Test public void testSanitizationWeirdCornerCase() { MetricMetadata metadata = new MetricMetadata(sanitizeMetricName("_total_created")); - Assert.assertEquals("total", metadata.getName()); + assertThat(metadata.getName()).isEqualTo("total"); } - @Test(expected = IllegalArgumentException.class) + @Test public void testSanitizeEmptyString() { - sanitizeMetricName(""); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> sanitizeMetricName("")); } - @Test(expected = IllegalArgumentException.class) + @Test public void testUnitSuffixRequired() { - new MetricMetadata("my_counter", "help", Unit.SECONDS); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new MetricMetadata("my_counter", "help", Unit.SECONDS)); } @Test @@ -71,6 +80,6 @@ public void testUnitSuffixAdded() { @Test public void testUnitNotDuplicated() { - Assert.assertEquals("my_counter_bytes", sanitizeMetricName("my_counter_bytes", Unit.BYTES)); + assertThat(sanitizeMetricName("my_counter_bytes", Unit.BYTES)).isEqualTo("my_counter_bytes"); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java index e387d7155..fc0c24bfc 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java @@ -1,40 +1,46 @@ package io.prometheus.metrics.model.snapshots; -import org.junit.Assert; -import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -public class MetricSnapshotTest { +import org.junit.jupiter.api.Test; - @Test(expected = IllegalArgumentException.class) +class MetricSnapshotTest { + + @Test public void testDuplicateLabels() { - CounterSnapshot.builder() - .name("events") - .dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(Labels.of("path", "/hello", "status", "200")) - .value(1.0) - .build()) - .dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(Labels.of("path", "/world", "status", "200")) - .value(2.0) - .build()) - .dataPoint( - CounterSnapshot.CounterDataPointSnapshot.builder() - .labels(Labels.of("status", "200", "path", "/hello")) - .value(3.0) - .build()) - .build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + CounterSnapshot.builder() + .name("events") + .dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(Labels.of("path", "/hello", "status", "200")) + .value(1.0) + .build()) + .dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(Labels.of("path", "/world", "status", "200")) + .value(2.0) + .build()) + .dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(Labels.of("status", "200", "path", "/hello")) + .value(3.0) + .build()) + .build()); } @Test public void testNoData() { MetricSnapshot snapshot = CounterSnapshot.builder().name("test").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints().size()).isEqualTo(0); } - @Test(expected = NullPointerException.class) + @Test public void testNullData() { - new CounterSnapshot(new MetricMetadata("test"), null); + assertThatExceptionOfType(NullPointerException.class) + .isThrownBy(() -> new CounterSnapshot(new MetricMetadata("test"), null)); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java index b85fe629f..ed2f66fec 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java @@ -1,15 +1,17 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + import java.util.Iterator; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class MetricSnapshotsTest { +class MetricSnapshotsTest { @Test public void testEmpty() { MetricSnapshots snapshots = MetricSnapshots.builder().build(); - Assert.assertFalse(snapshots.stream().findAny().isPresent()); + assertThat(snapshots.stream().findAny().isPresent()).isFalse(); } @Test @@ -30,13 +32,13 @@ public void testSort() { .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) .build(); MetricSnapshots snapshots = new MetricSnapshots(c2, c3, c1); - Assert.assertEquals(3, snapshots.size()); - Assert.assertEquals("counter1", snapshots.get(0).getMetadata().getName()); - Assert.assertEquals("counter2", snapshots.get(1).getMetadata().getName()); - Assert.assertEquals("counter3", snapshots.get(2).getMetadata().getName()); + assertThat(snapshots.size()).isEqualTo(3); + assertThat(snapshots.get(0).getMetadata().getName()).isEqualTo("counter1"); + assertThat(snapshots.get(1).getMetadata().getName()).isEqualTo("counter2"); + assertThat(snapshots.get(2).getMetadata().getName()).isEqualTo("counter3"); } - @Test(expected = IllegalArgumentException.class) + @Test public void testDuplicateName() { // Q: What if you have a counter named "foo" and a gauge named "foo"? // A: Great question. You might think this is a valid scenario, because the counter will produce @@ -55,7 +57,8 @@ public void testDuplicateName() { .name("my_metric") .dataPoint(GaugeSnapshot.GaugeDataPointSnapshot.builder().value(1.0).build()) .build(); - new MetricSnapshots(c, g); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new MetricSnapshots(c, g)); } @Test @@ -66,12 +69,12 @@ public void testBuilder() { .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) .build(); MetricSnapshots.Builder builder = MetricSnapshots.builder(); - Assert.assertFalse(builder.containsMetricName("my_metric")); + assertThat(builder.containsMetricName("my_metric")).isFalse(); builder.metricSnapshot(counter); - Assert.assertTrue(builder.containsMetricName("my_metric")); + assertThat(builder.containsMetricName("my_metric")).isTrue(); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testImmutable() { CounterSnapshot c1 = CounterSnapshot.builder() @@ -91,6 +94,6 @@ public void testImmutable() { MetricSnapshots snapshots = new MetricSnapshots(c2, c3, c1); Iterator iterator = snapshots.iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucketsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucketsTest.java index 1aa7a1023..32c7f3eb3 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucketsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/NativeHistogramBucketsTest.java @@ -1,54 +1,57 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + import java.util.Iterator; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class NativeHistogramBucketsTest { +class NativeHistogramBucketsTest { @Test public void testGoodCase() { NativeHistogramBuckets buckets = NativeHistogramBuckets.builder().bucket(-10, 12).bucket(120, 17).build(); - Assert.assertEquals(2, buckets.size()); - Assert.assertEquals(-10, buckets.getBucketIndex(0)); - Assert.assertEquals(12, buckets.getCount(0)); - Assert.assertEquals(120, buckets.getBucketIndex(1)); - Assert.assertEquals(17, buckets.getCount(1)); + assertThat(buckets.size()).isEqualTo(2); + assertThat(buckets.getBucketIndex(0)).isEqualTo(-10); + assertThat(buckets.getCount(0)).isEqualTo(12); + assertThat(buckets.getBucketIndex(1)).isEqualTo(120); + assertThat(buckets.getCount(1)).isEqualTo(17); } @Test public void testEmpty() { NativeHistogramBuckets buckets = NativeHistogramBuckets.builder().build(); - Assert.assertEquals(0, buckets.size()); + assertThat(buckets.size()).isZero(); } @Test public void testSort() { NativeHistogramBuckets buckets = NativeHistogramBuckets.builder().bucket(7, 4).bucket(2, 0).bucket(5, 3).build(); - Assert.assertEquals(3, buckets.size()); - Assert.assertEquals(2, buckets.getBucketIndex(0)); - Assert.assertEquals(5, buckets.getBucketIndex(1)); - Assert.assertEquals(7, buckets.getBucketIndex(2)); - Assert.assertEquals(0, buckets.getCount(0)); - Assert.assertEquals(3, buckets.getCount(1)); - Assert.assertEquals(4, buckets.getCount(2)); + assertThat(buckets.size()).isEqualTo(3); + assertThat(buckets.getBucketIndex(0)).isEqualTo(2); + assertThat(buckets.getBucketIndex(1)).isEqualTo(5); + assertThat(buckets.getBucketIndex(2)).isEqualTo(7); + assertThat(buckets.getCount(0)).isZero(); + assertThat(buckets.getCount(1)).isEqualTo(3); + assertThat(buckets.getCount(2)).isEqualTo(4); } - @Test(expected = IllegalArgumentException.class) + @Test public void testDifferentLength() { int[] bucketIndexes = new int[] {0, 1, 2}; long[] cumulativeCounts = new long[] {13, 178, 1024, 3000}; - NativeHistogramBuckets.of(bucketIndexes, cumulativeCounts); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> NativeHistogramBuckets.of(bucketIndexes, cumulativeCounts)); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testImmutable() { NativeHistogramBuckets buckets = NativeHistogramBuckets.builder().bucket(1, 1).bucket(2, 1).build(); Iterator iterator = buckets.iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java index 62f2fc2c8..fad55e0ac 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/PrometheusNamingTest.java @@ -1,95 +1,99 @@ package io.prometheus.metrics.model.snapshots; import static io.prometheus.metrics.model.snapshots.PrometheusNaming.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class PrometheusNamingTest { +class PrometheusNamingTest { @Test public void testSanitizeMetricName() { - Assert.assertEquals("_abc_def", prometheusName(sanitizeMetricName("0abc.def"))); - Assert.assertEquals("___ab__c0", prometheusName(sanitizeMetricName("___ab.:c0"))); - Assert.assertEquals("my_prefix_my_metric", sanitizeMetricName("my_prefix/my_metric")); - Assert.assertEquals("my_counter", prometheusName(sanitizeMetricName("my_counter_total"))); - Assert.assertEquals("jvm", sanitizeMetricName("jvm.info")); - Assert.assertEquals("jvm", sanitizeMetricName("jvm_info")); - Assert.assertEquals("jvm", sanitizeMetricName("jvm.info")); - Assert.assertEquals("a.b", sanitizeMetricName("a.b")); - Assert.assertEquals("total", sanitizeMetricName("_total")); - Assert.assertEquals("total", sanitizeMetricName("total")); + assertThat(prometheusName(sanitizeMetricName("0abc.def"))).isEqualTo("_abc_def"); + assertThat(prometheusName(sanitizeMetricName("___ab.:c0"))).isEqualTo("___ab__c0"); + assertThat(sanitizeMetricName("my_prefix/my_metric")).isEqualTo("my_prefix_my_metric"); + assertThat(prometheusName(sanitizeMetricName("my_counter_total"))).isEqualTo("my_counter"); + assertThat(sanitizeMetricName("jvm.info")).isEqualTo("jvm"); + assertThat(sanitizeMetricName("jvm_info")).isEqualTo("jvm"); + assertThat(sanitizeMetricName("jvm.info")).isEqualTo("jvm"); + assertThat(sanitizeMetricName("a.b")).isEqualTo("a.b"); + assertThat(sanitizeMetricName("_total")).isEqualTo("total"); + assertThat(sanitizeMetricName("total")).isEqualTo("total"); } @Test public void testSanitizeMetricNameWithUnit() { - Assert.assertEquals( - "_abc_def_" + Unit.RATIO, prometheusName(sanitizeMetricName("0abc.def", Unit.RATIO))); - Assert.assertEquals( - "___ab__c0_" + Unit.RATIO, prometheusName(sanitizeMetricName("___ab.:c0", Unit.RATIO))); - Assert.assertEquals( - "my_prefix_my_metric_" + Unit.RATIO, sanitizeMetricName("my_prefix/my_metric", Unit.RATIO)); - Assert.assertEquals( - "my_counter_" + Unit.RATIO, - prometheusName(sanitizeMetricName("my_counter_total", Unit.RATIO))); - Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm.info", Unit.RATIO)); - Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm_info", Unit.RATIO)); - Assert.assertEquals("jvm_" + Unit.RATIO, sanitizeMetricName("jvm.info", Unit.RATIO)); - Assert.assertEquals("a.b_" + Unit.RATIO, sanitizeMetricName("a.b", Unit.RATIO)); - Assert.assertEquals("total_" + Unit.RATIO, sanitizeMetricName("_total", Unit.RATIO)); - Assert.assertEquals("total_" + Unit.RATIO, sanitizeMetricName("total", Unit.RATIO)); + assertThat(prometheusName(sanitizeMetricName("0abc.def", Unit.RATIO))) + .isEqualTo("_abc_def_" + Unit.RATIO); + assertThat(prometheusName(sanitizeMetricName("___ab.:c0", Unit.RATIO))) + .isEqualTo("___ab__c0_" + Unit.RATIO); + assertThat(sanitizeMetricName("my_prefix/my_metric", Unit.RATIO)) + .isEqualTo("my_prefix_my_metric_" + Unit.RATIO); + assertThat(prometheusName(sanitizeMetricName("my_counter_total", Unit.RATIO))) + .isEqualTo("my_counter_" + Unit.RATIO); + assertThat(sanitizeMetricName("jvm.info", Unit.RATIO)).isEqualTo("jvm_" + Unit.RATIO); + assertThat(sanitizeMetricName("jvm_info", Unit.RATIO)).isEqualTo("jvm_" + Unit.RATIO); + assertThat(sanitizeMetricName("jvm.info", Unit.RATIO)).isEqualTo("jvm_" + Unit.RATIO); + assertThat(sanitizeMetricName("a.b", Unit.RATIO)).isEqualTo("a.b_" + Unit.RATIO); + assertThat(sanitizeMetricName("_total", Unit.RATIO)).isEqualTo("total_" + Unit.RATIO); + assertThat(sanitizeMetricName("total", Unit.RATIO)).isEqualTo("total_" + Unit.RATIO); } @Test public void testSanitizeLabelName() { - Assert.assertEquals("_abc_def", prometheusName(sanitizeLabelName("0abc.def"))); - Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("_abc"))); - Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("__abc"))); - Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("___abc"))); - Assert.assertEquals("_abc", prometheusName(sanitizeLabelName("_.abc"))); - Assert.assertEquals("abc.def", sanitizeLabelName("abc.def")); - Assert.assertEquals("abc.def2", sanitizeLabelName("abc.def2")); + assertThat(prometheusName(sanitizeLabelName("0abc.def"))).isEqualTo("_abc_def"); + assertThat(prometheusName(sanitizeLabelName("_abc"))).isEqualTo("_abc"); + assertThat(prometheusName(sanitizeLabelName("__abc"))).isEqualTo("_abc"); + assertThat(prometheusName(sanitizeLabelName("___abc"))).isEqualTo("_abc"); + assertThat(prometheusName(sanitizeLabelName("_.abc"))).isEqualTo("_abc"); + assertThat(sanitizeLabelName("abc.def")).isEqualTo("abc.def"); + assertThat(sanitizeLabelName("abc.def2")).isEqualTo("abc.def2"); } @Test public void testValidateUnitName() { - Assert.assertNotNull(validateUnitName("secondstotal")); - Assert.assertNotNull(validateUnitName("total")); - Assert.assertNotNull(validateUnitName("seconds_total")); - Assert.assertNotNull(validateUnitName("_total")); - Assert.assertNotNull(validateUnitName("")); + assertThat(validateUnitName("secondstotal")).isNotNull(); + assertThat(validateUnitName("total")).isNotNull(); + assertThat(validateUnitName("seconds_total")).isNotNull(); + assertThat(validateUnitName("_total")).isNotNull(); + assertThat(validateUnitName("")).isNotNull(); - Assert.assertNull(validateUnitName("seconds")); - Assert.assertNull(validateUnitName("2")); + assertThat(validateUnitName("seconds")).isNull(); + assertThat(validateUnitName("2")).isNull(); } @Test public void testSanitizeUnitName() { - Assert.assertEquals("seconds", sanitizeUnitName("seconds")); - Assert.assertEquals("seconds", sanitizeUnitName("seconds_total")); - Assert.assertEquals("seconds", sanitizeUnitName("seconds_total_total")); - Assert.assertEquals("m_s", sanitizeUnitName("m/s")); - Assert.assertEquals("seconds", sanitizeUnitName("secondstotal")); - Assert.assertEquals("2", sanitizeUnitName("2")); + assertThat(sanitizeUnitName("seconds")).isEqualTo("seconds"); + assertThat(sanitizeUnitName("seconds_total")).isEqualTo("seconds"); + assertThat(sanitizeUnitName("seconds_total_total")).isEqualTo("seconds"); + assertThat(sanitizeUnitName("m/s")).isEqualTo("m_s"); + assertThat(sanitizeUnitName("secondstotal")).isEqualTo("seconds"); + assertThat(sanitizeUnitName("2")).isEqualTo("2"); } - @Test(expected = IllegalArgumentException.class) + @Test public void testInvalidUnitName1() { - sanitizeUnitName("total"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> sanitizeUnitName("total")); } - @Test(expected = IllegalArgumentException.class) + @Test public void testInvalidUnitName2() { - sanitizeUnitName("_total"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> sanitizeUnitName("_total")); } - @Test(expected = IllegalArgumentException.class) + @Test public void testInvalidUnitName3() { - sanitizeUnitName("%"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> sanitizeUnitName("%")); } - @Test(expected = IllegalArgumentException.class) + @Test public void testEmptyUnitName() { - sanitizeUnitName(""); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> sanitizeUnitName("")); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/QuantilesTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/QuantilesTest.java index 0d66d5632..4179cf630 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/QuantilesTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/QuantilesTest.java @@ -1,40 +1,50 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; + import java.util.Iterator; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class QuantilesTest { +class QuantilesTest { @Test public void testSort() { Quantiles quantiles = Quantiles.builder().quantile(0.99, 0.23).quantile(0.5, 0.2).quantile(0.95, 0.22).build(); - Assert.assertEquals(3, quantiles.size()); - Assert.assertEquals(0.5, quantiles.get(0).getQuantile(), 0); - Assert.assertEquals(0.2, quantiles.get(0).getValue(), 0); - Assert.assertEquals(0.95, quantiles.get(1).getQuantile(), 0); - Assert.assertEquals(0.22, quantiles.get(1).getValue(), 0); - Assert.assertEquals(0.99, quantiles.get(2).getQuantile(), 0); - Assert.assertEquals(0.23, quantiles.get(2).getValue(), 0); + assertThat(quantiles.size()).isEqualTo(3); + assertThat(quantiles.get(0).getQuantile()).isCloseTo(0.5, offset(0.0)); + assertThat(quantiles.get(0).getValue()).isCloseTo(0.2, offset(0.0)); + assertThat(quantiles.get(1).getQuantile()).isCloseTo(0.95, offset(0.0)); + assertThat(quantiles.get(1).getValue()).isCloseTo(0.22, offset(0.0)); + assertThat(quantiles.get(2).getQuantile()).isCloseTo(0.99, offset(0.0)); + assertThat(quantiles.get(2).getValue()).isCloseTo(0.23, offset(0.0)); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testImmutable() { Quantiles quantiles = Quantiles.builder().quantile(0.99, 0.23).quantile(0.5, 0.2).quantile(0.95, 0.22).build(); Iterator iterator = quantiles.iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } @Test public void testEmpty() { - Assert.assertEquals(0, Quantiles.EMPTY.size()); + assertThat(Quantiles.EMPTY.size()).isZero(); } - @Test(expected = IllegalArgumentException.class) + @Test public void testDuplicate() { - Quantiles.builder().quantile(0.95, 0.23).quantile(0.5, 0.2).quantile(0.95, 0.22).build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + Quantiles.builder() + .quantile(0.95, 0.23) + .quantile(0.5, 0.2) + .quantile(0.95, 0.22) + .build()); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java index 1a531b5fd..d8e8d33e4 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java @@ -1,17 +1,17 @@ package io.prometheus.metrics.model.snapshots; -import org.junit.Assert; +import static org.assertj.core.api.Assertions.assertThat; -public class SnapshotTestUtil { +class SnapshotTestUtil { public static void assertMetadata( MetricSnapshot snapshot, String name, String help, String unit) { - Assert.assertEquals(name, snapshot.getMetadata().getName()); - Assert.assertEquals(help, snapshot.getMetadata().getHelp()); + assertThat(snapshot.getMetadata().getName()).isEqualTo(name); + assertThat(snapshot.getMetadata().getHelp()).isEqualTo(help); if (unit != null) { - Assert.assertEquals(unit, snapshot.getMetadata().getUnit().toString()); + assertThat(snapshot.getMetadata().getUnit()).hasToString(unit); } else { - Assert.assertNull(snapshot.getMetadata().getUnit()); + assertThat(snapshot.getMetadata().getUnit()).isNull(); } } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java index ccc159b30..cb3c70f8d 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java @@ -1,11 +1,13 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + import java.util.Iterator; import java.util.concurrent.TimeUnit; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class StateSetSnapshotTest { +class StateSetSnapshotTest { @Test public void testCompleteGoodCase() { @@ -29,20 +31,21 @@ public void testCompleteGoodCase() { .build()) .build(); SnapshotTestUtil.assertMetadata(snapshot, "my_feature_flags", "Feature Flags", null); - Assert.assertEquals(2, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).hasSize(2); StateSetSnapshot.StateSetDataPointSnapshot data = snapshot .getDataPoints() .get(1); // data is sorted by labels, so the second one should be entity="controller" - Assert.assertEquals(Labels.of("entity", "controller"), data.getLabels()); - Assert.assertEquals(2, data.size()); - Assert.assertEquals("feature1", data.getName(0)); - Assert.assertTrue(data.isTrue(0)); - Assert.assertEquals("feature2", data.getName(1)); - Assert.assertFalse(data.isTrue(1)); - Assert.assertTrue(data.hasScrapeTimestamp()); - Assert.assertEquals(scrapeTimestamp, data.getScrapeTimestampMillis()); - Assert.assertFalse(data.hasCreatedTimestamp()); + assertThat((Iterable) data.getLabels()) + .isEqualTo(Labels.of("entity", "controller")); + assertThat(data.size()).isEqualTo(2); + assertThat(data.getName(0)).isEqualTo("feature1"); + assertThat(data.isTrue(0)).isTrue(); + assertThat(data.getName(1)).isEqualTo("feature2"); + assertThat(data.isTrue(1)).isFalse(); + assertThat(data.hasScrapeTimestamp()).isTrue(); + assertThat(data.getScrapeTimestampMillis()).isEqualTo(scrapeTimestamp); + assertThat(data.hasCreatedTimestamp()).isFalse(); } @Test @@ -54,21 +57,22 @@ public void testStateSetDataSorted() { .state("c", true) .state("a", false) .build(); - Assert.assertEquals(4, data.size()); - Assert.assertEquals("a", data.getName(0)); - Assert.assertFalse(data.isTrue(0)); - Assert.assertEquals("b", data.getName(1)); - Assert.assertTrue(data.isTrue(1)); - Assert.assertEquals("c", data.getName(2)); - Assert.assertTrue(data.isTrue(2)); - Assert.assertEquals("d", data.getName(3)); - Assert.assertFalse(data.isTrue(3)); + assertThat(data.size()).isEqualTo(4); + assertThat(data.getName(0)).isEqualTo("a"); + assertThat(data.isTrue(0)).isFalse(); + assertThat(data.getName(1)).isEqualTo("b"); + assertThat(data.isTrue(1)).isTrue(); + assertThat(data.getName(2)).isEqualTo("c"); + assertThat(data.isTrue(2)).isTrue(); + assertThat(data.getName(3)).isEqualTo("d"); + assertThat(data.isTrue(3)).isFalse(); } - @Test(expected = IllegalArgumentException.class) + @Test public void testMustHaveState() { // Must have at least one state. - StateSetSnapshot.StateSetDataPointSnapshot.builder().build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> StateSetSnapshot.StateSetDataPointSnapshot.builder().build()); } @Test @@ -79,16 +83,16 @@ public void testMinimal() { .dataPoint( StateSetSnapshot.StateSetDataPointSnapshot.builder().state("flag", true).build()) .build(); - Assert.assertEquals(1, snapshot.dataPoints.size()); + assertThat(snapshot.dataPoints.size()).isOne(); } @Test public void testEmpty() { StateSetSnapshot snapshot = StateSetSnapshot.builder().name("my_flag").build(); - Assert.assertEquals(0, snapshot.dataPoints.size()); + assertThat(snapshot.dataPoints).isEmpty(); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testDataImmutable() { StateSetSnapshot.StateSetDataPointSnapshot data = StateSetSnapshot.StateSetDataPointSnapshot.builder() @@ -98,19 +102,22 @@ public void testDataImmutable() { .build(); Iterator iterator = data.iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } - @Test(expected = IllegalArgumentException.class) + @Test public void testDuplicateState() { - StateSetSnapshot.StateSetDataPointSnapshot.builder() - .state("a", true) - .state("b", true) - .state("a", true) - .build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .state("a", true) + .state("b", true) + .state("a", true) + .build()); } - @Test(expected = UnsupportedOperationException.class) + @Test public void testStateSetImmutable() { StateSetSnapshot snapshot = StateSetSnapshot.builder() @@ -129,17 +136,24 @@ public void testStateSetImmutable() { Iterator iterator = snapshot.getDataPoints().iterator(); iterator.next(); - iterator.remove(); + assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } - @Test(expected = IllegalArgumentException.class) + @Test public void testLabelsUnique() { - StateSetSnapshot.builder() - .name("flags") - .dataPoint( - StateSetSnapshot.StateSetDataPointSnapshot.builder().state("feature", true).build()) - .dataPoint( - StateSetSnapshot.StateSetDataPointSnapshot.builder().state("feature", true).build()) - .build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + StateSetSnapshot.builder() + .name("flags") + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .state("feature", true) + .build()) + .dataPoint( + StateSetSnapshot.StateSetDataPointSnapshot.builder() + .state("feature", true) + .build()) + .build()); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SummarySnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SummarySnapshotTest.java index 4a4a2a355..a57b5f4e0 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SummarySnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SummarySnapshotTest.java @@ -1,10 +1,12 @@ package io.prometheus.metrics.model.snapshots; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; + import java.util.concurrent.TimeUnit; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class SummarySnapshotTest { +class SummarySnapshotTest { @Test public void testCompleteGoodCase() { @@ -55,28 +57,28 @@ public void testCompleteGoodCase() { .build()) .build(); SnapshotTestUtil.assertMetadata(snapshot, "latency_seconds", "latency in seconds", "seconds"); - Assert.assertEquals(2, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).hasSize(2); SummarySnapshot.SummaryDataPointSnapshot data = snapshot.getDataPoints().get(0); - Assert.assertEquals(Labels.of("endpoint", "/"), data.getLabels()); - Assert.assertTrue(data.hasCount()); - Assert.assertEquals(1093, data.getCount()); - Assert.assertTrue(data.hasSum()); - Assert.assertEquals(218.6, data.getSum(), 0); - Assert.assertTrue(data.hasCreatedTimestamp()); - Assert.assertEquals(createdTimestamp, data.getCreatedTimestampMillis()); - Assert.assertTrue(data.hasScrapeTimestamp()); - Assert.assertEquals(scrapeTimestamp, data.getScrapeTimestampMillis()); + assertThat((Iterable) data.getLabels()).isEqualTo(Labels.of("endpoint", "/")); + assertThat(data.hasCount()).isTrue(); + assertThat(data.getCount()).isEqualTo(1093); + assertThat(data.hasSum()).isTrue(); + assertThat(data.getSum()).isCloseTo(218.6, offset(0.0)); + assertThat(data.hasCreatedTimestamp()).isTrue(); + assertThat(data.getCreatedTimestampMillis()).isEqualTo(createdTimestamp); + assertThat(data.hasScrapeTimestamp()).isTrue(); + assertThat(data.getScrapeTimestampMillis()).isEqualTo(scrapeTimestamp); Quantiles quantiles = data.getQuantiles(); - Assert.assertEquals(3, quantiles.size()); + assertThat(quantiles.size()).isEqualTo(3); // quantiles are tested in QuantilesTest already, skipping here. - Assert.assertEquals(2, data.getExemplars().size()); + assertThat(data.getExemplars().size()).isEqualTo(2); // exemplars are tested in ExemplarsTest already, skipping here. data = snapshot.getDataPoints().get(1); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - Assert.assertTrue(data.hasCount()); - Assert.assertTrue(data.hasSum()); + assertThat(data.hasCreatedTimestamp()).isFalse(); + assertThat(data.hasScrapeTimestamp()).isFalse(); + assertThat(data.hasCount()).isTrue(); + assertThat(data.hasSum()).isTrue(); } @Test @@ -87,25 +89,26 @@ public void testMinimal() { .dataPoint( SummarySnapshot.SummaryDataPointSnapshot.builder().count(10).sum(12.0).build()) .build(); - Assert.assertEquals(1, snapshot.getDataPoints().size()); - Assert.assertEquals(Labels.EMPTY, snapshot.getDataPoints().get(0).getLabels()); + assertThat(snapshot.getDataPoints()).hasSize(1); + assertThat((Iterable) snapshot.getDataPoints().get(0).getLabels()) + .isEqualTo(Labels.EMPTY); } @Test public void testEmptySnapshot() { SummarySnapshot snapshot = SummarySnapshot.builder().name("empty_summary").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).isEmpty(); } @Test public void testEmptyData() { SummarySnapshot.SummaryDataPointSnapshot data = SummarySnapshot.SummaryDataPointSnapshot.builder().build(); - Assert.assertEquals(0, data.getQuantiles().size()); - Assert.assertFalse(data.hasCount()); - Assert.assertFalse(data.hasSum()); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); - Assert.assertEquals(0, data.getExemplars().size()); + assertThat(data.getQuantiles().size()).isZero(); + assertThat(data.hasCount()).isFalse(); + assertThat(data.hasSum()).isFalse(); + assertThat(data.hasCreatedTimestamp()).isFalse(); + assertThat(data.hasScrapeTimestamp()).isFalse(); + assertThat(data.getExemplars().size()).isZero(); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java index 1f70f6520..4585e7281 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnitTest.java @@ -1,13 +1,15 @@ package io.prometheus.metrics.model.snapshots; -import org.junit.Assert; -import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -public class UnitTest { +import org.junit.jupiter.api.Test; - @Test(expected = IllegalArgumentException.class) +class UnitTest { + + @Test public void testEmpty() { - new Unit(" "); + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> new Unit(" ")); } @Test @@ -15,7 +17,7 @@ public void testEquals1() { Unit unit1 = Unit.BYTES; Unit unit2 = new Unit("bytes"); - Assert.assertEquals(unit2, unit1); + assertThat(unit1).isEqualTo(unit2); } @Test @@ -23,7 +25,7 @@ public void testEquals2() { Unit unit1 = new Unit("bytes "); Unit unit2 = new Unit("bytes"); - Assert.assertEquals(unit2, unit1); + assertThat(unit1).isEqualTo(unit2); } @Test @@ -31,7 +33,7 @@ public void testEquals3() { Unit unit1 = new Unit(" bytes"); Unit unit2 = new Unit("bytes"); - Assert.assertEquals(unit2, unit1); + assertThat(unit1).isEqualTo(unit2); } @Test @@ -39,6 +41,6 @@ public void testEquals4() { Unit unit1 = new Unit(" bytes "); Unit unit2 = new Unit("bytes"); - Assert.assertEquals(unit2, unit1); + assertThat(unit1).isEqualTo(unit2); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java index cdb81c9dc..a8c266b07 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/UnknownSnapshotTest.java @@ -1,9 +1,12 @@ package io.prometheus.metrics.model.snapshots; -import org.junit.Assert; -import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.data.Offset.offset; -public class UnknownSnapshotTest { +import org.junit.jupiter.api.Test; + +class UnknownSnapshotTest { @Test public void testCompleteGoodCase() { @@ -33,13 +36,13 @@ public void testCompleteGoodCase() { .build(); SnapshotTestUtil.assertMetadata( snapshot, "my_unknown_seconds", "something in seconds", "seconds"); - Assert.assertEquals(2, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).hasSize(2); UnknownSnapshot.UnknownDataPointSnapshot data = snapshot.getDataPoints().get(1); // env="prod" - Assert.assertEquals(Labels.of("env", "prod"), data.getLabels()); - Assert.assertEquals(0.3, data.getValue(), 0.0); - Assert.assertEquals(0.12, data.getExemplar().getValue(), 0.0); - Assert.assertFalse(data.hasCreatedTimestamp()); - Assert.assertFalse(data.hasScrapeTimestamp()); + assertThat((Iterable) data.getLabels()).isEqualTo(Labels.of("env", "prod")); + assertThat(data.getValue()).isCloseTo(0.3, offset(0.0)); + assertThat(data.getExemplar().getValue()).isCloseTo(0.12, offset(0.0)); + assertThat(data.hasCreatedTimestamp()).isFalse(); + assertThat(data.hasScrapeTimestamp()).isFalse(); } @Test @@ -49,23 +52,25 @@ public void testMinimal() { .name("test") .dataPoint(UnknownSnapshot.UnknownDataPointSnapshot.builder().value(1.0).build()) .build(); - Assert.assertEquals(1, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).hasSize(1); } @Test public void testEmpty() { UnknownSnapshot snapshot = UnknownSnapshot.builder().name("test").build(); - Assert.assertEquals(0, snapshot.getDataPoints().size()); + assertThat(snapshot.getDataPoints()).isEmpty(); } - @Test(expected = IllegalArgumentException.class) + @Test public void testNameMissing() { - UnknownSnapshot.builder().build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> UnknownSnapshot.builder().build()); } - @Test(expected = IllegalArgumentException.class) + @Test public void testValueMissing() { - UnknownSnapshot.UnknownDataPointSnapshot.builder().build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> UnknownSnapshot.UnknownDataPointSnapshot.builder().build()); } @Test @@ -75,13 +80,13 @@ public void testUnknownDataPointSnapshot() { UnknownSnapshot.UnknownDataPointSnapshot data = new UnknownSnapshot.UnknownDataPointSnapshot(1.0, labels, exemplar); - Assert.assertEquals(1.0, data.getValue(), 0.1); - Assert.assertEquals(labels, data.getLabels()); - Assert.assertEquals(exemplar, data.getExemplar()); + assertThat(data.getValue()).isCloseTo(1.0, offset(0.1)); + assertThat((Iterable) data.getLabels()).isEqualTo(labels); + assertThat(data.getExemplar()).isEqualTo(exemplar); data = new UnknownSnapshot.UnknownDataPointSnapshot(1.0, labels, exemplar, 0L); - Assert.assertEquals(1.0, data.getValue(), 0.1); - Assert.assertEquals(labels, data.getLabels()); - Assert.assertEquals(exemplar, data.getExemplar()); + assertThat(data.getValue()).isCloseTo(1.0, offset(0.1)); + assertThat((Iterable) data.getLabels()).isEqualTo(labels); + assertThat(data.getExemplar()).isEqualTo(exemplar); } } diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index ba88815f7..0cc2e8cfc 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -55,12 +55,6 @@ - - junit - junit - 4.13.2 - test - io.prometheus prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java index 83e28d982..a678bed93 100644 --- a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java +++ b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java @@ -1,5 +1,7 @@ package io.prometheus.metrics.simpleclient.bridge; +import static org.assertj.core.api.Assertions.assertThat; + import io.prometheus.client.Collector; import io.prometheus.client.CollectorRegistry; import io.prometheus.client.Counter; @@ -18,16 +20,15 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -public class SimpleclientCollectorTest { +class SimpleclientCollectorTest { private CollectorRegistry origRegistry; private PrometheusRegistry newRegistry; - @Before + @BeforeEach public void setUp() { origRegistry = new CollectorRegistry(); newRegistry = new PrometheusRegistry(); @@ -46,14 +47,14 @@ public void testCounterComplete() throws IOException, InterruptedException { Thread.sleep(3); // make timestamps a bit different counter.labels("/hello", "500").incWithExemplar(2.4, "trace_id", "23446", "span_id", "bcdef"); - Assert.assertEquals(fixTimestamps(sort(origOpenMetrics())), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(fixTimestamps(sort(origOpenMetrics()))); } @Test public void testCounterMinimal() throws IOException { Counter.build().name("events").help("total number of events").register(origRegistry); - Assert.assertEquals(fixTimestamps(sort(origOpenMetrics())), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(fixTimestamps(sort(origOpenMetrics()))); } @Test @@ -69,7 +70,7 @@ public void testGaugeComplete() throws IOException, InterruptedException { Thread.sleep(3); gauge.labels("/dev/sda2").set(0.7); - Assert.assertEquals(sort(origOpenMetrics()), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(sort(origOpenMetrics())); } @Test @@ -82,7 +83,7 @@ public void testGaugeMinimal() throws IOException, InterruptedException { .register(origRegistry); gauge.set(22.3); - Assert.assertEquals(sort(origOpenMetrics()), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(sort(origOpenMetrics())); } @Test @@ -102,14 +103,14 @@ public void testHistogramComplete() throws IOException, InterruptedException { Thread.sleep(3); // make timestamps a bit different histogram.labels("500").observeWithExemplar(10000, "trace_id", "11", "span_id", "12"); - Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(fixCounts(fixTimestamps(sort(origOpenMetrics())))); } @Test public void testHistogramMinimal() throws IOException, InterruptedException { Histogram.build().name("request_latency").help("request latency").register(origRegistry); - Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(fixCounts(fixTimestamps(sort(origOpenMetrics())))); } @Test @@ -133,7 +134,7 @@ public void testSummaryComplete() throws IOException, InterruptedException { summary.labels("/", "500").observe(0.31); summary.labels("/", "500").observe(0.32); - Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(fixCounts(fixTimestamps(sort(origOpenMetrics())))); } @Test @@ -141,7 +142,7 @@ public void testSummaryMinimal() throws IOException, InterruptedException { Summary summary = Summary.build().name("request_size").help("request size").register(origRegistry); - Assert.assertEquals(fixCounts(fixTimestamps(sort(origOpenMetrics()))), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(fixCounts(fixTimestamps(sort(origOpenMetrics())))); } @Test @@ -156,7 +157,7 @@ public void testInfoComplete() throws IOException, InterruptedException { Thread.sleep(3); info.labels("dev").info("major_version", "13", "minor_version", "1"); - Assert.assertEquals(fixBoolean(sort(origOpenMetrics())), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(fixBoolean(sort(origOpenMetrics()))); } @Test @@ -164,7 +165,7 @@ public void testInfoMinimal() throws IOException, InterruptedException { Info info = Info.build().name("jvm").help("JVM info").register(origRegistry); info.info("version", "17"); - Assert.assertEquals(fixBoolean(sort(origOpenMetrics())), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(fixBoolean(sort(origOpenMetrics()))); } @Test @@ -187,7 +188,7 @@ public List collect() { }; origRegistry.register(stateSet); - Assert.assertEquals(fixBoolean(sort(origOpenMetrics())), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(fixBoolean(sort(origOpenMetrics()))); } @Test @@ -220,7 +221,7 @@ public List collect() { }; origRegistry.register(unknown); - Assert.assertEquals(sort(origOpenMetrics()), sort(newOpenMetrics())); + assertThat(sort(newOpenMetrics())).isEqualTo(sort(origOpenMetrics())); } private String fixBoolean(String s) { diff --git a/simpleclient-archive/simpleclient_graphite_bridge/pom.xml b/simpleclient-archive/simpleclient_graphite_bridge/pom.xml index e9f432cc1..babc6814b 100644 --- a/simpleclient-archive/simpleclient_graphite_bridge/pom.xml +++ b/simpleclient-archive/simpleclient_graphite_bridge/pom.xml @@ -39,12 +39,5 @@ simpleclient ${project.version} - - - junit - junit - 4.13.2 - test - diff --git a/simpleclient-archive/simpleclient_graphite_bridge/src/test/java/io/prometheus/client/bridge/GraphiteTest.java b/simpleclient-archive/simpleclient_graphite_bridge/src/test/java/io/prometheus/client/bridge/GraphiteTest.java index d0f00bc49..15eb7c60c 100644 --- a/simpleclient-archive/simpleclient_graphite_bridge/src/test/java/io/prometheus/client/bridge/GraphiteTest.java +++ b/simpleclient-archive/simpleclient_graphite_bridge/src/test/java/io/prometheus/client/bridge/GraphiteTest.java @@ -14,7 +14,7 @@ import java.net.ServerSocket; import java.net.Socket; -public class GraphiteTest { +class GraphiteTest { @Test public void testPush() throws Exception { // Create a metric. diff --git a/simpleclient-archive/simpleclient_hibernate/pom.xml b/simpleclient-archive/simpleclient_hibernate/pom.xml index ca99206a4..605d06989 100644 --- a/simpleclient-archive/simpleclient_hibernate/pom.xml +++ b/simpleclient-archive/simpleclient_hibernate/pom.xml @@ -33,7 +33,7 @@ - + io.prometheus simpleclient @@ -47,20 +47,5 @@ 6.1.0.Final provided - - - - junit - junit - 4.13.2 - test - - - org.mockito - mockito-core - 4.6.1 - test - - diff --git a/simpleclient-archive/simpleclient_hibernate/src/main/java/io/prometheus/client/hibernate/HibernateStatisticsCollector.java b/simpleclient-archive/simpleclient_hibernate/src/main/java/io/prometheus/client/hibernate/HibernateStatisticsCollector.java index 32f07f8f9..6ab9e2c42 100644 --- a/simpleclient-archive/simpleclient_hibernate/src/main/java/io/prometheus/client/hibernate/HibernateStatisticsCollector.java +++ b/simpleclient-archive/simpleclient_hibernate/src/main/java/io/prometheus/client/hibernate/HibernateStatisticsCollector.java @@ -40,7 +40,7 @@ * * @author Christian Kaltepoth */ -public class HibernateStatisticsCollector extends Collector { +class HibernaTestatisticsCollector extends Collector { private static final List LABEL_NAMES = Collections.singletonList("unit"); diff --git a/simpleclient-archive/simpleclient_hibernate/src/test/java/io/prometheus/client/hibernate/HibernateStatisticsCollectorTest.java b/simpleclient-archive/simpleclient_hibernate/src/test/java/io/prometheus/client/hibernate/HibernateStatisticsCollectorTest.java index b148ee108..b990988d4 100644 --- a/simpleclient-archive/simpleclient_hibernate/src/test/java/io/prometheus/client/hibernate/HibernateStatisticsCollectorTest.java +++ b/simpleclient-archive/simpleclient_hibernate/src/test/java/io/prometheus/client/hibernate/HibernateStatisticsCollectorTest.java @@ -16,7 +16,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; -public class HibernateStatisticsCollectorTest { +class HibernateStatisticsCollectorTest { @Rule public ExpectedException expectedException = ExpectedException.none(); @@ -240,4 +240,4 @@ private Double getSampleForQuery(String metric, String factory, String query) { ); } -} \ No newline at end of file +} diff --git a/simpleclient-archive/simpleclient_httpserver/pom.xml b/simpleclient-archive/simpleclient_httpserver/pom.xml index d34088965..1635375c0 100644 --- a/simpleclient-archive/simpleclient_httpserver/pom.xml +++ b/simpleclient-archive/simpleclient_httpserver/pom.xml @@ -44,18 +44,6 @@ ${project.version} - - junit - junit - 4.13.2 - test - - - org.assertj - assertj-core - 3.23.1 - test - javax.xml.bind jaxb-api diff --git a/simpleclient-archive/simpleclient_httpserver/src/test/java/io/prometheus/client/exporter/TestDaemonFlags.java b/simpleclient-archive/simpleclient_httpserver/src/test/java/io/prometheus/client/exporter/TestDaemonFlags.java index aaddd5e22..466ede1d0 100644 --- a/simpleclient-archive/simpleclient_httpserver/src/test/java/io/prometheus/client/exporter/TestDaemonFlags.java +++ b/simpleclient-archive/simpleclient_httpserver/src/test/java/io/prometheus/client/exporter/TestDaemonFlags.java @@ -9,7 +9,7 @@ import static org.assertj.core.api.Java6Assertions.assertThat; -public class TestDaemonFlags { +class TestDaemonFlags { @Test public void testDefaultIsNotDaemon() throws IOException, ExecutionException, InterruptedException { diff --git a/simpleclient-archive/simpleclient_httpserver/src/test/java/io/prometheus/client/exporter/TestHTTPServer.java b/simpleclient-archive/simpleclient_httpserver/src/test/java/io/prometheus/client/exporter/TestHTTPServer.java index 2b18f4e82..7e012ca97 100644 --- a/simpleclient-archive/simpleclient_httpserver/src/test/java/io/prometheus/client/exporter/TestHTTPServer.java +++ b/simpleclient-archive/simpleclient_httpserver/src/test/java/io/prometheus/client/exporter/TestHTTPServer.java @@ -35,7 +35,7 @@ import static org.assertj.core.api.Java6Assertions.assertThat; -public class TestHTTPServer { +class TestHTTPServer { CollectorRegistry registry; diff --git a/simpleclient-archive/simpleclient_jetty/pom.xml b/simpleclient-archive/simpleclient_jetty/pom.xml index 24aa35902..2d263c7d2 100644 --- a/simpleclient-archive/simpleclient_jetty/pom.xml +++ b/simpleclient-archive/simpleclient_jetty/pom.xml @@ -51,12 +51,6 @@ ${jetty.version} - - junit - junit - 4.13.2 - test - org.hamcrest hamcrest-all diff --git a/simpleclient-archive/simpleclient_jetty/src/test/java/io/prometheus/client/jetty/JettyStatisticsCollectorTest.java b/simpleclient-archive/simpleclient_jetty/src/test/java/io/prometheus/client/jetty/JettyStatisticsCollectorTest.java index dcf6b8c7c..1686bcd2b 100644 --- a/simpleclient-archive/simpleclient_jetty/src/test/java/io/prometheus/client/jetty/JettyStatisticsCollectorTest.java +++ b/simpleclient-archive/simpleclient_jetty/src/test/java/io/prometheus/client/jetty/JettyStatisticsCollectorTest.java @@ -19,7 +19,7 @@ import org.junit.Before; import org.junit.Test; -public class JettyStatisticsCollectorTest { +class JettyStatisticsCollectorTest { private final Server server = new Server(); private final ServerConnector connector = new ServerConnector(server); diff --git a/simpleclient-archive/simpleclient_jetty_jdk8/pom.xml b/simpleclient-archive/simpleclient_jetty_jdk8/pom.xml index c696d7236..f75003907 100644 --- a/simpleclient-archive/simpleclient_jetty_jdk8/pom.xml +++ b/simpleclient-archive/simpleclient_jetty_jdk8/pom.xml @@ -47,12 +47,6 @@ 11.0.9 - - junit - junit - 4.13.2 - test - org.hamcrest hamcrest-all diff --git a/simpleclient-archive/simpleclient_jetty_jdk8/src/test/java/io/prometheus/client/jetty/QueuedThreadPoolStatisticsCollectorTest.java b/simpleclient-archive/simpleclient_jetty_jdk8/src/test/java/io/prometheus/client/jetty/QueuedThreadPoolStatisticsCollectorTest.java index 326a1c45c..23101a42c 100644 --- a/simpleclient-archive/simpleclient_jetty_jdk8/src/test/java/io/prometheus/client/jetty/QueuedThreadPoolStatisticsCollectorTest.java +++ b/simpleclient-archive/simpleclient_jetty_jdk8/src/test/java/io/prometheus/client/jetty/QueuedThreadPoolStatisticsCollectorTest.java @@ -14,7 +14,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; -public class QueuedThreadPoolStatisticsCollectorTest { +class QueuedThreadPoolStatisticsCollectorTest { private static final String[] LABEL_NAMES = {"unit"}; diff --git a/simpleclient-archive/simpleclient_log4j/pom.xml b/simpleclient-archive/simpleclient_log4j/pom.xml index bfe2be75a..3651fe107 100644 --- a/simpleclient-archive/simpleclient_log4j/pom.xml +++ b/simpleclient-archive/simpleclient_log4j/pom.xml @@ -50,19 +50,5 @@ 2.17.2 provided - - - junit - junit - 4.13.2 - test - - - - org.mockito - mockito-core - 4.6.1 - test - diff --git a/simpleclient-archive/simpleclient_log4j/src/test/java/io/prometheus/client/log4j/InstrumentedAppenderTest.java b/simpleclient-archive/simpleclient_log4j/src/test/java/io/prometheus/client/log4j/InstrumentedAppenderTest.java index 39c50029c..7a6b2d282 100644 --- a/simpleclient-archive/simpleclient_log4j/src/test/java/io/prometheus/client/log4j/InstrumentedAppenderTest.java +++ b/simpleclient-archive/simpleclient_log4j/src/test/java/io/prometheus/client/log4j/InstrumentedAppenderTest.java @@ -11,7 +11,7 @@ import org.junit.Before; import org.junit.Test; -public class InstrumentedAppenderTest { +class InstrumentedAppenderTest { private InstrumentedAppender appender; private LoggingEvent event; diff --git a/simpleclient-archive/simpleclient_log4j2/pom.xml b/simpleclient-archive/simpleclient_log4j2/pom.xml index c8afc9da1..909ecb220 100644 --- a/simpleclient-archive/simpleclient_log4j2/pom.xml +++ b/simpleclient-archive/simpleclient_log4j2/pom.xml @@ -44,19 +44,5 @@ 2.17.2 provided - - - junit - junit - 4.13.2 - test - - - - org.mockito - mockito-core - 4.6.1 - test - diff --git a/simpleclient-archive/simpleclient_log4j2/src/test/java/io/prometheus/client/log4j2/InstrumentedAppenderTest.java b/simpleclient-archive/simpleclient_log4j2/src/test/java/io/prometheus/client/log4j2/InstrumentedAppenderTest.java index 08b91e6ce..74b4882a5 100644 --- a/simpleclient-archive/simpleclient_log4j2/src/test/java/io/prometheus/client/log4j2/InstrumentedAppenderTest.java +++ b/simpleclient-archive/simpleclient_log4j2/src/test/java/io/prometheus/client/log4j2/InstrumentedAppenderTest.java @@ -12,7 +12,7 @@ import static org.apache.logging.log4j.Level.*; -public class InstrumentedAppenderTest { +class InstrumentedAppenderTest { private InstrumentedAppender appender; private LogEvent event; diff --git a/simpleclient-archive/simpleclient_logback/pom.xml b/simpleclient-archive/simpleclient_logback/pom.xml index 96f4fb34d..195aa19a8 100644 --- a/simpleclient-archive/simpleclient_logback/pom.xml +++ b/simpleclient-archive/simpleclient_logback/pom.xml @@ -43,20 +43,5 @@ logback-classic 1.2.11 - - - - junit - junit - 4.13.2 - test - - - - org.mockito - mockito-core - 4.6.1 - test - diff --git a/simpleclient-archive/simpleclient_logback/src/test/java/io/prometheus/client/logback/InstrumentedAppenderTest.java b/simpleclient-archive/simpleclient_logback/src/test/java/io/prometheus/client/logback/InstrumentedAppenderTest.java index af3bd1610..2534825b5 100644 --- a/simpleclient-archive/simpleclient_logback/src/test/java/io/prometheus/client/logback/InstrumentedAppenderTest.java +++ b/simpleclient-archive/simpleclient_logback/src/test/java/io/prometheus/client/logback/InstrumentedAppenderTest.java @@ -11,7 +11,7 @@ import org.junit.Before; import org.junit.Test; -public class InstrumentedAppenderTest { +class InstrumentedAppenderTest { private CollectorRegistry registry; private InstrumentedAppender appender; private InstrumentedAppender defaultAppender; diff --git a/simpleclient-archive/simpleclient_servlet/pom.xml b/simpleclient-archive/simpleclient_servlet/pom.xml index 7f6b843de..402ab351c 100644 --- a/simpleclient-archive/simpleclient_servlet/pom.xml +++ b/simpleclient-archive/simpleclient_servlet/pom.xml @@ -59,30 +59,12 @@ provided - - junit - junit - 4.13.2 - test - - - org.assertj - assertj-core - 3.23.1 - test - org.eclipse.jetty jetty-servlet 8.2.0.v20160908 test - - org.mockito - mockito-core - 4.6.1 - test - diff --git a/simpleclient-archive/simpleclient_servlet_common/pom.xml b/simpleclient-archive/simpleclient_servlet_common/pom.xml index 31d477e71..dd8f9fb6d 100644 --- a/simpleclient-archive/simpleclient_servlet_common/pom.xml +++ b/simpleclient-archive/simpleclient_servlet_common/pom.xml @@ -47,18 +47,5 @@ simpleclient_common ${project.version} - - - junit - junit - 4.13.2 - test - - - org.assertj - assertj-core - 3.23.1 - test - diff --git a/simpleclient-archive/simpleclient_servlet_common/src/test/java/io/prometheus/client/servlet/common/exporter/ExporterTest.java b/simpleclient-archive/simpleclient_servlet_common/src/test/java/io/prometheus/client/servlet/common/exporter/ExporterTest.java index 3143a55d8..85e3054a2 100644 --- a/simpleclient-archive/simpleclient_servlet_common/src/test/java/io/prometheus/client/servlet/common/exporter/ExporterTest.java +++ b/simpleclient-archive/simpleclient_servlet_common/src/test/java/io/prometheus/client/servlet/common/exporter/ExporterTest.java @@ -15,7 +15,7 @@ import static org.assertj.core.api.Java6Assertions.assertThat; import static org.assertj.core.api.Java6Assertions.fail; -public class ExporterTest { +class ExporterTest { private HttpServletRequestAdapter mockHttpServletRequest() { return mockHttpServletRequest(null, false); diff --git a/simpleclient-archive/simpleclient_servlet_common/src/test/java/io/prometheus/client/servlet/common/filter/FilterTest.java b/simpleclient-archive/simpleclient_servlet_common/src/test/java/io/prometheus/client/servlet/common/filter/FilterTest.java index 583b6f1c9..fd845fa20 100644 --- a/simpleclient-archive/simpleclient_servlet_common/src/test/java/io/prometheus/client/servlet/common/filter/FilterTest.java +++ b/simpleclient-archive/simpleclient_servlet_common/src/test/java/io/prometheus/client/servlet/common/filter/FilterTest.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -public class FilterTest { +class FilterTest { public static final String GET = "GET"; public static final String POST = "POST"; diff --git a/simpleclient-archive/simpleclient_servlet_jakarta/pom.xml b/simpleclient-archive/simpleclient_servlet_jakarta/pom.xml index 186dd0526..336a18a19 100644 --- a/simpleclient-archive/simpleclient_servlet_jakarta/pom.xml +++ b/simpleclient-archive/simpleclient_servlet_jakarta/pom.xml @@ -59,29 +59,11 @@ provided - - junit - junit - 4.13.2 - test - - - org.assertj - assertj-core - 3.23.1 - test - org.eclipse.jetty jetty-servlet 11.0.9 test - - org.mockito - mockito-core - 4.6.1 - test - diff --git a/simpleclient-archive/simpleclient_spring_web/pom.xml b/simpleclient-archive/simpleclient_spring_web/pom.xml index 7591085fa..38440f814 100644 --- a/simpleclient-archive/simpleclient_spring_web/pom.xml +++ b/simpleclient-archive/simpleclient_spring_web/pom.xml @@ -85,12 +85,6 @@ - - junit - junit - 4.13.2 - test - org.springframework spring-test diff --git a/simpleclient-archive/simpleclient_spring_web/src/test/java/io/prometheus/client/spring/web/MethodTimerAppTest.java b/simpleclient-archive/simpleclient_spring_web/src/test/java/io/prometheus/client/spring/web/MethodTimerAppTest.java index 5de999178..c787338e3 100644 --- a/simpleclient-archive/simpleclient_spring_web/src/test/java/io/prometheus/client/spring/web/MethodTimerAppTest.java +++ b/simpleclient-archive/simpleclient_spring_web/src/test/java/io/prometheus/client/spring/web/MethodTimerAppTest.java @@ -8,7 +8,7 @@ @ContextConfiguration @EnablePrometheusTiming -public class MethodTimerAppTest { +class MethodTimerAppTest { @Controller public static class MyController { @@ -23,4 +23,4 @@ public void waitJustAGoshDarnSecond() throws Exception { public static class MyConfig { } -} \ No newline at end of file +} diff --git a/simpleclient-archive/simpleclient_spring_web/src/test/java/io/prometheus/client/spring/web/MethodTimerTest.java b/simpleclient-archive/simpleclient_spring_web/src/test/java/io/prometheus/client/spring/web/MethodTimerTest.java index 2a1957f38..77fa5943d 100644 --- a/simpleclient-archive/simpleclient_spring_web/src/test/java/io/prometheus/client/spring/web/MethodTimerTest.java +++ b/simpleclient-archive/simpleclient_spring_web/src/test/java/io/prometheus/client/spring/web/MethodTimerTest.java @@ -11,7 +11,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -public class MethodTimerTest { +class MethodTimerTest { private interface Timeable { void timeMe() throws Exception; } diff --git a/simpleclient-archive/simpleclient_vertx/pom.xml b/simpleclient-archive/simpleclient_vertx/pom.xml index 2a91f20c8..5b8180d25 100644 --- a/simpleclient-archive/simpleclient_vertx/pom.xml +++ b/simpleclient-archive/simpleclient_vertx/pom.xml @@ -53,18 +53,5 @@ 3.9.13 provided - - - junit - junit - 4.13.2 - test - - - org.assertj - assertj-core - 3.23.1 - test - diff --git a/simpleclient-archive/simpleclient_vertx/src/test/java/io/prometheus/client/vertx/MetricsHandlerTest.java b/simpleclient-archive/simpleclient_vertx/src/test/java/io/prometheus/client/vertx/MetricsHandlerTest.java index d4d51a5fc..02b7ec42a 100644 --- a/simpleclient-archive/simpleclient_vertx/src/test/java/io/prometheus/client/vertx/MetricsHandlerTest.java +++ b/simpleclient-archive/simpleclient_vertx/src/test/java/io/prometheus/client/vertx/MetricsHandlerTest.java @@ -17,7 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; -public class MetricsHandlerTest { +class MetricsHandlerTest { private static Vertx vertx; private static Integer port; diff --git a/simpleclient-archive/simpleclient_vertx4/pom.xml b/simpleclient-archive/simpleclient_vertx4/pom.xml index 5e365bd2a..2374cad9f 100644 --- a/simpleclient-archive/simpleclient_vertx4/pom.xml +++ b/simpleclient-archive/simpleclient_vertx4/pom.xml @@ -53,18 +53,5 @@ 4.3.1 provided - - - junit - junit - 4.13.2 - test - - - org.assertj - assertj-core - 3.23.1 - test - diff --git a/simpleclient-archive/simpleclient_vertx4/src/test/java/io/prometheus/client/vertx/MetricsHandlerTest.java b/simpleclient-archive/simpleclient_vertx4/src/test/java/io/prometheus/client/vertx/MetricsHandlerTest.java index 6e71b55c6..889877e2c 100644 --- a/simpleclient-archive/simpleclient_vertx4/src/test/java/io/prometheus/client/vertx/MetricsHandlerTest.java +++ b/simpleclient-archive/simpleclient_vertx4/src/test/java/io/prometheus/client/vertx/MetricsHandlerTest.java @@ -17,7 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; -public class MetricsHandlerTest { +class MetricsHandlerTest { private static Vertx vertx; private static Integer port; From c8562166be8746925228064f96a0a1bfd61152e1 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 7 Oct 2024 16:11:40 +0200 Subject: [PATCH 145/870] update Wrapper, dependabot (#1097) * update maven wrapper Signed-off-by: Gregor Zeitlinger * update dependabot Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .github/dependabot.yml | 27 +- .mvn/wrapper/MavenWrapperDownloader.java | 117 ------ .mvn/wrapper/maven-wrapper.jar | Bin 50710 -> 0 bytes .mvn/wrapper/maven-wrapper.properties | 21 +- mvnw | 451 ++++++++++------------- mvnw.cmd | 281 +++++++------- 6 files changed, 348 insertions(+), 549 deletions(-) delete mode 100644 .mvn/wrapper/MavenWrapperDownloader.java delete mode 100644 .mvn/wrapper/maven-wrapper.jar diff --git a/.github/dependabot.yml b/.github/dependabot.yml index e6d0d3adc..27283d4ae 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,28 +5,11 @@ updates: schedule: interval: weekly - package-ecosystem: maven - open-pull-requests-limit: 1 # Limit to 1 open PR at a time until https://github.com/dependabot/dependabot-core/issues/10415 is fixed # excluding simpleclient_archive from the update is not possible, only includes are supported - directories: - - prometheus-metrics-bom - - prometheus-metrics-core - - prometheus-metrics-config - - prometheus-metrics-model - - prometheus-metrics-tracer - - prometheus-metrics-exposition-formats - - prometheus-metrics-exporter-common - - prometheus-metrics-exporter-servlet-jakarta - - prometheus-metrics-exporter-servlet-javax - - prometheus-metrics-exporter-httpserver - - prometheus-metrics-exporter-opentelemetry - - prometheus-metrics-exporter-pushgateway - - prometheus-metrics-instrumentation-caffeine - - prometheus-metrics-instrumentation-jvm - - prometheus-metrics-instrumentation-dropwizard5 - - prometheus-metrics-instrumentation-guava - - prometheus-metrics-simpleclient-bridge - - examples - - benchmarks - - integration-tests + # when we use includes, we run into https://github.com/dependabot/dependabot-core/issues/10415 - + # even if we limit to 1 PR at a time + # therefore we just ignore the simpleclient_archive update for now + # if this becomes a problem, we can move to renovate + directory: "/" schedule: interval: daily diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index b901097f2..000000000 --- a/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2007-present the original author or 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. - */ -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50710 zcmbTd1CVCTmM+|7+wQV$+qP}n>auOywyU~q+qUhh+uxis_~*a##hm*_WW?9E7Pb7N%LRFiwbEGCJ0XP=%-6oeT$XZcYgtzC2~q zk(K08IQL8oTl}>>+hE5YRgXTB@fZ4TH9>7=79e`%%tw*SQUa9~$xKD5rS!;ZG@ocK zQdcH}JX?W|0_Afv?y`-NgLum62B&WSD$-w;O6G0Sm;SMX65z)l%m1e-g8Q$QTI;(Q z+x$xth4KFvH@Bs6(zn!iF#nenk^Y^ce;XIItAoCsow38eq?Y-Auh!1in#Rt-_D>H^ z=EjbclGGGa6VnaMGmMLj`x3NcwA43Jb(0gzl;RUIRAUDcR1~99l2SAPkVhoRMMtN} zXvC<tOmX83grD8GSo_Lo?%lNfhD#EBgPo z*nf@ppMC#B!T)Ae0RG$mlJWmGl7CkuU~B8-==5i;rS;8i6rJ=PoQxf446XDX9g|c> zU64ePyMlsI^V5Jq5A+BPe#e73+kpc_r1tv#B)~EZ;7^67F0*QiYfrk0uVW;Qb=NsG zN>gsuCwvb?s-KQIppEaeXtEMdc9dy6Dfduz-tMTms+i01{eD9JE&h?Kht*$eOl#&L zJdM_-vXs(V#$Ed;5wyNWJdPNh+Z$+;$|%qR(t`4W@kDhd*{(7-33BOS6L$UPDeE_53j${QfKN-0v-HG z(QfyvFNbwPK%^!eIo4ac1;b>c0vyf9}Xby@YY!lkz-UvNp zwj#Gg|4B~?n?G^{;(W;|{SNoJbHTMpQJ*Wq5b{l9c8(%?Kd^1?H1om1de0Da9M;Q=n zUfn{f87iVb^>Exl*nZ0hs(Yt>&V9$Pg`zX`AI%`+0SWQ4Zc(8lUDcTluS z5a_KerZWe}a-MF9#Cd^fi!y3%@RFmg&~YnYZ6<=L`UJ0v={zr)>$A;x#MCHZy1st7 ztT+N07NR+vOwSV2pvWuN1%lO!K#Pj0Fr>Q~R40{bwdL%u9i`DSM4RdtEH#cW)6}+I-eE< z&tZs+(Ogu(H_;$a$!7w`MH0r%h&@KM+<>gJL@O~2K2?VrSYUBbhCn#yy?P)uF3qWU z0o09mIik+kvzV6w>vEZy@&Mr)SgxPzUiDA&%07m17udz9usD82afQEps3$pe!7fUf z0eiidkJ)m3qhOjVHC_M(RYCBO%CZKZXFb8}s0-+}@CIn&EF(rRWUX2g^yZCvl0bI} zbP;1S)iXnRC&}5-Tl(hASKqdSnO?ASGJ*MIhOXIblmEudj(M|W!+I3eDc}7t`^mtg z)PKlaXe(OH+q-)qcQ8a@!llRrpGI8DsjhoKvw9T;TEH&?s=LH0w$EzI>%u;oD@x83 zJL7+ncjI9nn!TlS_KYu5vn%f*@qa5F;| zEFxY&B?g=IVlaF3XNm_03PA)=3|{n-UCgJoTr;|;1AU9|kPE_if8!Zvb}0q$5okF$ zHaJdmO&gg!9oN|M{!qGE=tb|3pVQ8PbL$}e;NgXz<6ZEggI}wO@aBP**2Wo=yN#ZC z4G$m^yaM9g=|&!^ft8jOLuzc3Psca*;7`;gnHm}tS0%f4{|VGEwu45KptfNmwxlE~ z^=r30gi@?cOm8kAz!EylA4G~7kbEiRlRIzwrb~{_2(x^$-?|#e6Bi_**(vyr_~9Of z!n>Gqf+Qwiu!xhi9f53=PM3`3tNF}pCOiPU|H4;pzjcsqbwg*{{kyrTxk<;mx~(;; z1NMrpaQ`57yn34>Jo3b|HROE(UNcQash!0p2-!Cz;{IRv#Vp5!3o$P8!%SgV~k&Hnqhp`5eLjTcy93cK!3Hm-$`@yGnaE=?;*2uSpiZTs_dDd51U%i z{|Zd9ou-;laGS_x=O}a+ zB||za<795A?_~Q=r=coQ+ZK@@ zId~hWQL<%)fI_WDIX#=(WNl!Dm$a&ROfLTd&B$vatq!M-2Jcs;N2vps$b6P1(N}=oI3<3luMTmC|0*{ zm1w8bt7vgX($!0@V0A}XIK)w!AzUn7vH=pZEp0RU0p?}ch2XC-7r#LK&vyc2=-#Q2 z^L%8)JbbcZ%g0Du;|8=q8B>X=mIQirpE=&Ox{TiuNDnOPd-FLI^KfEF729!!0x#Es z@>3ursjFSpu%C-8WL^Zw!7a0O-#cnf`HjI+AjVCFitK}GXO`ME&on|^=~Zc}^LBp9 zj=-vlN;Uc;IDjtK38l7}5xxQF&sRtfn4^TNtnzXv4M{r&ek*(eNbIu!u$>Ed%` z5x7+&)2P&4>0J`N&ZP8$vcR+@FS0126s6+Jx_{{`3ZrIMwaJo6jdrRwE$>IU_JTZ} z(||hyyQ)4Z1@wSlT94(-QKqkAatMmkT7pCycEB1U8KQbFX&?%|4$yyxCtm3=W`$4fiG0WU3yI@c zx{wfmkZAYE_5M%4{J-ygbpH|(|GD$2f$3o_Vti#&zfSGZMQ5_f3xt6~+{RX=$H8at z?GFG1Tmp}}lmm-R->ve*Iv+XJ@58p|1_jRvfEgz$XozU8#iJS})UM6VNI!3RUU!{5 zXB(+Eqd-E;cHQ>)`h0(HO_zLmzR3Tu-UGp;08YntWwMY-9i^w_u#wR?JxR2bky5j9 z3Sl-dQQU$xrO0xa&>vsiK`QN<$Yd%YXXM7*WOhnRdSFt5$aJux8QceC?lA0_if|s> ze{ad*opH_kb%M&~(~&UcX0nFGq^MqjxW?HJIP462v9XG>j(5Gat_)#SiNfahq2Mz2 zU`4uV8m$S~o9(W>mu*=h%Gs(Wz+%>h;R9Sg)jZ$q8vT1HxX3iQnh6&2rJ1u|j>^Qf`A76K%_ubL`Zu?h4`b=IyL>1!=*%!_K)=XC z6d}4R5L+sI50Q4P3upXQ3Z!~1ZXLlh!^UNcK6#QpYt-YC=^H=EPg3)z*wXo*024Q4b2sBCG4I# zlTFFY=kQ>xvR+LsuDUAk)q%5pEcqr(O_|^spjhtpb1#aC& zghXzGkGDC_XDa%t(X`E+kvKQ4zrQ*uuQoj>7@@ykWvF332)RO?%AA&Fsn&MNzmFa$ zWk&&^=NNjxLjrli_8ESU)}U|N{%j&TQmvY~lk!~Jh}*=^INA~&QB9em!in_X%Rl1&Kd~Z(u z9mra#<@vZQlOY+JYUwCrgoea4C8^(xv4ceCXcejq84TQ#sF~IU2V}LKc~Xlr_P=ry zl&Hh0exdCbVd^NPCqNNlxM3vA13EI8XvZ1H9#bT7y*U8Y{H8nwGpOR!e!!}*g;mJ#}T{ekSb}5zIPmye*If(}}_=PcuAW#yidAa^9-`<8Gr0 z)Fz=NiZ{)HAvw{Pl5uu)?)&i&Us$Cx4gE}cIJ}B4Xz~-q7)R_%owbP!z_V2=Aq%Rj z{V;7#kV1dNT9-6R+H}}(ED*_!F=~uz>&nR3gb^Ce%+0s#u|vWl<~JD3MvS0T9thdF zioIG3c#Sdsv;LdtRv3ml7%o$6LTVL>(H`^@TNg`2KPIk*8-IB}X!MT0`hN9Ddf7yN z?J=GxPL!uJ7lqwowsl?iRrh@#5C$%E&h~Z>XQcvFC*5%0RN-Opq|=IwX(dq(*sjs+ zqy99+v~m|6T#zR*e1AVxZ8djd5>eIeCi(b8sUk)OGjAsKSOg^-ugwl2WSL@d#?mdl zib0v*{u-?cq}dDGyZ%$XRY=UkQwt2oGu`zQneZh$=^! zj;!pCBWQNtvAcwcWIBM2y9!*W|8LmQy$H~5BEx)78J`4Z0(FJO2P^!YyQU{*Al+fs z){!4JvT1iLrJ8aU3k0t|P}{RN)_^v%$$r;+p0DY7N8CXzmS*HB*=?qaaF9D@#_$SN zSz{moAK<*RH->%r7xX~9gVW$l7?b|_SYI)gcjf0VAUJ%FcQP(TpBs; zg$25D!Ry_`8xpS_OJdeo$qh#7U+cepZ??TII7_%AXsT$B z=e)Bx#v%J0j``00Zk5hsvv6%T^*xGNx%KN-=pocSoqE5_R)OK%-Pbu^1MNzfds)mL zxz^F4lDKV9D&lEY;I+A)ui{TznB*CE$=9(wgE{m}`^<--OzV-5V4X2w9j(_!+jpTr zJvD*y6;39&T+==$F&tsRKM_lqa1HC}aGL0o`%c9mO=fts?36@8MGm7Vi{Y z^<7m$(EtdSr#22<(rm_(l_(`j!*Pu~Y>>xc>I9M#DJYDJNHO&4=HM%YLIp?;iR&$m z#_$ZWYLfGLt5FJZhr3jpYb`*%9S!zCG6ivNHYzNHcI%khtgHBliM^Ou}ZVD7ehU9 zS+W@AV=?Ro!=%AJ>Kcy9aU3%VX3|XM_K0A+ZaknKDyIS3S-Hw1C7&BSW5)sqj5Ye_ z4OSW7Yu-;bCyYKHFUk}<*<(@TH?YZPHr~~Iy%9@GR2Yd}J2!N9K&CN7Eq{Ka!jdu; zQNB*Y;i(7)OxZK%IHGt#Rt?z`I|A{q_BmoF!f^G}XVeTbe1Wnzh%1g>j}>DqFf;Rp zz7>xIs12@Ke0gr+4-!pmFP84vCIaTjqFNg{V`5}Rdt~xE^I;Bxp4)|cs8=f)1YwHz zqI`G~s2~qqDV+h02b`PQpUE#^^Aq8l%y2|ByQeXSADg5*qMprEAE3WFg0Q39`O+i1 z!J@iV!`Y~C$wJ!5Z+j5$i<1`+@)tBG$JL=!*uk=2k;T<@{|s1$YL079FvK%mPhyHV zP8^KGZnp`(hVMZ;s=n~3r2y;LTwcJwoBW-(ndU-$03{RD zh+Qn$ja_Z^OuMf3Ub|JTY74s&Am*(n{J3~@#OJNYuEVVJd9*H%)oFoRBkySGm`hx! zT3tG|+aAkXcx-2Apy)h^BkOyFTWQVeZ%e2@;*0DtlG9I3Et=PKaPt&K zw?WI7S;P)TWED7aSH$3hL@Qde?H#tzo^<(o_sv_2ci<7M?F$|oCFWc?7@KBj-;N$P zB;q!8@bW-WJY9do&y|6~mEruZAVe$!?{)N9rZZxD-|oltkhW9~nR8bLBGXw<632!l z*TYQn^NnUy%Ds}$f^=yQ+BM-a5X4^GHF=%PDrRfm_uqC zh{sKwIu|O0&jWb27;wzg4w5uA@TO_j(1X?8E>5Zfma|Ly7Bklq|s z9)H`zoAGY3n-+&JPrT!>u^qg9Evx4y@GI4$n-Uk_5wttU1_t?6><>}cZ-U+&+~JE) zPlDbO_j;MoxdLzMd~Ew|1o^a5q_1R*JZ=#XXMzg?6Zy!^hop}qoLQlJ{(%!KYt`MK z8umEN@Z4w!2=q_oe=;QttPCQy3Nm4F@x>@v4sz_jo{4m*0r%J(w1cSo;D_hQtJs7W z><$QrmG^+<$4{d2bgGo&3-FV}avg9zI|Rr(k{wTyl3!M1q+a zD9W{pCd%il*j&Ft z5H$nENf>>k$;SONGW`qo6`&qKs*T z2^RS)pXk9b@(_Fw1bkb)-oqK|v}r$L!W&aXA>IpcdNZ_vWE#XO8X`#Yp1+?RshVcd zknG%rPd*4ECEI0wD#@d+3NbHKxl}n^Sgkx==Iu%}HvNliOqVBqG?P2va zQ;kRJ$J6j;+wP9cS za#m;#GUT!qAV%+rdWolk+)6kkz4@Yh5LXP+LSvo9_T+MmiaP-eq6_k;)i6_@WSJ zlT@wK$zqHu<83U2V*yJ|XJU4farT#pAA&@qu)(PO^8PxEmPD4;Txpio+2)#!9 z>&=i7*#tc0`?!==vk>s7V+PL#S1;PwSY?NIXN2=Gu89x(cToFm))7L;< z+bhAbVD*bD=}iU`+PU+SBobTQ%S!=VL!>q$rfWsaaV}Smz>lO9JXT#`CcH_mRCSf4%YQAw`$^yY z3Y*^Nzk_g$xn7a_NO(2Eb*I=^;4f!Ra#Oo~LLjlcjke*k*o$~U#0ZXOQ5@HQ&T46l z7504MUgZkz2gNP1QFN8Y?nSEnEai^Rgyvl}xZfMUV6QrJcXp;jKGqB=D*tj{8(_pV zqyB*DK$2lgYGejmJUW)*s_Cv65sFf&pb(Yz8oWgDtQ0~k^0-wdF|tj}MOXaN@ydF8 zNr={U?=;&Z?wr^VC+`)S2xl}QFagy;$mG=TUs7Vi2wws5zEke4hTa2)>O0U?$WYsZ z<8bN2bB_N4AWd%+kncgknZ&}bM~eDtj#C5uRkp21hWW5gxWvc6b*4+dn<{c?w9Rmf zIVZKsPl{W2vQAlYO3yh}-{Os=YBnL8?uN5(RqfQ=-1cOiUnJu>KcLA*tQK3FU`_bM zM^T28w;nAj5EdAXFi&Kk1Nnl2)D!M{@+D-}bIEe+Lc4{s;YJc-{F#``iS2uk;2!Zp zF9#myUmO!wCeJIoi^A+T^e~20c+c2C}XltaR!|U-HfDA=^xF97ev}$l6#oY z&-&T{egB)&aV$3_aVA51XGiU07$s9vubh_kQG?F$FycvS6|IO!6q zq^>9|3U^*!X_C~SxX&pqUkUjz%!j=VlXDo$!2VLH!rKj@61mDpSr~7B2yy{>X~_nc zRI+7g2V&k zd**H++P9dg!-AOs3;GM`(g<+GRV$+&DdMVpUxY9I1@uK28$az=6oaa+PutlO9?6#? zf-OsgT>^@8KK>ggkUQRPPgC7zjKFR5spqQb3ojCHzj^(UH~v+!y*`Smv)VpVoPwa6 zWG18WJaPKMi*F6Zdk*kU^`i~NNTfn3BkJniC`yN98L-Awd)Z&mY? zprBW$!qL-OL7h@O#kvYnLsfff@kDIegt~?{-*5A7JrA;#TmTe?jICJqhub-G@e??D zqiV#g{)M!kW1-4SDel7TO{;@*h2=_76g3NUD@|c*WO#>MfYq6_YVUP+&8e4|%4T`w zXzhmVNziAHazWO2qXcaOu@R1MrPP{t)`N)}-1&~mq=ZH=w=;-E$IOk=y$dOls{6sRR`I5>|X zpq~XYW4sd;J^6OwOf**J>a7u$S>WTFPRkjY;BfVgQst)u4aMLR1|6%)CB^18XCz+r ztkYQ}G43j~Q&1em(_EkMv0|WEiKu;z2zhb(L%$F&xWwzOmk;VLBYAZ8lOCziNoPw1 zv2BOyXA`A8z^WH!nXhKXM`t0;6D*-uGds3TYGrm8SPnJJOQ^fJU#}@aIy@MYWz**H zvkp?7I5PE{$$|~{-ZaFxr6ZolP^nL##mHOErB^AqJqn^hFA=)HWj!m3WDaHW$C)i^ z9@6G$SzB=>jbe>4kqr#sF7#K}W*Cg-5y6kun3u&0L7BpXF9=#7IN8FOjWrWwUBZiU zT_se3ih-GBKx+Uw0N|CwP3D@-C=5(9T#BH@M`F2!Goiqx+Js5xC92|Sy0%WWWp={$(am!#l~f^W_oz78HX<0X#7 zp)p1u~M*o9W@O8P{0Qkg@Wa# z2{Heb&oX^CQSZWSFBXKOfE|tsAm#^U-WkDnU;IowZ`Ok4!mwHwH=s|AqZ^YD4!5!@ zPxJj+Bd-q6w_YG`z_+r;S86zwXb+EO&qogOq8h-Ect5(M2+>(O7n7)^dP*ws_3U6v zVsh)sk^@*c>)3EML|0<-YROho{lz@Nd4;R9gL{9|64xVL`n!m$-Jjrx?-Bacp!=^5 z1^T^eB{_)Y<9)y{-4Rz@9_>;_7h;5D+@QcbF4Wv7hu)s0&==&6u)33 zHRj+&Woq-vDvjwJCYES@$C4{$?f$Ibi4G()UeN11rgjF+^;YE^5nYprYoJNoudNj= zm1pXSeG64dcWHObUetodRn1Fw|1nI$D9z}dVEYT0lQnsf_E1x2vBLql7NrHH!n&Sq z6lc*mvU=WS6=v9Lrl}&zRiu_6u;6g%_DU{9b+R z#YHqX7`m9eydf?KlKu6Sb%j$%_jmydig`B*TN`cZL-g!R)iE?+Q5oOqBFKhx z%MW>BC^(F_JuG(ayE(MT{S3eI{cKiwOtPwLc0XO*{*|(JOx;uQOfq@lp_^cZo=FZj z4#}@e@dJ>Bn%2`2_WPeSN7si^{U#H=7N4o%Dq3NdGybrZgEU$oSm$hC)uNDC_M9xc zGzwh5Sg?mpBIE8lT2XsqTt3j3?We8}3bzLBTQd639vyg^$0#1epq8snlDJP2(BF)K zSx30RM+{f+b$g{9usIL8H!hCO117Xgv}ttPJm9wVRjPk;ePH@zxv%j9k5`TzdXLeT zFgFX`V7cYIcBls5WN0Pf6SMBN+;CrQ(|EsFd*xtwr#$R{Z9FP`OWtyNsq#mCgZ7+P z^Yn$haBJ)r96{ZJd8vlMl?IBxrgh=fdq_NF!1{jARCVz>jNdC)H^wfy?R94#MPdUjcYX>#wEx+LB#P-#4S-%YH>t-j+w zOFTI8gX$ard6fAh&g=u&56%3^-6E2tpk*wx3HSCQ+t7+*iOs zPk5ysqE}i*cQocFvA68xHfL|iX(C4h*67@3|5Qwle(8wT&!&{8*{f%0(5gH+m>$tq zp;AqrP7?XTEooYG1Dzfxc>W%*CyL16q|fQ0_jp%%Bk^k!i#Nbi(N9&T>#M{gez_Ws zYK=l}adalV(nH}I_!hNeb;tQFk3BHX7N}}R8%pek^E`X}%ou=cx8InPU1EE0|Hen- zyw8MoJqB5=)Z%JXlrdTXAE)eqLAdVE-=>wGHrkRet}>3Yu^lt$Kzu%$3#(ioY}@Gu zjk3BZuQH&~7H+C*uX^4}F*|P89JX;Hg2U!pt>rDi(n(Qe-c}tzb0#6_ItoR0->LSt zR~UT<-|@TO%O`M+_e_J4wx7^)5_%%u+J=yF_S#2Xd?C;Ss3N7KY^#-vx+|;bJX&8r zD?|MetfhdC;^2WG`7MCgs>TKKN=^=!x&Q~BzmQio_^l~LboTNT=I zC5pme^P@ER``p$2md9>4!K#vV-Fc1an7pl>_|&>aqP}+zqR?+~Z;f2^`a+-!Te%V? z;H2SbF>jP^GE(R1@%C==XQ@J=G9lKX+Z<@5}PO(EYkJh=GCv#)Nj{DkWJM2}F&oAZ6xu8&g7pn1ps2U5srwQ7CAK zN&*~@t{`31lUf`O;2w^)M3B@o)_mbRu{-`PrfNpF!R^q>yTR&ETS7^-b2*{-tZAZz zw@q5x9B5V8Qd7dZ!Ai$9hk%Q!wqbE1F1c96&zwBBaRW}(^axoPpN^4Aw}&a5dMe+*Gomky_l^54*rzXro$ z>LL)U5Ry>~FJi=*{JDc)_**c)-&faPz`6v`YU3HQa}pLtb5K)u%K+BOqXP0)rj5Au$zB zW1?vr?mDv7Fsxtsr+S6ucp2l#(4dnr9sD*v+@*>g#M4b|U?~s93>Pg{{a5|rm2xfI z`>E}?9S@|IoUX{Q1zjm5YJT|3S>&09D}|2~BiMo=z4YEjXlWh)V&qs;*C{`UMxp$9 zX)QB?G$fPD6z5_pNs>Jeh{^&U^)Wbr?2D6-q?)`*1k@!UvwQgl8eG$r+)NnFoT)L6 zg7lEh+E6J17krfYJCSjWzm67hEth24pomhz71|Qodn#oAILN)*Vwu2qpJirG)4Wnv}9GWOFrQg%Je+gNrPl8mw7ykE8{ z=|B4+uwC&bpp%eFcRU6{mxRV32VeH8XxX>v$du<$(DfinaaWxP<+Y97Z#n#U~V zVEu-GoPD=9$}P;xv+S~Ob#mmi$JQmE;Iz4(){y*9pFyW-jjgdk#oG$fl4o9E8bo|L zWjo4l%n51@Kz-n%zeSCD`uB?T%FVk+KBI}=ve zvlcS#wt`U6wrJo}6I6Rwb=1GzZfwE=I&Ne@p7*pH84XShXYJRgvK)UjQL%R9Zbm(m zxzTQsLTON$WO7vM)*vl%Pc0JH7WhP;$z@j=y#avW4X8iqy6mEYr@-}PW?H)xfP6fQ z&tI$F{NNct4rRMSHhaelo<5kTYq+(?pY)Ieh8*sa83EQfMrFupMM@nfEV@EmdHUv9 z35uzIrIuo4#WnF^_jcpC@uNNaYTQ~uZWOE6P@LFT^1@$o&q+9Qr8YR+ObBkpP9=F+$s5+B!mX2~T zAuQ6RenX?O{IlLMl1%)OK{S7oL}X%;!XUxU~xJN8xk z`xywS*naF(J#?vOpB(K=o~lE;m$zhgPWDB@=p#dQIW>xe_p1OLoWInJRKbEuoncf; zmS1!u-ycc1qWnDg5Nk2D)BY%jmOwCLC+Ny>`f&UxFowIsHnOXfR^S;&F(KXd{ODlm z$6#1ccqt-HIH9)|@fHnrKudu!6B$_R{fbCIkSIb#aUN|3RM>zuO>dpMbROZ`^hvS@ z$FU-;e4W}!ubzKrU@R*dW*($tFZ>}dd*4_mv)#O>X{U@zSzQt*83l9mI zI$8O<5AIDx`wo0}f2fsPC_l>ONx_`E7kdXu{YIZbp1$(^oBAH({T~&oQ&1{X951QW zmhHUxd)t%GQ9#ak5fTjk-cahWC;>^Rg7(`TVlvy0W@Y!Jc%QL3Ozu# zDPIqBCy&T2PWBj+d-JA-pxZlM=9ja2ce|3B(^VCF+a*MMp`(rH>Rt6W1$;r{n1(VK zLs>UtkT43LR2G$AOYHVailiqk7naz2yZGLo*xQs!T9VN5Q>eE(w zw$4&)&6xIV$IO^>1N-jrEUg>O8G4^@y+-hQv6@OmF@gy^nL_n1P1-Rtyy$Bl;|VcV zF=p*&41-qI5gG9UhKmmnjs932!6hceXa#-qfK;3d*a{)BrwNFeKU|ge?N!;zk+kB! zMD_uHJR#%b54c2tr~uGPLTRLg$`fupo}cRJeTwK;~}A>(Acy4k-Xk&Aa1&eWYS1ULWUj@fhBiWY$pdfy+F z@G{OG{*v*mYtH3OdUjwEr6%_ZPZ3P{@rfbNPQG!BZ7lRyC^xlMpWH`@YRar`tr}d> z#wz87t?#2FsH-jM6m{U=gp6WPrZ%*w0bFm(T#7m#v^;f%Z!kCeB5oiF`W33W5Srdt zdU?YeOdPG@98H7NpI{(uN{FJdu14r(URPH^F6tOpXuhU7T9a{3G3_#Ldfx_nT(Hec zo<1dyhsVsTw;ZkVcJ_0-h-T3G1W@q)_Q30LNv)W?FbMH+XJ* zy=$@39Op|kZv`Rt>X`zg&at(?PO^I=X8d9&myFEx#S`dYTg1W+iE?vt#b47QwoHI9 zNP+|3WjtXo{u}VG(lLUaW0&@yD|O?4TS4dfJI`HC-^q;M(b3r2;7|FONXphw-%7~* z&;2!X17|05+kZOpQ3~3!Nb>O94b&ZSs%p)TK)n3m=4eiblVtSx@KNFgBY_xV6ts;NF;GcGxMP8OKV^h6LmSb2E#Qnw ze!6Mnz7>lE9u{AgQ~8u2zM8CYD5US8dMDX-5iMlgpE9m*s+Lh~A#P1er*rF}GHV3h z=`STo?kIXw8I<`W0^*@mB1$}pj60R{aJ7>C2m=oghKyxMbFNq#EVLgP0cH3q7H z%0?L93-z6|+jiN|@v>ix?tRBU(v-4RV`}cQH*fp|)vd3)8i9hJ3hkuh^8dz{F5-~_ zUUr1T3cP%cCaTooM8dj|4*M=e6flH0&8ve32Q)0dyisl))XkZ7Wg~N}6y`+Qi2l+e zUd#F!nJp{#KIjbQdI`%oZ`?h=5G^kZ_uN`<(`3;a!~EMsWV|j-o>c?x#;zR2ktiB! z);5rrHl?GPtr6-o!tYd|uK;Vbsp4P{v_4??=^a>>U4_aUXPWQ$FPLE4PK$T^3Gkf$ zHo&9$U&G`d(Os6xt1r?sg14n)G8HNyWa^q8#nf0lbr4A-Fi;q6t-`pAx1T*$eKM*$ z|CX|gDrk#&1}>5H+`EjV$9Bm)Njw&7-ZR{1!CJTaXuP!$Pcg69`{w5BRHysB$(tWUes@@6aM69kb|Lx$%BRY^-o6bjH#0!7b;5~{6J+jKxU!Kmi# zndh@+?}WKSRY2gZ?Q`{(Uj|kb1%VWmRryOH0T)f3cKtG4oIF=F7RaRnH0Rc_&372={_3lRNsr95%ZO{IX{p@YJ^EI%+gvvKes5cY+PE@unghjdY5#9A!G z70u6}?zmd?v+{`vCu-53_v5@z)X{oPC@P)iA3jK$`r zSA2a7&!^zmUiZ82R2=1cumBQwOJUPz5Ay`RLfY(EiwKkrx%@YN^^XuET;tE zmr-6~I7j!R!KrHu5CWGSChO6deaLWa*9LLJbcAJsFd%Dy>a!>J`N)Z&oiU4OEP-!Ti^_!p}O?7`}i7Lsf$-gBkuY*`Zb z7=!nTT;5z$_5$=J=Ko+Cp|Q0J=%oFr>hBgnL3!tvFoLNhf#D0O=X^h+x08iB;@8pXdRHxX}6R4k@i6%vmsQwu^5z zk1ip`#^N)^#Lg#HOW3sPI33xqFB4#bOPVnY%d6prwxf;Y-w9{ky4{O6&94Ra8VN@K zb-lY;&`HtxW@sF!doT5T$2&lIvJpbKGMuDAFM#!QPXW87>}=Q4J3JeXlwHys?!1^#37q_k?N@+u&Ns20pEoBeZC*np;i;M{2C0Z4_br2gsh6eL z#8`#sn41+$iD?^GL%5?cbRcaa-Nx0vE(D=*WY%rXy3B%gNz0l?#noGJGP728RMY#q z=2&aJf@DcR?QbMmN)ItUe+VM_U!ryqA@1VVt$^*xYt~-qvW!J4Tp<-3>jT=7Zow5M z8mSKp0v4b%a8bxFr>3MwZHSWD73D@+$5?nZAqGM#>H@`)mIeC#->B)P8T$zh-Pxnc z8)~Zx?TWF4(YfKuF3WN_ckpCe5;x4V4AA3(i$pm|78{%!q?|~*eH0f=?j6i)n~Hso zmTo>vqEtB)`%hP55INf7HM@taH)v`Fw40Ayc*R!T?O{ziUpYmP)AH`euTK!zg9*6Z z!>M=$3pd0!&TzU=hc_@@^Yd3eUQpX4-33}b{?~5t5lgW=ldJ@dUAH%`l5US1y_`40 zs(X`Qk}vvMDYYq+@Rm+~IyCX;iD~pMgq^KY)T*aBz@DYEB={PxA>)mI6tM*sx-DmGQHEaHwRrAmNjO!ZLHO4b;;5mf@zzlPhkP($JeZGE7 z?^XN}Gf_feGoG~BjUgVa*)O`>lX=$BSR2)uD<9 z>o^|nb1^oVDhQbfW>>!;8-7<}nL6L^V*4pB=>wwW+RXAeRvKED(n1;R`A6v$6gy0I(;Vf?!4;&sgn7F%LpM}6PQ?0%2Z@b{It<(G1CZ|>913E0nR2r^Pa*Bp z@tFGi*CQ~@Yc-?{cwu1 zsilf=k^+Qs>&WZG(3WDixisHpR>`+ihiRwkL(3T|=xsoNP*@XX3BU8hr57l3k;pni zI``=3Nl4xh4oDj<%>Q1zYXHr%Xg_xrK3Nq?vKX3|^Hb(Bj+lONTz>4yhU-UdXt2>j z<>S4NB&!iE+ao{0Tx^N*^|EZU;0kJkx@zh}S^P{ieQjGl468CbC`SWnwLRYYiStXm zOxt~Rb3D{dz=nHMcY)#r^kF8|q8KZHVb9FCX2m^X*(|L9FZg!5a7((!J8%MjT$#Fs)M1Pb zq6hBGp%O1A+&%2>l0mpaIzbo&jc^!oN^3zxap3V2dNj3x<=TwZ&0eKX5PIso9j1;e zwUg+C&}FJ`k(M|%%}p=6RPUq4sT3-Y;k-<68ciZ~_j|bt>&9ZLHNVrp#+pk}XvM{8 z`?k}o-!if>hVlCP9j%&WI2V`5SW)BCeR5>MQhF)po=p~AYN%cNa_BbV6EEh_kk^@a zD>4&>uCGCUmyA-c)%DIcF4R6!>?6T~Mj_m{Hpq`*(wj>foHL;;%;?(((YOxGt)Bhx zuS+K{{CUsaC++%}S6~CJ=|vr(iIs-je)e9uJEU8ZJAz)w166q)R^2XI?@E2vUQ!R% zn@dxS!JcOimXkWJBz8Y?2JKQr>`~SmE2F2SL38$SyR1^yqj8_mkBp)o$@+3BQ~Mid z9U$XVqxX3P=XCKj0*W>}L0~Em`(vG<>srF8+*kPrw z20{z(=^w+ybdGe~Oo_i|hYJ@kZl*(9sHw#Chi&OIc?w`nBODp?ia$uF%Hs(X>xm?j zqZQ`Ybf@g#wli`!-al~3GWiE$K+LCe=Ndi!#CVjzUZ z!sD2O*;d28zkl))m)YN7HDi^z5IuNo3^w(zy8 zszJG#mp#Cj)Q@E@r-=NP2FVxxEAeOI2e=|KshybNB6HgE^(r>HD{*}S}mO>LuRGJT{*tfTzw_#+er-0${}%YPe@CMJ1Ng#j#)i)SnY@ss3gL;g zg2D~#Kpdfu#G;q1qz_TwSz1VJT(b3zby$Vk&;Y#1(A)|xj`_?i5YQ;TR%jice5E;0 zYHg;`zS5{S*9xI6o^j>rE8Ua*XhIw{_-*&@(R|C(am8__>+Ws&Q^ymy*X4~hR2b5r zm^p3sw}yv=tdyncy_Ui7{BQS732et~Z_@{-IhHDXAV`(Wlay<#hb>%H%WDi+K$862nA@BDtM#UCKMu+kM`!JHyWSi?&)A7_ z3{cyNG%a~nnH_!+;g&JxEMAmh-Z}rC!o7>OVzW&PoMyTA_g{hqXG)SLraA^OP**<7 zjWbr7z!o2n3hnx7A=2O=WL;`@9N{vQIM@&|G-ljrPvIuJHYtss0Er0fT5cMXNUf1B z7FAwBDixt0X7C3S)mPe5g`YtME23wAnbU)+AtV}z+e8G;0BP=bI;?(#|Ep!vVfDbK zvx+|CKF>yt0hWQ3drchU#XBU+HiuG*V^snFAPUp-5<#R&BUAzoB!aZ+e*KIxa26V}s6?nBK(U-7REa573wg-jqCg>H8~>O{ z*C0JL-?X-k_y%hpUFL?I>0WV{oV`Nb)nZbJG01R~AG>flIJf)3O*oB2i8~;!P?Wo_ z0|QEB*fifiL6E6%>tlAYHm2cjTFE@*<);#>689Z6S#BySQ@VTMhf9vYQyLeDg1*F} zjq>i1*x>5|CGKN{l9br3kB0EHY|k4{%^t7-uhjd#NVipUZa=EUuE5kS1_~qYX?>hJ z$}!jc9$O$>J&wnu0SgfYods^z?J4X;X7c77Me0kS-dO_VUQ39T(Kv(Y#s}Qqz-0AH z^?WRL(4RzpkD+T5FG_0NyPq-a-B7A5LHOCqwObRJi&oRi(<;OuIN7SV5PeHU$<@Zh zPozEV`dYmu0Z&Tqd>t>8JVde9#Pt+l95iHe$4Xwfy1AhI zDM4XJ;bBTTvRFtW>E+GzkN)9k!hA5z;xUOL2 zq4}zn-DP{qc^i|Y%rvi|^5k-*8;JZ~9a;>-+q_EOX+p1Wz;>i7c}M6Nv`^NY&{J-> z`(mzDJDM}QPu5i44**2Qbo(XzZ-ZDu%6vm8w@DUarqXj41VqP~ zs&4Y8F^Waik3y1fQo`bVUH;b=!^QrWb)3Gl=QVKr+6sxc=ygauUG|cm?|X=;Q)kQ8 zM(xrICifa2p``I7>g2R~?a{hmw@{!NS5`VhH8+;cV(F>B94M*S;5#O`YzZH1Z%yD? zZ61w(M`#aS-*~Fj;x|J!KM|^o;MI#Xkh0ULJcA?o4u~f%Z^16ViA27FxU5GM*rKq( z7cS~MrZ=f>_OWx8j#-Q3%!aEU2hVuTu(7`TQk-Bi6*!<}0WQi;_FpO;fhpL4`DcWp zGOw9vx0N~6#}lz(r+dxIGZM3ah-8qrqMmeRh%{z@dbUD2w15*_4P?I~UZr^anP}DB zU9CCrNiy9I3~d#&!$DX9e?A});BjBtQ7oGAyoI$8YQrkLBIH@2;lt4E^)|d6Jwj}z z&2_E}Y;H#6I4<10d_&P0{4|EUacwFHauvrjAnAm6yeR#}f}Rk27CN)vhgRqEyPMMS7zvunj2?`f;%?alsJ+-K+IzjJx>h8 zu~m_y$!J5RWAh|C<6+uiCNsOKu)E72M3xKK(a9Okw3e_*O&}7llNV!=P87VM2DkAk zci!YXS2&=P0}Hx|wwSc9JP%m8dMJA*q&VFB0yMI@5vWoAGraygwn){R+Cj6B1a2Px z5)u(K5{+;z2n*_XD!+Auv#LJEM)(~Hx{$Yb^ldQmcYF2zNH1V30*)CN_|1$v2|`LnFUT$%-tO0Eg|c5$BB~yDfzS zcOXJ$wpzVK0MfTjBJ0b$r#_OvAJ3WRt+YOLlJPYMx~qp>^$$$h#bc|`g0pF-Ao43? z>*A+8lx>}L{p(Tni2Vvk)dtzg$hUKjSjXRagj)$h#8=KV>5s)J4vGtRn5kP|AXIz! zPgbbVxW{2o4s-UM;c#We8P&mPN|DW7_uLF!a|^0S=wr6Esx9Z$2|c1?GaupU6$tb| zY_KU`(_29O_%k(;>^|6*pZURH3`@%EuKS;Ns z1lujmf;r{qAN&Q0&m{wJSZ8MeE7RM5+Sq;ul_ z`+ADrd_Um+G37js6tKsArNB}n{p*zTUxQr>3@wA;{EUbjNjlNd6$Mx zg0|MyU)v`sa~tEY5$en7^PkC=S<2@!nEdG6L=h(vT__0F=S8Y&eM=hal#7eM(o^Lu z2?^;05&|CNliYrq6gUv;|i!(W{0N)LWd*@{2q*u)}u*> z7MQgk6t9OqqXMln?zoMAJcc zMKaof_Up})q#DzdF?w^%tTI7STI^@8=Wk#enR*)&%8yje>+tKvUYbW8UAPg55xb70 zEn5&Ba~NmOJlgI#iS8W3-@N%>V!#z-ZRwfPO1)dQdQkaHsiqG|~we2ALqG7Ruup(DqSOft2RFg_X%3w?6VqvV1uzX_@F(diNVp z4{I|}35=11u$;?|JFBEE*gb;T`dy+8gWJ9~pNsecrO`t#V9jW-6mnfO@ff9od}b(3s4>p0i30gbGIv~1@a^F2kl7YO;DxmF3? zWi-RoXhzRJV0&XE@ACc?+@6?)LQ2XNm4KfalMtsc%4!Fn0rl zpHTrHwR>t>7W?t!Yc{*-^xN%9P0cs0kr=`?bQ5T*oOo&VRRu+1chM!qj%2I!@+1XF z4GWJ=7ix9;Wa@xoZ0RP`NCWw0*8247Y4jIZ>GEW7zuoCFXl6xIvz$ezsWgKdVMBH> z{o!A7f;R-@eK9Vj7R40xx)T<2$?F2E<>Jy3F;;=Yt}WE59J!1WN367 zA^6pu_zLoZIf*x031CcwotS{L8bJE(<_F%j_KJ2P_IusaZXwN$&^t716W{M6X2r_~ zaiMwdISX7Y&Qi&Uh0upS3TyEIXNDICQlT5fHXC`aji-c{U(J@qh-mWl-uMN|T&435 z5)a1dvB|oe%b2mefc=Vpm0C%IUYYh7HI*;3UdgNIz}R##(#{(_>82|zB0L*1i4B5j-xi9O4x10rs_J6*gdRBX=@VJ+==sWb&_Qc6tSOowM{BX@(zawtjl zdU!F4OYw2@Tk1L^%~JCwb|e#3CC>srRHQ*(N%!7$Mu_sKh@|*XtR>)BmWw!;8-mq7 zBBnbjwx8Kyv|hd*`5}84flTHR1Y@@uqjG`UG+jN_YK&RYTt7DVwfEDXDW4U+iO{>K zw1hr{_XE*S*K9TzzUlJH2rh^hUm2v7_XjwTuYap|>zeEDY$HOq3X4Tz^X}E9z)x4F zs+T?Ed+Hj<#jY-`Va~fT2C$=qFT-5q$@p9~0{G&eeL~tiIAHXA!f6C(rAlS^)&k<- zXU|ZVs}XQ>s5iONo~t!XXZgtaP$Iau;JT%h)>}v54yut~pykaNye4axEK#5@?TSsQ zE;Jvf9I$GVb|S`7$pG)4vgo9NXsKr?u=F!GnA%VS2z$@Z(!MR9?EPcAqi5ft)Iz6sNl`%kj+_H-X`R<>BFrBW=fSlD|{`D%@Rcbu2?%>t7i34k?Ujb)2@J-`j#4 zLK<69qcUuniIan-$A1+fR=?@+thwDIXtF1Tks@Br-xY zfB+zblrR(ke`U;6U~-;p1Kg8Lh6v~LjW@9l2P6s+?$2!ZRPX`(ZkRGe7~q(4&gEi<$ch`5kQ?*1=GSqkeV z{SA1EaW_A!t{@^UY2D^YO0(H@+kFVzZaAh0_`A`f(}G~EP~?B|%gtxu&g%^x{EYSz zk+T;_c@d;+n@$<>V%P=nk36?L!}?*=vK4>nJSm+1%a}9UlmTJTrfX4{Lb7smNQn@T zw9p2%(Zjl^bWGo1;DuMHN(djsEm)P8mEC2sL@KyPjwD@d%QnZ$ zMJ3cnn!_!iP{MzWk%PI&D?m?C(y2d|2VChluN^yHya(b`h>~GkI1y;}O_E57zOs!{ zt2C@M$^PR2U#(dZmA-sNreB@z-yb0Bf7j*yONhZG=onhx>t4)RB`r6&TP$n zgmN*)eCqvgriBO-abHQ8ECN0bw?z5Bxpx z=jF@?zFdVn?@gD5egM4o$m`}lV(CWrOKKq(sv*`mNcHcvw&Xryfw<{ch{O&qc#WCTXX6=#{MV@q#iHYba!OUY+MGeNTjP%Fj!WgM&`&RlI^=AWTOqy-o zHo9YFt!gQ*p7{Fl86>#-JLZo(b^O`LdFK~OsZBRR@6P?ad^Ujbqm_j^XycM4ZHFyg ziUbIFW#2tj`65~#2V!4z7DM8Z;fG0|APaQ{a2VNYpNotB7eZ5kp+tPDz&Lqs0j%Y4tA*URpcfi z_M(FD=fRGdqf430j}1z`O0I=;tLu81bwJXdYiN7_&a-?ly|-j*+=--XGvCq#32Gh(=|qj5F?kmihk{%M&$}udW5)DHK zF_>}5R8&&API}o0osZJRL3n~>76nUZ&L&iy^s>PMnNcYZ|9*1$v-bzbT3rpWsJ+y{ zPrg>5Zlery96Um?lc6L|)}&{992{_$J&=4%nRp9BAC6!IB=A&=tF>r8S*O-=!G(_( zwXbX_rGZgeiK*&n5E;f=k{ktyA1(;x_kiMEt0*gpp_4&(twlS2e5C?NoD{n>X2AT# zY@Zp?#!b1zNq96MQqeO*M1MMBin5v#RH52&Xd~DO6-BZLnA6xO1$sou(YJ1Dlc{WF zVa%2DyYm`V#81jP@70IJ;DX@y*iUt$MLm)ByAD$eUuji|5{ptFYq(q)mE(5bOpxjM z^Q`AHWq44SG3`_LxC9fwR)XRVIp=B%<(-lOC3jI#bb@dK(*vjom!=t|#<@dZql%>O z15y^{4tQoeW9Lu%G&V$90x6F)xN6y_oIn;!Q zs)8jT$;&;u%Y>=T3hg34A-+Y*na=|glcStr5D;&5*t5*DmD~x;zQAV5{}Ya`?RRGa zT*t9@$a~!co;pD^!J5bo?lDOWFx%)Y=-fJ+PDGc0>;=q=s?P4aHForSB+)v0WY2JH z?*`O;RHum6j%#LG)Vu#ciO#+jRC3!>T(9fr+XE7T2B7Z|0nR5jw@WG)kDDzTJ=o4~ zUpeyt7}_nd`t}j9BKqryOha{34erm)RmST)_9Aw)@ zHbiyg5n&E{_CQR@h<}34d7WM{s{%5wdty1l+KX8*?+-YkNK2Be*6&jc>@{Fd;Ps|| z26LqdI3#9le?;}risDq$K5G3yoqK}C^@-8z^wj%tdgw-6@F#Ju{Sg7+y)L?)U$ez> zoOaP$UFZ?y5BiFycir*pnaAaY+|%1%8&|(@VB)zweR%?IidwJyK5J!STzw&2RFx zZV@qeaCB01Hu#U9|1#=Msc8Pgz5P*4Lrp!Q+~(G!OiNR{qa7|r^H?FC6gVhkk3y7=uW#Sh;&>78bZ}aK*C#NH$9rX@M3f{nckYI+5QG?Aj1DM)@~z_ zw!UAD@gedTlePB*%4+55naJ8ak_;))#S;4ji!LOqY5VRI){GMwHR~}6t4g>5C_#U# ztYC!tjKjrKvRy=GAsJVK++~$|+s!w9z3H4G^mACv=EErXNSmH7qN}%PKcN|8%9=i)qS5+$L zu&ya~HW%RMVJi4T^pv?>mw*Gf<)-7gf#Qj|e#w2|v4#t!%Jk{&xlf;$_?jW*n!Pyx zkG$<18kiLOAUPuFfyu-EfWX%4jYnjBYc~~*9JEz6oa)_R|8wjZA|RNrAp%}14L7fW zi7A5Wym*K+V8pkqqO-X#3ft{0qs?KVt^)?kS>AicmeO&q+~J~ zp0YJ_P~_a8j= zsAs~G=8F=M{4GZL{|B__UorX@MRNQLn?*_gym4aW(~+i13knnk1P=khoC-ViMZk+x zLW(l}oAg1H`dU+Fv**;qw|ANDSRs>cGqL!Yw^`; zv;{E&8CNJcc)GHzTYM}f&NPw<6j{C3gaeelU#y!M)w-utYEHOCCJo|Vgp7K6C_$14 zqIrLUB0bsgz^D%V%fbo2f9#yb#CntTX?55Xy|Kps&Xek*4_r=KDZ z+`TQuv|$l}MWLzA5Ay6Cvsa^7xvwXpy?`w(6vx4XJ zWuf1bVSb#U8{xlY4+wlZ$9jjPk)X_;NFMqdgq>m&W=!KtP+6NL57`AMljW+es zzqjUjgz;V*kktJI?!NOg^s_)ph45>4UDA!Vo0hn>KZ+h-3=?Y3*R=#!fOX zP$Y~+14$f66ix?UWB_6r#fMcC^~X4R-<&OD1CSDNuX~y^YwJ>sW0j`T<2+3F9>cLo z#!j57$ll2K9(%$4>eA7(>FJX5e)pR5&EZK!IMQzOfik#FU*o*LGz~7u(8}XzIQRy- z!U7AlMTIe|DgQFmc%cHy_9^{o`eD%ja_L>ckU6$O4*U**o5uR7`FzqkU8k4gxtI=o z^P^oGFPm5jwZMI{;nH}$?p@uV8FT4r=|#GziKXK07bHJLtK}X%I0TON$uj(iJ`SY^ zc$b2CoxCQ>7LH@nxcdW&_C#fMYBtTxcg46dL{vf%EFCZ~eErMvZq&Z%Lhumnkn^4A zsx$ay(FnN7kYah}tZ@0?-0Niroa~13`?hVi6`ndno`G+E8;$<6^gsE-K3)TxyoJ4M zb6pj5=I8^FD5H@`^V#Qb2^0cx7wUz&cruA5g>6>qR5)O^t1(-qqP&1g=qvY#s&{bx zq8Hc%LsbK1*%n|Y=FfojpE;w~)G0-X4i*K3{o|J7`krhIOd*c*$y{WIKz2n2*EXEH zT{oml3Th5k*vkswuFXdGDlcLj15Nec5pFfZ*0?XHaF_lVuiB%Pv&p7z)%38}%$Gup zVTa~C8=cw%6BKn_|4E?bPNW4PT7}jZQLhDJhvf4z;~L)506IE0 zX!tWXX(QOQPRj-p80QG79t8T2^az4Zp2hOHziQlvT!|H)jv{Ixodabzv6lBj)6WRB z{)Kg@$~~(7$-az?lw$4@L%I&DI0Lo)PEJJziWP33a3azb?jyXt1v0N>2kxwA6b%l> zZqRpAo)Npi&loWbjFWtEV)783BbeIAhqyuc+~>i7aQ8shIXt)bjCWT6$~ro^>99G} z2XfmT0(|l!)XJb^E!#3z4oEGIsL(xd; zYX1`1I(cG|u#4R4T&C|m*9KB1`UzKvho5R@1eYtUL9B72{i(ir&ls8g!pD ztR|25xGaF!4z5M+U@@lQf(12?xGy`!|3E}7pI$k`jOIFjiDr{tqf0va&3pOn6Pu)% z@xtG2zjYuJXrV)DUrIF*y<1O1<$#54kZ#2;=X51J^F#0nZ0(;S$OZDt_U2bx{RZ=Q zMMdd$fH|!s{ zXq#l;{`xfV`gp&C>A`WrQU?d{!Ey5(1u*VLJt>i27aZ-^&2IIk=zP5p+{$q(K?2(b z8?9h)kvj9SF!Dr zoyF}?V|9;6abHxWk2cEvGs$-}Pg}D+ZzgkaN&$Snp%;5m%zh1E#?Wac-}x?BYlGN#U#Mek*}kek#I9XaHt?mz3*fDrRTQ#&#~xyeqJk1QJ~E$7qsw6 z?sV;|?*=-{M<1+hXoj?@-$y+(^BJ1H~wQ9G8C0#^aEAyhDduNX@haoa=PuPp zYsGv8UBfQaRHgBgLjmP^eh>fLMeh{8ic)?xz?#3kX-D#Z{;W#cd_`9OMFIaJg-=t`_3*!YDgtNQ2+QUEAJB9M{~AvT$H`E)IKmCR21H532+ata8_i_MR@ z2Xj<3w<`isF~Ah$W{|9;51ub*f4#9ziKrOR&jM{x7I_7()O@`F*5o$KtZ?fxU~g`t zUovNEVKYn$U~VX8eR)qb`7;D8pn*Pp$(otYTqL)5KH$lUS-jf}PGBjy$weoceAcPp z&5ZYB$r&P$MN{0H0AxCe4Qmd3T%M*5d4i%#!nmBCN-WU-4m4Tjxn-%j3HagwTxCZ9 z)j5vO-C7%s%D!&UfO>bi2oXiCw<-w{vVTK^rVbv#W=WjdADJy8$khnU!`ZWCIU`># zyjc^1W~pcu>@lDZ{zr6gv%)2X4n27~Ve+cQqcND%0?IFSP4sH#yIaXXYAq^z3|cg` z`I3$m%jra>e2W-=DiD@84T!cb%||k)nPmEE09NC%@PS_OLhkrX*U!cgD*;;&gIaA(DyVT4QD+q_xu z>r`tg{hiGY&DvD-)B*h+YEd+Zn)WylQl}<4>(_NlsKXCRV;a)Rcw!wtelM2_rWX`j zTh5A|i6=2BA(iMCnj_fob@*eA;V?oa4Z1kRBGaU07O70fb6-qmA$Hg$ps@^ka1=RO zTbE_2#)1bndC3VuK@e!Sftxq4=Uux}fDxXE#Q5_x=E1h>T5`DPHz zbH<_OjWx$wy7=%0!mo*qH*7N4tySm+R0~(rbus`7;+wGh;C0O%x~fEMkt!eV>U$`i z5>Q(o z=t$gPjgGh0&I7KY#k50V7DJRX<%^X z>6+ebc9efB3@eE2Tr){;?_w`vhgF>`-GDY(YkR{9RH(MiCnyRtd!LxXJ75z+?2 zGi@m^+2hKJ5sB1@Xi@s_@p_Kwbc<*LQ_`mr^Y%j}(sV_$`J(?_FWP)4NW*BIL~sR>t6 zM;qTJZ~GoY36&{h-Pf}L#y2UtR}>ZaI%A6VkU>vG4~}9^i$5WP2Tj?Cc}5oQxe2=q z8BeLa$hwCg_psjZyC2+?yX4*hJ58Wu^w9}}7X*+i5Rjqu5^@GzXiw#SUir1G1`jY% zOL=GE_ENYxhcyUrEt9XlMNP6kx6h&%6^u3@zB8KUCAa18T(R2J`%JjWZ z!{7cXaEW+Qu*iJPu+m>QqW}Lo$4Z+!I)0JNzZ&_M%=|B1yejFRM04bGAvu{=lNPd+ zJRI^DRQ(?FcVUD+bgEcAi@o(msqys9RTCG#)TjI!9~3-dc`>gW;HSJuQvH~d`MQs86R$|SKXHh zqS9Qy)u;T`>>a!$LuaE2keJV%;8g)tr&Nnc;EkvA-RanHXsy)D@XN0a>h}z2j81R; zsUNJf&g&rKpuD0WD@=dDrPHdBoK42WoBU|nMo17o(5^;M|dB4?|FsAGVrSyWcI`+FVw^vTVC`y}f(BwJl zrw3Sp151^9=}B})6@H*i4-dIN_o^br+BkcLa^H56|^2XsT0dESw2 zMX>(KqNl=x2K5=zIKg}2JpGAZu{I_IO}0$EQ5P{4zol**PCt3F4`GX}2@vr8#Y)~J zKb)gJeHcFnR@4SSh%b;c%J`l=W*40UPjF#q{<}ywv-=vHRFmDjv)NtmC zQx9qm)d%0zH&qG7AFa3VAU1S^(n8VFTC~Hb+HjYMjX8r#&_0MzlNR*mnLH5hi}`@{ zK$8qiDDvS_(L9_2vHgzEQ${DYSE;DqB!g*jhJghE&=LTnbgl&Xepo<*uRtV{2wDHN z)l;Kg$TA>Y|K8Lc&LjWGj<+bp4Hiye_@BfU(y#nF{fpR&|Ltbye?e^j0}8JC4#xi% zv29ZR%8%hk=3ZDvO-@1u8KmQ@6p%E|dlHuy#H1&MiC<*$YdLkHmR#F3ae;bKd;@*i z2_VfELG=B}JMLCO-6UQy^>RDE%K4b>c%9ki`f~Z2Qu8hO7C#t%Aeg8E%+}6P7Twtg z-)dj(w}_zFK&86KR@q9MHicUAucLVshUdmz_2@32(V`y3`&Kf8Q2I)+!n0mR=rrDU zXvv^$ho;yh*kNqJ#r1}b0|i|xRUF6;lhx$M*uG3SNLUTC@|htC z-=fsw^F%$qqz4%QdjBrS+ov}Qv!z00E+JWas>p?z@=t!WWU3K*?Z(0meTuTOC7OTx zU|kFLE0bLZ+WGcL$u4E}5dB0g`h|uwv3=H6f+{5z9oLv-=Q45+n~V4WwgO=CabjM% zBAN+RjM65(-}>Q2V#i1Na@a0`08g&y;W#@sBiX6Tpy8r}*+{RnyGUT`?XeHSqo#|J z^ww~c;ou|iyzpErDtlVU=`8N7JSu>4M z_pr9=tX0edVn9B}YFO2y(88j#S{w%E8vVOpAboK*27a7e4Ekjt0)hIX99*1oE;vex z7#%jhY=bPijA=Ce@9rRO(Vl_vnd00!^TAc<+wVvRM9{;hP*rqEL_(RzfK$er_^SN; z)1a8vo8~Dr5?;0X0J62Cusw$A*c^Sx1)dom`-)Pl7hsW4i(r*^Mw`z5K>!2ixB_mu z*Ddqjh}zceRFdmuX1akM1$3>G=#~|y?eYv(e-`Qy?bRHIq=fMaN~fB zUa6I8Rt=)jnplP>yuS+P&PxeWpJ#1$F`iqRl|jF$WL_aZFZl@kLo&d$VJtu&w?Q0O zzuXK>6gmygq(yXJy0C1SL}T8AplK|AGNUOhzlGeK_oo|haD@)5PxF}rV+5`-w{Aag zus45t=FU*{LguJ11Sr-28EZkq;!mJO7AQGih1L4rEyUmp>B!%X0YemsrV3QFvlgt* z5kwlPzaiJ+kZ^PMd-RRbl(Y?F*m`4*UIhIuf#8q>H_M=fM*L_Op-<_r zBZagV=4B|EW+KTja?srADTZXCd3Yv%^Chfpi)cg{ED${SI>InNpRj5!euKv?=Xn92 zsS&FH(*w`qLIy$doc>RE&A5R?u zzkl1sxX|{*fLpXvIW>9d<$ePROttn3oc6R!sN{&Y+>Jr@yeQN$sFR z;w6A<2-0%UA?c8Qf;sX7>>uKRBv3Ni)E9pI{uVzX|6Bb0U)`lhLE3hK58ivfRs1}d zNjlGK0hdq0qjV@q1qI%ZFMLgcpWSY~mB^LK)4GZ^h_@H+3?dAe_a~k*;9P_d7%NEFP6+ zgV(oGr*?W(ql?6SQ~`lUsjLb%MbfC4V$)1E0Y_b|OIYxz4?O|!kRb?BGrgiH5+(>s zoqM}v*;OBfg-D1l`M6T6{K`LG+0dJ1)!??G5g(2*vlNkm%Q(MPABT$r13q?|+kL4- zf)Mi5r$sn;u41aK(K#!m+goyd$c!KPl~-&-({j#D4^7hQkV3W|&>l_b!}!z?4($OA z5IrkfuT#F&S1(`?modY&I40%gtroig{YMvF{K{>5u^I51k8RriGd${z)=5k2tG zM|&Bp5kDTfb#vfuTTd?)a=>bX=lokw^y9+2LS?kwHQIWI~pYgy7 zb?A-RKVm_vM5!9?C%qYdfRAw& zAU7`up~%g=p@}pg#b7E)BFYx3g%(J36Nw(Dij!b>cMl@CSNbrW!DBDbTD4OXk!G4x zi}JBKc8HBYx$J~31PXH+4^x|UxK~(<@I;^3pWN$E=sYma@JP|8YL`L(zI6Y#c%Q{6 z*APf`DU$S4pr#_!60BH$FGViP14iJmbrzSrOkR;f3YZa{#E7Wpd@^4E-zH8EgPc-# zKWFPvh%WbqU_%ZEt`=Q?odKHc7@SUmY{GK`?40VuL~o)bS|is$Hn=<=KGHOsEC5tB zFb|q}gGlL97NUf$G$>^1b^3E18PZ~Pm9kX%*ftnolljiEt@2#F2R5ah$zbXd%V_Ev zyDd{1o_uuoBga$fB@Fw!V5F3jIr=a-ykqrK?WWZ#a(bglI_-8pq74RK*KfQ z0~Dzus7_l;pMJYf>Bk`)`S8gF!To-BdMnVw5M-pyu+aCiC5dwNH|6fgRsIKZcF&)g zr}1|?VOp}I3)IR@m1&HX1~#wsS!4iYqES zK}4J{Ei>;e3>LB#Oly>EZkW14^@YmpbgxCDi#0RgdM${&wxR+LiX}B+iRioOB0(pDKpVEI;ND?wNx>%e|m{RsqR_{(nmQ z3ZS}@t!p4a(BKx_-CYwrcyJ5u1TO9bcXti$8sy>xcLKqKCc#~UOZYD{llKTSFEjJ~ zyNWt>tLU}*>^`TvPxtP%F`ZJQw@W0^>x;!^@?k_)9#bF$j0)S3;mH-IR5y82l|%=F z2lR8zhP?XNP-ucZZ6A+o$xOyF!w;RaLHGh57GZ|TCXhJqY~GCh)aXEV$1O&$c}La1 zjuJxkY9SM4av^Hb;i7efiYaMwI%jGy`3NdY)+mcJhF(3XEiSlU3c|jMBi|;m-c?~T z+x0_@;SxcoY=(6xNgO$bBt~Pj8`-<1S|;Bsjrzw3@zSjt^JC3X3*$HI79i~!$RmTz zsblZsLYs7L$|=1CB$8qS!tXrWs!F@BVuh?kN(PvE5Av-*r^iYu+L^j^m9JG^#=m>@ z=1soa)H*w6KzoR$B8mBCXoU;f5^bVuwQ3~2LKg!yxomG1#XPmn(?YH@E~_ED+W6mxs%x{%Z<$pW`~ON1~2XjP5v(0{C{+6Dm$00tsd3w=f=ZENy zOgb-=f}|Hb*LQ$YdWg<(u7x3`PKF)B7ZfZ6;1FrNM63 z?O6tE%EiU@6%rVuwIQjvGtOofZBGZT1Sh(xLIYt9c4VI8`!=UJd2BfLjdRI#SbVAX ziT(f*RI^T!IL5Ac>ql7uduF#nuCRJ1)2bdvAyMxp-5^Ww5p#X{rb5)(X|fEhDHHW{ zw(Lfc$g;+Q`B0AiPGtmK%*aWfQQ$d!*U<|-@n2HZvCWSiw^I>#vh+LyC;aaVWGbmkENr z&kl*8o^_FW$T?rDYLO1Pyi%>@&kJKQoH2E0F`HjcN}Zlnx1ddoDA>G4Xu_jyp6vuT zPvC}pT&Owx+qB`zUeR|4G;OH(<<^_bzkjln0k40t`PQxc$7h(T8Ya~X+9gDc8Z9{Z z&y0RAU}#_kQGrM;__MK9vwIwK^aoqFhk~dK!ARf1zJqHMxF2?7-8|~yoO@_~Ed;_wvT%Vs{9RK$6uUQ|&@#6vyBsFK9eZW1Ft#D2)VpQRwpR(;x^ zdoTgMqfF9iBl%{`QDv7B0~8{8`8k`C4@cbZAXBu00v#kYl!#_Wug{)2PwD5cNp?K^ z9+|d-4z|gZ!L{57>!Ogfbzchm>J1)Y%?NThxIS8frAw@z>Zb9v%3_3~F@<=LG%r*U zaTov}{{^z~SeX!qgSYow`_5)ij*QtGp4lvF`aIGQ>@3ZTkDmsl#@^5*NGjOuu82}o zzLF~Q9SW+mP=>88%eSA1W4_W7-Q>rdq^?t=m6}^tDPaBRGFLg%ak93W!kOp#EO{6& zP%}Iff5HZQ9VW$~+9r=|Quj#z*=YwcnssS~9|ub2>v|u1JXP47vZ1&L1O%Z1DsOrDfSIMHU{VT>&>H=9}G3i@2rP+rx@eU@uE8rJNec zij~#FmuEBj03F1~ct@C@$>y)zB+tVyjV3*n`mtAhIM0$58vM9jOQC}JJOem|EpwqeMuYPxu3sv}oMS?S#o6GGK@8PN59)m&K4Dc&X% z(;XL_kKeYkafzS3Wn5DD>Yiw{LACy_#jY4op(>9q>>-*9@C0M+=b#bknAWZ37^(Ij zq>H%<@>o4a#6NydoF{_M4i4zB_KG)#PSye9bk0Ou8h%1Dtl7Q_y#7*n%g)?m>xF~( zjqvOwC;*qvN_3(*a+w2|ao0D?@okOvg8JskUw(l7n`0fncglavwKd?~l_ryKJ^Ky! zKCHkIC-o7%fFvPa$)YNh022lakMar^dgL=t#@XLyNHHw!b?%WlM)R@^!)I!smZL@k zBi=6wE5)2v&!UNV(&)oOYW(6Qa!nUjDKKBf-~Da=#^HE4(@mWk)LPvhyN3i4goB$3K8iV7uh zsv+a?#c4&NWeK(3AH;ETrMOIFgu{_@%XRwCZ;L=^8Ts)hix4Pf3yJRQ<8xb^CkdmC z?c_gB)XmRsk`9ch#tx4*hO=#qS7={~Vb4*tTf<5P%*-XMfUUYkI9T1cEF;ObfxxI-yNuA=I$dCtz3ey znVkctYD*`fUuZ(57+^B*R=Q}~{1z#2!ca?)+YsRQb+lt^LmEvZt_`=j^wqig+wz@n@ z`LIMQJT3bxMzuKg8EGBU+Q-6cs5(@5W?N>JpZL{$9VF)veF`L5%DSYTNQEypW%6$u zm_~}T{HeHj1bAlKl8ii92l9~$dm=UM21kLemA&b$;^!wB7#IKWGnF$TVq!!lBlG4 z{?Rjz?P(uvid+|i$VH?`-C&Gcb3{(~Vpg`w+O);Wk1|Mrjxrht0GfRUnZqz2MhrXa zqgVC9nemD5)H$to=~hp)c=l9?#~Z_7i~=U-`FZxb-|TR9@YCxx;Zjo-WpMNOn2)z) zFPGGVl%3N$f`gp$gPnWC+f4(rmts%fidpo^BJx72zAd7|*Xi{2VXmbOm)1`w^tm9% znM=0Fg4bDxH5PxPEm{P3#A(mxqlM7SIARP?|2&+c7qmU8kP&iApzL|F>Dz)Ixp_`O zP%xrP1M6@oYhgo$ZWwrAsYLa4 z|I;DAvJxno9HkQrhLPQk-8}=De{9U3U%)dJ$955?_AOms!9gia%)0E$Mp}$+0er@< zq7J&_SzvShM?e%V?_zUu{niL@gt5UFOjFJUJ}L?$f%eU%jUSoujr{^O=?=^{19`ON zlRIy8Uo_nqcPa6@yyz`CM?pMJ^^SN^Fqtt`GQ8Q#W4kE7`V9^LT}j#pMChl!j#g#J zr-=CCaV%xyFeQ9SK+mG(cTwW*)xa(eK;_Z(jy)woZp~> zA(4}-&VH+TEeLzPTqw&FOoK(ZjD~m{KW05fiGLe@E3Z2`rLukIDahE*`u!ubU)9`o zn^-lyht#E#-dt~S>}4y$-mSbR8{T@}22cn^refuQ08NjLOv?JiEWjyOnzk<^R5%gO zhUH_B{oz~u#IYwVnUg8?3P*#DqD8#X;%q%HY**=I>>-S|!X*-!x1{^l#OnR56O>iD zc;i;KS+t$koh)E3)w0OjWJl_aW2;xF=9D9Kr>)(5}4FqUbk# zI#$N8o0w;IChL49m9CJTzoC!|u{Ljd%ECgBOf$}&jA^$(V#P#~)`&g`H8E{uv52pp zwto`xUL-L&WTAVREEm$0g_gYPL(^vHq(*t1WCH_6alhkeW&GCZ3hL)|{O-jiFOBrF z!EW=Jej|dqQitT6!B-7&io2K)WIm~Q)v@yq%U|VpV+I?{y0@Yd%n8~-NuuM*pM~KA z85YB};IS~M(c<}4Hxx>qRK0cdl&e?t253N%vefkgds>Ubn8X}j6Vpgs>a#nFq$osY z1ZRwLqFv=+BTb=i%D2Wv>_yE0z}+niZ4?rE|*a3d7^kndWGwnFqt+iZ(7+aln<}jzbAQ(#Z2SS}3S$%Bd}^ zc9ghB%O)Z_mTZMRC&H#)I#fiLuIkGa^`4e~9oM5zKPx?zjkC&Xy0~r{;S?FS%c7w< zWbMpzc(xSw?9tGxG~_l}Acq}zjt5ClaB7-!vzqnlrX;}$#+PyQ9oU)_DfePh2E1<7 ztok6g6K^k^DuHR*iJ?jw?bs_whk|bx`dxu^nC6#e{1*m~z1eq7m}Cf$*^Eua(oi_I zAL+3opNhJteu&mWQ@kQWPucmiP)4|nFG`b2tpC;h{-PI@`+h?9v=9mn|0R-n8#t=+Z*FD(c5 zjj79Jxkgck*DV=wpFgRZuwr%}KTm+dx?RT@aUHJdaX-ODh~gByS?WGx&czAkvkg;x zrf92l8$Or_zOwJVwh>5rB`Q5_5}ef6DjS*$x30nZbuO3dijS*wvNEqTY5p1_A0gWr znH<(Qvb!os14|R)n2Ost>jS2;d1zyLHu`Svm|&dZD+PpP{Bh>U&`Md;gRl64q;>{8MJJM$?UNUd`aC>BiLe>*{ zJY15->yW+<3rLgYeTruFDtk1ovU<$(_y7#HgUq>)r0{^}Xbth}V#6?%5jeFYt;SG^ z3qF)=uWRU;Jj)Q}cpY8-H+l_n$2$6{ZR?&*IGr{>ek!69ZH0ZoJ*Ji+ezzlJ^%qL3 zO5a`6gwFw(moEzqxh=yJ9M1FTn!eo&qD#y5AZXErHs%22?A+JmS&GIolml!)rZTnUDM3YgzYfT#;OXn)`PWv3Ta z!-i|-Wojv*k&bC}_JJDjiAK(Ba|YZgUI{f}TdEOFT2+}nPmttytw7j%@bQZDV1vvj z^rp{gRkCDmYJHGrE1~e~AE!-&6B6`7UxVQuvRrfdFkGX8H~SNP_X4EodVd;lXd^>eV1jN+Tt4}Rsn)R0LxBz0c=NXU|pUe!MQQFkGBWbR3&(jLm z%RSLc#p}5_dO{GD=DEFr=Fc% z85CBF>*t!6ugI?soX(*JNxBp+-DdZ4X0LldiK}+WWGvXV(C(Ht|!3$psR=&c*HIM=BmX;pRIpz@Ale{9dhGe(U2|Giv;# zOc|;?p67J=Q(kamB*aus=|XP|m{jN^6@V*Bpm?ye56Njh#vyJqE=DweC;?Rv7faX~ zde03n^I~0B2vUmr;w^X37tVxUK?4}ifsSH5_kpKZIzpYu0;Kv}SBGfI2AKNp+VN#z`nI{UNDRbo-wqa4NEls zICRJpu)??cj^*WcZ^MAv+;bDbh~gpN$1Cor<{Y2oyIDws^JsfW^5AL$azE(T0p&pP z1Mv~6Q44R&RHoH95&OuGx2srIr<@zYJTOMKiVs;Bx3py89I87LOb@%mr`0)#;7_~Z zzcZj8?w=)>%5@HoCHE_&hnu(n_yQ-L(~VjpjjkbT7e)Dk5??fApg(d>vwLRJ-x{um z*Nt?DqTSxh_MIyogY!vf1mU1`Gld-&L)*43f6dilz`Q@HEz;+>MDDYv9u!s;WXeao zUq=TaL$P*IFgJzrGc>j1dDOd zed+=ZBo?w4mr$2)Ya}?vedDopomhW1`#P<%YOJ_j=WwClX0xJH-f@s?^tmzs_j7t!k zK@j^zS0Q|mM4tVP5Ram$VbS6|YDY&y?Q1r1joe9dj08#CM{RSMTU}(RCh`hp_Rkl- zGd|Cv~G@F{DLhCizAm9AN!^{rNs8hu!G@8RpnGx7e`-+K$ffN<0qjR zGq^$dj_Tv!n*?zOSyk5skI7JVKJ)3jysnjIu-@VSzQiP8r6MzudCU=~?v-U8yzo^7 zGf~SUTvEp+S*!X9uX!sq=o}lH;r{pzk~M*VA(uyQ`3C8!{C;)&6)95fv(cK!%Cuz$ z_Zal57H6kPN>25KNiI6z6F)jzEkh#%OqU#-__Xzy)KyH};81#N6OfX$$IXWzOn`Q& z4f$Z1t>)8&8PcYfEwY5UadU1yg+U*(1m2ZlHoC-!2?gB!!fLhmTl))D@dhvkx#+Yj z1O=LV{(T%{^IeCuFK>%QR!VZ4GnO5tK8a+thWE zg4VytZrwcS?7^ zuZfhYnB8dwd%VLO?DK7pV5Wi<(`~DYqOXn8#jUIL^)12*Dbhk4GmL_E2`WX&iT16o zk(t|hok(Y|v-wzn?4x34T)|+SfZP>fiq!><*%vnxGN~ypST-FtC+@TPv*vYv@iU!_ z@2gf|PrgQ?Ktf*9^CnJ(x*CtZVB8!OBfg0%!wL;Z8(tYYre0vcnPGlyCc$V(Ipl*P z_(J!a=o@vp^%Efme!K74(Ke7A>Y}|sxV+JL^aYa{~m%5#$$+R1? zGaQhZTTX!#s#=Xtpegqero$RNt&`4xn3g$)=y*;=N=Qai)}~`xtxI_N*#MMCIq#HFifT zz(-*m;pVH&+4bixL&Bbg)W5FN^bH87pAHp)zPkWNMfTFqS=l~AC$3FX3kQUSh_C?-ZftyClgM)o_D7cX$RGlEYblux0jv5 zTr|i-I3@ZPCGheCl~BGhImF)K4!9@?pC(gi3ozX=a!|r1)LFxy_8c&wY0<^{2cm|P zv6Y`QktY*;I)IUd5y3ne1CqpVanlY45z8hf4&$EUBnucDj16pDa4&GI&TArYhf*xh zdj>*%APH8(h~c>o@l#%T>R$e>rwVx_WUB|~V`p^JHsg*y12lzj&zF}w6W09HwB2yb z%Q~`es&(;7#*DUC_w-Dmt7|$*?TA_m;zB+-u{2;Bg{O}nV7G_@7~<)Bv8fH^G$XG8$(&{A zwXJK5LRK%M34(t$&NI~MHT{UQ9qN-V_yn|%PqC81EIiSzmMM=2zb`mIwiP_b)x+2M z7Gd`83h79j#SItpQ}luuf2uOU`my_rY5T{6P#BNlb%h%<#MZb=m@y5aW;#o1^2Z)SWo+b`y0gV^iRcZtz5!-05vF z7wNo=hc6h4hc&s@uL^jqRvD6thVYtbErDK9k!;+a0xoE0WL7zLixjn5;$fXvT=O3I zT6jI&^A7k6R{&5#lVjz#8%_RiAa2{di{`kx79K+j72$H(!ass|B%@l%KeeKchYLe_ z>!(JC2fxsv>XVen+Y42GeYPxMWqm`6F$(E<6^s|g(slNk!lL*6v^W2>f6hh^mE$s= z3D$)}{V5(Qm&A6bp%2Q}*GZ5Qrf}n7*Hr51?bJOyA-?B4vg6y_EX<*-e20h{=0Mxs zbuQGZ$fLyO5v$nQ&^kuH+mNq9O#MWSfThtH|0q1i!NrWj^S}_P;Q1OkYLW6U^?_7G zx2wg?CULj7))QU(n{$0JE%1t2dWrMi2g-Os{v|8^wK{@qlj%+1b^?NI z$}l2tjp0g>K3O+p%yK<9!XqmQ?E9>z&(|^Pi~aSRwI5x$jaA62GFz9%fmO3t3a>cq zK8Xbv=5Ps~4mKN5+Eqw12(!PEyedFXv~VLxMB~HwT1Vfo51pQ#D8e$e4pFZ{&RC2P z5gTIzl{3!&(tor^BwZfR8j4k{7Rq#`riKXP2O-Bh66#WWK2w=z;iD9GLl+3 zpHIaI4#lQ&S-xBK8PiQ%dwOh?%BO~DCo06pN7<^dnZCN@NzY{_Z1>rrB0U|nC&+!2 z2y!oBcTd2;@lzyk(B=TkyZ)zy0deK05*Q0zk+o$@nun`VI1Er7pjq>8V zNmlW{p7S^Btgb(TA}jL(uR>`0w8gHP^T~Sh5Tkip^spk4SBAhC{TZU}_Z)UJw-}zm zPq{KBm!k)?P{`-(9?LFt&YN4s%SIZ-9lJ!Ws~B%exHOeVFk3~}HewnnH(d)qkLQ_d z6h>O)pEE{vbOVw}E+jdYC^wM+AAhaI(YAibUc@B#_mDss0Ji&BK{WG`4 zOk>vSNq(Bq2IB@s>>Rxm6Wv?h;ZXkpb1l8u|+_qXWdC*jjcPCixq;!%BVPSp#hP zqo`%cNf&YoQXHC$D=D45RiT|5ngPlh?0T~?lUf*O)){K@*Kbh?3RW1j9-T?%lDk@y z4+~?wKI%Y!-=O|_IuKz|=)F;V7ps=5@g)RrE;;tvM$gUhG>jHcw2Hr@fS+k^Zr~>G z^JvPrZc}_&d_kEsqAEMTMJw!!CBw)u&ZVzmq+ZworuaE&TT>$pYsd9|g9O^0orAe8 z221?Va!l1|Y5X1Y?{G7rt1sX#qFA^?RLG^VjoxPf63;AS=_mVDfGJKg73L zsGdnTUD40y(>S##2l|W2Cy!H(@@5KBa(#gs`vlz}Y~$ot5VsqPQ{{YtjYFvIumZzt zA{CcxZLJR|4#{j7k~Tu*jkwz8QA|5G1$Cl895R`Zyp;irp1{KN){kB30O8P1W5;@bG znvX74roeMmQlUi=v9Y%(wl$ZC#9tKNFpvi3!C}f1m6Ct|l2g%psc{TJp)@yu)*e2> z((p0Fg*8gJ!|3WZke9;Z{8}&NRkv7iP=#_y-F}x^y?2m%-D_aj^)f04%mneyjo_;) z6qc_Zu$q37d~X``*eP~Q>I2gg%rrV8v=kDfpp$=%Vj}hF)^dsSWygoN(A$g*E=Do6FX?&(@F#7pbiJ`;c0c@Ul zDqW_90Wm#5f2L<(Lf3)3TeXtI7nhYwRm(F;*r_G6K@OPW4H(Y3O5SjUzBC}u3d|eQ8*8d@?;zUPE+i#QNMn=r(ap?2SH@vo*m z3HJ%XuG_S6;QbWy-l%qU;8x;>z>4pMW7>R}J%QLf%@1BY(4f_1iixd-6GlO7Vp*yU zp{VU^3?s?90i=!#>H`lxT!q8rk>W_$2~kbpz7eV{3wR|8E=8**5?qn8#n`*(bt1xRQrdGxyx2y%B$qmw#>ZV$c7%cO#%JM1lY$Y0q?Yuo> ze9KdJoiM)RH*SB%^;TAdX-zEjA7@%y=!0=Zg%iWK7jVI9b&Dk}0$Af&08KHo+ zOwDhFvA(E|ER%a^cdh@^wLUlmIv6?_3=BvX8jKk92L=Y}7Jf5OGMfh` zBdR1wFCi-i5@`9km{isRb0O%TX+f~)KNaEz{rXQa89`YIF;EN&gN)cigu6mNh>?Cm zAO&Im2flv6D{jwm+y<%WsPe4!89n~KN|7}Cb{Z;XweER73r}Qp2 zz}WP4j}U0&(uD&9yGy6`!+_v-S(yG*iytsTR#x_Rc>=6u^vnRDnf1gP{#2>`ffrAC% zTZ5WQ@hAK;P;>kX{D)mIXe4%a5p=LO1xXH@8T?mz7Q@d)$3pL{{B!2{-v70L*o1AO+|n5beiw~ zk@(>m?T3{2k2c;NWc^`4@P&Z?BjxXJ@;x1qhn)9Mn*IFdt_J-dIqx5#d`NfyfX~m( zIS~5)MfZ2Uy?_4W`47i}u0ZgPh<{D|w_d#;D}Q&U$Q-G}xM1A@1f{#%A$jh6Qp&0hQ<0bPOM z-{1Wm&p%%#eb_?x7i;bol EfAhh=DF6Tf diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index ffdc10e59..d58dfb70b 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1,2 +1,19 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/mvnw b/mvnw index 41c0f0c23..19529ddf8 100755 --- a/mvnw +++ b/mvnw @@ -19,292 +19,241 @@ # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir +# Apache Maven Wrapper startup batch script, version 3.3.2 # # Optional ENV vars # ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output # ---------------------------------------------------------------------------- -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac -fi +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 fi fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" +} - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" done + printf %x\\n $h +} - saveddir=`pwd` +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } - M2_HOME=`dirname "$PRG"`/.. +die() { + printf %s\\n "$1" >&2 + exit 1 +} - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" fi -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" fi -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" fi -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; fi -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd index 86115719e..249bdf382 100644 --- a/mvnw.cmd +++ b/mvnw.cmd @@ -1,3 +1,4 @@ +<# : batch portion @REM ---------------------------------------------------------------------------- @REM Licensed to the Apache Software Foundation (ASF) under one @REM or more contributor license agreements. See the NOTICE file @@ -18,165 +19,131 @@ @REM ---------------------------------------------------------------------------- @REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir +@REM Apache Maven Wrapper startup batch script, version 3.3.2 @REM @REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output @REM ---------------------------------------------------------------------------- -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) ) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" From a392b0639a0cf11e84d00d2e434e9e27819edad7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 16:51:52 +0200 Subject: [PATCH 146/870] Bump org.apache.maven.plugins:maven-site-plugin from 3.3 to 3.20.0 (#1118) Bumps [org.apache.maven.plugins:maven-site-plugin](https://github.com/apache/maven-site-plugin) from 3.3 to 3.20.0. - [Release notes](https://github.com/apache/maven-site-plugin/releases) - [Commits](https://github.com/apache/maven-site-plugin/compare/maven-site-plugin-3.3...maven-site-plugin-3.20.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-site-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 75f31709f..66459c13b 100644 --- a/pom.xml +++ b/pom.xml @@ -150,7 +150,7 @@ maven-site-plugin - 3.3 + 3.20.0 From 082d1a8a15b2912532745356e3b184807d58097c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 17:01:00 +0200 Subject: [PATCH 147/870] Bump org.apache.maven.plugins:maven-shade-plugin from 3.2.4 to 3.6.0 (#1116) Bumps [org.apache.maven.plugins:maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.2.4 to 3.6.0. - [Release notes](https://github.com/apache/maven-shade-plugin/releases) - [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.2.4...maven-shade-plugin-3.6.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-shade-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 66459c13b..28a8aeebd 100644 --- a/pom.xml +++ b/pom.xml @@ -155,7 +155,7 @@ maven-shade-plugin - 3.2.4 + 3.6.0 maven-failsafe-plugin From a8b793ba26408fb4203abfad1398611a39ca1747 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 17:04:48 +0200 Subject: [PATCH 148/870] Bump org.apache.maven.plugins:maven-deploy-plugin from 2.7 to 3.1.3 (#1115) Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 2.7 to 3.1.3. - [Release notes](https://github.com/apache/maven-deploy-plugin/releases) - [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-2.7...maven-deploy-plugin-3.1.3) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-deploy-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 28a8aeebd..80731c204 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ maven-deploy-plugin - 2.7 + 3.1.3 maven-clean-plugin From 2c3e258f42b11dbe462ab9e446c9e8acffc37894 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 17:11:43 +0200 Subject: [PATCH 149/870] Bump org.mockito:mockito-core from 5.12.0 to 5.14.1 (#1114) Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.12.0 to 5.14.1. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.12.0...v5.14.1) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 80731c204..58ecae430 100644 --- a/pom.xml +++ b/pom.xml @@ -104,7 +104,7 @@ org.mockito mockito-core - 5.12.0 + 5.14.1 test From b6e58656074e28147200c70708db6c8706d3b7ac Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 7 Oct 2024 17:21:05 +0200 Subject: [PATCH 150/870] Junit cleanup (#1119) * exclude hamcrest Signed-off-by: Gregor Zeitlinger * simplify assertj Signed-off-by: Gregor Zeitlinger * simplify assertj Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- integration-tests/it-common/pom.xml | 8 --- .../it-exporter/it-exporter-test/pom.xml | 5 -- integration-tests/it-pushgateway/pom.xml | 6 +- .../metrics/it/pushgateway/PushGatewayIT.java | 11 ++- integration-tests/pom.xml | 27 ++++--- .../metrics/core/metrics/HistogramTest.java | 4 +- .../core/metrics/StatefulMetricTest.java | 7 +- .../metrics/core/metrics/SummaryTest.java | 8 +-- .../pom.xml | 71 ++++++++++--------- .../caffeine/CacheMetricsCollectorTest.java | 3 +- .../dropwizard5/DropwizardExportsTest.java | 12 ++-- .../guava/CacheMetricsCollectorTest.java | 3 +- .../JvmMemoryPoolAllocationMetricsTest.java | 15 ++-- .../jvm/JvmThreadsMetricsTest.java | 3 +- .../ClassicHistogramBucketsTest.java | 7 +- .../model/snapshots/CounterSnapshotTest.java | 11 ++- .../metrics/model/snapshots/ExemplarTest.java | 5 +- .../model/snapshots/ExemplarsTest.java | 17 +++-- .../model/snapshots/GaugeSnapshotTest.java | 11 ++- .../snapshots/HistogramSnapshotTest.java | 11 ++- .../model/snapshots/QuantilesTest.java | 13 ++-- .../model/snapshots/SummarySnapshotTest.java | 3 +- .../model/snapshots/UnknownSnapshotTest.java | 4 +- 23 files changed, 122 insertions(+), 143 deletions(-) diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index 195a10caa..0cf030857 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -24,14 +24,6 @@ - - - org.testcontainers - testcontainers - test - - - diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 5135e35e1..0fe5ccbdd 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -42,11 +42,6 @@ prometheus-metrics-exposition-formats ${project.version} - - org.testcontainers - testcontainers - test - commons-io commons-io diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index 1956f1dad..d10f34398 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -47,11 +47,7 @@ prometheus-metrics-exporter-pushgateway ${project.version} - - org.testcontainers - testcontainers - test - + io.prometheus it-common diff --git a/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java b/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java index cf11671f3..beb83d7d9 100644 --- a/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java +++ b/integration-tests/it-pushgateway/src/test/java/io/prometheus/metrics/it/pushgateway/PushGatewayIT.java @@ -2,7 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; -import static org.assertj.core.data.Offset.offset; import com.jayway.jsonpath.Criteria; import com.jayway.jsonpath.Filter; @@ -180,13 +179,13 @@ public void testProtobuf() throws IOException, InterruptedException { private void assertMetrics() throws IOException, InterruptedException { double value = getValue("my_batch_job_duration_seconds", "job", "pushgateway-test-app"); - assertThat(value).isCloseTo(0.5, offset(0.0)); + assertThat(value).isEqualTo(0.5); value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "512"); - assertThat(value).isCloseTo(0.0, offset(0.0)); + assertThat(value).isEqualTo(0.0); value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "1024"); - assertThat(value).isCloseTo(2.0, offset(0.0)); + assertThat(value).isEqualTo(2.0); value = getValue("file_sizes_bytes_bucket", "job", "pushgateway-test-app", "le", "+Inf"); - assertThat(value).isCloseTo(3.0, offset(0.0)); + assertThat(value).isEqualTo(3.0); } private double getValue(String name, String... labels) throws IOException, InterruptedException { @@ -204,7 +203,7 @@ private double getValue(String name, String... labels) throws IOException, Inter private void assertNativeHistogram() throws IOException, InterruptedException { double count = getNativeHistogramCount("file_sizes_bytes", "pushgateway-test-app"); - assertThat(count).isCloseTo(3, offset(0.0)); + assertThat(count).isEqualTo(3); } private double getNativeHistogramCount(String name, String job) diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 2ed77b95d..dfc366b07 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 @@ -49,14 +50,18 @@ - - - - org.testcontainers - testcontainers - 1.19.8 - test - - - + + + org.testcontainers + junit-jupiter + 1.20.2 + test + + + org.hamcrest + hamcrest-core + + + + diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index 1eb1121ad..ca484bf47 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -1152,7 +1152,7 @@ private void assertExemplar(Histogram histogram, double value, String... labels) assertThat(exemplar) .as("No exemplar found in bucket [" + lowerBound + ", " + upperBound + "]") .isNotNull(); - assertThat(exemplar.getValue()).isCloseTo(value, offset(0.0)); + assertThat(exemplar.getValue()).isEqualTo(value); assertThat(exemplar.getLabels().size()) .as("" + exemplar.getLabels()) .isEqualTo(labels.length / 2); @@ -1354,7 +1354,7 @@ public void testNoLabelsDefaultZeroValue() { Histogram noLabels = Histogram.builder().name("test").build(); assertThat(getBucket(noLabels, 0.005).getCount()).isZero(); assertThat(getData(noLabels).getCount()).isZero(); - assertThat(getData(noLabels).getSum()).isCloseTo(0.0, offset(0.0)); + assertThat(getData(noLabels).getSum()).isEqualTo(0.0); } private ClassicHistogramBucket getBucket(Histogram histogram, double le, String... labels) { diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java index d05cf145a..1120b06a3 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java @@ -1,7 +1,6 @@ package io.prometheus.metrics.core.metrics; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.data.Offset.offset; import java.lang.reflect.Field; import java.util.Map; @@ -55,17 +54,17 @@ public void testClearNoLabels() { Counter counter = Counter.builder().name("test").build(); counter.inc(); assertThat(counter.collect().getDataPoints()).hasSize(1); - assertThat(counter.collect().getDataPoints().get(0).getValue()).isCloseTo(1.0, offset(0.0)); + assertThat(counter.collect().getDataPoints().get(0).getValue()).isEqualTo(1.0); counter.clear(); // No labels is always present, but as no value has been observed after clear() the value should // be 0.0 assertThat(counter.collect().getDataPoints()).hasSize(1); - assertThat(counter.collect().getDataPoints().get(0).getValue()).isCloseTo(0.0, offset(0.0)); + assertThat(counter.collect().getDataPoints().get(0).getValue()).isEqualTo(0.0); // Making inc() works correctly after clear() counter.inc(); assertThat(counter.collect().getDataPoints()).hasSize(1); - assertThat(counter.collect().getDataPoints().get(0).getValue()).isCloseTo(1.0, offset(0.0)); + assertThat(counter.collect().getDataPoints().get(0).getValue()).isEqualTo(1.0); } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java index dbabb1a93..b369ed8fb 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java @@ -123,14 +123,12 @@ public void testMaxAge() throws InterruptedException { .help("help") .register(registry); summary.observe(8.0); - assertThat(getQuantile(summary, 0.99, Labels.EMPTY)) - .isCloseTo(8.0, offset(0.0)); // From bucket 1. + assertThat(getQuantile(summary, 0.99, Labels.EMPTY)).isEqualTo(8.0); // From bucket 1. Thread.sleep(600); - assertThat(getQuantile(summary, 0.99, Labels.EMPTY)) - .isCloseTo(8.0, offset(0.0)); // From bucket 2. + assertThat(getQuantile(summary, 0.99, Labels.EMPTY)).isEqualTo(8.0); // From bucket 2. Thread.sleep(600); assertThat(getQuantile(summary, 0.99, Labels.EMPTY)) - .isCloseTo(Double.NaN, offset(0.0)); // Bucket 1 again, now it is empty. + .isEqualTo(Double.NaN); // Bucket 1 again, now it is empty. } @Test diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 0247be420..89cc01221 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 @@ -56,6 +57,12 @@ wiremock 3.5.4 test + + + org.hamcrest + hamcrest-core + + org.awaitility @@ -88,37 +95,37 @@ - - org.apache.maven.plugins - maven-dependency-plugin - 3.6.0 - - - copy - package - - copy - - - - - - - io.opentelemetry - opentelemetry-api - ${otel.version} - ${project.basedir}/src/main/resources/lib/ - - - io.opentelemetry - opentelemetry-context - ${otel.version} - ${project.basedir}/src/main/resources/lib/ - - - - - + + org.apache.maven.plugins + maven-dependency-plugin + 3.6.0 + + + copy + package + + copy + + + + + + + io.opentelemetry + opentelemetry-api + ${otel.version} + ${project.basedir}/src/main/resources/lib/ + + + io.opentelemetry + opentelemetry-context + ${otel.version} + ${project.basedir}/src/main/resources/lib/ + + + + + - - io.prometheus - prometheus-metrics-shaded-opentelemetry - ${prometheus.metrics.shaded.dependencies.version} - - diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 147ae67ab..86d58ca30 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -18,7 +18,6 @@ - 1.42.1 io.prometheus.metrics.exporter.opentelemetry @@ -29,10 +28,19 @@ ${project.version} - io.prometheus - prometheus-metrics-shaded-opentelemetry - 1.3.1 - + io.opentelemetry + opentelemetry-api + ${otel.version} + + + io.opentelemetry + opentelemetry-sdk + ${otel.version} + + + io.opentelemetry + opentelemetry-exporter-otlp + ${otel.version} @@ -80,41 +88,28 @@ - org.apache.maven.plugins - maven-dependency-plugin + org.codehaus.mojo + build-helper-maven-plugin 3.6.0 - copy - package + regex-property - copy + regex-property + + otel.string-version + ${otel.version} + \. + _ + true + - - - - io.opentelemetry - opentelemetry-api - ${otel.version} - ${project.basedir}/src/main/resources/lib/ - - - io.opentelemetry - opentelemetry-context - ${otel.version} - ${project.basedir}/src/main/resources/lib/ - - - - - diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java index fb674e351..c462a9d59 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java @@ -1,17 +1,17 @@ package io.prometheus.metrics.exporter.opentelemetry; +import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter; +import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder; +import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter; +import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.metrics.export.MetricExporter; +import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.resources.ResourceBuilder; import io.prometheus.metrics.config.ExporterOpenTelemetryProperties; import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.exporter.otlp.http.metrics.OtlpHttpMetricExporter; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.exporter.otlp.metrics.OtlpGrpcMetricExporter; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.export.MetricExporter; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.export.PeriodicMetricReader; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.Resource; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.ResourceBuilder; import java.time.Duration; import java.util.HashMap; import java.util.Map; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java index fae9a2984..a8c43e7f9 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.exporter.opentelemetry; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import java.util.Properties; class PrometheusInstrumentationScope { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java index 8d3fb2469..4b8b5591f 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java @@ -1,5 +1,12 @@ package io.prometheus.metrics.exporter.opentelemetry; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.export.CollectionRegistration; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.resources.ResourceBuilder; import io.prometheus.metrics.exporter.opentelemetry.otelmodel.MetricDataFactory; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.CounterSnapshot; @@ -12,13 +19,6 @@ import io.prometheus.metrics.model.snapshots.StateSetSnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.AttributesBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.export.CollectionRegistration; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.Resource; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.ResourceBuilder; import java.util.ArrayList; import java.util.Collection; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java index 12b7c7acd..043635977 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/DoublePointDataImpl.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; +import io.opentelemetry.sdk.metrics.data.DoublePointData; import java.util.List; class DoublePointDataImpl extends PointDataImpl implements DoublePointData { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java index 798e9b5df..3ec73c21d 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramBucketsImpl.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramBuckets; +import io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets; import java.util.ArrayList; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java index 3c5a893e2..70be47b82 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ExponentialHistogramPointDataImpl.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramBuckets; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramPointData; +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.List; public class ExponentialHistogramPointDataImpl extends PointDataImpl diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java index 19b141b04..22b98850b 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/HistogramPointDataImpl.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.HistogramPointData; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; +import io.opentelemetry.sdk.metrics.data.HistogramPointData; import java.util.List; public class HistogramPointDataImpl extends PointDataImpl implements HistogramPointData { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java index 95cb59546..a09490cc6 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java @@ -1,5 +1,8 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.resources.Resource; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.HistogramSnapshot; @@ -7,9 +10,6 @@ import io.prometheus.metrics.model.snapshots.StateSetSnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.Resource; public class MetricDataFactory { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java index d1ba082e5..bf4b8e4d7 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PointDataImpl.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.PointData; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; +import io.opentelemetry.sdk.metrics.data.PointData; import java.util.List; abstract class PointDataImpl implements PointData { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java index 3434dc467..fc31e6333 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java @@ -1,11 +1,11 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.sdk.metrics.data.AggregationTemporality; +import io.opentelemetry.sdk.metrics.data.HistogramData; +import io.opentelemetry.sdk.metrics.data.HistogramPointData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.HistogramSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.HistogramData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.HistogramPointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import java.util.ArrayList; import java.util.Collection; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java index f730fb97d..e44ce901c 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusCounter.java @@ -1,10 +1,10 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.sdk.metrics.data.AggregationTemporality; +import io.opentelemetry.sdk.metrics.data.DoublePointData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; +import io.opentelemetry.sdk.metrics.data.SumData; import io.prometheus.metrics.model.snapshots.CounterSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java index 7e09a483e..64b82bd8b 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java @@ -1,16 +1,16 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.TraceFlags; +import io.opentelemetry.api.trace.TraceState; +import io.opentelemetry.sdk.metrics.data.Data; +import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; +import io.opentelemetry.sdk.metrics.data.PointData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableDoubleExemplarData; import io.prometheus.metrics.model.snapshots.*; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.AttributesBuilder; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.trace.SpanContext; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.trace.TraceFlags; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.trace.TraceState; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.Data; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.PointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.internal.data.ImmutableDoubleExemplarData; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java index 872d569e6..ecdc7ab75 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusGauge.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.sdk.metrics.data.DoublePointData; +import io.opentelemetry.sdk.metrics.data.GaugeData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.GaugeData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java index eb5ae48f6..33e4c158d 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java @@ -1,10 +1,10 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.sdk.metrics.data.AggregationTemporality; +import io.opentelemetry.sdk.metrics.data.DoublePointData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; +import io.opentelemetry.sdk.metrics.data.SumData; import io.prometheus.metrics.model.snapshots.InfoSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData; import java.util.Collection; import java.util.Collections; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java index 5d86000b8..4995b98d6 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java @@ -1,13 +1,13 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.metrics.data.DoublePointData; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; +import io.opentelemetry.sdk.metrics.data.SumData; +import io.opentelemetry.sdk.resources.Resource; import io.prometheus.metrics.model.snapshots.MetricMetadata; import io.prometheus.metrics.model.snapshots.Unit; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.common.InstrumentationScopeInfo; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.resources.Resource; class PrometheusMetricData> implements MetricData { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java index eb2a6555e..c452ec1ad 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusNativeHistogram.java @@ -1,12 +1,12 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.sdk.metrics.data.AggregationTemporality; +import io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets; +import io.opentelemetry.sdk.metrics.data.ExponentialHistogramData; +import io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.prometheus.metrics.model.snapshots.HistogramSnapshot; import io.prometheus.metrics.model.snapshots.NativeHistogramBuckets; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramBuckets; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ExponentialHistogramPointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import java.util.Collection; import java.util.List; import java.util.Objects; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java index 68fec8dd9..b0bb39841 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java @@ -1,11 +1,11 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.sdk.metrics.data.AggregationTemporality; +import io.opentelemetry.sdk.metrics.data.DoublePointData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; +import io.opentelemetry.sdk.metrics.data.SumData; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.StateSetSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java index 709b819af..f1a81c83f 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusSummary.java @@ -1,10 +1,10 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.sdk.metrics.data.MetricDataType; +import io.opentelemetry.sdk.metrics.data.SummaryData; +import io.opentelemetry.sdk.metrics.data.SummaryPointData; import io.prometheus.metrics.model.snapshots.Quantile; import io.prometheus.metrics.model.snapshots.SummarySnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SummaryData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SummaryPointData; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java index 39c8f508f..d52ea0942 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusUnknown.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import io.opentelemetry.sdk.metrics.data.DoublePointData; +import io.opentelemetry.sdk.metrics.data.GaugeData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.prometheus.metrics.model.snapshots.UnknownSnapshot; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.GaugeData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java index eab7da588..baa0ea782 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/SummaryPointDataImpl.java @@ -1,9 +1,9 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.api.common.Attributes; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoubleExemplarData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SummaryPointData; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ValueAtQuantile; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; +import io.opentelemetry.sdk.metrics.data.SummaryPointData; +import io.opentelemetry.sdk.metrics.data.ValueAtQuantile; import java.util.ArrayList; import java.util.List; diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java index 13b39d3aa..1b6363a05 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/ValueAtQuantileImpl.java @@ -1,6 +1,6 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; -import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.ValueAtQuantile; +import io.opentelemetry.sdk.metrics.data.ValueAtQuantile; public class ValueAtQuantileImpl implements ValueAtQuantile { diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml index 0f1e588ae..1fb820cc3 100644 --- a/prometheus-metrics-shaded-dependencies/pom.xml +++ b/prometheus-metrics-shaded-dependencies/pom.xml @@ -17,7 +17,6 @@ - prometheus-metrics-shaded-opentelemetry prometheus-metrics-shaded-protobuf diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml deleted file mode 100644 index cce47a5b3..000000000 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/pom.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - 4.0.0 - - - io.prometheus - prometheus-metrics-shaded-dependencies - 1.4.0-SNAPSHOT - - - prometheus-metrics-shaded-opentelemetry - - Shaded OpenTelemetry - - Shaded (reolocated to another package) dependencies for the OpenTelemetry exporter module. - - - - 1.42.1 - 1_42_1 - - - - - io.opentelemetry - opentelemetry-api - ${otel.version} - - - io.opentelemetry - opentelemetry-sdk - ${otel.version} - - - io.opentelemetry - opentelemetry-exporter-otlp - ${otel.version} - - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - package - - shade - - - - - io.opentelemetry - io.prometheus.metrics.shaded.io_opentelemetry_${otel.version.string} - - - okhttp3 - io.prometheus.metrics.shaded.io_opentelemetry_${otel.version.string}.okhttp3 - - - kotlin - io.prometheus.metrics.shaded.io_opentelemetry_${otel.version.string}.kotlin - - - org.intellij - io.prometheus.metrics.shaded.io_opentelemetry_${otel.version.string}.org.intellij - - - org.jetbrains - io.prometheus.metrics.shaded.io_opentelemetry_${otel.version.string}.org.jetbrains - - - okio - io.prometheus.metrics.shaded.io_opentelemetry_${otel.version.string}.okio - - - - - - - - - *:* - - META-INF/maven/org.jctools/** - META-INF/maven/org.jetbrains/** - META-INF/versions/** - META-INF/native-image/** - META-INF/proguard/** - META-INF/*.kotlin_module - META-INF/MANIFEST.MF - - - - - - - - - - diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/src/main/java/io/prometheus/metrics/shaded/io_opentelemetry/PrometheusMetricsShadedOpenTelemetry.java b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/src/main/java/io/prometheus/metrics/shaded/io_opentelemetry/PrometheusMetricsShadedOpenTelemetry.java deleted file mode 100644 index ca831e691..000000000 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/src/main/java/io/prometheus/metrics/shaded/io_opentelemetry/PrometheusMetricsShadedOpenTelemetry.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.prometheus.metrics.shaded.io_opentelemetry; - -/** - * This module does not need any source code, however, in order to publish it to Maven central it - * needs JavaDoc. - * - *

    I'm adding this dummy class here to get JavaDoc so I can publish this module to Maven central. - */ -public class PrometheusMetricsShadedOpenTelemetry {} diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/version-rules.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/version-rules.xml deleted file mode 100644 index 76f8da4fd..000000000 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-opentelemetry/version-rules.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index bd44b18bd..68e169524 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -21,7 +21,7 @@ io.opentelemetry opentelemetry-api - 1.42.1 + ${otel.version} From cdcf2d27959dea01c2c7ac31d00ddf44f58b9c59 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 9 Oct 2024 14:26:45 +0200 Subject: [PATCH 161/870] update benchmarks (#1129) Signed-off-by: Gregor Zeitlinger --- .../metrics/benchmarks/CounterBenchmark.java | 23 ++++++++++--------- .../benchmarks/HistogramBenchmark.java | 12 +++++----- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java index 6730e1bab..8ccf6a40d 100644 --- a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java +++ b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java @@ -21,17 +21,18 @@ * Results on a machine with dedicated 8 vCPU cores: * *

    - * Benchmark                                                                  Mode  Cnt      Score     Error  Units
    - * i.p.metrics.benchmarks.CounterBenchmark.codahaleIncNoLabels               thrpt   25  30978.055 ± 424.088  ops/s
    - * i.p.metrics.benchmarks.CounterBenchmark.openTelemetryAdd                  thrpt   25  12682.744 ± 162.425  ops/s
    - * i.p.metrics.benchmarks.CounterBenchmark.openTelemetryInc                  thrpt   25  14434.710 ±  99.809  ops/s
    - * i.p.metrics.benchmarks.CounterBenchmark.openTelemetryIncNoLabels          thrpt   25  16634.416 ±  13.098  ops/s
    - * i.p.metrics.benchmarks.CounterBenchmark.prometheusAdd                     thrpt   25  37317.024 ± 283.064  ops/s
    - * i.p.metrics.benchmarks.CounterBenchmark.prometheusInc                     thrpt   25  39436.278 ± 458.583  ops/s
    - * i.p.metrics.benchmarks.CounterBenchmark.prometheusNoLabelsInc             thrpt   25  34752.910 ± 293.979  ops/s
    - * i.p.metrics.benchmarks.CounterBenchmark.simpleclientAdd                   thrpt   25   9520.592 ± 245.787  ops/s
    - * i.p.metrics.benchmarks.CounterBenchmark.simpleclientInc                   thrpt   25   9057.637 ±  67.761  ops/s
    - * i.p.metrics.benchmarks.CounterBenchmark.simpleclientNoLabelsInc           thrpt   25   8993.471 ±  49.581  ops/s
    + *
    + * Benchmark                                     Mode  Cnt      Score     Error  Units
    + * CounterBenchmark.codahaleIncNoLabels         thrpt   25  25761.677 ± 122.947  ops/s
    + * CounterBenchmark.openTelemetryAdd            thrpt   25    545.026 ±  33.913  ops/s
    + * CounterBenchmark.openTelemetryInc            thrpt   25    550.577 ±  45.415  ops/s
    + * CounterBenchmark.openTelemetryIncNoLabels    thrpt   25    527.638 ±  32.020  ops/s
    + * CounterBenchmark.prometheusAdd               thrpt   25  20341.474 ±  40.973  ops/s
    + * CounterBenchmark.prometheusInc               thrpt   25  26414.616 ±  96.666  ops/s
    + * CounterBenchmark.prometheusNoLabelsInc       thrpt   25  26177.676 ± 120.342  ops/s
    + * CounterBenchmark.simpleclientAdd             thrpt   25   5503.867 ± 161.313  ops/s
    + * CounterBenchmark.simpleclientInc             thrpt   25   5568.125 ±  53.291  ops/s
    + * CounterBenchmark.simpleclientNoLabelsInc     thrpt   25   5394.692 ± 130.531  ops/s
      * 
    * * Prometheus counters are faster than counters of other libraries. For example, incrementing a diff --git a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java index 07b5e8445..1bebec573 100644 --- a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java +++ b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java @@ -20,12 +20,12 @@ * Results on a machine with dedicated 8 vCPU cores: * *
    - * Benchmark                                                                  Mode  Cnt      Score     Error  Units
    - * i.p.metrics.benchmarks.HistogramBenchmark.openTelemetryClassic            thrpt   25   1908.715 ± 114.050  ops/s
    - * i.p.metrics.benchmarks.HistogramBenchmark.openTelemetryExponential        thrpt   25   1009.785 ±  12.965  ops/s
    - * i.p.metrics.benchmarks.HistogramBenchmark.prometheusClassic               thrpt   25   6451.533 ± 326.265  ops/s
    - * i.p.metrics.benchmarks.HistogramBenchmark.prometheusNative                thrpt   25   3372.789 ± 339.328  ops/s
    - * i.p.metrics.benchmarks.HistogramBenchmark.simpleclient                    thrpt   25   6488.252 ±  96.737  ops/s
    + * Benchmark                                     Mode  Cnt      Score     Error  Units
    + * HistogramBenchmark.openTelemetryClassic      thrpt   25    258.660 ±   6.736  ops/s
    + * HistogramBenchmark.openTelemetryExponential  thrpt   25    210.963 ±  11.288  ops/s
    + * HistogramBenchmark.prometheusClassic         thrpt   25   1528.871 ±  43.598  ops/s
    + * HistogramBenchmark.prometheusNative          thrpt   25   1282.643 ± 110.210  ops/s
    + * HistogramBenchmark.simpleclient              thrpt   25   3376.016 ± 173.545  ops/s
      * 
    * * The simpleclient (i.e. client_java version 0.16.0 and older) histograms perform about the same as From c9bb30bd361870ff412c1d817c41f573e457670e Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 9 Oct 2024 14:30:32 +0200 Subject: [PATCH 162/870] include shaded protobuf directly (#1063) * include shaded protobuf directly Signed-off-by: Gregor Zeitlinger * include shaded protobuf directly Signed-off-by: Gregor Zeitlinger  Conflicts:  prometheus-metrics-shaded-dependencies/pom.xml * remove shaded deps Signed-off-by: Gregor Zeitlinger * format Signed-off-by: Gregor Zeitlinger * fix shading Signed-off-by: Gregor Zeitlinger * fix shading Signed-off-by: Gregor Zeitlinger * fix shading Signed-off-by: Gregor Zeitlinger * re-enable shading Signed-off-by: Gregor Zeitlinger * re-enable shading Signed-off-by: Gregor Zeitlinger * only build proto on CI Signed-off-by: Gregor Zeitlinger * only build proto on CI Signed-off-by: Gregor Zeitlinger * update protobuf Signed-off-by: Gregor Zeitlinger * update protobuf Signed-off-by: Gregor Zeitlinger * update protobuf Signed-off-by: Gregor Zeitlinger * update protobuf Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .github/workflows/build.yml | 12 +- .github/workflows/github-pages.yaml | 22 +- MAINTAINER_NOTES.md | 4 + .../metrics/it/exporter/test/ExporterIT.java | 2 +- pom.xml | 1 - prometheus-metrics-bom/pom.xml | 12 - prometheus-metrics-core/pom.xml | 3 +- .../metrics/core/metrics/CounterTest.java | 4 +- .../metrics/core/metrics/HistogramTest.java | 4 +- .../metrics/core/metrics/InfoTest.java | 4 +- .../generate-protobuf.sh | 34 +- prometheus-metrics-exposition-formats/pom.xml | 100 +- .../src/main/.gitignore | 1 + .../Metrics.java | 4404 ++++++++--------- .../PrometheusProtobufWriter.java | 4 +- .../expositionformats/ProtobufUtil.java | 2 +- .../src/main/protobuf/metrics.proto | 157 - .../ExpositionFormatsTest.java | 4 +- .../pom.xml | 23 - .../pom.xml | 75 - .../PrometheusMetricsShadedProtobuf.java | 9 - .../version-rules.xml | 6 - 22 files changed, 2114 insertions(+), 2773 deletions(-) create mode 100644 prometheus-metrics-exposition-formats/src/main/.gitignore rename prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/{com_google_protobuf_3_25_3 => com_google_protobuf_4_28_2}/Metrics.java (71%) delete mode 100644 prometheus-metrics-exposition-formats/src/main/protobuf/metrics.proto delete mode 100644 prometheus-metrics-shaded-dependencies/pom.xml delete mode 100644 prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml delete mode 100644 prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/src/main/java/io/prometheus/metrics/shaded/com_google_protobuf/PrometheusMetricsShadedProtobuf.java delete mode 100644 prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/version-rules.xml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f2500b8df..0ac4d429e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,11 +17,15 @@ jobs: java-version: 17 distribution: temurin cache: 'maven' - - name: Shaded dependencies - run: | - cd prometheus-metrics-shaded-dependencies - ../mvnw clean install + - name: Install Protoc + run: | + VERSION=28.2 + curl -sL -o protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v$VERSION/protoc-$VERSION-linux-x86_64.zip + sudo unzip protoc.zip -d /usr/local - name: Run the Maven verify phase + env: + PROTO_GENERATION: true + REQUIRE_PROTO_UP_TO_DATE: true run: | ./mvnw clean install ./mvnw javadoc:javadoc diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index e7a17ff36..d78e6d4a3 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -34,20 +34,14 @@ jobs: HUGO_VERSION: 0.115.4 JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64 steps: - - name: Install OpenJDK 17 - run: sudo apt-get -q install -y openjdk-17-jdk - - name: Make 17 the default java version - run: sudo update-alternatives --set java /usr/lib/jvm/java-17-openjdk-amd64/bin/java - - name: Make 17 the default javadoc version - run: sudo update-alternatives --set javadoc /usr/lib/jvm/java-17-openjdk-amd64/bin/javadoc - - name: Print java and javadoc versions - run: | - echo 'java --version' && \ - java --version && \ - echo 'javadoc --version' && \ - javadoc --version && \ - echo 'echo $JAVA_HOME' && \ - echo $JAVA_HOME + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + cache: 'maven' + - name: Install Protoc + uses: zchee/setup-protoc@v1 - name: Install Hugo CLI run: | wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ diff --git a/MAINTAINER_NOTES.md b/MAINTAINER_NOTES.md index e273f7ea3..495fab6cf 100644 --- a/MAINTAINER_NOTES.md +++ b/MAINTAINER_NOTES.md @@ -65,3 +65,7 @@ Create a commit to remove dependencies from the build (undoing the first step): * Comment out the `prometheus-metrics-shaded-dependencies` module to the root `pom.xml`. * Change the versions of the shaded dependencies to the latest released version on Maven Central in `prometheus-metrics-exporter-opentelemetry`, `prometheus-metrics-exposition-formats`, and `prometheus-metrics-bom`. + +## Notes + +- `PROTO_GENERATION=true mvn clean install` to generate protobuf classes. diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index b0e319190..6bce50718 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -6,7 +6,7 @@ import io.prometheus.client.it.common.LogConsumer; import io.prometheus.client.it.common.Volume; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/pom.xml b/pom.xml index 09421f582..f41bb926f 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,6 @@ prometheus-metrics-instrumentation-dropwizard5 prometheus-metrics-instrumentation-guava prometheus-metrics-simpleclient-bridge - examples benchmarks integration-tests diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index b751f65c4..ccd57519e 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -112,18 +112,6 @@ prometheus-metrics-tracer-otel-agent ${project.version}
    - - io.prometheus - prometheus-metrics-shaded-dependencies - ${prometheus.metrics.shaded.dependencies.version} - - - - io.prometheus - prometheus-metrics-shaded-protobuf - ${prometheus.metrics.shaded.dependencies.version} - - diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 9274be552..1f1079992 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index 087b230d2..3e87d378c 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -7,13 +7,13 @@ import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.Label; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.Unit; -import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; +import io.prometheus.metrics.shaded.com_google_protobuf_4_28_2.TextFormat; import io.prometheus.metrics.tracer.common.SpanContext; import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; import java.util.Arrays; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index ca484bf47..ad514e9d0 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -9,14 +9,14 @@ import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics; import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.Exemplars; import io.prometheus.metrics.model.snapshots.HistogramSnapshot; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; +import io.prometheus.metrics.shaded.com_google_protobuf_4_28_2.TextFormat; import io.prometheus.metrics.tracer.common.SpanContext; import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; import java.io.ByteArrayOutputStream; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index efdf211bb..4ea61a801 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -5,10 +5,10 @@ import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat; +import io.prometheus.metrics.shaded.com_google_protobuf_4_28_2.TextFormat; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index c68ce46c9..da2efe5af 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -1,17 +1,31 @@ #!/bin/bash -set -e +set -euo pipefail # We use the shaded protobuf JAR from the protobuf-shaded module. # I could not figure out how to use a protoc Maven plugin to use the shaded module, so I ran this command to generate the sources manually. -# The version string must be the same as in protobuf-shaded/pom.xml. -#export PROTOBUF_VERSION_STRING="3_21_7" -export PROTOBUF_VERSION_STRING="3_25_3" +TARGET_DIR=$1 +PROTO_DIR=src/main/protobuf +PROTOBUF_VERSION_STRING=$2 -rm -rf src/main/protobuf/* -curl -sL https://raw.githubusercontent.com/prometheus/client_model/master/io/prometheus/client/metrics.proto -o src/main/protobuf/metrics.proto -sed -i "s/java_package = \"io.prometheus.client\"/java_package = \"io.prometheus.metrics.expositionformats.generated.com_google_protobuf_${PROTOBUF_VERSION_STRING}\"/" src/main/protobuf/metrics.proto -rm -rf src/main/generated/* -protoc --java_out src/main/generated src/main/protobuf/metrics.proto -sed -i "s/com\\.google\\.protobuf/io.prometheus.metrics.shaded.com_google_protobuf_${PROTOBUF_VERSION_STRING}/g" "src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_${PROTOBUF_VERSION_STRING}/Metrics.java" +echo "Generating protobuf sources for version $PROTOBUF_VERSION_STRING in $TARGET_DIR" + +rm -rf TARGET_DIR || true +mkdir -p $TARGET_DIR +rm -rf $PROTO_DIR || true +mkdir -p $PROTO_DIR + +curl -sL https://raw.githubusercontent.com/prometheus/client_model/master/io/prometheus/client/metrics.proto -o $PROTO_DIR/metrics.proto +sed -i "s/java_package = \"io.prometheus.client\"/java_package = \"io.prometheus.metrics.expositionformats.generated.com_google_protobuf_${PROTOBUF_VERSION_STRING}\"/" $PROTO_DIR/metrics.proto +protoc --java_out $TARGET_DIR $PROTO_DIR/metrics.proto + +# stop the build if there class is not up-to-date +# show local changes +DIFF=$(git diff) +if [[ ${REQUIRE_PROTO_UP_TO_DATE:-false} == "true" && -n "$DIFF" ]]; then + echo "Generated protobuf sources are not up-to-date. Please run 'PROTO_GENERATION=true mvn clean install' and commit the changes." + echo "Local changes:" + echo "$DIFF" + exit 1 +fi diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 88b18e538..b8c8bf508 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 @@ -18,6 +19,7 @@ io.prometheus.metrics.expositionformats + 4.28.2 @@ -32,15 +34,69 @@ ${project.version}
    - io.prometheus - prometheus-metrics-shaded-protobuf - 1.3.1 - + com.google.protobuf + protobuf-java + ${protobuf-java.version} + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.0 + + + regex-property + + regex-property + + + protobuf-java.string-version + ${protobuf-java.version} + \. + _ + true + + + + negate-prop + initialize + + bsh-property + + + skip.protobuf.generation = !"true".equals(System.getenv("PROTO_GENERATION")); + + skip.protobuf.generation + + + + + + + exec-maven-plugin + org.codehaus.mojo + 3.4.1 + + + Generate Protobuf + generate-sources + + exec + + + ${skip.protobuf.generation} + ${project.basedir}/generate-protobuf.sh + + ${project.basedir}/src/main/generated + ${protobuf-java.string-version} + + + + + org.codehaus.mojo build-helper-maven-plugin @@ -66,6 +122,40 @@ src/main/java;src/main/generated + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + true + true + + + com.google.protobuf + + io.prometheus.metrics.shaded.com_google_protobuf_${protobuf-java.string-version} + + + + + + com.google.protobuf:protobuf-java + + META-INF/maven/com.google.protobuf/** + **/*.proto + META-INF/MANIFEST.MF + + + + + + + diff --git a/prometheus-metrics-exposition-formats/src/main/.gitignore b/prometheus-metrics-exposition-formats/src/main/.gitignore new file mode 100644 index 000000000..6de9f67ab --- /dev/null +++ b/prometheus-metrics-exposition-formats/src/main/.gitignore @@ -0,0 +1 @@ +protobuf/ diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_3_25_3/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_28_2/Metrics.java similarity index 71% rename from prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_3_25_3/Metrics.java rename to prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_28_2/Metrics.java index 3b821ba09..8567f1268 100644 --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_3_25_3/Metrics.java +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_28_2/Metrics.java @@ -1,25 +1,35 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE // source: src/main/protobuf/metrics.proto +// Protobuf Java Version: 4.28.2 -// Protobuf Java Version: 3.25.3 -package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3; +package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2; public final class Metrics { private Metrics() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 2, + /* suffix= */ "", + Metrics.class.getName()); + } public static void registerAllExtensions( - io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite registry) { + com.google.protobuf.ExtensionRegistryLite registry) { } public static void registerAllExtensions( - io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistry registry) { + com.google.protobuf.ExtensionRegistry registry) { registerAllExtensions( - (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite) registry); + (com.google.protobuf.ExtensionRegistryLite) registry); } /** * Protobuf enum {@code io.prometheus.client.MetricType} */ public enum MetricType - implements io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ProtocolMessageEnum { + implements com.google.protobuf.ProtocolMessageEnum { /** *
          * COUNTER must use the Metric field "counter".
    @@ -70,6 +80,15 @@ public enum MetricType
         GAUGE_HISTOGRAM(5),
         ;
     
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        MetricType.class.getName());
    +    }
         /**
          * 
          * COUNTER must use the Metric field "counter".
    @@ -150,35 +169,35 @@ public static MetricType forNumber(int value) {
           }
         }
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.EnumLiteMap
    +    public static com.google.protobuf.Internal.EnumLiteMap
             internalGetValueMap() {
           return internalValueMap;
         }
    -    private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.EnumLiteMap<
    +    private static final com.google.protobuf.Internal.EnumLiteMap<
             MetricType> internalValueMap =
    -          new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.EnumLiteMap() {
    +          new com.google.protobuf.Internal.EnumLiteMap() {
                 public MetricType findValueByNumber(int number) {
                   return MetricType.forNumber(number);
                 }
               };
     
    -    public final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.EnumValueDescriptor
    +    public final com.google.protobuf.Descriptors.EnumValueDescriptor
             getValueDescriptor() {
           return getDescriptor().getValues().get(ordinal());
         }
    -    public final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.EnumDescriptor
    +    public final com.google.protobuf.Descriptors.EnumDescriptor
             getDescriptorForType() {
           return getDescriptor();
         }
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.EnumDescriptor
    +    public static final com.google.protobuf.Descriptors.EnumDescriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.getDescriptor().getEnumTypes().get(0);
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.getDescriptor().getEnumTypes().get(0);
         }
     
         private static final MetricType[] VALUES = values();
     
         public static MetricType valueOf(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.EnumValueDescriptor desc) {
    +        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
           if (desc.getType() != getDescriptor()) {
             throw new java.lang.IllegalArgumentException(
               "EnumValueDescriptor is not for this type.");
    @@ -197,7 +216,7 @@ private MetricType(int value) {
     
       public interface LabelPairOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.LabelPair)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * optional string name = 1;
    @@ -213,7 +232,7 @@ public interface LabelPairOrBuilder extends
          * optional string name = 1;
          * @return The bytes for name.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +    com.google.protobuf.ByteString
             getNameBytes();
     
         /**
    @@ -230,19 +249,28 @@ public interface LabelPairOrBuilder extends
          * optional string value = 2;
          * @return The bytes for value.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +    com.google.protobuf.ByteString
             getValueBytes();
       }
       /**
        * Protobuf type {@code io.prometheus.client.LabelPair}
        */
       public static final class LabelPair extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.LabelPair)
           LabelPairOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        LabelPair.class.getName());
    +    }
         // Use LabelPair.newBuilder() to construct.
    -    private LabelPair(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private LabelPair(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private LabelPair() {
    @@ -250,24 +278,17 @@ private LabelPair() {
           value_ = "";
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new LabelPair();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder.class);
         }
     
         private int bitField0_;
    @@ -292,8 +313,8 @@ public java.lang.String getName() {
           if (ref instanceof java.lang.String) {
             return (java.lang.String) ref;
           } else {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs = 
    -            (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        com.google.protobuf.ByteString bs = 
    +            (com.google.protobuf.ByteString) ref;
             java.lang.String s = bs.toStringUtf8();
             if (bs.isValidUtf8()) {
               name_ = s;
    @@ -306,17 +327,17 @@ public java.lang.String getName() {
          * @return The bytes for name.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +    public com.google.protobuf.ByteString
             getNameBytes() {
           java.lang.Object ref = name_;
           if (ref instanceof java.lang.String) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    -            io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +        com.google.protobuf.ByteString b = 
    +            com.google.protobuf.ByteString.copyFromUtf8(
                     (java.lang.String) ref);
             name_ = b;
             return b;
           } else {
    -        return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        return (com.google.protobuf.ByteString) ref;
           }
         }
     
    @@ -341,8 +362,8 @@ public java.lang.String getValue() {
           if (ref instanceof java.lang.String) {
             return (java.lang.String) ref;
           } else {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs = 
    -            (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        com.google.protobuf.ByteString bs = 
    +            (com.google.protobuf.ByteString) ref;
             java.lang.String s = bs.toStringUtf8();
             if (bs.isValidUtf8()) {
               value_ = s;
    @@ -355,17 +376,17 @@ public java.lang.String getValue() {
          * @return The bytes for value.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +    public com.google.protobuf.ByteString
             getValueBytes() {
           java.lang.Object ref = value_;
           if (ref instanceof java.lang.String) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    -            io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +        com.google.protobuf.ByteString b = 
    +            com.google.protobuf.ByteString.copyFromUtf8(
                     (java.lang.String) ref);
             value_ = b;
             return b;
           } else {
    -        return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        return (com.google.protobuf.ByteString) ref;
           }
         }
     
    @@ -381,13 +402,13 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.writeString(output, 1, name_);
    +        com.google.protobuf.GeneratedMessage.writeString(output, 1, name_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.writeString(output, 2, value_);
    +        com.google.protobuf.GeneratedMessage.writeString(output, 2, value_);
           }
           getUnknownFields().writeTo(output);
         }
    @@ -399,10 +420,10 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.computeStringSize(1, name_);
    +        size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.computeStringSize(2, value_);
    +        size += com.google.protobuf.GeneratedMessage.computeStringSize(2, value_);
           }
           size += getUnknownFields().getSerializedSize();
           memoizedSize = size;
    @@ -414,10 +435,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -453,75 +474,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -530,7 +551,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -541,7 +562,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -549,29 +570,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.LabelPair}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
     
           }
    @@ -585,19 +606,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -605,14 +626,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -627,49 +648,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -692,8 +681,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -724,7 +713,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -748,8 +737,8 @@ public boolean hasName() {
           public java.lang.String getName() {
             java.lang.Object ref = name_;
             if (!(ref instanceof java.lang.String)) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs =
    -              (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          com.google.protobuf.ByteString bs =
    +              (com.google.protobuf.ByteString) ref;
               java.lang.String s = bs.toStringUtf8();
               if (bs.isValidUtf8()) {
                 name_ = s;
    @@ -763,17 +752,17 @@ public java.lang.String getName() {
            * optional string name = 1;
            * @return The bytes for name.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +      public com.google.protobuf.ByteString
               getNameBytes() {
             java.lang.Object ref = name_;
             if (ref instanceof String) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +          com.google.protobuf.ByteString b = 
    +              com.google.protobuf.ByteString.copyFromUtf8(
                       (java.lang.String) ref);
               name_ = b;
               return b;
             } else {
    -          return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          return (com.google.protobuf.ByteString) ref;
             }
           }
           /**
    @@ -805,7 +794,7 @@ public Builder clearName() {
            * @return This builder for chaining.
            */
           public Builder setNameBytes(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString value) {
    +          com.google.protobuf.ByteString value) {
             if (value == null) { throw new NullPointerException(); }
             name_ = value;
             bitField0_ |= 0x00000001;
    @@ -828,8 +817,8 @@ public boolean hasValue() {
           public java.lang.String getValue() {
             java.lang.Object ref = value_;
             if (!(ref instanceof java.lang.String)) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs =
    -              (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          com.google.protobuf.ByteString bs =
    +              (com.google.protobuf.ByteString) ref;
               java.lang.String s = bs.toStringUtf8();
               if (bs.isValidUtf8()) {
                 value_ = s;
    @@ -843,17 +832,17 @@ public java.lang.String getValue() {
            * optional string value = 2;
            * @return The bytes for value.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +      public com.google.protobuf.ByteString
               getValueBytes() {
             java.lang.Object ref = value_;
             if (ref instanceof String) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +          com.google.protobuf.ByteString b = 
    +              com.google.protobuf.ByteString.copyFromUtf8(
                       (java.lang.String) ref);
               value_ = b;
               return b;
             } else {
    -          return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          return (com.google.protobuf.ByteString) ref;
             }
           }
           /**
    @@ -885,72 +874,60 @@ public Builder clearValue() {
            * @return This builder for chaining.
            */
           public Builder setValueBytes(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString value) {
    +          com.google.protobuf.ByteString value) {
             if (value == null) { throw new NullPointerException(); }
             value_ = value;
             bitField0_ |= 0x00000002;
             onChanged();
             return this;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.LabelPair)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public LabelPair parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -958,7 +935,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface GaugeOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Gauge)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * optional double value = 1;
    @@ -975,35 +952,37 @@ public interface GaugeOrBuilder extends
        * Protobuf type {@code io.prometheus.client.Gauge}
        */
       public static final class Gauge extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Gauge)
           GaugeOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        Gauge.class.getName());
    +    }
         // Use Gauge.newBuilder() to construct.
    -    private Gauge(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private Gauge(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private Gauge() {
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new Gauge();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.Builder.class);
         }
     
         private int bitField0_;
    @@ -1038,7 +1017,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeDouble(1, value_);
    @@ -1053,7 +1032,7 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(1, value_);
           }
           size += getUnknownFields().getSerializedSize();
    @@ -1066,10 +1045,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -1090,7 +1069,7 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasValue()) {
             hash = (37 * hash) + VALUE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getValue()));
           }
           hash = (29 * hash) + getUnknownFields().hashCode();
    @@ -1098,75 +1077,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -1175,7 +1154,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -1186,7 +1165,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -1194,29 +1173,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Gauge}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.GaugeOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
     
           }
    @@ -1229,19 +1208,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -1249,14 +1228,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -1267,49 +1246,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -1325,8 +1272,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -1352,7 +1299,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -1400,65 +1347,53 @@ public Builder clearValue() {
             onChanged();
             return this;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.Gauge)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public Gauge parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -1466,7 +1401,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface CounterOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Counter)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * optional double value = 1;
    @@ -1488,11 +1423,11 @@ public interface CounterOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
     
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 3;
    @@ -1503,45 +1438,47 @@ public interface CounterOrBuilder extends
          * optional .google.protobuf.Timestamp created_timestamp = 3;
          * @return The createdTimestamp.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp();
    +    com.google.protobuf.Timestamp getCreatedTimestamp();
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 3;
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder();
    +    com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder();
       }
       /**
        * Protobuf type {@code io.prometheus.client.Counter}
        */
       public static final class Counter extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Counter)
           CounterOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        Counter.class.getName());
    +    }
         // Use Counter.newBuilder() to construct.
    -    private Counter(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private Counter(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private Counter() {
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new Counter();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.Builder.class);
         }
     
         private int bitField0_;
    @@ -1565,7 +1502,7 @@ public double getValue() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          * @return Whether the exemplar field is set.
    @@ -1579,19 +1516,19 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
    +    private com.google.protobuf.Timestamp createdTimestamp_;
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 3;
          * @return Whether the createdTimestamp field is set.
    @@ -1605,15 +1542,15 @@ public boolean hasCreatedTimestamp() {
          * @return The createdTimestamp.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public com.google.protobuf.Timestamp getCreatedTimestamp() {
    +      return createdTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      return createdTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -1628,7 +1565,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeDouble(1, value_);
    @@ -1649,15 +1586,15 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(1, value_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(2, getExemplar());
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(3, getCreatedTimestamp());
           }
           size += getUnknownFields().getSerializedSize();
    @@ -1670,10 +1607,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -1704,7 +1641,7 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasValue()) {
             hash = (37 * hash) + VALUE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getValue()));
           }
           if (hasExemplar()) {
    @@ -1720,75 +1657,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -1797,7 +1734,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -1808,7 +1745,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -1816,34 +1753,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Counter}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.CounterOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +        if (com.google.protobuf.GeneratedMessage
                     .alwaysUseFieldBuilders) {
               getExemplarFieldBuilder();
               getCreatedTimestampFieldBuilder();
    @@ -1868,19 +1805,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -1888,14 +1825,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -1918,49 +1855,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -1982,8 +1887,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -2023,7 +1928,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -2072,9 +1977,9 @@ public Builder clearValue() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar exemplar_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar exemplar_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            * @return Whether the exemplar field is set.
    @@ -2086,9 +1991,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -2096,7 +2001,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -2113,7 +2018,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -2126,11 +2031,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -2160,7 +2065,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return getExemplarFieldBuilder().getBuilder();
    @@ -2168,23 +2073,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder> 
               getExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
    -          exemplarBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder>(
    +          exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -2193,9 +2098,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return exemplarBuilder_;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> createdTimestampBuilder_;
    +      private com.google.protobuf.Timestamp createdTimestamp_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createdTimestampBuilder_;
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            * @return Whether the createdTimestamp field is set.
    @@ -2207,9 +2112,9 @@ public boolean hasCreatedTimestamp() {
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            * @return The createdTimestamp.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
    +      public com.google.protobuf.Timestamp getCreatedTimestamp() {
             if (createdTimestampBuilder_ == null) {
    -          return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +          return createdTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
             } else {
               return createdTimestampBuilder_.getMessage();
             }
    @@ -2217,7 +2122,7 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCrea
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
    -      public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
    +      public Builder setCreatedTimestamp(com.google.protobuf.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -2234,7 +2139,7 @@ public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_proto
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
           public Builder setCreatedTimestamp(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder builderForValue) {
    +          com.google.protobuf.Timestamp.Builder builderForValue) {
             if (createdTimestampBuilder_ == null) {
               createdTimestamp_ = builderForValue.build();
             } else {
    @@ -2247,11 +2152,11 @@ public Builder setCreatedTimestamp(
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
    -      public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
    +      public Builder mergeCreatedTimestamp(com.google.protobuf.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 createdTimestamp_ != null &&
    -            createdTimestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance()) {
    +            createdTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
                 getCreatedTimestampBuilder().mergeFrom(value);
               } else {
                 createdTimestamp_ = value;
    @@ -2281,7 +2186,7 @@ public Builder clearCreatedTimestamp() {
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder getCreatedTimestampBuilder() {
    +      public com.google.protobuf.Timestamp.Builder getCreatedTimestampBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return getCreatedTimestampFieldBuilder().getBuilder();
    @@ -2289,23 +2194,23 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
             if (createdTimestampBuilder_ != null) {
               return createdTimestampBuilder_.getMessageOrBuilder();
             } else {
               return createdTimestamp_ == null ?
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +              com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
             }
           }
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 3;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
               getCreatedTimestampFieldBuilder() {
             if (createdTimestampBuilder_ == null) {
    -          createdTimestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder>(
    +          createdTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                       getCreatedTimestamp(),
                       getParentForChildren(),
                       isClean());
    @@ -2313,65 +2218,53 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilde
             }
             return createdTimestampBuilder_;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.Counter)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public Counter parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2379,7 +2272,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface QuantileOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Quantile)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * optional double quantile = 1;
    @@ -2407,35 +2300,37 @@ public interface QuantileOrBuilder extends
        * Protobuf type {@code io.prometheus.client.Quantile}
        */
       public static final class Quantile extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Quantile)
           QuantileOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        Quantile.class.getName());
    +    }
         // Use Quantile.newBuilder() to construct.
    -    private Quantile(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private Quantile(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private Quantile() {
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new Quantile();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder.class);
         }
     
         private int bitField0_;
    @@ -2489,7 +2384,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeDouble(1, quantile_);
    @@ -2507,11 +2402,11 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(1, quantile_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(2, value_);
           }
           size += getUnknownFields().getSerializedSize();
    @@ -2524,10 +2419,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile) obj;
     
           if (hasQuantile() != other.hasQuantile()) return false;
           if (hasQuantile()) {
    @@ -2554,12 +2449,12 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasQuantile()) {
             hash = (37 * hash) + QUANTILE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getQuantile()));
           }
           if (hasValue()) {
             hash = (37 * hash) + VALUE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getValue()));
           }
           hash = (29 * hash) + getUnknownFields().hashCode();
    @@ -2567,75 +2462,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -2644,7 +2539,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -2655,7 +2550,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -2663,29 +2558,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Quantile}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.QuantileOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
     
           }
    @@ -2699,19 +2594,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -2719,14 +2614,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -2741,49 +2636,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.getDefaultInstance()) return this;
             if (other.hasQuantile()) {
               setQuantile(other.getQuantile());
             }
    @@ -2802,8 +2665,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -2834,7 +2697,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -2922,65 +2785,53 @@ public Builder clearValue() {
             onChanged();
             return this;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.Quantile)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public Quantile parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2988,7 +2839,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface SummaryOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Summary)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * optional uint64 sample_count = 1;
    @@ -3015,12 +2866,12 @@ public interface SummaryOrBuilder extends
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getQuantileList();
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getQuantile(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile getQuantile(int index);
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    @@ -3028,12 +2879,12 @@ public interface SummaryOrBuilder extends
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getQuantileOrBuilderList();
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.QuantileOrBuilder getQuantileOrBuilder(
             int index);
     
         /**
    @@ -3045,46 +2896,48 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          * optional .google.protobuf.Timestamp created_timestamp = 4;
          * @return The createdTimestamp.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp();
    +    com.google.protobuf.Timestamp getCreatedTimestamp();
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 4;
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder();
    +    com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder();
       }
       /**
        * Protobuf type {@code io.prometheus.client.Summary}
        */
       public static final class Summary extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Summary)
           SummaryOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        Summary.class.getName());
    +    }
         // Use Summary.newBuilder() to construct.
    -    private Summary(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private Summary(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private Summary() {
           quantile_ = java.util.Collections.emptyList();
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new Summary();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.Builder.class);
         }
     
         private int bitField0_;
    @@ -3128,19 +2981,19 @@ public double getSampleSum() {
     
         public static final int QUANTILE_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List quantile_;
    +    private java.util.List quantile_;
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public java.util.List getQuantileList() {
    +    public java.util.List getQuantileList() {
           return quantile_;
         }
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getQuantileOrBuilderList() {
           return quantile_;
         }
    @@ -3155,20 +3008,20 @@ public int getQuantileCount() {
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getQuantile(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile getQuantile(int index) {
           return quantile_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.QuantileOrBuilder getQuantileOrBuilder(
             int index) {
           return quantile_.get(index);
         }
     
         public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
    +    private com.google.protobuf.Timestamp createdTimestamp_;
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 4;
          * @return Whether the createdTimestamp field is set.
    @@ -3182,15 +3035,15 @@ public boolean hasCreatedTimestamp() {
          * @return The createdTimestamp.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public com.google.protobuf.Timestamp getCreatedTimestamp() {
    +      return createdTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      return createdTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -3205,7 +3058,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeUInt64(1, sampleCount_);
    @@ -3229,19 +3082,19 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeUInt64Size(1, sampleCount_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(2, sampleSum_);
           }
           for (int i = 0; i < quantile_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(3, quantile_.get(i));
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(4, getCreatedTimestamp());
           }
           size += getUnknownFields().getSerializedSize();
    @@ -3254,10 +3107,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -3290,12 +3143,12 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasSampleCount()) {
             hash = (37 * hash) + SAMPLE_COUNT_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 getSampleCount());
           }
           if (hasSampleSum()) {
             hash = (37 * hash) + SAMPLE_SUM_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getSampleSum()));
           }
           if (getQuantileCount() > 0) {
    @@ -3311,75 +3164,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -3388,7 +3241,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -3399,7 +3252,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -3407,34 +3260,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Summary}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.SummaryOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +        if (com.google.protobuf.GeneratedMessage
                     .alwaysUseFieldBuilders) {
               getQuantileFieldBuilder();
               getCreatedTimestampFieldBuilder();
    @@ -3462,19 +3315,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -3482,15 +3335,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary result) {
             if (quantileBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0)) {
                 quantile_ = java.util.Collections.unmodifiableList(quantile_);
    @@ -3502,7 +3355,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -3523,49 +3376,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -3591,7 +3412,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   quantile_ = other.quantile_;
                   bitField0_ = (bitField0_ & ~0x00000004);
                   quantileBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                        getQuantileFieldBuilder() : null;
                 } else {
                   quantileBuilder_.addAllMessages(other.quantile_);
    @@ -3613,8 +3434,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -3638,9 +3459,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.parser(),
                             extensionRegistry);
                     if (quantileBuilder_ == null) {
                       ensureQuantileIsMutable();
    @@ -3665,7 +3486,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -3754,22 +3575,22 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List quantile_ =
    +      private java.util.List quantile_ =
             java.util.Collections.emptyList();
           private void ensureQuantileIsMutable() {
             if (!((bitField0_ & 0x00000004) != 0)) {
    -          quantile_ = new java.util.ArrayList(quantile_);
    +          quantile_ = new java.util.ArrayList(quantile_);
               bitField0_ |= 0x00000004;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder> quantileBuilder_;
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.QuantileOrBuilder> quantileBuilder_;
     
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List getQuantileList() {
    +      public java.util.List getQuantileList() {
             if (quantileBuilder_ == null) {
               return java.util.Collections.unmodifiableList(quantile_);
             } else {
    @@ -3789,7 +3610,7 @@ public int getQuantileCount() {
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile getQuantile(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile getQuantile(int index) {
             if (quantileBuilder_ == null) {
               return quantile_.get(index);
             } else {
    @@ -3800,7 +3621,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder setQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3817,7 +3638,7 @@ public Builder setQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder setQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.set(index, builderForValue.build());
    @@ -3830,7 +3651,7 @@ public Builder setQuantile(
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile value) {
    +      public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3847,7 +3668,7 @@ public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3864,7 +3685,7 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.add(builderForValue.build());
    @@ -3878,7 +3699,7 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.add(index, builderForValue.build());
    @@ -3892,10 +3713,10 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addAllQuantile(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +          com.google.protobuf.AbstractMessageLite.Builder.addAll(
                   values, quantile_);
               onChanged();
             } else {
    @@ -3932,14 +3753,14 @@ public Builder removeQuantile(int index) {
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder getQuantileBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder getQuantileBuilder(
               int index) {
             return getQuantileFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.QuantileOrBuilder getQuantileOrBuilder(
               int index) {
             if (quantileBuilder_ == null) {
               return quantile_.get(index);  } else {
    @@ -3949,7 +3770,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getQuantileOrBuilderList() {
             if (quantileBuilder_ != null) {
               return quantileBuilder_.getMessageOrBuilderList();
    @@ -3960,31 +3781,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder addQuantileBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder addQuantileBuilder() {
             return getQuantileFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder addQuantileBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder addQuantileBuilder(
               int index) {
             return getQuantileFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getQuantileBuilderList() {
             return getQuantileFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder> 
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.QuantileOrBuilder> 
               getQuantileFieldBuilder() {
             if (quantileBuilder_ == null) {
    -          quantileBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.QuantileOrBuilder>(
    +          quantileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.QuantileOrBuilder>(
                       quantile_,
                       ((bitField0_ & 0x00000004) != 0),
                       getParentForChildren(),
    @@ -3994,9 +3815,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return quantileBuilder_;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> createdTimestampBuilder_;
    +      private com.google.protobuf.Timestamp createdTimestamp_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createdTimestampBuilder_;
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            * @return Whether the createdTimestamp field is set.
    @@ -4008,9 +3829,9 @@ public boolean hasCreatedTimestamp() {
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            * @return The createdTimestamp.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
    +      public com.google.protobuf.Timestamp getCreatedTimestamp() {
             if (createdTimestampBuilder_ == null) {
    -          return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +          return createdTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
             } else {
               return createdTimestampBuilder_.getMessage();
             }
    @@ -4018,7 +3839,7 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCrea
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
    -      public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
    +      public Builder setCreatedTimestamp(com.google.protobuf.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -4035,7 +3856,7 @@ public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_proto
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
           public Builder setCreatedTimestamp(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder builderForValue) {
    +          com.google.protobuf.Timestamp.Builder builderForValue) {
             if (createdTimestampBuilder_ == null) {
               createdTimestamp_ = builderForValue.build();
             } else {
    @@ -4048,11 +3869,11 @@ public Builder setCreatedTimestamp(
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
    -      public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
    +      public Builder mergeCreatedTimestamp(com.google.protobuf.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 createdTimestamp_ != null &&
    -            createdTimestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance()) {
    +            createdTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
                 getCreatedTimestampBuilder().mergeFrom(value);
               } else {
                 createdTimestamp_ = value;
    @@ -4082,7 +3903,7 @@ public Builder clearCreatedTimestamp() {
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder getCreatedTimestampBuilder() {
    +      public com.google.protobuf.Timestamp.Builder getCreatedTimestampBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getCreatedTimestampFieldBuilder().getBuilder();
    @@ -4090,23 +3911,23 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
             if (createdTimestampBuilder_ != null) {
               return createdTimestampBuilder_.getMessageOrBuilder();
             } else {
               return createdTimestamp_ == null ?
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +              com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
             }
           }
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 4;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
               getCreatedTimestampFieldBuilder() {
             if (createdTimestampBuilder_ == null) {
    -          createdTimestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder>(
    +          createdTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                       getCreatedTimestamp(),
                       getParentForChildren(),
                       isClean());
    @@ -4114,65 +3935,53 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilde
             }
             return createdTimestampBuilder_;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.Summary)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public Summary parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -4180,7 +3989,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface UntypedOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Untyped)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * optional double value = 1;
    @@ -4197,35 +4006,37 @@ public interface UntypedOrBuilder extends
        * Protobuf type {@code io.prometheus.client.Untyped}
        */
       public static final class Untyped extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Untyped)
           UntypedOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        Untyped.class.getName());
    +    }
         // Use Untyped.newBuilder() to construct.
    -    private Untyped(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private Untyped(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private Untyped() {
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new Untyped();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.Builder.class);
         }
     
         private int bitField0_;
    @@ -4260,7 +4071,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeDouble(1, value_);
    @@ -4275,7 +4086,7 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(1, value_);
           }
           size += getUnknownFields().getSerializedSize();
    @@ -4288,10 +4099,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -4312,7 +4123,7 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasValue()) {
             hash = (37 * hash) + VALUE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getValue()));
           }
           hash = (29 * hash) + getUnknownFields().hashCode();
    @@ -4320,75 +4131,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -4397,7 +4208,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -4408,7 +4219,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -4416,29 +4227,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Untyped}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.UntypedOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
     
           }
    @@ -4451,19 +4262,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -4471,14 +4282,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -4489,49 +4300,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -4547,8 +4326,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -4574,7 +4353,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -4622,65 +4401,53 @@ public Builder clearValue() {
             onChanged();
             return this;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.Untyped)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public Untyped parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -4688,7 +4455,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface HistogramOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Histogram)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * optional uint64 sample_count = 1;
    @@ -4738,7 +4505,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketList();
         /**
          * 
    @@ -4747,7 +4514,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getBucket(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket getBucket(int index);
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -4763,7 +4530,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketOrBuilderList();
         /**
          * 
    @@ -4772,7 +4539,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index);
     
         /**
    @@ -4784,11 +4551,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          * optional .google.protobuf.Timestamp created_timestamp = 15;
          * @return The createdTimestamp.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp();
    +    com.google.protobuf.Timestamp getCreatedTimestamp();
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 15;
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder();
    +    com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder();
     
         /**
          * 
    @@ -4881,7 +4648,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanList();
         /**
          * 
    @@ -4890,7 +4657,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getNegativeSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan getNegativeSpan(int index);
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -4906,7 +4673,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanOrBuilderList();
         /**
          * 
    @@ -4915,7 +4682,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index);
     
         /**
    @@ -4992,7 +4759,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanList();
         /**
          * 
    @@ -5004,7 +4771,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getPositiveSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan getPositiveSpan(int index);
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5026,7 +4793,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanOrBuilderList();
         /**
          * 
    @@ -5038,7 +4805,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index);
     
         /**
    @@ -5112,7 +4879,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsList();
         /**
          * 
    @@ -5121,7 +4888,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplars(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getExemplars(int index);
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -5137,7 +4904,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsOrBuilderList();
         /**
          * 
    @@ -5146,19 +4913,28 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index);
       }
       /**
        * Protobuf type {@code io.prometheus.client.Histogram}
        */
       public static final class Histogram extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Histogram)
           HistogramOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        Histogram.class.getName());
    +    }
         // Use Histogram.newBuilder() to construct.
    -    private Histogram(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private Histogram(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private Histogram() {
    @@ -5172,24 +4948,17 @@ private Histogram() {
           exemplars_ = java.util.Collections.emptyList();
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new Histogram();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.Builder.class);
         }
     
         private int bitField0_;
    @@ -5260,7 +5029,7 @@ public double getSampleSum() {
     
         public static final int BUCKET_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List bucket_;
    +    private java.util.List bucket_;
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -5269,7 +5038,7 @@ public double getSampleSum() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List getBucketList() {
    +    public java.util.List getBucketList() {
           return bucket_;
         }
         /**
    @@ -5280,7 +5049,7 @@ public java.util.Listrepeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getBucketOrBuilderList() {
           return bucket_;
         }
    @@ -5303,7 +5072,7 @@ public int getBucketCount() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getBucket(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket getBucket(int index) {
           return bucket_.get(index);
         }
         /**
    @@ -5314,13 +5083,13 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index) {
           return bucket_.get(index);
         }
     
         public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 15;
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
    +    private com.google.protobuf.Timestamp createdTimestamp_;
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 15;
          * @return Whether the createdTimestamp field is set.
    @@ -5334,15 +5103,15 @@ public boolean hasCreatedTimestamp() {
          * @return The createdTimestamp.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public com.google.protobuf.Timestamp getCreatedTimestamp() {
    +      return createdTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 15;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    -      return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +    public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      return createdTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
         }
     
         public static final int SCHEMA_FIELD_NUMBER = 5;
    @@ -5463,7 +5232,7 @@ public double getZeroCountFloat() {
     
         public static final int NEGATIVE_SPAN_FIELD_NUMBER = 9;
         @SuppressWarnings("serial")
    -    private java.util.List negativeSpan_;
    +    private java.util.List negativeSpan_;
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -5472,7 +5241,7 @@ public double getZeroCountFloat() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List getNegativeSpanList() {
    +    public java.util.List getNegativeSpanList() {
           return negativeSpan_;
         }
         /**
    @@ -5483,7 +5252,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getNegativeSpanOrBuilderList() {
           return negativeSpan_;
         }
    @@ -5506,7 +5275,7 @@ public int getNegativeSpanCount() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getNegativeSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan getNegativeSpan(int index) {
           return negativeSpan_.get(index);
         }
         /**
    @@ -5517,14 +5286,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index) {
           return negativeSpan_.get(index);
         }
     
         public static final int NEGATIVE_DELTA_FIELD_NUMBER = 10;
         @SuppressWarnings("serial")
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.LongList negativeDelta_ =
    +    private com.google.protobuf.Internal.LongList negativeDelta_ =
             emptyLongList();
         /**
          * 
    @@ -5571,7 +5340,7 @@ public long getNegativeDelta(int index) {
     
         public static final int NEGATIVE_COUNT_FIELD_NUMBER = 11;
         @SuppressWarnings("serial")
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.DoubleList negativeCount_ =
    +    private com.google.protobuf.Internal.DoubleList negativeCount_ =
             emptyDoubleList();
         /**
          * 
    @@ -5612,7 +5381,7 @@ public double getNegativeCount(int index) {
     
         public static final int POSITIVE_SPAN_FIELD_NUMBER = 12;
         @SuppressWarnings("serial")
    -    private java.util.List positiveSpan_;
    +    private java.util.List positiveSpan_;
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5624,7 +5393,7 @@ public double getNegativeCount(int index) {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List getPositiveSpanList() {
    +    public java.util.List getPositiveSpanList() {
           return positiveSpan_;
         }
         /**
    @@ -5638,7 +5407,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getPositiveSpanOrBuilderList() {
           return positiveSpan_;
         }
    @@ -5667,7 +5436,7 @@ public int getPositiveSpanCount() {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getPositiveSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan getPositiveSpan(int index) {
           return positiveSpan_.get(index);
         }
         /**
    @@ -5681,14 +5450,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index) {
           return positiveSpan_.get(index);
         }
     
         public static final int POSITIVE_DELTA_FIELD_NUMBER = 13;
         @SuppressWarnings("serial")
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.LongList positiveDelta_ =
    +    private com.google.protobuf.Internal.LongList positiveDelta_ =
             emptyLongList();
         /**
          * 
    @@ -5735,7 +5504,7 @@ public long getPositiveDelta(int index) {
     
         public static final int POSITIVE_COUNT_FIELD_NUMBER = 14;
         @SuppressWarnings("serial")
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.DoubleList positiveCount_ =
    +    private com.google.protobuf.Internal.DoubleList positiveCount_ =
             emptyDoubleList();
         /**
          * 
    @@ -5776,7 +5545,7 @@ public double getPositiveCount(int index) {
     
         public static final int EXEMPLARS_FIELD_NUMBER = 16;
         @SuppressWarnings("serial")
    -    private java.util.List exemplars_;
    +    private java.util.List exemplars_;
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -5785,7 +5554,7 @@ public double getPositiveCount(int index) {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List getExemplarsList() {
    +    public java.util.List getExemplarsList() {
           return exemplars_;
         }
         /**
    @@ -5796,7 +5565,7 @@ public java.util.Listrepeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getExemplarsOrBuilderList() {
           return exemplars_;
         }
    @@ -5819,7 +5588,7 @@ public int getExemplarsCount() {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplars(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getExemplars(int index) {
           return exemplars_.get(index);
         }
         /**
    @@ -5830,7 +5599,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index) {
           return exemplars_.get(index);
         }
    @@ -5847,7 +5616,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeUInt64(1, sampleCount_);
    @@ -5907,45 +5676,45 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeUInt64Size(1, sampleCount_);
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(2, sampleSum_);
           }
           for (int i = 0; i < bucket_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(3, bucket_.get(i));
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(4, sampleCountFloat_);
           }
           if (((bitField0_ & 0x00000010) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeSInt32Size(5, schema_);
           }
           if (((bitField0_ & 0x00000020) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(6, zeroThreshold_);
           }
           if (((bitField0_ & 0x00000040) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeUInt64Size(7, zeroCount_);
           }
           if (((bitField0_ & 0x00000080) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(8, zeroCountFloat_);
           }
           for (int i = 0; i < negativeSpan_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(9, negativeSpan_.get(i));
           }
           {
             int dataSize = 0;
             for (int i = 0; i < negativeDelta_.size(); i++) {
    -          dataSize += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +          dataSize += com.google.protobuf.CodedOutputStream
                 .computeSInt64SizeNoTag(negativeDelta_.getLong(i));
             }
             size += dataSize;
    @@ -5958,13 +5727,13 @@ public int getSerializedSize() {
             size += 1 * getNegativeCountList().size();
           }
           for (int i = 0; i < positiveSpan_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(12, positiveSpan_.get(i));
           }
           {
             int dataSize = 0;
             for (int i = 0; i < positiveDelta_.size(); i++) {
    -          dataSize += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +          dataSize += com.google.protobuf.CodedOutputStream
                 .computeSInt64SizeNoTag(positiveDelta_.getLong(i));
             }
             size += dataSize;
    @@ -5977,11 +5746,11 @@ public int getSerializedSize() {
             size += 1 * getPositiveCountList().size();
           }
           if (((bitField0_ & 0x00000008) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(15, getCreatedTimestamp());
           }
           for (int i = 0; i < exemplars_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(16, exemplars_.get(i));
           }
           size += getUnknownFields().getSerializedSize();
    @@ -5994,10 +5763,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -6072,17 +5841,17 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasSampleCount()) {
             hash = (37 * hash) + SAMPLE_COUNT_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 getSampleCount());
           }
           if (hasSampleCountFloat()) {
             hash = (37 * hash) + SAMPLE_COUNT_FLOAT_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getSampleCountFloat()));
           }
           if (hasSampleSum()) {
             hash = (37 * hash) + SAMPLE_SUM_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getSampleSum()));
           }
           if (getBucketCount() > 0) {
    @@ -6099,17 +5868,17 @@ public int hashCode() {
           }
           if (hasZeroThreshold()) {
             hash = (37 * hash) + ZERO_THRESHOLD_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getZeroThreshold()));
           }
           if (hasZeroCount()) {
             hash = (37 * hash) + ZERO_COUNT_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 getZeroCount());
           }
           if (hasZeroCountFloat()) {
             hash = (37 * hash) + ZERO_COUNT_FLOAT_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getZeroCountFloat()));
           }
           if (getNegativeSpanCount() > 0) {
    @@ -6145,75 +5914,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -6222,7 +5991,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -6233,7 +6002,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -6241,34 +6010,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Histogram}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.HistogramOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +        if (com.google.protobuf.GeneratedMessage
                     .alwaysUseFieldBuilders) {
               getBucketFieldBuilder();
               getCreatedTimestampFieldBuilder();
    @@ -6329,19 +6098,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -6349,15 +6118,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram result) {
             if (bucketBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 bucket_ = java.util.Collections.unmodifiableList(bucket_);
    @@ -6396,7 +6165,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -6453,49 +6222,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -6524,7 +6261,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   bucket_ = other.bucket_;
                   bitField0_ = (bitField0_ & ~0x00000008);
                   bucketBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                        getBucketFieldBuilder() : null;
                 } else {
                   bucketBuilder_.addAllMessages(other.bucket_);
    @@ -6565,7 +6302,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   negativeSpan_ = other.negativeSpan_;
                   bitField0_ = (bitField0_ & ~0x00000200);
                   negativeSpanBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                        getNegativeSpanFieldBuilder() : null;
                 } else {
                   negativeSpanBuilder_.addAllMessages(other.negativeSpan_);
    @@ -6613,7 +6350,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   positiveSpan_ = other.positiveSpan_;
                   bitField0_ = (bitField0_ & ~0x00001000);
                   positiveSpanBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                        getPositiveSpanFieldBuilder() : null;
                 } else {
                   positiveSpanBuilder_.addAllMessages(other.positiveSpan_);
    @@ -6661,7 +6398,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   exemplars_ = other.exemplars_;
                   bitField0_ = (bitField0_ & ~0x00008000);
                   exemplarsBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                        getExemplarsFieldBuilder() : null;
                 } else {
                   exemplarsBuilder_.addAllMessages(other.exemplars_);
    @@ -6680,8 +6417,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -6705,9 +6442,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.parser(),
                             extensionRegistry);
                     if (bucketBuilder_ == null) {
                       ensureBucketIsMutable();
    @@ -6743,9 +6480,9 @@ public Builder mergeFrom(
                     break;
                   } // case 65
                   case 74: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (negativeSpanBuilder_ == null) {
                       ensureNegativeSpanIsMutable();
    @@ -6789,9 +6526,9 @@ public Builder mergeFrom(
                     break;
                   } // case 90
                   case 98: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (positiveSpanBuilder_ == null) {
                       ensurePositiveSpanIsMutable();
    @@ -6842,9 +6579,9 @@ public Builder mergeFrom(
                     break;
                   } // case 122
                   case 130: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.parser(),
                             extensionRegistry);
                     if (exemplarsBuilder_ == null) {
                       ensureExemplarsIsMutable();
    @@ -6862,7 +6599,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -7007,17 +6744,17 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List bucket_ =
    +      private java.util.List bucket_ =
             java.util.Collections.emptyList();
           private void ensureBucketIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          bucket_ = new java.util.ArrayList(bucket_);
    +          bucket_ = new java.util.ArrayList(bucket_);
               bitField0_ |= 0x00000008;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder> bucketBuilder_;
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketOrBuilder> bucketBuilder_;
     
           /**
            * 
    @@ -7026,7 +6763,7 @@ private void ensureBucketIsMutable() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List getBucketList() {
    +      public java.util.List getBucketList() {
             if (bucketBuilder_ == null) {
               return java.util.Collections.unmodifiableList(bucket_);
             } else {
    @@ -7054,7 +6791,7 @@ public int getBucketCount() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getBucket(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket getBucket(int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);
             } else {
    @@ -7069,7 +6806,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7090,7 +6827,7 @@ public Builder setBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.set(index, builderForValue.build());
    @@ -7107,7 +6844,7 @@ public Builder setBucket(
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket value) {
    +      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7128,7 +6865,7 @@ public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7149,7 +6886,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(builderForValue.build());
    @@ -7167,7 +6904,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(index, builderForValue.build());
    @@ -7185,10 +6922,10 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addAllBucket(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +          com.google.protobuf.AbstractMessageLite.Builder.addAll(
                   values, bucket_);
               onChanged();
             } else {
    @@ -7237,7 +6974,7 @@ public Builder removeBucket(int index) {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder getBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder getBucketBuilder(
               int index) {
             return getBucketFieldBuilder().getBuilder(index);
           }
    @@ -7248,7 +6985,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder getBucketOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketOrBuilder getBucketOrBuilder(
               int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);  } else {
    @@ -7262,7 +6999,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketOrBuilderList() {
             if (bucketBuilder_ != null) {
               return bucketBuilder_.getMessageOrBuilderList();
    @@ -7277,9 +7014,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder addBucketBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder addBucketBuilder() {
             return getBucketFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7288,10 +7025,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder addBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder addBucketBuilder(
               int index) {
             return getBucketFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7300,16 +7037,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketBuilderList() {
             return getBucketFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder> 
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketOrBuilder> 
               getBucketFieldBuilder() {
             if (bucketBuilder_ == null) {
    -          bucketBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder>(
    +          bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketOrBuilder>(
                       bucket_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -7319,9 +7056,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return bucketBuilder_;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp createdTimestamp_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> createdTimestampBuilder_;
    +      private com.google.protobuf.Timestamp createdTimestamp_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createdTimestampBuilder_;
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            * @return Whether the createdTimestamp field is set.
    @@ -7333,9 +7070,9 @@ public boolean hasCreatedTimestamp() {
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            * @return The createdTimestamp.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCreatedTimestamp() {
    +      public com.google.protobuf.Timestamp getCreatedTimestamp() {
             if (createdTimestampBuilder_ == null) {
    -          return createdTimestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +          return createdTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
             } else {
               return createdTimestampBuilder_.getMessage();
             }
    @@ -7343,7 +7080,7 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getCrea
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
    -      public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
    +      public Builder setCreatedTimestamp(com.google.protobuf.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7360,7 +7097,7 @@ public Builder setCreatedTimestamp(io.prometheus.metrics.shaded.com_google_proto
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
           public Builder setCreatedTimestamp(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder builderForValue) {
    +          com.google.protobuf.Timestamp.Builder builderForValue) {
             if (createdTimestampBuilder_ == null) {
               createdTimestamp_ = builderForValue.build();
             } else {
    @@ -7373,11 +7110,11 @@ public Builder setCreatedTimestamp(
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
    -      public Builder mergeCreatedTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
    +      public Builder mergeCreatedTimestamp(com.google.protobuf.Timestamp value) {
             if (createdTimestampBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 createdTimestamp_ != null &&
    -            createdTimestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance()) {
    +            createdTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
                 getCreatedTimestampBuilder().mergeFrom(value);
               } else {
                 createdTimestamp_ = value;
    @@ -7407,7 +7144,7 @@ public Builder clearCreatedTimestamp() {
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder getCreatedTimestampBuilder() {
    +      public com.google.protobuf.Timestamp.Builder getCreatedTimestampBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
             return getCreatedTimestampFieldBuilder().getBuilder();
    @@ -7415,23 +7152,23 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getCreatedTimestampOrBuilder() {
    +      public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
             if (createdTimestampBuilder_ != null) {
               return createdTimestampBuilder_.getMessageOrBuilder();
             } else {
               return createdTimestamp_ == null ?
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : createdTimestamp_;
    +              com.google.protobuf.Timestamp.getDefaultInstance() : createdTimestamp_;
             }
           }
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
               getCreatedTimestampFieldBuilder() {
             if (createdTimestampBuilder_ == null) {
    -          createdTimestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder>(
    +          createdTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                       getCreatedTimestamp(),
                       getParentForChildren(),
                       isClean());
    @@ -7680,17 +7417,17 @@ public Builder clearZeroCountFloat() {
             return this;
           }
     
    -      private java.util.List negativeSpan_ =
    +      private java.util.List negativeSpan_ =
             java.util.Collections.emptyList();
           private void ensureNegativeSpanIsMutable() {
             if (!((bitField0_ & 0x00000200) != 0)) {
    -          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
    +          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
               bitField0_ |= 0x00000200;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
     
           /**
            * 
    @@ -7699,7 +7436,7 @@ private void ensureNegativeSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List getNegativeSpanList() {
    +      public java.util.List getNegativeSpanList() {
             if (negativeSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(negativeSpan_);
             } else {
    @@ -7727,7 +7464,7 @@ public int getNegativeSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getNegativeSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan getNegativeSpan(int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);
             } else {
    @@ -7742,7 +7479,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7763,7 +7500,7 @@ public Builder setNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.set(index, builderForValue.build());
    @@ -7780,7 +7517,7 @@ public Builder setNegativeSpan(
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
    +      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7801,7 +7538,7 @@ public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7822,7 +7559,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(builderForValue.build());
    @@ -7840,7 +7577,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(index, builderForValue.build());
    @@ -7858,10 +7595,10 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addAllNegativeSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +          com.google.protobuf.AbstractMessageLite.Builder.addAll(
                   values, negativeSpan_);
               onChanged();
             } else {
    @@ -7910,7 +7647,7 @@ public Builder removeNegativeSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
               int index) {
             return getNegativeSpanFieldBuilder().getBuilder(index);
           }
    @@ -7921,7 +7658,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
               int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);  } else {
    @@ -7935,7 +7672,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanOrBuilderList() {
             if (negativeSpanBuilder_ != null) {
               return negativeSpanBuilder_.getMessageOrBuilderList();
    @@ -7950,9 +7687,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
             return getNegativeSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7961,10 +7698,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
               int index) {
             return getNegativeSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7973,16 +7710,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanBuilderList() {
             return getNegativeSpanFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder> 
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder> 
               getNegativeSpanFieldBuilder() {
             if (negativeSpanBuilder_ == null) {
    -          negativeSpanBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder>(
    +          negativeSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder>(
                       negativeSpan_,
                       ((bitField0_ & 0x00000200) != 0),
                       getParentForChildren(),
    @@ -7992,7 +7729,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return negativeSpanBuilder_;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.LongList negativeDelta_ = emptyLongList();
    +      private com.google.protobuf.Internal.LongList negativeDelta_ = emptyLongList();
           private void ensureNegativeDeltaIsMutable() {
             if (!negativeDelta_.isModifiable()) {
               negativeDelta_ = makeMutableCopy(negativeDelta_);
    @@ -8095,7 +7832,7 @@ public Builder addNegativeDelta(long value) {
           public Builder addAllNegativeDelta(
               java.lang.Iterable values) {
             ensureNegativeDeltaIsMutable();
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +        com.google.protobuf.AbstractMessageLite.Builder.addAll(
                 values, negativeDelta_);
             bitField0_ |= 0x00000400;
             onChanged();
    @@ -8118,7 +7855,7 @@ public Builder clearNegativeDelta() {
             return this;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.DoubleList negativeCount_ = emptyDoubleList();
    +      private com.google.protobuf.Internal.DoubleList negativeCount_ = emptyDoubleList();
           private void ensureNegativeCountIsMutable() {
             if (!negativeCount_.isModifiable()) {
               negativeCount_ = makeMutableCopy(negativeCount_);
    @@ -8215,7 +7952,7 @@ public Builder addNegativeCount(double value) {
           public Builder addAllNegativeCount(
               java.lang.Iterable values) {
             ensureNegativeCountIsMutable();
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +        com.google.protobuf.AbstractMessageLite.Builder.addAll(
                 values, negativeCount_);
             bitField0_ |= 0x00000800;
             onChanged();
    @@ -8236,17 +7973,17 @@ public Builder clearNegativeCount() {
             return this;
           }
     
    -      private java.util.List positiveSpan_ =
    +      private java.util.List positiveSpan_ =
             java.util.Collections.emptyList();
           private void ensurePositiveSpanIsMutable() {
             if (!((bitField0_ & 0x00001000) != 0)) {
    -          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
    +          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
               bitField0_ |= 0x00001000;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
     
           /**
            * 
    @@ -8258,7 +7995,7 @@ private void ensurePositiveSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List getPositiveSpanList() {
    +      public java.util.List getPositiveSpanList() {
             if (positiveSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(positiveSpan_);
             } else {
    @@ -8292,7 +8029,7 @@ public int getPositiveSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getPositiveSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan getPositiveSpan(int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);
             } else {
    @@ -8310,7 +8047,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8334,7 +8071,7 @@ public Builder setPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.set(index, builderForValue.build());
    @@ -8354,7 +8091,7 @@ public Builder setPositiveSpan(
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
    +      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8378,7 +8115,7 @@ public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8402,7 +8139,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(builderForValue.build());
    @@ -8423,7 +8160,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(index, builderForValue.build());
    @@ -8444,10 +8181,10 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addAllPositiveSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +          com.google.protobuf.AbstractMessageLite.Builder.addAll(
                   values, positiveSpan_);
               onChanged();
             } else {
    @@ -8505,7 +8242,7 @@ public Builder removePositiveSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
               int index) {
             return getPositiveSpanFieldBuilder().getBuilder(index);
           }
    @@ -8519,7 +8256,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
               int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);  } else {
    @@ -8536,7 +8273,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanOrBuilderList() {
             if (positiveSpanBuilder_ != null) {
               return positiveSpanBuilder_.getMessageOrBuilderList();
    @@ -8554,9 +8291,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
             return getPositiveSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8568,10 +8305,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
               int index) {
             return getPositiveSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8583,16 +8320,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanBuilderList() {
             return getPositiveSpanFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder> 
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder> 
               getPositiveSpanFieldBuilder() {
             if (positiveSpanBuilder_ == null) {
    -          positiveSpanBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder>(
    +          positiveSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder>(
                       positiveSpan_,
                       ((bitField0_ & 0x00001000) != 0),
                       getParentForChildren(),
    @@ -8602,7 +8339,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return positiveSpanBuilder_;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.LongList positiveDelta_ = emptyLongList();
    +      private com.google.protobuf.Internal.LongList positiveDelta_ = emptyLongList();
           private void ensurePositiveDeltaIsMutable() {
             if (!positiveDelta_.isModifiable()) {
               positiveDelta_ = makeMutableCopy(positiveDelta_);
    @@ -8705,7 +8442,7 @@ public Builder addPositiveDelta(long value) {
           public Builder addAllPositiveDelta(
               java.lang.Iterable values) {
             ensurePositiveDeltaIsMutable();
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +        com.google.protobuf.AbstractMessageLite.Builder.addAll(
                 values, positiveDelta_);
             bitField0_ |= 0x00002000;
             onChanged();
    @@ -8728,7 +8465,7 @@ public Builder clearPositiveDelta() {
             return this;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.DoubleList positiveCount_ = emptyDoubleList();
    +      private com.google.protobuf.Internal.DoubleList positiveCount_ = emptyDoubleList();
           private void ensurePositiveCountIsMutable() {
             if (!positiveCount_.isModifiable()) {
               positiveCount_ = makeMutableCopy(positiveCount_);
    @@ -8825,7 +8562,7 @@ public Builder addPositiveCount(double value) {
           public Builder addAllPositiveCount(
               java.lang.Iterable values) {
             ensurePositiveCountIsMutable();
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +        com.google.protobuf.AbstractMessageLite.Builder.addAll(
                 values, positiveCount_);
             bitField0_ |= 0x00004000;
             onChanged();
    @@ -8846,17 +8583,17 @@ public Builder clearPositiveCount() {
             return this;
           }
     
    -      private java.util.List exemplars_ =
    +      private java.util.List exemplars_ =
             java.util.Collections.emptyList();
           private void ensureExemplarsIsMutable() {
             if (!((bitField0_ & 0x00008000) != 0)) {
    -          exemplars_ = new java.util.ArrayList(exemplars_);
    +          exemplars_ = new java.util.ArrayList(exemplars_);
               bitField0_ |= 0x00008000;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
     
           /**
            * 
    @@ -8865,7 +8602,7 @@ private void ensureExemplarsIsMutable() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List getExemplarsList() {
    +      public java.util.List getExemplarsList() {
             if (exemplarsBuilder_ == null) {
               return java.util.Collections.unmodifiableList(exemplars_);
             } else {
    @@ -8893,7 +8630,7 @@ public int getExemplarsCount() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplars(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getExemplars(int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);
             } else {
    @@ -8908,7 +8645,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8929,7 +8666,7 @@ public Builder setExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.set(index, builderForValue.build());
    @@ -8946,7 +8683,7 @@ public Builder setExemplars(
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
    +      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8967,7 +8704,7 @@ public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.co
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8988,7 +8725,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(builderForValue.build());
    @@ -9006,7 +8743,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(index, builderForValue.build());
    @@ -9024,10 +8761,10 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addAllExemplars(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +          com.google.protobuf.AbstractMessageLite.Builder.addAll(
                   values, exemplars_);
               onChanged();
             } else {
    @@ -9076,7 +8813,7 @@ public Builder removeExemplars(int index) {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder getExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder getExemplarsBuilder(
               int index) {
             return getExemplarsFieldBuilder().getBuilder(index);
           }
    @@ -9087,7 +8824,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
               int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);  } else {
    @@ -9101,7 +8838,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsOrBuilderList() {
             if (exemplarsBuilder_ != null) {
               return exemplarsBuilder_.getMessageOrBuilderList();
    @@ -9116,9 +8853,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder addExemplarsBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder addExemplarsBuilder() {
             return getExemplarsFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -9127,10 +8864,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder addExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder addExemplarsBuilder(
               int index) {
             return getExemplarsFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -9139,16 +8876,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsBuilderList() {
             return getExemplarsFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> 
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder> 
               getExemplarsFieldBuilder() {
             if (exemplarsBuilder_ == null) {
    -          exemplarsBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder>(
    +          exemplarsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder>(
                       exemplars_,
                       ((bitField0_ & 0x00008000) != 0),
                       getParentForChildren(),
    @@ -9157,65 +8894,53 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             }
             return exemplarsBuilder_;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.Histogram)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public Histogram parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9223,7 +8948,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface BucketOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Bucket)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * 
    @@ -9291,11 +9016,11 @@ public interface BucketOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
       }
       /**
        * 
    @@ -9306,35 +9031,37 @@ public interface BucketOrBuilder extends
        * Protobuf type {@code io.prometheus.client.Bucket}
        */
       public static final class Bucket extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Bucket)
           BucketOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        Bucket.class.getName());
    +    }
         // Use Bucket.newBuilder() to construct.
    -    private Bucket(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private Bucket(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private Bucket() {
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new Bucket();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder.class);
         }
     
         private int bitField0_;
    @@ -9420,7 +9147,7 @@ public double getUpperBound() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return Whether the exemplar field is set.
    @@ -9434,15 +9161,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -9457,7 +9184,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeUInt64(1, cumulativeCount_);
    @@ -9481,19 +9208,19 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeUInt64Size(1, cumulativeCount_);
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(2, upperBound_);
           }
           if (((bitField0_ & 0x00000008) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(3, getExemplar());
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(4, cumulativeCountFloat_);
           }
           size += getUnknownFields().getSerializedSize();
    @@ -9506,10 +9233,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket) obj;
     
           if (hasCumulativeCount() != other.hasCumulativeCount()) return false;
           if (hasCumulativeCount()) {
    @@ -9546,17 +9273,17 @@ public int hashCode() {
           hash = (19 * hash) + getDescriptor().hashCode();
           if (hasCumulativeCount()) {
             hash = (37 * hash) + CUMULATIVE_COUNT_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 getCumulativeCount());
           }
           if (hasCumulativeCountFloat()) {
             hash = (37 * hash) + CUMULATIVE_COUNT_FLOAT_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getCumulativeCountFloat()));
           }
           if (hasUpperBound()) {
             hash = (37 * hash) + UPPER_BOUND_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getUpperBound()));
           }
           if (hasExemplar()) {
    @@ -9568,75 +9295,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -9645,7 +9372,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -9656,7 +9383,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -9669,34 +9396,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Bucket}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +        if (com.google.protobuf.GeneratedMessage
                     .alwaysUseFieldBuilders) {
               getExemplarFieldBuilder();
             }
    @@ -9717,19 +9444,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -9737,14 +9464,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -9769,49 +9496,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket.getDefaultInstance()) return this;
             if (other.hasCumulativeCount()) {
               setCumulativeCount(other.getCumulativeCount());
             }
    @@ -9836,8 +9531,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -9880,7 +9575,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -10057,9 +9752,9 @@ public Builder clearUpperBound() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar exemplar_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar exemplar_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return Whether the exemplar field is set.
    @@ -10071,9 +9766,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -10081,7 +9776,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -10098,7 +9793,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -10111,11 +9806,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -10145,7 +9840,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getExemplarFieldBuilder().getBuilder();
    @@ -10153,23 +9848,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder> 
               getExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
    -          exemplarBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder>(
    +          exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -10177,65 +9872,53 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             }
             return exemplarBuilder_;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.Bucket)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public Bucket parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Bucket getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Bucket getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10243,7 +9926,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface BucketSpanOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.BucketSpan)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * 
    @@ -10296,35 +9979,37 @@ public interface BucketSpanOrBuilder extends
        * Protobuf type {@code io.prometheus.client.BucketSpan}
        */
       public static final class BucketSpan extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.BucketSpan)
           BucketSpanOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        BucketSpan.class.getName());
    +    }
         // Use BucketSpan.newBuilder() to construct.
    -    private BucketSpan(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private BucketSpan(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private BucketSpan() {
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new BucketSpan();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder.class);
         }
     
         private int bitField0_;
    @@ -10394,7 +10079,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
             output.writeSInt32(1, offset_);
    @@ -10412,11 +10097,11 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeSInt32Size(1, offset_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeUInt32Size(2, length_);
           }
           size += getUnknownFields().getSerializedSize();
    @@ -10429,10 +10114,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan) obj;
     
           if (hasOffset() != other.hasOffset()) return false;
           if (hasOffset()) {
    @@ -10468,75 +10153,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -10545,7 +10230,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10556,7 +10241,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -10573,29 +10258,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.BucketSpan}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.BucketSpan)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpanOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpanOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
     
           }
    @@ -10609,19 +10294,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -10629,14 +10314,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -10651,49 +10336,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan.getDefaultInstance()) return this;
             if (other.hasOffset()) {
               setOffset(other.getOffset());
             }
    @@ -10712,8 +10365,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -10744,7 +10397,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -10864,65 +10517,53 @@ public Builder clearLength() {
             onChanged();
             return this;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.BucketSpan)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.BucketSpan)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public BucketSpan parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.BucketSpan getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.BucketSpan getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10930,17 +10571,17 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface ExemplarOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Exemplar)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -10948,12 +10589,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -10984,7 +10625,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          * optional .google.protobuf.Timestamp timestamp = 3;
          * @return The timestamp.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getTimestamp();
    +    com.google.protobuf.Timestamp getTimestamp();
         /**
          * 
          * OpenMetrics-style.
    @@ -10992,60 +10633,62 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          *
          * optional .google.protobuf.Timestamp timestamp = 3;
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getTimestampOrBuilder();
    +    com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder();
       }
       /**
        * Protobuf type {@code io.prometheus.client.Exemplar}
        */
       public static final class Exemplar extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Exemplar)
           ExemplarOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        Exemplar.class.getName());
    +    }
         // Use Exemplar.newBuilder() to construct.
    -    private Exemplar(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private Exemplar(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private Exemplar() {
           label_ = java.util.Collections.emptyList();
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new Exemplar();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -11060,14 +10703,14 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
    @@ -11092,7 +10735,7 @@ public double getValue() {
         }
     
         public static final int TIMESTAMP_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp timestamp_;
    +    private com.google.protobuf.Timestamp timestamp_;
         /**
          * 
          * OpenMetrics-style.
    @@ -11114,8 +10757,8 @@ public boolean hasTimestamp() {
          * @return The timestamp.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getTimestamp() {
    -      return timestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : timestamp_;
    +    public com.google.protobuf.Timestamp getTimestamp() {
    +      return timestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_;
         }
         /**
          * 
    @@ -11125,8 +10768,8 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getTime
          * optional .google.protobuf.Timestamp timestamp = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getTimestampOrBuilder() {
    -      return timestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : timestamp_;
    +    public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
    +      return timestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -11141,7 +10784,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           for (int i = 0; i < label_.size(); i++) {
             output.writeMessage(1, label_.get(i));
    @@ -11162,15 +10805,15 @@ public int getSerializedSize() {
     
           size = 0;
           for (int i = 0; i < label_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(1, label_.get(i));
           }
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(2, value_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(3, getTimestamp());
           }
           size += getUnknownFields().getSerializedSize();
    @@ -11183,10 +10826,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -11218,7 +10861,7 @@ public int hashCode() {
           }
           if (hasValue()) {
             hash = (37 * hash) + VALUE_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 java.lang.Double.doubleToLongBits(getValue()));
           }
           if (hasTimestamp()) {
    @@ -11230,75 +10873,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -11307,7 +10950,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -11318,7 +10961,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -11326,34 +10969,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Exemplar}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Exemplar)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.ExemplarOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.ExemplarOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +        if (com.google.protobuf.GeneratedMessage
                     .alwaysUseFieldBuilders) {
               getLabelFieldBuilder();
               getTimestampFieldBuilder();
    @@ -11380,19 +11023,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -11400,15 +11043,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -11420,7 +11063,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -11437,49 +11080,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -11499,7 +11110,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   label_ = other.label_;
                   bitField0_ = (bitField0_ & ~0x00000001);
                   labelBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                        getLabelFieldBuilder() : null;
                 } else {
                   labelBuilder_.addAllMessages(other.label_);
    @@ -11524,8 +11135,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -11539,9 +11150,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -11571,7 +11182,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -11580,22 +11191,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder> labelBuilder_;
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -11615,7 +11226,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -11626,7 +11237,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11643,7 +11254,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -11656,7 +11267,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11673,7 +11284,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11690,7 +11301,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -11704,7 +11315,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -11718,10 +11329,10 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +          com.google.protobuf.AbstractMessageLite.Builder.addAll(
                   values, label_);
               onChanged();
             } else {
    @@ -11758,14 +11369,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return getLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -11775,7 +11386,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -11786,31 +11397,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder addLabelBuilder() {
             return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return getLabelFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder> 
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder> 
               getLabelFieldBuilder() {
             if (labelBuilder_ == null) {
    -          labelBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder>(
    +          labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -11860,9 +11471,9 @@ public Builder clearValue() {
             return this;
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp timestamp_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> timestampBuilder_;
    +      private com.google.protobuf.Timestamp timestamp_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> timestampBuilder_;
           /**
            * 
            * OpenMetrics-style.
    @@ -11882,9 +11493,9 @@ public boolean hasTimestamp() {
            * optional .google.protobuf.Timestamp timestamp = 3;
            * @return The timestamp.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getTimestamp() {
    +      public com.google.protobuf.Timestamp getTimestamp() {
             if (timestampBuilder_ == null) {
    -          return timestamp_ == null ? io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : timestamp_;
    +          return timestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_;
             } else {
               return timestampBuilder_.getMessage();
             }
    @@ -11896,7 +11507,7 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp getTime
            *
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
    -      public Builder setTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
    +      public Builder setTimestamp(com.google.protobuf.Timestamp value) {
             if (timestampBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11917,7 +11528,7 @@ public Builder setTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_2
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
           public Builder setTimestamp(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder builderForValue) {
    +          com.google.protobuf.Timestamp.Builder builderForValue) {
             if (timestampBuilder_ == null) {
               timestamp_ = builderForValue.build();
             } else {
    @@ -11934,11 +11545,11 @@ public Builder setTimestamp(
            *
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
    -      public Builder mergeTimestamp(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp value) {
    +      public Builder mergeTimestamp(com.google.protobuf.Timestamp value) {
             if (timestampBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 timestamp_ != null &&
    -            timestamp_ != io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance()) {
    +            timestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
                 getTimestampBuilder().mergeFrom(value);
               } else {
                 timestamp_ = value;
    @@ -11976,7 +11587,7 @@ public Builder clearTimestamp() {
            *
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder getTimestampBuilder() {
    +      public com.google.protobuf.Timestamp.Builder getTimestampBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return getTimestampFieldBuilder().getBuilder();
    @@ -11988,12 +11599,12 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder
            *
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder getTimestampOrBuilder() {
    +      public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
             if (timestampBuilder_ != null) {
               return timestampBuilder_.getMessageOrBuilder();
             } else {
               return timestamp_ == null ?
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.getDefaultInstance() : timestamp_;
    +              com.google.protobuf.Timestamp.getDefaultInstance() : timestamp_;
             }
           }
           /**
    @@ -12003,12 +11614,12 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilde
            *
            * optional .google.protobuf.Timestamp timestamp = 3;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
               getTimestampFieldBuilder() {
             if (timestampBuilder_ == null) {
    -          timestampBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp.Builder, io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilder>(
    +          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                       getTimestamp(),
                       getParentForChildren(),
                       isClean());
    @@ -12016,65 +11627,53 @@ public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampOrBuilde
             }
             return timestampBuilder_;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.Exemplar)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Exemplar)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public Exemplar parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Exemplar getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Exemplar getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -12082,17 +11681,17 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface MetricOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.Metric)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -12100,12 +11699,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -12117,11 +11716,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return The gauge.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getGauge();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge getGauge();
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder getGaugeOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.GaugeOrBuilder getGaugeOrBuilder();
     
         /**
          * optional .io.prometheus.client.Counter counter = 3;
    @@ -12132,11 +11731,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          * optional .io.prometheus.client.Counter counter = 3;
          * @return The counter.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getCounter();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter getCounter();
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder getCounterOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.CounterOrBuilder getCounterOrBuilder();
     
         /**
          * optional .io.prometheus.client.Summary summary = 4;
    @@ -12147,11 +11746,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          * optional .io.prometheus.client.Summary summary = 4;
          * @return The summary.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getSummary();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary getSummary();
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder getSummaryOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.SummaryOrBuilder getSummaryOrBuilder();
     
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
    @@ -12162,11 +11761,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return The untyped.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getUntyped();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped getUntyped();
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder getUntypedOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.UntypedOrBuilder getUntypedOrBuilder();
     
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
    @@ -12177,11 +11776,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return The histogram.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getHistogram();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram getHistogram();
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder getHistogramOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.HistogramOrBuilder getHistogramOrBuilder();
     
         /**
          * optional int64 timestamp_ms = 6;
    @@ -12198,54 +11797,56 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
        * Protobuf type {@code io.prometheus.client.Metric}
        */
       public static final class Metric extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.Metric)
           MetricOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        Metric.class.getName());
    +    }
         // Use Metric.newBuilder() to construct.
    -    private Metric(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private Metric(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private Metric() {
           label_ = java.util.Collections.emptyList();
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new Metric();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -12260,20 +11861,20 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
     
         public static final int GAUGE_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge gauge_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge gauge_;
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return Whether the gauge field is set.
    @@ -12287,19 +11888,19 @@ public boolean hasGauge() {
          * @return The gauge.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getGauge() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge getGauge() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
     
         public static final int COUNTER_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter counter_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter counter_;
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          * @return Whether the counter field is set.
    @@ -12313,19 +11914,19 @@ public boolean hasCounter() {
          * @return The counter.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getCounter() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter getCounter() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.getDefaultInstance() : counter_;
         }
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder getCounterOrBuilder() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.getDefaultInstance() : counter_;
         }
     
         public static final int SUMMARY_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary summary_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary summary_;
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          * @return Whether the summary field is set.
    @@ -12339,19 +11940,19 @@ public boolean hasSummary() {
          * @return The summary.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getSummary() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary getSummary() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.getDefaultInstance() : summary_;
         }
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.getDefaultInstance() : summary_;
         }
     
         public static final int UNTYPED_FIELD_NUMBER = 5;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped untyped_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped untyped_;
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return Whether the untyped field is set.
    @@ -12365,19 +11966,19 @@ public boolean hasUntyped() {
          * @return The untyped.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getUntyped() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped getUntyped() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
     
         public static final int HISTOGRAM_FIELD_NUMBER = 7;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram histogram_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram histogram_;
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return Whether the histogram field is set.
    @@ -12391,15 +11992,15 @@ public boolean hasHistogram() {
          * @return The histogram.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getHistogram() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram getHistogram() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
     
         public static final int TIMESTAMP_MS_FIELD_NUMBER = 6;
    @@ -12433,7 +12034,7 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           for (int i = 0; i < label_.size(); i++) {
             output.writeMessage(1, label_.get(i));
    @@ -12466,31 +12067,31 @@ public int getSerializedSize() {
     
           size = 0;
           for (int i = 0; i < label_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(1, label_.get(i));
           }
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(2, getGauge());
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(3, getCounter());
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(4, getSummary());
           }
           if (((bitField0_ & 0x00000008) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(5, getUntyped());
           }
           if (((bitField0_ & 0x00000020) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeInt64Size(6, timestampMs_);
           }
           if (((bitField0_ & 0x00000010) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(7, getHistogram());
           }
           size += getUnknownFields().getSerializedSize();
    @@ -12503,10 +12104,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -12577,7 +12178,7 @@ public int hashCode() {
           }
           if (hasTimestampMs()) {
             hash = (37 * hash) + TIMESTAMP_MS_FIELD_NUMBER;
    -        hash = (53 * hash) + io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Internal.hashLong(
    +        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
                 getTimestampMs());
           }
           hash = (29 * hash) + getUnknownFields().hashCode();
    @@ -12585,75 +12186,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -12662,7 +12263,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -12673,7 +12274,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -12681,34 +12282,34 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.Metric}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
             maybeForceBuilderInitialization();
           }
           private void maybeForceBuilderInitialization() {
    -        if (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +        if (com.google.protobuf.GeneratedMessage
                     .alwaysUseFieldBuilders) {
               getLabelFieldBuilder();
               getGaugeFieldBuilder();
    @@ -12759,19 +12360,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -12779,15 +12380,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -12799,7 +12400,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -12840,49 +12441,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -12902,7 +12471,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   label_ = other.label_;
                   bitField0_ = (bitField0_ & ~0x00000001);
                   labelBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                        getLabelFieldBuilder() : null;
                 } else {
                   labelBuilder_.addAllMessages(other.label_);
    @@ -12939,8 +12508,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -12954,9 +12523,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -13014,7 +12583,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -13023,22 +12592,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder> labelBuilder_;
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -13058,7 +12627,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -13069,7 +12638,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13086,7 +12655,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -13099,7 +12668,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13116,7 +12685,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13133,7 +12702,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -13147,7 +12716,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -13161,10 +12730,10 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +          com.google.protobuf.AbstractMessageLite.Builder.addAll(
                   values, label_);
               onChanged();
             } else {
    @@ -13201,14 +12770,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return getLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -13218,7 +12787,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -13229,31 +12798,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder addLabelBuilder() {
             return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return getLabelFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder> 
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder> 
               getLabelFieldBuilder() {
             if (labelBuilder_ == null) {
    -          labelBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.LabelPairOrBuilder>(
    +          labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -13263,9 +12832,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return labelBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge gauge_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder> gaugeBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge gauge_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.GaugeOrBuilder> gaugeBuilder_;
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return Whether the gauge field is set.
    @@ -13277,9 +12846,9 @@ public boolean hasGauge() {
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return The gauge.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge getGauge() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge getGauge() {
             if (gaugeBuilder_ == null) {
    -          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.getDefaultInstance() : gauge_;
             } else {
               return gaugeBuilder_.getMessage();
             }
    @@ -13287,7 +12856,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge value) {
    +      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13304,7 +12873,7 @@ public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_go
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           public Builder setGauge(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.Builder builderForValue) {
             if (gaugeBuilder_ == null) {
               gauge_ = builderForValue.build();
             } else {
    @@ -13317,11 +12886,11 @@ public Builder setGauge(
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge value) {
    +      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 gauge_ != null &&
    -            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance()) {
    +            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.getDefaultInstance()) {
                 getGaugeBuilder().mergeFrom(value);
               } else {
                 gauge_ = value;
    @@ -13351,7 +12920,7 @@ public Builder clearGauge() {
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder getGaugeBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.Builder getGaugeBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return getGaugeFieldBuilder().getBuilder();
    @@ -13359,23 +12928,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
             if (gaugeBuilder_ != null) {
               return gaugeBuilder_.getMessageOrBuilder();
             } else {
               return gauge_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.getDefaultInstance() : gauge_;
             }
           }
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.GaugeOrBuilder> 
               getGaugeFieldBuilder() {
             if (gaugeBuilder_ == null) {
    -          gaugeBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.GaugeOrBuilder>(
    +          gaugeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.GaugeOrBuilder>(
                       getGauge(),
                       getParentForChildren(),
                       isClean());
    @@ -13384,9 +12953,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return gaugeBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter counter_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder> counterBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter counter_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.CounterOrBuilder> counterBuilder_;
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            * @return Whether the counter field is set.
    @@ -13398,9 +12967,9 @@ public boolean hasCounter() {
            * optional .io.prometheus.client.Counter counter = 3;
            * @return The counter.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter getCounter() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter getCounter() {
             if (counterBuilder_ == null) {
    -          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance() : counter_;
    +          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.getDefaultInstance() : counter_;
             } else {
               return counterBuilder_.getMessage();
             }
    @@ -13408,7 +12977,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter value) {
    +      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13425,7 +12994,7 @@ public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Counter counter = 3;
            */
           public Builder setCounter(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.Builder builderForValue) {
             if (counterBuilder_ == null) {
               counter_ = builderForValue.build();
             } else {
    @@ -13438,11 +13007,11 @@ public Builder setCounter(
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter value) {
    +      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 counter_ != null &&
    -            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance()) {
    +            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.getDefaultInstance()) {
                 getCounterBuilder().mergeFrom(value);
               } else {
                 counter_ = value;
    @@ -13472,7 +13041,7 @@ public Builder clearCounter() {
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder getCounterBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.Builder getCounterBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return getCounterFieldBuilder().getBuilder();
    @@ -13480,23 +13049,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.CounterOrBuilder getCounterOrBuilder() {
             if (counterBuilder_ != null) {
               return counterBuilder_.getMessageOrBuilder();
             } else {
               return counter_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.getDefaultInstance() : counter_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.getDefaultInstance() : counter_;
             }
           }
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.CounterOrBuilder> 
               getCounterFieldBuilder() {
             if (counterBuilder_ == null) {
    -          counterBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.CounterOrBuilder>(
    +          counterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.CounterOrBuilder>(
                       getCounter(),
                       getParentForChildren(),
                       isClean());
    @@ -13505,9 +13074,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return counterBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary summary_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder> summaryBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary summary_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.SummaryOrBuilder> summaryBuilder_;
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            * @return Whether the summary field is set.
    @@ -13519,9 +13088,9 @@ public boolean hasSummary() {
            * optional .io.prometheus.client.Summary summary = 4;
            * @return The summary.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary getSummary() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary getSummary() {
             if (summaryBuilder_ == null) {
    -          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance() : summary_;
    +          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.getDefaultInstance() : summary_;
             } else {
               return summaryBuilder_.getMessage();
             }
    @@ -13529,7 +13098,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary value) {
    +      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13546,7 +13115,7 @@ public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Summary summary = 4;
            */
           public Builder setSummary(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.Builder builderForValue) {
             if (summaryBuilder_ == null) {
               summary_ = builderForValue.build();
             } else {
    @@ -13559,11 +13128,11 @@ public Builder setSummary(
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary value) {
    +      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 summary_ != null &&
    -            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance()) {
    +            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.getDefaultInstance()) {
                 getSummaryBuilder().mergeFrom(value);
               } else {
                 summary_ = value;
    @@ -13593,7 +13162,7 @@ public Builder clearSummary() {
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder getSummaryBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.Builder getSummaryBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getSummaryFieldBuilder().getBuilder();
    @@ -13601,23 +13170,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
             if (summaryBuilder_ != null) {
               return summaryBuilder_.getMessageOrBuilder();
             } else {
               return summary_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.getDefaultInstance() : summary_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.getDefaultInstance() : summary_;
             }
           }
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.SummaryOrBuilder> 
               getSummaryFieldBuilder() {
             if (summaryBuilder_ == null) {
    -          summaryBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.SummaryOrBuilder>(
    +          summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.SummaryOrBuilder>(
                       getSummary(),
                       getParentForChildren(),
                       isClean());
    @@ -13626,9 +13195,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return summaryBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped untyped_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder> untypedBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped untyped_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.UntypedOrBuilder> untypedBuilder_;
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return Whether the untyped field is set.
    @@ -13640,9 +13209,9 @@ public boolean hasUntyped() {
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return The untyped.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped getUntyped() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped getUntyped() {
             if (untypedBuilder_ == null) {
    -          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.getDefaultInstance() : untyped_;
             } else {
               return untypedBuilder_.getMessage();
             }
    @@ -13650,7 +13219,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped value) {
    +      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13667,7 +13236,7 @@ public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           public Builder setUntyped(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.Builder builderForValue) {
             if (untypedBuilder_ == null) {
               untyped_ = builderForValue.build();
             } else {
    @@ -13680,11 +13249,11 @@ public Builder setUntyped(
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped value) {
    +      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 untyped_ != null &&
    -            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance()) {
    +            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.getDefaultInstance()) {
                 getUntypedBuilder().mergeFrom(value);
               } else {
                 untyped_ = value;
    @@ -13714,7 +13283,7 @@ public Builder clearUntyped() {
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder getUntypedBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.Builder getUntypedBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
             return getUntypedFieldBuilder().getBuilder();
    @@ -13722,23 +13291,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
             if (untypedBuilder_ != null) {
               return untypedBuilder_.getMessageOrBuilder();
             } else {
               return untyped_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.getDefaultInstance() : untyped_;
             }
           }
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.UntypedOrBuilder> 
               getUntypedFieldBuilder() {
             if (untypedBuilder_ == null) {
    -          untypedBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.UntypedOrBuilder>(
    +          untypedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.UntypedOrBuilder>(
                       getUntyped(),
                       getParentForChildren(),
                       isClean());
    @@ -13747,9 +13316,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
             return untypedBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram histogram_;
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder> histogramBuilder_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram histogram_;
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.HistogramOrBuilder> histogramBuilder_;
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return Whether the histogram field is set.
    @@ -13761,9 +13330,9 @@ public boolean hasHistogram() {
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return The histogram.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram getHistogram() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram getHistogram() {
             if (histogramBuilder_ == null) {
    -          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.getDefaultInstance() : histogram_;
             } else {
               return histogramBuilder_.getMessage();
             }
    @@ -13771,7 +13340,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram value) {
    +      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13788,7 +13357,7 @@ public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.co
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           public Builder setHistogram(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.Builder builderForValue) {
             if (histogramBuilder_ == null) {
               histogram_ = builderForValue.build();
             } else {
    @@ -13801,11 +13370,11 @@ public Builder setHistogram(
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram value) {
    +      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (((bitField0_ & 0x00000020) != 0) &&
                 histogram_ != null &&
    -            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance()) {
    +            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.getDefaultInstance()) {
                 getHistogramBuilder().mergeFrom(value);
               } else {
                 histogram_ = value;
    @@ -13835,7 +13404,7 @@ public Builder clearHistogram() {
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder getHistogramBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.Builder getHistogramBuilder() {
             bitField0_ |= 0x00000020;
             onChanged();
             return getHistogramFieldBuilder().getBuilder();
    @@ -13843,23 +13412,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
             if (histogramBuilder_ != null) {
               return histogramBuilder_.getMessageOrBuilder();
             } else {
               return histogram_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.getDefaultInstance() : histogram_;
             }
           }
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder> 
    +      private com.google.protobuf.SingleFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.HistogramOrBuilder> 
               getHistogramFieldBuilder() {
             if (histogramBuilder_ == null) {
    -          histogramBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.SingleFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.HistogramOrBuilder>(
    +          histogramBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.HistogramOrBuilder>(
                       getHistogram(),
                       getParentForChildren(),
                       isClean());
    @@ -13907,65 +13476,53 @@ public Builder clearTimestampMs() {
             onChanged();
             return this;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.Metric)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public Metric parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13973,7 +13530,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
     
       public interface MetricFamilyOrBuilder extends
           // @@protoc_insertion_point(interface_extends:io.prometheus.client.MetricFamily)
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.MessageOrBuilder {
    +      com.google.protobuf.MessageOrBuilder {
     
         /**
          * optional string name = 1;
    @@ -13989,7 +13546,7 @@ public interface MetricFamilyOrBuilder extends
          * optional string name = 1;
          * @return The bytes for name.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +    com.google.protobuf.ByteString
             getNameBytes();
     
         /**
    @@ -14006,7 +13563,7 @@ public interface MetricFamilyOrBuilder extends
          * optional string help = 2;
          * @return The bytes for help.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +    com.google.protobuf.ByteString
             getHelpBytes();
     
         /**
    @@ -14018,17 +13575,17 @@ public interface MetricFamilyOrBuilder extends
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType getType();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType getType();
     
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getMetric(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric getMetric(int index);
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    @@ -14036,12 +13593,12 @@ public interface MetricFamilyOrBuilder extends
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricOrBuilderList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index);
     
         /**
    @@ -14058,19 +13615,28 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Met
          * optional string unit = 5;
          * @return The bytes for unit.
          */
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +    com.google.protobuf.ByteString
             getUnitBytes();
       }
       /**
        * Protobuf type {@code io.prometheus.client.MetricFamily}
        */
       public static final class MetricFamily extends
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3 implements
    +      com.google.protobuf.GeneratedMessage implements
           // @@protoc_insertion_point(message_implements:io.prometheus.client.MetricFamily)
           MetricFamilyOrBuilder {
       private static final long serialVersionUID = 0L;
    +    static {
    +      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
    +        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
    +        /* major= */ 4,
    +        /* minor= */ 28,
    +        /* patch= */ 2,
    +        /* suffix= */ "",
    +        MetricFamily.class.getName());
    +    }
         // Use MetricFamily.newBuilder() to construct.
    -    private MetricFamily(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder builder) {
    +    private MetricFamily(com.google.protobuf.GeneratedMessage.Builder builder) {
           super(builder);
         }
         private MetricFamily() {
    @@ -14081,24 +13647,17 @@ private MetricFamily() {
           unit_ = "";
         }
     
    -    @java.lang.Override
    -    @SuppressWarnings({"unused"})
    -    protected java.lang.Object newInstance(
    -        UnusedPrivateParameter unused) {
    -      return new MetricFamily();
    -    }
    -
    -    public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +    public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
         }
     
         @java.lang.Override
    -    protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily.Builder.class);
         }
     
         private int bitField0_;
    @@ -14123,8 +13682,8 @@ public java.lang.String getName() {
           if (ref instanceof java.lang.String) {
             return (java.lang.String) ref;
           } else {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs = 
    -            (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        com.google.protobuf.ByteString bs = 
    +            (com.google.protobuf.ByteString) ref;
             java.lang.String s = bs.toStringUtf8();
             if (bs.isValidUtf8()) {
               name_ = s;
    @@ -14137,17 +13696,17 @@ public java.lang.String getName() {
          * @return The bytes for name.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +    public com.google.protobuf.ByteString
             getNameBytes() {
           java.lang.Object ref = name_;
           if (ref instanceof java.lang.String) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    -            io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +        com.google.protobuf.ByteString b = 
    +            com.google.protobuf.ByteString.copyFromUtf8(
                     (java.lang.String) ref);
             name_ = b;
             return b;
           } else {
    -        return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        return (com.google.protobuf.ByteString) ref;
           }
         }
     
    @@ -14172,8 +13731,8 @@ public java.lang.String getHelp() {
           if (ref instanceof java.lang.String) {
             return (java.lang.String) ref;
           } else {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs = 
    -            (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        com.google.protobuf.ByteString bs = 
    +            (com.google.protobuf.ByteString) ref;
             java.lang.String s = bs.toStringUtf8();
             if (bs.isValidUtf8()) {
               help_ = s;
    @@ -14186,17 +13745,17 @@ public java.lang.String getHelp() {
          * @return The bytes for help.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +    public com.google.protobuf.ByteString
             getHelpBytes() {
           java.lang.Object ref = help_;
           if (ref instanceof java.lang.String) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    -            io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +        com.google.protobuf.ByteString b = 
    +            com.google.protobuf.ByteString.copyFromUtf8(
                     (java.lang.String) ref);
             help_ = b;
             return b;
           } else {
    -        return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        return (com.google.protobuf.ByteString) ref;
           }
         }
     
    @@ -14213,26 +13772,26 @@ public java.lang.String getHelp() {
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType getType() {
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType.forNumber(type_);
    -      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType.COUNTER : result;
    +    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType getType() {
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType.forNumber(type_);
    +      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType.COUNTER : result;
         }
     
         public static final int METRIC_FIELD_NUMBER = 4;
         @SuppressWarnings("serial")
    -    private java.util.List metric_;
    +    private java.util.List metric_;
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List getMetricList() {
    +    public java.util.List getMetricList() {
           return metric_;
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getMetricOrBuilderList() {
           return metric_;
         }
    @@ -14247,14 +13806,14 @@ public int getMetricCount() {
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getMetric(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric getMetric(int index) {
           return metric_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index) {
           return metric_.get(index);
         }
    @@ -14280,8 +13839,8 @@ public java.lang.String getUnit() {
           if (ref instanceof java.lang.String) {
             return (java.lang.String) ref;
           } else {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs = 
    -            (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        com.google.protobuf.ByteString bs = 
    +            (com.google.protobuf.ByteString) ref;
             java.lang.String s = bs.toStringUtf8();
             if (bs.isValidUtf8()) {
               unit_ = s;
    @@ -14294,17 +13853,17 @@ public java.lang.String getUnit() {
          * @return The bytes for unit.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +    public com.google.protobuf.ByteString
             getUnitBytes() {
           java.lang.Object ref = unit_;
           if (ref instanceof java.lang.String) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    -            io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +        com.google.protobuf.ByteString b = 
    +            com.google.protobuf.ByteString.copyFromUtf8(
                     (java.lang.String) ref);
             unit_ = b;
             return b;
           } else {
    -        return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +        return (com.google.protobuf.ByteString) ref;
           }
         }
     
    @@ -14320,13 +13879,13 @@ public final boolean isInitialized() {
         }
     
         @java.lang.Override
    -    public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream output)
    +    public void writeTo(com.google.protobuf.CodedOutputStream output)
                             throws java.io.IOException {
           if (((bitField0_ & 0x00000001) != 0)) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.writeString(output, 1, name_);
    +        com.google.protobuf.GeneratedMessage.writeString(output, 1, name_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.writeString(output, 2, help_);
    +        com.google.protobuf.GeneratedMessage.writeString(output, 2, help_);
           }
           if (((bitField0_ & 0x00000004) != 0)) {
             output.writeEnum(3, type_);
    @@ -14335,7 +13894,7 @@ public void writeTo(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Code
             output.writeMessage(4, metric_.get(i));
           }
           if (((bitField0_ & 0x00000008) != 0)) {
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.writeString(output, 5, unit_);
    +        com.google.protobuf.GeneratedMessage.writeString(output, 5, unit_);
           }
           getUnknownFields().writeTo(output);
         }
    @@ -14347,21 +13906,21 @@ public int getSerializedSize() {
     
           size = 0;
           if (((bitField0_ & 0x00000001) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.computeStringSize(1, name_);
    +        size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_);
           }
           if (((bitField0_ & 0x00000002) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.computeStringSize(2, help_);
    +        size += com.google.protobuf.GeneratedMessage.computeStringSize(2, help_);
           }
           if (((bitField0_ & 0x00000004) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeEnumSize(3, type_);
           }
           for (int i = 0; i < metric_.size(); i++) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedOutputStream
    +        size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(4, metric_.get(i));
           }
           if (((bitField0_ & 0x00000008) != 0)) {
    -        size += io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.computeStringSize(5, unit_);
    +        size += com.google.protobuf.GeneratedMessage.computeStringSize(5, unit_);
           }
           size += getUnknownFields().getSerializedSize();
           memoizedSize = size;
    @@ -14373,10 +13932,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -14435,75 +13994,75 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseFrom(
    +        com.google.protobuf.ByteString data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseFrom(
    +        com.google.protobuf.ByteString data,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(byte[] data)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseFrom(byte[] data)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseFrom(
             byte[] data,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -        throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +        throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseDelimitedFrom(
             java.io.InputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseFrom(
    +        com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily parseFrom(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily parseFrom(
    +        com.google.protobuf.CodedInputStream input,
    +        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    -      return io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3
    +      return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    @@ -14512,7 +14071,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -14523,7 +14082,7 @@ public Builder toBuilder() {
     
         @java.lang.Override
         protected Builder newBuilderForType(
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
           Builder builder = new Builder(parent);
           return builder;
         }
    @@ -14531,29 +14090,29 @@ protected Builder newBuilderForType(
          * Protobuf type {@code io.prometheus.client.MetricFamily}
          */
         public static final class Builder extends
    -        io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.Builder implements
    +        com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamilyOrBuilder {
    -      public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamilyOrBuilder {
    +      public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      protected io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily.newBuilder()
           private Builder() {
     
           }
     
           private Builder(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.BuilderParent parent) {
    +          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
             super(parent);
     
           }
    @@ -14576,19 +14135,19 @@ public Builder clear() {
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +      public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -14596,15 +14155,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily result) {
             if (metricBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 metric_ = java.util.Collections.unmodifiableList(metric_);
    @@ -14616,7 +14175,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -14639,49 +14198,17 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
           }
     
           @java.lang.Override
    -      public Builder clone() {
    -        return super.clone();
    -      }
    -      @java.lang.Override
    -      public Builder setField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.setField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder clearField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field) {
    -        return super.clearField(field);
    -      }
    -      @java.lang.Override
    -      public Builder clearOneof(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.OneofDescriptor oneof) {
    -        return super.clearOneof(oneof);
    -      }
    -      @java.lang.Override
    -      public Builder setRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          int index, java.lang.Object value) {
    -        return super.setRepeatedField(field, index, value);
    -      }
    -      @java.lang.Override
    -      public Builder addRepeatedField(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FieldDescriptor field,
    -          java.lang.Object value) {
    -        return super.addRepeatedField(field, value);
    -      }
    -      @java.lang.Override
    -      public Builder mergeFrom(io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily)other);
    +      public Builder mergeFrom(com.google.protobuf.Message other) {
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -14714,7 +14241,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   metric_ = other.metric_;
                   bitField0_ = (bitField0_ & ~0x00000008);
                   metricBuilder_ = 
    -                io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.alwaysUseFieldBuilders ?
    +                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                        getMetricFieldBuilder() : null;
                 } else {
                   metricBuilder_.addAllMessages(other.metric_);
    @@ -14738,8 +14265,8 @@ public final boolean isInitialized() {
     
           @java.lang.Override
           public Builder mergeFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
               throws java.io.IOException {
             if (extensionRegistry == null) {
               throw new java.lang.NullPointerException();
    @@ -14764,8 +14291,8 @@ public Builder mergeFrom(
                   } // case 18
                   case 24: {
                     int tmpRaw = input.readEnum();
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType tmpValue =
    -                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType.forNumber(tmpRaw);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType tmpValue =
    +                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType.forNumber(tmpRaw);
                     if (tmpValue == null) {
                       mergeUnknownVarintField(3, tmpRaw);
                     } else {
    @@ -14775,9 +14302,9 @@ public Builder mergeFrom(
                     break;
                   } // case 24
                   case 34: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.PARSER,
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.parser(),
                             extensionRegistry);
                     if (metricBuilder_ == null) {
                       ensureMetricIsMutable();
    @@ -14800,7 +14327,7 @@ public Builder mergeFrom(
                   } // default:
                 } // switch (tag)
               } // while (!done)
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.unwrapIOException();
             } finally {
               onChanged();
    @@ -14824,8 +14351,8 @@ public boolean hasName() {
           public java.lang.String getName() {
             java.lang.Object ref = name_;
             if (!(ref instanceof java.lang.String)) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs =
    -              (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          com.google.protobuf.ByteString bs =
    +              (com.google.protobuf.ByteString) ref;
               java.lang.String s = bs.toStringUtf8();
               if (bs.isValidUtf8()) {
                 name_ = s;
    @@ -14839,17 +14366,17 @@ public java.lang.String getName() {
            * optional string name = 1;
            * @return The bytes for name.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +      public com.google.protobuf.ByteString
               getNameBytes() {
             java.lang.Object ref = name_;
             if (ref instanceof String) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +          com.google.protobuf.ByteString b = 
    +              com.google.protobuf.ByteString.copyFromUtf8(
                       (java.lang.String) ref);
               name_ = b;
               return b;
             } else {
    -          return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          return (com.google.protobuf.ByteString) ref;
             }
           }
           /**
    @@ -14881,7 +14408,7 @@ public Builder clearName() {
            * @return This builder for chaining.
            */
           public Builder setNameBytes(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString value) {
    +          com.google.protobuf.ByteString value) {
             if (value == null) { throw new NullPointerException(); }
             name_ = value;
             bitField0_ |= 0x00000001;
    @@ -14904,8 +14431,8 @@ public boolean hasHelp() {
           public java.lang.String getHelp() {
             java.lang.Object ref = help_;
             if (!(ref instanceof java.lang.String)) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs =
    -              (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          com.google.protobuf.ByteString bs =
    +              (com.google.protobuf.ByteString) ref;
               java.lang.String s = bs.toStringUtf8();
               if (bs.isValidUtf8()) {
                 help_ = s;
    @@ -14919,17 +14446,17 @@ public java.lang.String getHelp() {
            * optional string help = 2;
            * @return The bytes for help.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +      public com.google.protobuf.ByteString
               getHelpBytes() {
             java.lang.Object ref = help_;
             if (ref instanceof String) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +          com.google.protobuf.ByteString b = 
    +              com.google.protobuf.ByteString.copyFromUtf8(
                       (java.lang.String) ref);
               help_ = b;
               return b;
             } else {
    -          return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          return (com.google.protobuf.ByteString) ref;
             }
           }
           /**
    @@ -14961,7 +14488,7 @@ public Builder clearHelp() {
            * @return This builder for chaining.
            */
           public Builder setHelpBytes(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString value) {
    +          com.google.protobuf.ByteString value) {
             if (value == null) { throw new NullPointerException(); }
             help_ = value;
             bitField0_ |= 0x00000002;
    @@ -14982,16 +14509,16 @@ public Builder setHelpBytes(
            * @return The type.
            */
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType getType() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType.forNumber(type_);
    -        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType.COUNTER : result;
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType getType() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType.forNumber(type_);
    +        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType.COUNTER : result;
           }
           /**
            * optional .io.prometheus.client.MetricType type = 3;
            * @param value The type to set.
            * @return This builder for chaining.
            */
    -      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricType value) {
    +      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricType value) {
             if (value == null) {
               throw new NullPointerException();
             }
    @@ -15011,22 +14538,22 @@ public Builder clearType() {
             return this;
           }
     
    -      private java.util.List metric_ =
    +      private java.util.List metric_ =
             java.util.Collections.emptyList();
           private void ensureMetricIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          metric_ = new java.util.ArrayList(metric_);
    +          metric_ = new java.util.ArrayList(metric_);
               bitField0_ |= 0x00000008;
              }
           }
     
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder> metricBuilder_;
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricOrBuilder> metricBuilder_;
     
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List getMetricList() {
    +      public java.util.List getMetricList() {
             if (metricBuilder_ == null) {
               return java.util.Collections.unmodifiableList(metric_);
             } else {
    @@ -15046,7 +14573,7 @@ public int getMetricCount() {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric getMetric(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric getMetric(int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);
             } else {
    @@ -15057,7 +14584,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -15074,7 +14601,7 @@ public Builder setMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.set(index, builderForValue.build());
    @@ -15087,7 +14614,7 @@ public Builder setMetric(
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric value) {
    +      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -15104,7 +14631,7 @@ public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -15121,7 +14648,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(builderForValue.build());
    @@ -15135,7 +14662,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(index, builderForValue.build());
    @@ -15149,10 +14676,10 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addAllMetric(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractMessageLite.Builder.addAll(
    +          com.google.protobuf.AbstractMessageLite.Builder.addAll(
                   values, metric_);
               onChanged();
             } else {
    @@ -15189,14 +14716,14 @@ public Builder removeMetric(int index) {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder getMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder getMetricBuilder(
               int index) {
             return getMetricFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder getMetricOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricOrBuilder getMetricOrBuilder(
               int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);  } else {
    @@ -15206,7 +14733,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricOrBuilderList() {
             if (metricBuilder_ != null) {
               return metricBuilder_.getMessageOrBuilderList();
    @@ -15217,31 +14744,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder addMetricBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder addMetricBuilder() {
             return getMetricFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder addMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder addMetricBuilder(
               int index) {
             return getMetricFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricBuilderList() {
             return getMetricFieldBuilder().getBuilderList();
           }
    -      private io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder> 
    +      private com.google.protobuf.RepeatedFieldBuilder<
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricOrBuilder> 
               getMetricFieldBuilder() {
             if (metricBuilder_ == null) {
    -          metricBuilder_ = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.RepeatedFieldBuilderV3<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricOrBuilder>(
    +          metricBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricOrBuilder>(
                       metric_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -15266,8 +14793,8 @@ public boolean hasUnit() {
           public java.lang.String getUnit() {
             java.lang.Object ref = unit_;
             if (!(ref instanceof java.lang.String)) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString bs =
    -              (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          com.google.protobuf.ByteString bs =
    +              (com.google.protobuf.ByteString) ref;
               java.lang.String s = bs.toStringUtf8();
               if (bs.isValidUtf8()) {
                 unit_ = s;
    @@ -15281,17 +14808,17 @@ public java.lang.String getUnit() {
            * optional string unit = 5;
            * @return The bytes for unit.
            */
    -      public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString
    +      public com.google.protobuf.ByteString
               getUnitBytes() {
             java.lang.Object ref = unit_;
             if (ref instanceof String) {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString b = 
    -              io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString.copyFromUtf8(
    +          com.google.protobuf.ByteString b = 
    +              com.google.protobuf.ByteString.copyFromUtf8(
                       (java.lang.String) ref);
               unit_ = b;
               return b;
             } else {
    -          return (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString) ref;
    +          return (com.google.protobuf.ByteString) ref;
             }
           }
           /**
    @@ -15323,143 +14850,131 @@ public Builder clearUnit() {
            * @return This builder for chaining.
            */
           public Builder setUnitBytes(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ByteString value) {
    +          com.google.protobuf.ByteString value) {
             if (value == null) { throw new NullPointerException(); }
             unit_ = value;
             bitField0_ |= 0x00000010;
             onChanged();
             return this;
           }
    -      @java.lang.Override
    -      public final Builder setUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.setUnknownFields(unknownFields);
    -      }
    -
    -      @java.lang.Override
    -      public final Builder mergeUnknownFields(
    -          final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UnknownFieldSet unknownFields) {
    -        return super.mergeUnknownFields(unknownFields);
    -      }
    -
     
           // @@protoc_insertion_point(builder_scope:io.prometheus.client.MetricFamily)
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    -    @java.lang.Deprecated public static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser
    -        PARSER = new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.AbstractParser() {
    +    private static final com.google.protobuf.Parser
    +        PARSER = new com.google.protobuf.AbstractParser() {
           @java.lang.Override
           public MetricFamily parsePartialFrom(
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.CodedInputStream input,
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.ExtensionRegistryLite extensionRegistry)
    -          throws io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException {
    +          com.google.protobuf.CodedInputStream input,
    +          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    +          throws com.google.protobuf.InvalidProtocolBufferException {
             Builder builder = newBuilder();
             try {
               builder.mergeFrom(input, extensionRegistry);
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException e) {
    +        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
               throw e.setUnfinishedMessage(builder.buildPartial());
    -        } catch (io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.UninitializedMessageException e) {
    +        } catch (com.google.protobuf.UninitializedMessageException e) {
               throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
             } catch (java.io.IOException e) {
    -          throw new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.InvalidProtocolBufferException(e)
    +          throw new com.google.protobuf.InvalidProtocolBufferException(e)
                   .setUnfinishedMessage(builder.buildPartial());
             }
             return builder.buildPartial();
           }
         };
     
    -    public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser parser() {
    +    public static com.google.protobuf.Parser parser() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Parser getParserForType() {
    +    public com.google.protobuf.Parser getParserForType() {
           return PARSER;
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics.MetricFamily getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics.MetricFamily getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
       }
     
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_LabelPair_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_LabelPair_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_Gauge_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_Gauge_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_Counter_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_Counter_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_Quantile_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_Quantile_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_Summary_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_Summary_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_Untyped_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_Untyped_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_Histogram_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_Histogram_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_Bucket_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_Bucket_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_BucketSpan_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_Exemplar_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_Exemplar_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_Metric_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_Metric_fieldAccessorTable;
    -  private static final io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.Descriptor
    +  private static final com.google.protobuf.Descriptors.Descriptor
         internal_static_io_prometheus_client_MetricFamily_descriptor;
       private static final 
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable
    +    com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable;
     
    -  public static io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FileDescriptor
    +  public static com.google.protobuf.Descriptors.FileDescriptor
           getDescriptor() {
         return descriptor;
       }
    -  private static  io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FileDescriptor
    +  private static  com.google.protobuf.Descriptors.FileDescriptor
           descriptor;
       static {
         java.lang.String[] descriptorData = {
    @@ -15513,87 +15028,88 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_2
           "\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004\022\023\n\017GAUGE_H" +
           "ISTOGRAM\020\005B\212\001\nLio.prometheus.metrics.exp" +
           "ositionformats.generated.com_google_prot" +
    -      "obuf_3_25_3Z:github.com/prometheus/clien" +
    +      "obuf_4_28_2Z:github.com/prometheus/clien" +
           "t_model/go;io_prometheus_client"
         };
    -    descriptor = io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FileDescriptor
    +    descriptor = com.google.protobuf.Descriptors.FileDescriptor
           .internalBuildGeneratedFileFrom(descriptorData,
    -        new io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Descriptors.FileDescriptor[] {
    -          io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampProto.getDescriptor(),
    +        new com.google.protobuf.Descriptors.FileDescriptor[] {
    +          com.google.protobuf.TimestampProto.getDescriptor(),
             });
         internal_static_io_prometheus_client_LabelPair_descriptor =
           getDescriptor().getMessageTypes().get(0);
         internal_static_io_prometheus_client_LabelPair_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_LabelPair_descriptor,
             new java.lang.String[] { "Name", "Value", });
         internal_static_io_prometheus_client_Gauge_descriptor =
           getDescriptor().getMessageTypes().get(1);
         internal_static_io_prometheus_client_Gauge_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_Gauge_descriptor,
             new java.lang.String[] { "Value", });
         internal_static_io_prometheus_client_Counter_descriptor =
           getDescriptor().getMessageTypes().get(2);
         internal_static_io_prometheus_client_Counter_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_Counter_descriptor,
             new java.lang.String[] { "Value", "Exemplar", "CreatedTimestamp", });
         internal_static_io_prometheus_client_Quantile_descriptor =
           getDescriptor().getMessageTypes().get(3);
         internal_static_io_prometheus_client_Quantile_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_Quantile_descriptor,
             new java.lang.String[] { "Quantile", "Value", });
         internal_static_io_prometheus_client_Summary_descriptor =
           getDescriptor().getMessageTypes().get(4);
         internal_static_io_prometheus_client_Summary_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_Summary_descriptor,
             new java.lang.String[] { "SampleCount", "SampleSum", "Quantile", "CreatedTimestamp", });
         internal_static_io_prometheus_client_Untyped_descriptor =
           getDescriptor().getMessageTypes().get(5);
         internal_static_io_prometheus_client_Untyped_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_Untyped_descriptor,
             new java.lang.String[] { "Value", });
         internal_static_io_prometheus_client_Histogram_descriptor =
           getDescriptor().getMessageTypes().get(6);
         internal_static_io_prometheus_client_Histogram_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_Histogram_descriptor,
             new java.lang.String[] { "SampleCount", "SampleCountFloat", "SampleSum", "Bucket", "CreatedTimestamp", "Schema", "ZeroThreshold", "ZeroCount", "ZeroCountFloat", "NegativeSpan", "NegativeDelta", "NegativeCount", "PositiveSpan", "PositiveDelta", "PositiveCount", "Exemplars", });
         internal_static_io_prometheus_client_Bucket_descriptor =
           getDescriptor().getMessageTypes().get(7);
         internal_static_io_prometheus_client_Bucket_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_Bucket_descriptor,
             new java.lang.String[] { "CumulativeCount", "CumulativeCountFloat", "UpperBound", "Exemplar", });
         internal_static_io_prometheus_client_BucketSpan_descriptor =
           getDescriptor().getMessageTypes().get(8);
         internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_BucketSpan_descriptor,
             new java.lang.String[] { "Offset", "Length", });
         internal_static_io_prometheus_client_Exemplar_descriptor =
           getDescriptor().getMessageTypes().get(9);
         internal_static_io_prometheus_client_Exemplar_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_Exemplar_descriptor,
             new java.lang.String[] { "Label", "Value", "Timestamp", });
         internal_static_io_prometheus_client_Metric_descriptor =
           getDescriptor().getMessageTypes().get(10);
         internal_static_io_prometheus_client_Metric_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_Metric_descriptor,
             new java.lang.String[] { "Label", "Gauge", "Counter", "Summary", "Untyped", "Histogram", "TimestampMs", });
         internal_static_io_prometheus_client_MetricFamily_descriptor =
           getDescriptor().getMessageTypes().get(11);
         internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable = new
    -      io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.GeneratedMessageV3.FieldAccessorTable(
    +      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
             internal_static_io_prometheus_client_MetricFamily_descriptor,
             new java.lang.String[] { "Name", "Help", "Type", "Metric", "Unit", });
    -    io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TimestampProto.getDescriptor();
    +    descriptor.resolveAllFeaturesImmutable();
    +    com.google.protobuf.TimestampProto.getDescriptor();
       }
     
       // @@protoc_insertion_point(outer_class_scope)
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java
    index 1c1535de3..7e722b056 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java
    @@ -2,7 +2,8 @@
     
     import static io.prometheus.metrics.expositionformats.ProtobufUtil.timestampFromMillis;
     
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics;
    +import com.google.protobuf.TextFormat;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot;
    @@ -20,7 +21,6 @@
     import io.prometheus.metrics.model.snapshots.StateSetSnapshot;
     import io.prometheus.metrics.model.snapshots.SummarySnapshot;
     import io.prometheus.metrics.model.snapshots.UnknownSnapshot;
    -import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat;
     import java.io.IOException;
     import java.io.OutputStream;
     
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java
    index fee5d8eb1..5b192c23d 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java
    @@ -1,6 +1,6 @@
     package io.prometheus.metrics.expositionformats;
     
    -import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.Timestamp;
    +import com.google.protobuf.Timestamp;
     
     public class ProtobufUtil {
     
    diff --git a/prometheus-metrics-exposition-formats/src/main/protobuf/metrics.proto b/prometheus-metrics-exposition-formats/src/main/protobuf/metrics.proto
    deleted file mode 100644
    index 724f96643..000000000
    --- a/prometheus-metrics-exposition-formats/src/main/protobuf/metrics.proto
    +++ /dev/null
    @@ -1,157 +0,0 @@
    -// Copyright 2013 Prometheus Team
    -// 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.
    -
    -syntax = "proto2";
    -
    -package io.prometheus.client;
    -option java_package = "io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3";
    -option go_package = "github.com/prometheus/client_model/go;io_prometheus_client";
    -
    -import "google/protobuf/timestamp.proto";
    -
    -message LabelPair {
    -  optional string name  = 1;
    -  optional string value = 2;
    -}
    -
    -enum MetricType {
    -  // COUNTER must use the Metric field "counter".
    -  COUNTER = 0;
    -  // GAUGE must use the Metric field "gauge".
    -  GAUGE = 1;
    -  // SUMMARY must use the Metric field "summary".
    -  SUMMARY = 2;
    -  // UNTYPED must use the Metric field "untyped".
    -  UNTYPED = 3;
    -  // HISTOGRAM must use the Metric field "histogram".
    -  HISTOGRAM = 4;
    -  // GAUGE_HISTOGRAM must use the Metric field "histogram".
    -  GAUGE_HISTOGRAM = 5;
    -}
    -
    -message Gauge {
    -  optional double value = 1;
    -}
    -
    -message Counter {
    -  optional double   value    = 1;
    -  optional Exemplar exemplar = 2;
    -
    -  optional google.protobuf.Timestamp  created_timestamp = 3;
    -}
    -
    -message Quantile {
    -  optional double quantile = 1;
    -  optional double value    = 2;
    -}
    -
    -message Summary {
    -  optional uint64   sample_count = 1;
    -  optional double   sample_sum   = 2;
    -  repeated Quantile quantile     = 3;
    -
    -  optional google.protobuf.Timestamp  created_timestamp = 4;
    -}
    -
    -message Untyped {
    -  optional double value = 1;
    -}
    -
    -message Histogram {
    -  optional uint64 sample_count       = 1;
    -  optional double sample_count_float = 4; // Overrides sample_count if > 0.
    -  optional double sample_sum         = 2;
    -  // Buckets for the conventional histogram.
    -  repeated Bucket bucket             = 3; // Ordered in increasing order of upper_bound, +Inf bucket is optional.
    -
    -  optional google.protobuf.Timestamp created_timestamp = 15;
    -
    -  // Everything below here is for native histograms (also known as sparse histograms).
    -  // Native histograms are an experimental feature without stability guarantees.
    -
    -  // schema defines the bucket schema. Currently, valid numbers are -4 <= n <= 8.
    -  // They are all for base-2 bucket schemas, where 1 is a bucket boundary in each case, and
    -  // then each power of two is divided into 2^n logarithmic buckets.
    -  // Or in other words, each bucket boundary is the previous boundary times 2^(2^-n).
    -  // In the future, more bucket schemas may be added using numbers < -4 or > 8.
    -  optional sint32 schema           = 5;
    -  optional double zero_threshold   = 6; // Breadth of the zero bucket.
    -  optional uint64 zero_count       = 7; // Count in zero bucket.
    -  optional double zero_count_float = 8; // Overrides sb_zero_count if > 0.
    -
    -  // Negative buckets for the native histogram.
    -  repeated BucketSpan negative_span =  9;
    -  // Use either "negative_delta" or "negative_count", the former for
    -  // regular histograms with integer counts, the latter for float
    -  // histograms.
    -  repeated sint64 negative_delta    = 10; // Count delta of each bucket compared to previous one (or to zero for 1st bucket).
    -  repeated double negative_count    = 11; // Absolute count of each bucket.
    -
    -  // Positive buckets for the native histogram.
    -  // Use a no-op span (offset 0, length 0) for a native histogram without any
    -  // observations yet and with a zero_threshold of 0. Otherwise, it would be
    -  // indistinguishable from a classic histogram.
    -  repeated BucketSpan positive_span = 12;
    -  // Use either "positive_delta" or "positive_count", the former for
    -  // regular histograms with integer counts, the latter for float
    -  // histograms.
    -  repeated sint64 positive_delta    = 13; // Count delta of each bucket compared to previous one (or to zero for 1st bucket).
    -  repeated double positive_count    = 14; // Absolute count of each bucket.
    -
    -  // Only used for native histograms. These exemplars MUST have a timestamp.
    -  repeated Exemplar exemplars = 16;
    -}
    -
    -// A Bucket of a conventional histogram, each of which is treated as
    -// an individual counter-like time series by Prometheus.
    -message Bucket {
    -  optional uint64   cumulative_count       = 1; // Cumulative in increasing order.
    -  optional double   cumulative_count_float = 4; // Overrides cumulative_count if > 0.
    -  optional double   upper_bound            = 2; // Inclusive.
    -  optional Exemplar exemplar               = 3;
    -}
    -
    -// A BucketSpan defines a number of consecutive buckets in a native
    -// histogram with their offset. Logically, it would be more
    -// straightforward to include the bucket counts in the Span. However,
    -// the protobuf representation is more compact in the way the data is
    -// structured here (with all the buckets in a single array separate
    -// from the Spans).
    -message BucketSpan {
    -  optional sint32 offset = 1; // Gap to previous span, or starting point for 1st span (which can be negative).
    -  optional uint32 length = 2; // Length of consecutive buckets.
    -}
    -
    -message Exemplar {
    -  repeated LabelPair                 label     = 1;
    -  optional double                    value     = 2;
    -  optional google.protobuf.Timestamp timestamp = 3; // OpenMetrics-style.
    -}
    -
    -message Metric {
    -  repeated LabelPair label        = 1;
    -  optional Gauge     gauge        = 2;
    -  optional Counter   counter      = 3;
    -  optional Summary   summary      = 4;
    -  optional Untyped   untyped      = 5;
    -  optional Histogram histogram    = 7;
    -  optional int64     timestamp_ms = 6;
    -}
    -
    -message MetricFamily {
    -  optional string     name   = 1;
    -  optional string     help   = 2;
    -  optional MetricType type   = 3;
    -  repeated Metric     metric = 4;
    -  optional string     unit   = 5;
    -}
    diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    index 307b88938..5174b2d8e 100644
    --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    @@ -2,13 +2,13 @@
     
     import static org.assertj.core.api.Assertions.assertThat;
     
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_3_25_3.Metrics;
    +import com.google.protobuf.TextFormat;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics;
     import io.prometheus.metrics.model.snapshots.*;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot;
     import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot;
     import io.prometheus.metrics.model.snapshots.SummarySnapshot.SummaryDataPointSnapshot;
     import io.prometheus.metrics.model.snapshots.UnknownSnapshot.UnknownDataPointSnapshot;
    -import io.prometheus.metrics.shaded.com_google_protobuf_3_25_3.TextFormat;
     import java.io.ByteArrayOutputStream;
     import java.io.IOException;
     import org.junit.jupiter.api.Test;
    diff --git a/prometheus-metrics-shaded-dependencies/pom.xml b/prometheus-metrics-shaded-dependencies/pom.xml
    deleted file mode 100644
    index 1fb820cc3..000000000
    --- a/prometheus-metrics-shaded-dependencies/pom.xml
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -
    -
    -    4.0.0
    -
    -    
    -        io.prometheus
    -        client_java
    -        1.4.0-SNAPSHOT
    -    
    -
    -    prometheus-metrics-shaded-dependencies
    -    pom
    -
    -    Shaded Dependencies
    -    
    -        Shaded (relocated to another packagage) dependencies.
    -    
    -
    -    
    -        prometheus-metrics-shaded-protobuf
    -    
    -
    -
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    deleted file mode 100644
    index dc65c892c..000000000
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/pom.xml
    +++ /dev/null
    @@ -1,75 +0,0 @@
    -
    -
    -    4.0.0
    -
    -    
    -        io.prometheus
    -        prometheus-metrics-shaded-dependencies
    -        1.4.0-SNAPSHOT
    -    
    -
    -    prometheus-metrics-shaded-protobuf
    -
    -    Shaded Protobuf
    -    
    -        Shaded (reolocated to another package) dependencies for the Protobuf library used to create the Prometheus
    -        Protobuf format
    -    
    -
    -
    -    
    -        
    -        
    -        3.25.5
    -        
    -        3_25_3
    -    
    -
    -    
    -        
    -            com.google.protobuf
    -            protobuf-java
    -            ${protobuf.version}
    -        
    -    
    -
    -    
    -        
    -            
    -                org.apache.maven.plugins
    -                maven-shade-plugin
    -                
    -                    
    -                        package
    -                        
    -                            shade
    -                        
    -                        
    -                            true
    -                            true
    -                            
    -                                
    -                                    com.google.protobuf
    -                                    io.prometheus.metrics.shaded.com_google_protobuf_${protobuf.version.string}
    -                                
    -                            
    -                            
    -                                
    -                            
    -                            
    -                                
    -                                    *:*
    -                                    
    -                                        META-INF/maven/com.google.protobuf/**
    -                                        **/*.proto
    -                                        META-INF/MANIFEST.MF
    -                                    
    -                                
    -                            
    -                        
    -                    
    -                
    -            
    -        
    -    
    -
    diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/src/main/java/io/prometheus/metrics/shaded/com_google_protobuf/PrometheusMetricsShadedProtobuf.java b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/src/main/java/io/prometheus/metrics/shaded/com_google_protobuf/PrometheusMetricsShadedProtobuf.java
    deleted file mode 100644
    index 9d78ee8e1..000000000
    --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/src/main/java/io/prometheus/metrics/shaded/com_google_protobuf/PrometheusMetricsShadedProtobuf.java
    +++ /dev/null
    @@ -1,9 +0,0 @@
    -package io.prometheus.metrics.shaded.com_google_protobuf;
    -
    -/**
    - * This module does not need any source code, however, in order to publish it to Maven central it
    - * needs JavaDoc.
    - *
    - * 

    I'm adding this dummy class here to get JavaDoc so I can publish this module to Maven central. - */ -public class PrometheusMetricsShadedProtobuf {} diff --git a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/version-rules.xml b/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/version-rules.xml deleted file mode 100644 index 76f8da4fd..000000000 --- a/prometheus-metrics-shaded-dependencies/prometheus-metrics-shaded-protobuf/version-rules.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file From 9581eeb0e8098e3017fa167f5c32e51ea07d4619 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 9 Oct 2024 15:13:59 +0200 Subject: [PATCH 163/870] fix gh pages (#1130) Signed-off-by: Gregor Zeitlinger --- .github/workflows/github-pages.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index d78e6d4a3..43a6fd94d 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -32,16 +32,14 @@ jobs: runs-on: ubuntu-latest env: HUGO_VERSION: 0.115.4 - JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64 steps: + - uses: actions/checkout@v4 - name: Set up JDK uses: actions/setup-java@v4 with: java-version: 17 distribution: temurin cache: 'maven' - - name: Install Protoc - uses: zchee/setup-protoc@v1 - name: Install Hugo CLI run: | wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ From 740969400000c642704581cd0734f280633feb97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:07:39 +0200 Subject: [PATCH 164/870] Bump org.codehaus.mojo:versions-maven-plugin from 2.10.0 to 2.17.1 (#1131) Bumps [org.codehaus.mojo:versions-maven-plugin](https://github.com/mojohaus/versions) from 2.10.0 to 2.17.1. - [Release notes](https://github.com/mojohaus/versions/releases) - [Changelog](https://github.com/mojohaus/versions/blob/master/ReleaseNotes.md) - [Commits](https://github.com/mojohaus/versions/compare/versions-maven-plugin-2.10.0...2.17.1) --- updated-dependencies: - dependency-name: org.codehaus.mojo:versions-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f41bb926f..a3c5ceb1a 100644 --- a/pom.xml +++ b/pom.xml @@ -277,7 +277,7 @@ org.codehaus.mojo versions-maven-plugin - 2.10.0 + 2.17.1 file://${project.basedir}/version-rules.xml From cdb753333406e2291a537f01394b941564949d36 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:15:38 +0200 Subject: [PATCH 165/870] Bump org.apache.maven.plugins:maven-clean-plugin from 2.5 to 3.4.0 (#1135) Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 2.5 to 3.4.0. - [Release notes](https://github.com/apache/maven-clean-plugin/releases) - [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-2.5...maven-clean-plugin-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-clean-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a3c5ceb1a..c9f9b59e0 100644 --- a/pom.xml +++ b/pom.xml @@ -141,7 +141,7 @@ maven-clean-plugin - 2.5 + 3.4.0 maven-site-plugin From 7805ed2bb971efbc76c51250fd2eb64dd1ab514f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:35:04 +0200 Subject: [PATCH 166/870] Bump commons-io:commons-io from 2.16.1 to 2.17.0 (#1134) Bumps commons-io:commons-io from 2.16.1 to 2.17.0. --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 5f798cc1b..97748af84 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -29,7 +29,7 @@ commons-io commons-io - 2.16.1 + 2.17.0 test From a0bf173a2a3ed38847ff3022f8d085b45e14aa2e Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 9 Oct 2024 17:45:23 +0200 Subject: [PATCH 167/870] fix bug (that should have shown before) (#1136) Signed-off-by: Gregor Zeitlinger --- CONTRIBUTING.md | 6 ++++++ .../io/prometheus/metrics/core/metrics/CounterTest.java | 2 +- .../io/prometheus/metrics/core/metrics/HistogramTest.java | 4 ++-- .../java/io/prometheus/metrics/core/metrics/InfoTest.java | 2 +- .../io/prometheus/metrics/core/metrics/SummaryTest.java | 2 +- .../metrics/expositionformats/ExpositionFormatsTest.java | 2 +- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1e1eb867c..dbac64dd5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,3 +16,9 @@ Prometheus uses GitHub to manage reviews of pull requests. This repository uses [Google Java Format](https://github.com/google/google-java-format) to format the code. Run `./mvnw spotless:apply` to format the code (only changed files) before committing. + +## Running Tests + +If you're getting errors when running tests: + +- Make sure that the IDE uses only the "Maven Shade" dependency of "prometheus-metrics-exposition-formats" and the "prometheus-metrics-tracer*" dependencies. diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index 3e87d378c..9dfe8af7e 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -113,7 +113,7 @@ public void testTotalStrippedFromName() { }) { Counter counter = Counter.builder().name(name).unit(Unit.SECONDS).build(); Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(counter.collect()); - assertThat(TextFormat.printer().shortDebugString(protobufData)) + assertThat(TextFormat.printer().printToString(protobufData)) .isEqualTo( "name: \"my_counter_seconds_total\" type: COUNTER metric { counter { value: 0.0 } }"); } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index ad514e9d0..46b755907 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -92,7 +92,7 @@ private void run() throws NoSuchFieldException, IllegalAccessException { new PrometheusProtobufWriter().convert(histogram.collect()); String expectedWithMetadata = "name: \"test\" type: HISTOGRAM metric { histogram { " + expected + " } }"; - assertThat(TextFormat.printer().shortDebugString(protobufData)) + assertThat(TextFormat.printer().printToString(protobufData)) .as("test \"" + name + "\" failed") .isEqualTo(expectedWithMetadata); } @@ -941,7 +941,7 @@ public void testDefaults() throws IOException { // protobuf Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(snapshot); - assertThat(TextFormat.printer().shortDebugString(protobufData)).isEqualTo(expectedProtobuf); + assertThat(TextFormat.printer().printToString(protobufData)).isEqualTo(expectedProtobuf); // text ByteArrayOutputStream out = new ByteArrayOutputStream(); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index 4ea61a801..3728f8eee 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -27,7 +27,7 @@ public void testInfoStrippedFromName() { Info info = Info.builder().name(name).labelNames(labelName).build(); info.addLabelValues("value"); Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(info.collect()); - assertThat(TextFormat.printer().shortDebugString(protobufData)) + assertThat(TextFormat.printer().printToString(protobufData)) .isEqualTo( "name: \"jvm_runtime_info\" type: GAUGE metric { label { name: \"my_key\" value: \"value\" } gauge { value: 1.0 } }"); } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java index b369ed8fb..642340e13 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SummaryTest.java @@ -128,7 +128,7 @@ public void testMaxAge() throws InterruptedException { assertThat(getQuantile(summary, 0.99, Labels.EMPTY)).isEqualTo(8.0); // From bucket 2. Thread.sleep(600); assertThat(getQuantile(summary, 0.99, Labels.EMPTY)) - .isEqualTo(Double.NaN); // Bucket 1 again, now it is empty. + .isNaN(); // Bucket 1 again, now it is empty. } @Test diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index 5174b2d8e..61d8fbb64 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -2634,7 +2634,7 @@ private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot private void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { PrometheusProtobufWriter writer = new PrometheusProtobufWriter(); Metrics.MetricFamily protobufData = writer.convert(snapshot); - String actual = TextFormat.printer().shortDebugString(protobufData); + String actual = TextFormat.printer().printToString(protobufData); assertThat(actual).isEqualTo(expected); } } From 9af5f2821259ecf4db63539b3e9accbdea432cc4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:45:42 +0200 Subject: [PATCH 168/870] Bump org.apache.maven.plugins:maven-dependency-plugin (#1133) Bumps [org.apache.maven.plugins:maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.1.2 to 3.8.0. - [Release notes](https://github.com/apache/maven-dependency-plugin/releases) - [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.1.2...maven-dependency-plugin-3.8.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-dependency-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c9f9b59e0..f448a4811 100644 --- a/pom.xml +++ b/pom.xml @@ -162,7 +162,7 @@ maven-dependency-plugin - 3.1.2 + 3.8.0 maven-javadoc-plugin From 8d887a0f9773133050fd241efb2e7cd0ef287979 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:19:18 +0200 Subject: [PATCH 169/870] Bump org.apache.maven.plugins:maven-surefire-plugin from 2.12.4 to 3.5.1 (#1132) * Bump org.apache.maven.plugins:maven-surefire-plugin from 2.12.4 to 3.5.1 Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 2.12.4 to 3.5.1. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-2.12.4...surefire-3.5.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * fix build Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- pom.xml | 2 +- .../metrics/core/metrics/CounterTest.java | 2 +- .../metrics/core/metrics/HistogramTest.java | 4 +-- .../metrics/core/metrics/InfoTest.java | 2 +- prometheus-metrics-exposition-formats/pom.xml | 31 +++++++------------ .../ExpositionFormatsTest.java | 2 +- 6 files changed, 18 insertions(+), 25 deletions(-) diff --git a/pom.xml b/pom.xml index f448a4811..3e8a2809a 100644 --- a/pom.xml +++ b/pom.xml @@ -129,7 +129,7 @@ maven-surefire-plugin - 2.12.4 + 3.5.1 maven-jar-plugin diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index 9dfe8af7e..3e87d378c 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -113,7 +113,7 @@ public void testTotalStrippedFromName() { }) { Counter counter = Counter.builder().name(name).unit(Unit.SECONDS).build(); Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(counter.collect()); - assertThat(TextFormat.printer().printToString(protobufData)) + assertThat(TextFormat.printer().shortDebugString(protobufData)) .isEqualTo( "name: \"my_counter_seconds_total\" type: COUNTER metric { counter { value: 0.0 } }"); } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index 46b755907..ad514e9d0 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -92,7 +92,7 @@ private void run() throws NoSuchFieldException, IllegalAccessException { new PrometheusProtobufWriter().convert(histogram.collect()); String expectedWithMetadata = "name: \"test\" type: HISTOGRAM metric { histogram { " + expected + " } }"; - assertThat(TextFormat.printer().printToString(protobufData)) + assertThat(TextFormat.printer().shortDebugString(protobufData)) .as("test \"" + name + "\" failed") .isEqualTo(expectedWithMetadata); } @@ -941,7 +941,7 @@ public void testDefaults() throws IOException { // protobuf Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(snapshot); - assertThat(TextFormat.printer().printToString(protobufData)).isEqualTo(expectedProtobuf); + assertThat(TextFormat.printer().shortDebugString(protobufData)).isEqualTo(expectedProtobuf); // text ByteArrayOutputStream out = new ByteArrayOutputStream(); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index 3728f8eee..4ea61a801 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -27,7 +27,7 @@ public void testInfoStrippedFromName() { Info info = Info.builder().name(name).labelNames(labelName).build(); info.addLabelValues("value"); Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(info.collect()); - assertThat(TextFormat.printer().printToString(protobufData)) + assertThat(TextFormat.printer().shortDebugString(protobufData)) .isEqualTo( "name: \"jvm_runtime_info\" type: GAUGE metric { label { name: \"my_key\" value: \"value\" } gauge { value: 1.0 } }"); } diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index b8c8bf508..b5d9f75bd 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -73,6 +73,18 @@ + + add-source + generate-sources + + add-source + + + + src/main/generated/ + + + @@ -97,25 +109,6 @@ - - org.codehaus.mojo - build-helper-maven-plugin - 3.6.0 - - - add-source - generate-sources - - add-source - - - - src/main/generated/ - - - - - maven-javadoc-plugin diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index 61d8fbb64..5174b2d8e 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -2634,7 +2634,7 @@ private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot private void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { PrometheusProtobufWriter writer = new PrometheusProtobufWriter(); Metrics.MetricFamily protobufData = writer.convert(snapshot); - String actual = TextFormat.printer().printToString(protobufData); + String actual = TextFormat.printer().shortDebugString(protobufData); assertThat(actual).isEqualTo(expected); } } From 68849a8ef68605ad0af0c6b9129e09a2e8b6e746 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 10 Oct 2024 07:23:34 +0200 Subject: [PATCH 170/870] fix shading (#1137) Signed-off-by: Gregor Zeitlinger --- .../io/prometheus/metrics/core/metrics/CounterTest.java | 4 ++-- .../io/prometheus/metrics/core/metrics/HistogramTest.java | 6 +++--- .../java/io/prometheus/metrics/core/metrics/InfoTest.java | 4 ++-- prometheus-metrics-exposition-formats/pom.xml | 5 +++++ .../metrics/expositionformats/TextFormatUtil.java | 6 ++++++ .../metrics/expositionformats/ExpositionFormatsTest.java | 3 +-- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index 3e87d378c..a87153ec6 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -7,13 +7,13 @@ import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; +import io.prometheus.metrics.expositionformats.TextFormatUtil; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.Label; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.Unit; -import io.prometheus.metrics.shaded.com_google_protobuf_4_28_2.TextFormat; import io.prometheus.metrics.tracer.common.SpanContext; import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; import java.util.Arrays; @@ -113,7 +113,7 @@ public void testTotalStrippedFromName() { }) { Counter counter = Counter.builder().name(name).unit(Unit.SECONDS).build(); Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(counter.collect()); - assertThat(TextFormat.printer().shortDebugString(protobufData)) + assertThat(TextFormatUtil.shortDebugString(protobufData)) .isEqualTo( "name: \"my_counter_seconds_total\" type: COUNTER metric { counter { value: 0.0 } }"); } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index ad514e9d0..4d55c3236 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -9,6 +9,7 @@ import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; +import io.prometheus.metrics.expositionformats.TextFormatUtil; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics; import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket; import io.prometheus.metrics.model.snapshots.Exemplar; @@ -16,7 +17,6 @@ import io.prometheus.metrics.model.snapshots.HistogramSnapshot; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import io.prometheus.metrics.shaded.com_google_protobuf_4_28_2.TextFormat; import io.prometheus.metrics.tracer.common.SpanContext; import io.prometheus.metrics.tracer.initializer.SpanContextSupplier; import java.io.ByteArrayOutputStream; @@ -92,7 +92,7 @@ private void run() throws NoSuchFieldException, IllegalAccessException { new PrometheusProtobufWriter().convert(histogram.collect()); String expectedWithMetadata = "name: \"test\" type: HISTOGRAM metric { histogram { " + expected + " } }"; - assertThat(TextFormat.printer().shortDebugString(protobufData)) + assertThat(TextFormatUtil.shortDebugString(protobufData)) .as("test \"" + name + "\" failed") .isEqualTo(expectedWithMetadata); } @@ -941,7 +941,7 @@ public void testDefaults() throws IOException { // protobuf Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(snapshot); - assertThat(TextFormat.printer().shortDebugString(protobufData)).isEqualTo(expectedProtobuf); + assertThat(TextFormatUtil.shortDebugString(protobufData)).isEqualTo(expectedProtobuf); // text ByteArrayOutputStream out = new ByteArrayOutputStream(); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index 4ea61a801..e3b06ecc8 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -5,10 +5,10 @@ import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; +import io.prometheus.metrics.expositionformats.TextFormatUtil; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import io.prometheus.metrics.shaded.com_google_protobuf_4_28_2.TextFormat; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -27,7 +27,7 @@ public void testInfoStrippedFromName() { Info info = Info.builder().name(name).labelNames(labelName).build(); info.addLabelValues("value"); Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(info.collect()); - assertThat(TextFormat.printer().shortDebugString(protobufData)) + assertThat(TextFormatUtil.shortDebugString(protobufData)) .isEqualTo( "name: \"jvm_runtime_info\" type: GAUGE metric { label { name: \"my_key\" value: \"value\" } gauge { value: 1.0 } }"); } diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index b5d9f75bd..4f2f35422 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -127,6 +127,11 @@ true true + + + com.google.protobuf:protobuf-java + + com.google.protobuf diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java index 54daaaa3e..da64f30bb 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java @@ -1,5 +1,7 @@ package io.prometheus.metrics.expositionformats; +import com.google.protobuf.MessageOrBuilder; +import com.google.protobuf.TextFormat; import io.prometheus.metrics.model.snapshots.Labels; import java.io.IOException; import java.io.OutputStreamWriter; @@ -81,4 +83,8 @@ static void writeLabels( } writer.write('}'); } + + public static String shortDebugString(MessageOrBuilder protobufData) { + return TextFormat.printer().shortDebugString(protobufData); + } } diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index 5174b2d8e..7a7a0ea7e 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -2,7 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.google.protobuf.TextFormat; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics; import io.prometheus.metrics.model.snapshots.*; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; @@ -2634,7 +2633,7 @@ private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot private void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { PrometheusProtobufWriter writer = new PrometheusProtobufWriter(); Metrics.MetricFamily protobufData = writer.convert(snapshot); - String actual = TextFormat.printer().shortDebugString(protobufData); + String actual = TextFormatUtil.shortDebugString(protobufData); assertThat(actual).isEqualTo(expected); } } From eb48f5d1ea6de3e8833f8c3898191ef6bc7844a3 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 10 Oct 2024 08:58:01 +0200 Subject: [PATCH 171/870] fix all warnings (#1138) * fix warnings Signed-off-by: Gregor Zeitlinger * fix warnings Signed-off-by: Gregor Zeitlinger * fix warnings Signed-off-by: Gregor Zeitlinger * fix warnings Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .../example-greeting-service/pom.xml | 13 +++++++++++ .../greeting/GreetingServlet.java | 2 ++ .../example-hello-world-app/pom.xml | 13 +++++++++++ .../otel_exemplars/app/HelloWorldServlet.java | 2 ++ .../multitarget/SampleMultiCollector.java | 5 ++--- .../example-exporter-servlet-tomcat/pom.xml | 13 +++++++++++ .../tomcat_servlet/HelloWorldServlet.java | 2 ++ .../it-exporter-servlet-tomcat-sample/pom.xml | 13 +++++++++++ pom.xml | 12 +++++++--- .../config/PrometheusPropertiesException.java | 2 ++ .../metrics/core/datapoints/TimerApi.java | 9 +++++--- .../metrics/core/metrics/Metric.java | 2 +- .../metrics/core/metrics/SlidingWindow.java | 1 + .../metrics/core/metrics/StatefulMetric.java | 5 +++-- .../metrics/core/metrics/GaugeTest.java | 3 ++- .../PrometheusMetricProducer.java | 10 ++++----- .../exporter/opentelemetry/ExemplarTest.java | 6 +++-- .../pom.xml | 21 +++++++++++++++++- .../jakarta/PrometheusMetricsServlet.java | 2 ++ .../javax/PrometheusMetricsServlet.java | 2 ++ .../OpenMetricsTextFormatWriter.java | 2 +- .../PrometheusProtobufWriter.java | 6 ++--- .../PrometheusTextFormatWriter.java | 7 +++--- .../expositionformats/TextFormatUtil.java | 2 +- .../ExpositionFormatsTest.java | 14 +++++++----- .../caffeine/CacheMetricsCollector.java | 13 ++++++----- .../dropwizard5/DropwizardExports.java | 15 +++++++------ .../guava/CacheMetricsCollector.java | 14 ++++++------ .../JvmMemoryPoolAllocationMetricsTest.java | 2 +- .../jvm/JvmThreadsMetricsTest.java | 2 +- .../metrics/model/registry/Collector.java | 12 +++++----- .../model/registry/MultiCollector.java | 2 +- .../model/registry/PrometheusRegistry.java | 8 +++---- .../model/snapshots/CounterSnapshot.java | 4 ++-- .../snapshots/DuplicateLabelsException.java | 2 ++ .../model/snapshots/GaugeSnapshot.java | 4 ++-- .../model/snapshots/HistogramSnapshot.java | 5 +++-- .../metrics/model/snapshots/InfoSnapshot.java | 4 ++-- .../model/snapshots/MetricSnapshot.java | 18 +++++---------- .../model/snapshots/MetricSnapshots.java | 22 +++++++++---------- .../model/snapshots/StateSetSnapshot.java | 5 +++-- .../model/snapshots/SummarySnapshot.java | 5 +++-- .../model/snapshots/UnknownSnapshot.java | 5 +++-- .../registry/PrometheusRegistryTest.java | 8 +++---- .../model/snapshots/MetricSnapshotTest.java | 2 +- .../model/snapshots/MetricSnapshotsTest.java | 2 +- .../model/snapshots/SnapshotTestUtil.java | 2 +- .../bridge/SimpleclientCollector.java | 14 ++++++------ 48 files changed, 220 insertions(+), 119 deletions(-) diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 530c74cea..fc329b061 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -41,6 +41,19 @@ ${project.artifactId} + + maven-compiler-plugin + + 17 + 17 + 17 + true + + -Xlint:all + -Werror + + + org.apache.maven.plugins maven-shade-plugin diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java index af1652f76..45b2c8a79 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java @@ -13,6 +13,8 @@ /** Hello World REST servlet, with an example counter and an example histogram. */ public class GreetingServlet extends HttpServlet { + private static final long serialVersionUID = 0L; + private final Random random = new Random(0); private final Histogram histogram; diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 88ad9c667..e7ab8cbd6 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -41,6 +41,19 @@ ${project.artifactId} + + maven-compiler-plugin + + 17 + 17 + 17 + true + + -Xlint:all + -Werror + + + org.apache.maven.plugins maven-shade-plugin diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java index fbe293d50..f5a90d977 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java @@ -20,6 +20,8 @@ /** Hello World REST servlet, with an example counter and an example histogram. */ public class HelloWorldServlet extends HttpServlet { + private static final long serialVersionUID = 0L; + private final Random random = new Random(0); private final Histogram histogram; diff --git a/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java index 7a05f0a8b..f9cea3f87 100644 --- a/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java +++ b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java @@ -71,11 +71,10 @@ protected MetricSnapshots collectMetricSnapshots(PrometheusScrapeRequest scrapeR gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); } } - Collection snaps = new ArrayList(); + Collection> snaps = new ArrayList<>(); snaps.add(counterBuilder.build()); snaps.add(gaugeBuilder.build()); - MetricSnapshots msnaps = new MetricSnapshots(snaps); - return msnaps; + return new MetricSnapshots(snaps); } public List getPrometheusNames() { diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index b253d7c50..357dd3118 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -41,6 +41,19 @@ ${project.artifactId} + + maven-compiler-plugin + + 17 + 17 + 17 + true + + -Xlint:all + -Werror + + + org.apache.maven.plugins maven-shade-plugin diff --git a/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java b/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java index eb2fa4f19..e2b654f34 100644 --- a/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java +++ b/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java @@ -14,6 +14,8 @@ /** Hello World REST servlet, with an example counter and an example histogram. */ public class HelloWorldServlet extends HttpServlet { + private static final long serialVersionUID = 0L; + private final Random random = new Random(0); // Note: The requests_total counter is not a great example, because the diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 606be4c2a..e9ebcb583 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -36,6 +36,19 @@ exporter-servlet-tomcat-sample + + maven-compiler-plugin + + 17 + 17 + 17 + true + + -Xlint:all + -Werror + + + org.apache.maven.plugins maven-shade-plugin diff --git a/pom.xml b/pom.xml index 3e8a2809a..6ae53a26b 100644 --- a/pom.xml +++ b/pom.xml @@ -125,7 +125,7 @@ maven-compiler-plugin - 3.1 + 3.13.0 maven-surefire-plugin @@ -270,8 +270,14 @@ maven-compiler-plugin - 1.8 - 1.8 + 8 + 8 + 8 + true + + -Xlint:all + -Werror + diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesException.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesException.java index 5024cc45a..bdb024514 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesException.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesException.java @@ -2,6 +2,8 @@ public class PrometheusPropertiesException extends RuntimeException { + private static final long serialVersionUID = 0L; + public PrometheusPropertiesException(String msg) { super(msg); } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/TimerApi.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/TimerApi.java index d4266c04c..8267f7f78 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/TimerApi.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/TimerApi.java @@ -57,22 +57,25 @@ public interface TimerApi { * must use base units (e.g. seconds, bytes) and leave converting them to something more readable * to graphing tools". */ + @SuppressWarnings("try") default void time(Runnable func) { - try (Timer timer = startTimer()) { + try (Timer ignored = startTimer()) { func.run(); } } /** Like {@link #time(Runnable)}, but returns the return value of {@code func}. */ + @SuppressWarnings("try") default T time(Supplier func) { - try (Timer timer = startTimer()) { + try (Timer ignored = startTimer()) { return func.get(); } } /** Like {@link #time(Supplier)}, but {@code func} may throw a checked {@code Exception}. */ + @SuppressWarnings("try") default T timeChecked(Callable func) throws Exception { - try (Timer timer = startTimer()) { + try (Timer ignored = startTimer()) { return func.call(); } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Metric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Metric.java index d3c00eca0..4821e93cd 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Metric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Metric.java @@ -19,7 +19,7 @@ protected Metric(Builder builder) { } @Override - public abstract MetricSnapshot collect(); + public abstract MetricSnapshot collect(); protected abstract static class Builder, M extends Metric> { diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java index 93fa20d0e..c9586e179 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java @@ -39,6 +39,7 @@ public class SlidingWindow { * @param maxAgeSeconds after this amount of time an instance of T gets evicted. * @param ageBuckets number of age buckets. */ + @SuppressWarnings("unchecked") public SlidingWindow( Class clazz, Supplier constructor, diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java index dc61b943d..1d2bfe02e 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java @@ -45,9 +45,9 @@ protected StatefulMetric(Builder builder) { /** * labels and metricData have the same size. labels.get(i) are the labels for metricData.get(i). */ - protected abstract MetricSnapshot collect(List labels, List metricData); + protected abstract MetricSnapshot collect(List labels, List metricData); - public MetricSnapshot collect() { + public MetricSnapshot collect() { if (labelNames.length == 0 && data.isEmpty()) { // This is a metric without labels that has not been used yet. Initialize the data on the fly. labelValues(); @@ -129,6 +129,7 @@ public void clear() { protected abstract T newDataPoint(); + @SuppressWarnings("unchecked") protected T getNoLabels() { if (noLabels == null) { // Note that this will throw an IllegalArgumentException if labelNames is not empty. diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java index 1e48d63c0..9aa0b04b3 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java @@ -80,8 +80,9 @@ public void testSet() { } @Test + @SuppressWarnings("try") public void testTimer() throws InterruptedException { - try (Timer timer = noLabels.startTimer()) { + try (Timer ignored = noLabels.startTimer()) { Thread.sleep(12); } assertThat(getValue(noLabels)) diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java index 4b8b5591f..a3022289a 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java @@ -51,7 +51,7 @@ public Collection collectAllMetrics() { resourceWithTargetInfo, scopeFromInfo != null ? scopeFromInfo : instrumentationScopeInfo, System.currentTimeMillis()); - for (MetricSnapshot snapshot : snapshots) { + for (MetricSnapshot snapshot : snapshots) { if (snapshot instanceof CounterSnapshot) { addUnlessNull(result, factory.create((CounterSnapshot) snapshot)); } else if (snapshot instanceof GaugeSnapshot) { @@ -78,10 +78,10 @@ public Collection collectAllMetrics() { private Resource resourceFromTargetInfo(MetricSnapshots snapshots) { ResourceBuilder result = Resource.builder(); - for (MetricSnapshot snapshot : snapshots) { + for (MetricSnapshot snapshot : snapshots) { if (snapshot.getMetadata().getName().equals("target") && snapshot instanceof InfoSnapshot) { InfoSnapshot targetInfo = (InfoSnapshot) snapshot; - if (targetInfo.getDataPoints().size() > 0) { + if (!targetInfo.getDataPoints().isEmpty()) { InfoSnapshot.InfoDataPointSnapshot data = targetInfo.getDataPoints().get(0); Labels labels = data.getLabels(); for (int i = 0; i < labels.size(); i++) { @@ -95,11 +95,11 @@ private Resource resourceFromTargetInfo(MetricSnapshots snapshots) { private InstrumentationScopeInfo instrumentationScopeFromOTelScopeInfo( MetricSnapshots snapshots) { - for (MetricSnapshot snapshot : snapshots) { + for (MetricSnapshot snapshot : snapshots) { if (snapshot.getMetadata().getPrometheusName().equals("otel_scope") && snapshot instanceof InfoSnapshot) { InfoSnapshot scopeInfo = (InfoSnapshot) snapshot; - if (scopeInfo.getDataPoints().size() > 0) { + if (!scopeInfo.getDataPoints().isEmpty()) { Labels labels = scopeInfo.getDataPoints().get(0).getLabels(); String name = null; String version = null; diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java index def62834f..48054b192 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExemplarTest.java @@ -70,13 +70,14 @@ public void tearDown() { } @Test + @SuppressWarnings("try") public void sampledExemplarIsForwarded() { try (SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().setSampler(Sampler.alwaysOn()).build()) { Tracer test = sdkTracerProvider.get(INSTRUMENTATION_SCOPE_NAME); Span span = test.spanBuilder(SPAN_NAME).startSpan(); - try (Scope scope = span.makeCurrent()) { + try (Scope ignored = span.makeCurrent()) { testCounter.inc(2); } } @@ -95,13 +96,14 @@ public void sampledExemplarIsForwarded() { } @Test + @SuppressWarnings("try") public void notSampledExemplarIsNotForwarded() { try (SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().setSampler(Sampler.alwaysOff()).build()) { Tracer test = sdkTracerProvider.get(INSTRUMENTATION_SCOPE_NAME); Span span = test.spanBuilder(SPAN_NAME).startSpan(); - try (Scope scope = span.makeCurrent()) { + try (Scope ignored = span.makeCurrent()) { testCounter.inc(2); } } diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 02e225888..d135fb36d 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 @@ -34,4 +35,22 @@ + + + + maven-compiler-plugin + + 17 + 17 + 17 + true + + -Xlint:all + -Werror + + + + + + diff --git a/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.java b/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.java index 28728dc94..5e22fc3fd 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.java +++ b/prometheus-metrics-exporter-servlet-jakarta/src/main/java/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.java @@ -16,6 +16,8 @@ */ public class PrometheusMetricsServlet extends HttpServlet { + private static final long serialVersionUID = 0L; + private final PrometheusScrapeHandler handler; public PrometheusMetricsServlet() { diff --git a/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java b/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java index fe81fe96b..a486aec93 100644 --- a/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java +++ b/prometheus-metrics-exporter-servlet-javax/src/main/java/io/prometheus/metrics/exporter/servlet/javax/PrometheusMetricsServlet.java @@ -15,6 +15,8 @@ */ public class PrometheusMetricsServlet extends HttpServlet { + private static final long serialVersionUID = 0L; + private final PrometheusScrapeHandler handler; /** Default constructor. Uses the default PrometheusProperties and PrometheusRegistry. */ diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java index 00ac6b9fc..10f54848b 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java @@ -65,7 +65,7 @@ public String getContentType() { public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); - for (MetricSnapshot snapshot : metricSnapshots) { + for (MetricSnapshot snapshot : metricSnapshots) { if (snapshot.getDataPoints().size() > 0) { if (snapshot instanceof CounterSnapshot) { writeCounter(writer, (CounterSnapshot) snapshot); diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java index 7e722b056..87e50ed8b 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java @@ -52,7 +52,7 @@ public String getContentType() { public String toDebugString(MetricSnapshots metricSnapshots) { StringBuilder stringBuilder = new StringBuilder(); - for (MetricSnapshot snapshot : metricSnapshots) { + for (MetricSnapshot snapshot : metricSnapshots) { if (snapshot.getDataPoints().size() > 0) { stringBuilder.append(TextFormat.printer().printToString(convert(snapshot))); } @@ -62,14 +62,14 @@ public String toDebugString(MetricSnapshots metricSnapshots) { @Override public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { - for (MetricSnapshot snapshot : metricSnapshots) { + for (MetricSnapshot snapshot : metricSnapshots) { if (snapshot.getDataPoints().size() > 0) { convert(snapshot).writeDelimitedTo(out); } } } - public Metrics.MetricFamily convert(MetricSnapshot snapshot) { + public Metrics.MetricFamily convert(MetricSnapshot snapshot) { Metrics.MetricFamily.Builder builder = Metrics.MetricFamily.newBuilder(); if (snapshot instanceof CounterSnapshot) { for (CounterDataPointSnapshot data : ((CounterSnapshot) snapshot).getDataPoints()) { diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java index 28d049f25..786e1d9bd 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java @@ -59,7 +59,7 @@ public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOEx // "unknown", "gauge", "counter", "stateset", "info", "histogram", "gaugehistogram", and // "summary". OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); - for (MetricSnapshot snapshot : metricSnapshots) { + for (MetricSnapshot snapshot : metricSnapshots) { if (snapshot.getDataPoints().size() > 0) { if (snapshot instanceof CounterSnapshot) { writeCounter(writer, (CounterSnapshot) snapshot); @@ -79,7 +79,7 @@ public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOEx } } if (writeCreatedTimestamps) { - for (MetricSnapshot snapshot : metricSnapshots) { + for (MetricSnapshot snapshot : metricSnapshots) { if (snapshot.getDataPoints().size() > 0) { if (snapshot instanceof CounterSnapshot) { writeCreated(writer, snapshot); @@ -94,7 +94,8 @@ public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOEx writer.flush(); } - public void writeCreated(OutputStreamWriter writer, MetricSnapshot snapshot) throws IOException { + public void writeCreated(OutputStreamWriter writer, MetricSnapshot snapshot) + throws IOException { boolean metadataWritten = false; MetricMetadata metadata = snapshot.getMetadata(); for (DataPointSnapshot data : snapshot.getDataPoints()) { diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java index da64f30bb..c61a8f1b6 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java @@ -85,6 +85,6 @@ static void writeLabels( } public static String shortDebugString(MessageOrBuilder protobufData) { - return TextFormat.printer().shortDebugString(protobufData); + return TextFormat.printer().emittingSingleLine(true).printToString(protobufData); } } diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index 7a7a0ea7e..a5e427a89 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -2592,7 +2592,8 @@ public void testLabelValueEscape() throws IOException { assertPrometheusText(prometheus, counter); } - private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) throws IOException { + private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) + throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, false); writer.write(out, MetricSnapshots.of(snapshot)); @@ -2600,14 +2601,14 @@ private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) thr } private void assertOpenMetricsTextWithExemplarsOnAllTimeSeries( - String expected, MetricSnapshot snapshot) throws IOException { + String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); writer.write(out, MetricSnapshots.of(snapshot)); assertThat(out).hasToString(expected); } - private void assertOpenMetricsTextWithoutCreated(String expected, MetricSnapshot snapshot) + private void assertOpenMetricsTextWithoutCreated(String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, false); @@ -2615,14 +2616,15 @@ private void assertOpenMetricsTextWithoutCreated(String expected, MetricSnapshot assertThat(out).hasToString(expected); } - private void assertPrometheusText(String expected, MetricSnapshot snapshot) throws IOException { + private void assertPrometheusText(String expected, MetricSnapshot snapshot) + throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(true); writer.write(out, MetricSnapshots.of(snapshot)); assertThat(out).hasToString(expected); } - private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot snapshot) + private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(false); @@ -2630,7 +2632,7 @@ private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot assertThat(out).hasToString(expected); } - private void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { + private void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { PrometheusProtobufWriter writer = new PrometheusProtobufWriter(); Metrics.MetricFamily protobufData = writer.convert(snapshot); String actual = TextFormatUtil.shortDebugString(protobufData); diff --git a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java index 69b852a41..c195ae77c 100644 --- a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java +++ b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java @@ -11,6 +11,7 @@ import io.prometheus.metrics.model.snapshots.MetricSnapshots; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -53,7 +54,7 @@ public class CacheMetricsCollector implements MultiCollector { private static final double NANOSECONDS_PER_SECOND = 1_000_000_000.0; - protected final ConcurrentMap children = new ConcurrentHashMap(); + protected final ConcurrentMap> children = new ConcurrentHashMap<>(); /** * Add or replace the cache with the given name. @@ -63,7 +64,7 @@ public class CacheMetricsCollector implements MultiCollector { * @param cacheName The name of the cache, will be the metrics label value * @param cache The cache being monitored */ - public void addCache(String cacheName, Cache cache) { + public void addCache(String cacheName, Cache cache) { children.put(cacheName, cache); } @@ -75,7 +76,7 @@ public void addCache(String cacheName, Cache cache) { * @param cacheName The name of the cache, will be the metrics label value * @param cache The cache being monitored */ - public void addCache(String cacheName, AsyncCache cache) { + public void addCache(String cacheName, AsyncCache cache) { children.put(cacheName, cache.synchronous()); } @@ -86,7 +87,7 @@ public void addCache(String cacheName, AsyncCache cache) { * * @param cacheName cache to be removed */ - public Cache removeCache(String cacheName) { + public Cache nremoveCache(String cacheName) { return children.remove(cacheName); } @@ -141,8 +142,8 @@ public MetricSnapshots collect() { .name("caffeine_cache_load_duration_seconds") .help("Cache load duration: both success and failures"); - for (final Map.Entry c : children.entrySet()) { - final List cacheName = Arrays.asList(c.getKey()); + for (final Map.Entry> c : children.entrySet()) { + final List cacheName = Collections.singletonList(c.getKey()); final Labels labels = Labels.of(labelNames, cacheName); final CacheStats stats = c.getValue().stats(); diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java index c87f4aa90..6d99c176d 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java @@ -70,7 +70,7 @@ private MetricMetadata getMetricMetaData(String metricName, Metric metric) { * Export counter as Prometheus Gauge. */ - MetricSnapshot fromCounter(String dropwizardName, Counter counter) { + MetricSnapshot fromCounter(String dropwizardName, Counter counter) { MetricMetadata metadata = getMetricMetaData(dropwizardName, counter); CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder() @@ -84,7 +84,7 @@ MetricSnapshot fromCounter(String dropwizardName, Counter counter) { } /** Export gauge as a prometheus gauge. */ - MetricSnapshot fromGauge(String dropwizardName, Gauge gauge) { + MetricSnapshot fromGauge(String dropwizardName, Gauge gauge) { Object obj = gauge.getValue(); double value; if (obj instanceof Number) { @@ -119,7 +119,7 @@ MetricSnapshot fromGauge(String dropwizardName, Gauge gauge) { * @param count the total sample count for this snapshot. * @param factor a factor to apply to histogram values. */ - MetricSnapshot fromSnapshotAndCount( + MetricSnapshot fromSnapshotAndCount( String dropwizardName, Snapshot snapshot, long count, double factor, String helpMessage) { Quantiles quantiles = Quantiles.builder() @@ -144,7 +144,7 @@ MetricSnapshot fromSnapshotAndCount( } /** Convert histogram snapshot. */ - MetricSnapshot fromHistogram(String dropwizardName, Histogram histogram) { + MetricSnapshot fromHistogram(String dropwizardName, Histogram histogram) { return fromSnapshotAndCount( dropwizardName, histogram.getSnapshot(), @@ -154,7 +154,7 @@ MetricSnapshot fromHistogram(String dropwizardName, Histogram histogram) { } /** Export Dropwizard Timer as a histogram. Use TIME_UNIT as time unit. */ - MetricSnapshot fromTimer(String dropwizardName, Timer timer) { + MetricSnapshot fromTimer(String dropwizardName, Timer timer) { return fromSnapshotAndCount( dropwizardName, timer.getSnapshot(), @@ -164,7 +164,7 @@ MetricSnapshot fromTimer(String dropwizardName, Timer timer) { } /** Export a Meter as a prometheus COUNTER. */ - MetricSnapshot fromMeter(String dropwizardName, Meter meter) { + MetricSnapshot fromMeter(String dropwizardName, Meter meter) { MetricMetadata metadata = getMetricMetaData(dropwizardName + "_total", meter); CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder().value(meter.getCount()); @@ -179,7 +179,8 @@ MetricSnapshot fromMeter(String dropwizardName, Meter meter) { @Override public MetricSnapshots collect() { MetricSnapshots.Builder metricSnapshots = MetricSnapshots.builder(); - for (SortedMap.Entry entry : registry.getGauges(metricFilter).entrySet()) { + for (@SuppressWarnings("rawtypes") + SortedMap.Entry entry : registry.getGauges(metricFilter).entrySet()) { Optional.ofNullable(fromGauge(entry.getKey().getKey(), entry.getValue())) .map(metricSnapshots::metricSnapshot); } diff --git a/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java index 5e17338b7..e1da20071 100644 --- a/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java +++ b/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java @@ -9,7 +9,7 @@ import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import io.prometheus.metrics.model.snapshots.SummarySnapshot; -import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -53,7 +53,7 @@ public class CacheMetricsCollector implements MultiCollector { private static final double NANOSECONDS_PER_SECOND = 1_000_000_000.0; - protected final ConcurrentMap children = new ConcurrentHashMap<>(); + protected final ConcurrentMap> children = new ConcurrentHashMap<>(); /** * Add or replace the cache with the given name. @@ -63,7 +63,7 @@ public class CacheMetricsCollector implements MultiCollector { * @param cacheName The name of the cache, will be the metrics label value * @param cache The cache being monitored */ - public void addCache(String cacheName, Cache cache) { + public void addCache(String cacheName, Cache cache) { children.put(cacheName, cache); } @@ -74,7 +74,7 @@ public void addCache(String cacheName, Cache cache) { * * @param cacheName cache to be removed */ - public Cache removeCache(String cacheName) { + public Cache removeCache(String cacheName) { return children.remove(cacheName); } @@ -90,7 +90,7 @@ public void clear() { @Override public MetricSnapshots collect() { final MetricSnapshots.Builder metricSnapshotsBuilder = MetricSnapshots.builder(); - final List labelNames = Arrays.asList("cache"); + final List labelNames = Collections.singletonList("cache"); final CounterSnapshot.Builder cacheHitTotal = CounterSnapshot.builder().name("guava_cache_hit").help("Cache hit totals"); @@ -122,8 +122,8 @@ public MetricSnapshots collect() { .name("guava_cache_load_duration_seconds") .help("Cache load duration: both success and failures"); - for (final Map.Entry c : children.entrySet()) { - final List cacheName = Arrays.asList(c.getKey()); + for (final Map.Entry> c : children.entrySet()) { + final List cacheName = Collections.singletonList(c.getKey()); final Labels labels = Labels.of(labelNames, cacheName); final CacheStats stats = c.getValue().stats(); diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java index 67dd6f2e6..6aeacb13f 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetricsTest.java @@ -50,7 +50,7 @@ public void testListenerLogic() { } private double getCountByPool(String metricName, String poolName, MetricSnapshots snapshots) { - for (MetricSnapshot snapshot : snapshots) { + for (MetricSnapshot snapshot : snapshots) { if (snapshot.getMetadata().getPrometheusName().equals(metricName)) { for (CounterSnapshot.CounterDataPointSnapshot data : ((CounterSnapshot) snapshot).getDataPoints()) { diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java index 16e04b76c..fe97561aa 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java @@ -145,7 +145,7 @@ public void testInvalidThreadIds() { private Map getCountByState(MetricSnapshots snapshots) { Map result = new HashMap<>(); - for (MetricSnapshot snapshot : snapshots) { + for (MetricSnapshot snapshot : snapshots) { if (snapshot.getMetadata().getName().equals("jvm_threads_state")) { for (GaugeSnapshot.GaugeDataPointSnapshot data : ((GaugeSnapshot) snapshot).getDataPoints()) { diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java index 57b2b640f..fad461548 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/Collector.java @@ -11,13 +11,13 @@ public interface Collector { /** Called when the Prometheus server scrapes metrics. */ - MetricSnapshot collect(); + MetricSnapshot collect(); /** * Provides Collector with the details of the request issued by Prometheus to allow multi-target * pattern implementation Override to implement request dependent logic to provide MetricSnapshot */ - default MetricSnapshot collect(PrometheusScrapeRequest scrapeRequest) { + default MetricSnapshot collect(PrometheusScrapeRequest scrapeRequest) { return collect(); } @@ -28,8 +28,8 @@ default MetricSnapshot collect(PrometheusScrapeRequest scrapeRequest) { *

    Override this if there is a more efficient way than first collecting the snapshot and then * discarding it. */ - default MetricSnapshot collect(Predicate includedNames) { - MetricSnapshot result = collect(); + default MetricSnapshot collect(Predicate includedNames) { + MetricSnapshot result = collect(); if (includedNames.test(result.getMetadata().getPrometheusName())) { return result; } else { @@ -43,9 +43,9 @@ default MetricSnapshot collect(Predicate includedNames) { *

    Override this if there is a more efficient way than first collecting the snapshot and then * discarding it. */ - default MetricSnapshot collect( + default MetricSnapshot collect( Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { - MetricSnapshot result = collect(scrapeRequest); + MetricSnapshot result = collect(scrapeRequest); if (includedNames.test(result.getMetadata().getPrometheusName())) { return result; } else { diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java index a4f52746e..8f44239fb 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java @@ -42,7 +42,7 @@ default MetricSnapshots collect( Predicate includedNames, PrometheusScrapeRequest scrapeRequest) { MetricSnapshots allSnapshots = scrapeRequest == null ? collect() : collect(scrapeRequest); MetricSnapshots.Builder result = MetricSnapshots.builder(); - for (MetricSnapshot snapshot : allSnapshots) { + for (MetricSnapshot snapshot : allSnapshots) { if (includedNames.test(snapshot.getMetadata().getPrometheusName())) { result.metricSnapshot(snapshot); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java index 00a19d9f6..026560bb9 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java @@ -63,7 +63,7 @@ public MetricSnapshots scrape() { public MetricSnapshots scrape(PrometheusScrapeRequest scrapeRequest) { MetricSnapshots.Builder result = MetricSnapshots.builder(); for (Collector collector : collectors) { - MetricSnapshot snapshot = + MetricSnapshot snapshot = scrapeRequest == null ? collector.collect() : collector.collect(scrapeRequest); if (snapshot != null) { if (result.containsMetricName(snapshot.getMetadata().getName())) { @@ -76,7 +76,7 @@ public MetricSnapshots scrape(PrometheusScrapeRequest scrapeRequest) { for (MultiCollector collector : multiCollectors) { MetricSnapshots snapshots = scrapeRequest == null ? collector.collect() : collector.collect(scrapeRequest); - for (MetricSnapshot snapshot : snapshots) { + for (MetricSnapshot snapshot : snapshots) { if (result.containsMetricName(snapshot.getMetadata().getName())) { throw new IllegalStateException( snapshot.getMetadata().getPrometheusName() + ": duplicate metric name."); @@ -105,7 +105,7 @@ public MetricSnapshots scrape( // prometheusName == null means the name is unknown, and we have to scrape to learn the name. // prometheusName != null means we can skip the scrape if the name is excluded. if (prometheusName == null || includedNames.test(prometheusName)) { - MetricSnapshot snapshot = + MetricSnapshot snapshot = scrapeRequest == null ? collector.collect(includedNames) : collector.collect(includedNames, scrapeRequest); @@ -132,7 +132,7 @@ public MetricSnapshots scrape( scrapeRequest == null ? collector.collect(includedNames) : collector.collect(includedNames, scrapeRequest); - for (MetricSnapshot snapshot : snapshots) { + for (MetricSnapshot snapshot : snapshots) { if (snapshot != null) { result.metricSnapshot(snapshot); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java index fa807af19..45be6f0f1 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java @@ -5,7 +5,7 @@ import java.util.List; /** Immutable snapshot of a Counter. */ -public class CounterSnapshot extends MetricSnapshot { +public class CounterSnapshot extends MetricSnapshot { /** * To create a new {@link CounterSnapshot}, you can either call the constructor directly or use @@ -21,7 +21,7 @@ public CounterSnapshot(MetricMetadata metadata, Collection getDataPoints() { - return (List) dataPoints; + return dataPoints; } public static class CounterDataPointSnapshot extends DataPointSnapshot { diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java index d1f3f3414..721655105 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DuplicateLabelsException.java @@ -6,6 +6,8 @@ */ public class DuplicateLabelsException extends IllegalArgumentException { + private static final long serialVersionUID = 0L; + private final MetricMetadata metadata; private final Labels labels; diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java index c94faf8dd..795323271 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/GaugeSnapshot.java @@ -5,7 +5,7 @@ import java.util.List; /** Immutable snapshot of a Gauge. */ -public final class GaugeSnapshot extends MetricSnapshot { +public final class GaugeSnapshot extends MetricSnapshot { /** * To create a new {@link GaugeSnapshot}, you can either call the constructor directly or use the @@ -20,7 +20,7 @@ public GaugeSnapshot(MetricMetadata metadata, Collection @Override public List getDataPoints() { - return (List) dataPoints; + return dataPoints; } public static final class GaugeDataPointSnapshot extends DataPointSnapshot { diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java index 5988cce3d..6966552a7 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java @@ -5,7 +5,8 @@ import java.util.List; /** Immutable snapshot of a Histogram. */ -public final class HistogramSnapshot extends MetricSnapshot { +public final class HistogramSnapshot + extends MetricSnapshot { private final boolean gaugeHistogram; public static final int CLASSIC_HISTOGRAM = Integer.MIN_VALUE; @@ -41,7 +42,7 @@ public boolean isGaugeHistogram() { @Override public List getDataPoints() { - return (List) dataPoints; + return dataPoints; } public static final class HistogramDataPointSnapshot extends DistributionDataPointSnapshot { diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java index c7f180d9f..ec8ece23c 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/InfoSnapshot.java @@ -5,7 +5,7 @@ import java.util.List; /** Immutable snapshot of an Info metric. */ -public final class InfoSnapshot extends MetricSnapshot { +public final class InfoSnapshot extends MetricSnapshot { /** * To create a new {@link InfoSnapshot}, you can either call the constructor directly or use the @@ -24,7 +24,7 @@ public InfoSnapshot(MetricMetadata metadata, Collection d @Override public List getDataPoints() { - return (List) dataPoints; + return dataPoints; } public static class InfoDataPointSnapshot extends DataPointSnapshot { diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java index d44e54ff9..420feeced 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java @@ -1,24 +1,18 @@ package io.prometheus.metrics.model.snapshots; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; /** Base class for metric snapshots. */ -public abstract class MetricSnapshot { +public abstract class MetricSnapshot { private final MetricMetadata metadata; - protected final List dataPoints; + protected final List dataPoints; - protected MetricSnapshot(MetricMetadata metadata, DataPointSnapshot... dataPoints) { - this(metadata, Arrays.asList(dataPoints)); - } - - protected MetricSnapshot( - MetricMetadata metadata, Collection dataPoints) { + protected MetricSnapshot(MetricMetadata metadata, Collection dataPoints) { if (metadata == null) { throw new NullPointerException("metadata"); } @@ -26,7 +20,7 @@ protected MetricSnapshot( throw new NullPointerException("dataPoints"); } this.metadata = metadata; - List dataCopy = new ArrayList<>(dataPoints); + List dataCopy = new ArrayList<>(dataPoints); dataCopy.sort(Comparator.comparing(DataPointSnapshot::getLabels)); this.dataPoints = Collections.unmodifiableList(dataCopy); validateLabels(); @@ -36,7 +30,7 @@ public MetricMetadata getMetadata() { return metadata; } - public abstract List getDataPoints(); + public abstract List getDataPoints(); protected void validateLabels() { // Verify that labels are unique (the same set of names/values must not be used multiple times @@ -76,7 +70,7 @@ public T unit(Unit unit) { return self(); } - public abstract MetricSnapshot build(); + public abstract MetricSnapshot build(); protected MetricMetadata buildMetadata() { return new MetricMetadata(name, help, unit); diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java index ecee897e4..f56976e9e 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshots.java @@ -14,12 +14,12 @@ import java.util.stream.Stream; /** Immutable list of metric snapshots. */ -public class MetricSnapshots implements Iterable { +public class MetricSnapshots implements Iterable> { - private final List snapshots; + private final List> snapshots; /** See {@link #MetricSnapshots(Collection)} */ - public MetricSnapshots(MetricSnapshot... snapshots) { + public MetricSnapshots(MetricSnapshot... snapshots) { this(Arrays.asList(snapshots)); } @@ -33,8 +33,8 @@ public MetricSnapshots(MetricSnapshot... snapshots) { * Builder#containsMetricName(String)} before calling {@link * Builder#metricSnapshot(MetricSnapshot)}. */ - public MetricSnapshots(Collection snapshots) { - List list = new ArrayList<>(snapshots); + public MetricSnapshots(Collection> snapshots) { + List> list = new ArrayList<>(snapshots); list.sort(comparing(s -> s.getMetadata().getPrometheusName())); for (int i = 0; i < snapshots.size() - 1; i++) { if (list.get(i) @@ -48,12 +48,12 @@ public MetricSnapshots(Collection snapshots) { this.snapshots = unmodifiableList(list); } - public static MetricSnapshots of(MetricSnapshot... snapshots) { + public static MetricSnapshots of(MetricSnapshot... snapshots) { return new MetricSnapshots(snapshots); } @Override - public Iterator iterator() { + public Iterator> iterator() { return snapshots.iterator(); } @@ -61,11 +61,11 @@ public int size() { return snapshots.size(); } - public MetricSnapshot get(int i) { + public MetricSnapshot get(int i) { return snapshots.get(i); } - public Stream stream() { + public Stream> stream() { return snapshots.stream(); } @@ -75,7 +75,7 @@ public static Builder builder() { public static class Builder { - private final List snapshots = new ArrayList<>(); + private final List> snapshots = new ArrayList<>(); private final Set prometheusNames = new HashSet<>(); private Builder() {} @@ -89,7 +89,7 @@ public boolean containsMetricName(String name) { } /** Add a metric snapshot. Call multiple times to add multiple metric snapshots. */ - public Builder metricSnapshot(MetricSnapshot snapshot) { + public Builder metricSnapshot(MetricSnapshot snapshot) { snapshots.add(snapshot); prometheusNames.add(snapshot.getMetadata().getPrometheusName()); return this; diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java index 591732137..7c6e49d19 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/StateSetSnapshot.java @@ -9,7 +9,8 @@ import java.util.stream.Stream; /** Immutable snapshot of a StateSet metric. */ -public final class StateSetSnapshot extends MetricSnapshot { +public final class StateSetSnapshot + extends MetricSnapshot { /** * To create a new {@link StateSetSnapshot}, you can either call the constructor directly or use @@ -37,7 +38,7 @@ private void validate() { @Override public List getDataPoints() { - return (List) dataPoints; + return dataPoints; } public static class StateSetDataPointSnapshot extends DataPointSnapshot diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java index 7bc575ef8..26bd0f602 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/SummarySnapshot.java @@ -5,7 +5,8 @@ import java.util.List; /** Immutable snapshot of a Summary metric. */ -public final class SummarySnapshot extends MetricSnapshot { +public final class SummarySnapshot + extends MetricSnapshot { /** * To create a new {@link SummarySnapshot}, you can either call the constructor directly or use @@ -20,7 +21,7 @@ public SummarySnapshot(MetricMetadata metadata, Collection getDataPoints() { - return (List) dataPoints; + return dataPoints; } public static final class SummaryDataPointSnapshot extends DistributionDataPointSnapshot { diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java index 3fe01c9df..30ec564cb 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/UnknownSnapshot.java @@ -5,7 +5,8 @@ import java.util.List; /** Immutable snapshot of an Unknown (Untyped) metric. */ -public final class UnknownSnapshot extends MetricSnapshot { +public final class UnknownSnapshot + extends MetricSnapshot { /** * To create a new {@link UnknownSnapshot}, you can either call the constructor directly or use @@ -21,7 +22,7 @@ public UnknownSnapshot(MetricMetadata metadata, Collection getDataPoints() { - return (List) dataPoints; + return dataPoints; } public static final class UnknownDataPointSnapshot extends DataPointSnapshot { diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java index 55e8b0be4..6557c0ecf 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java @@ -19,7 +19,7 @@ class PrometheusRegistryTest { Collector counterA1 = new Collector() { @Override - public MetricSnapshot collect() { + public MetricSnapshot collect() { return CounterSnapshot.builder().name("counter_a").build(); } @@ -32,7 +32,7 @@ public String getPrometheusName() { Collector counterA2 = new Collector() { @Override - public MetricSnapshot collect() { + public MetricSnapshot collect() { return CounterSnapshot.builder().name("counter.a").build(); } @@ -45,7 +45,7 @@ public String getPrometheusName() { Collector counterB = new Collector() { @Override - public MetricSnapshot collect() { + public MetricSnapshot collect() { return CounterSnapshot.builder().name("counter_b").build(); } @@ -58,7 +58,7 @@ public String getPrometheusName() { Collector gaugeA = new Collector() { @Override - public MetricSnapshot collect() { + public MetricSnapshot collect() { return GaugeSnapshot.builder().name("gauge_a").build(); } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java index fc0c24bfc..25cd6a4ec 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java @@ -34,7 +34,7 @@ public void testDuplicateLabels() { @Test public void testNoData() { - MetricSnapshot snapshot = CounterSnapshot.builder().name("test").build(); + MetricSnapshot snapshot = CounterSnapshot.builder().name("test").build(); assertThat(snapshot.getDataPoints().size()).isEqualTo(0); } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java index ed2f66fec..09d63d4d9 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotsTest.java @@ -92,7 +92,7 @@ public void testImmutable() { .dataPoint(CounterSnapshot.CounterDataPointSnapshot.builder().value(1.0).build()) .build(); MetricSnapshots snapshots = new MetricSnapshots(c2, c3, c1); - Iterator iterator = snapshots.iterator(); + Iterator> iterator = snapshots.iterator(); iterator.next(); assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java index d8e8d33e4..a69bba499 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/SnapshotTestUtil.java @@ -5,7 +5,7 @@ class SnapshotTestUtil { public static void assertMetadata( - MetricSnapshot snapshot, String name, String help, String unit) { + MetricSnapshot snapshot, String name, String help, String unit) { assertThat(snapshot.getMetadata().getName()).isEqualTo(name); assertThat(snapshot.getMetadata().getHelp()).isEqualTo(help); if (unit != null) { diff --git a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java index f1b592eaa..e68ebd968 100644 --- a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java +++ b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java @@ -101,7 +101,7 @@ private MetricSnapshots convert(Enumeration sampl return result.build(); } - private MetricSnapshot convertCounter(Collector.MetricFamilySamples samples) { + private MetricSnapshot convertCounter(Collector.MetricFamilySamples samples) { CounterSnapshot.Builder counter = CounterSnapshot.builder() .name(sanitizeMetricName(samples.name)) @@ -128,7 +128,7 @@ private MetricSnapshot convertCounter(Collector.MetricFamilySamples samples) { return counter.build(); } - private MetricSnapshot convertGauge(Collector.MetricFamilySamples samples) { + private MetricSnapshot convertGauge(Collector.MetricFamilySamples samples) { GaugeSnapshot.Builder gauge = GaugeSnapshot.builder() .name(sanitizeMetricName(samples.name)) @@ -148,7 +148,7 @@ private MetricSnapshot convertGauge(Collector.MetricFamilySamples samples) { return gauge.build(); } - private MetricSnapshot convertHistogram( + private MetricSnapshot convertHistogram( Collector.MetricFamilySamples samples, boolean isGaugeHistogram) { HistogramSnapshot.Builder histogram = HistogramSnapshot.builder() @@ -192,7 +192,7 @@ private MetricSnapshot convertHistogram( return histogram.build(); } - private MetricSnapshot convertSummary(Collector.MetricFamilySamples samples) { + private MetricSnapshot convertSummary(Collector.MetricFamilySamples samples) { SummarySnapshot.Builder summary = SummarySnapshot.builder() .name(sanitizeMetricName(samples.name)) @@ -242,7 +242,7 @@ private MetricSnapshot convertSummary(Collector.MetricFamilySamples samples) { return summary.build(); } - private MetricSnapshot convertStateSet(Collector.MetricFamilySamples samples) { + private MetricSnapshot convertStateSet(Collector.MetricFamilySamples samples) { StateSetSnapshot.Builder stateSet = StateSetSnapshot.builder().name(sanitizeMetricName(samples.name)).help(samples.help); Map dataPoints = new HashMap<>(); @@ -271,7 +271,7 @@ private MetricSnapshot convertStateSet(Collector.MetricFamilySamples samples) { return stateSet.build(); } - private MetricSnapshot convertUnknown(Collector.MetricFamilySamples samples) { + private MetricSnapshot convertUnknown(Collector.MetricFamilySamples samples) { UnknownSnapshot.Builder unknown = UnknownSnapshot.builder() .name(sanitizeMetricName(samples.name)) @@ -353,7 +353,7 @@ private Labels labelsWithout( return labels.build(); } - private MetricSnapshot convertInfo(Collector.MetricFamilySamples samples) { + private MetricSnapshot convertInfo(Collector.MetricFamilySamples samples) { InfoSnapshot.Builder info = InfoSnapshot.builder().name(sanitizeMetricName(samples.name)).help(samples.help); for (Collector.MetricFamilySamples.Sample sample : samples.samples) { From 8226348a5962c48084f32f49e39f7245278736e3 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 10 Oct 2024 11:16:09 +0200 Subject: [PATCH 172/870] add Errorprone (#1139) * add errorprone Signed-off-by: Gregor Zeitlinger * add errorprone Signed-off-by: Gregor Zeitlinger * add errorprone Signed-off-by: Gregor Zeitlinger * add errorprone Signed-off-by: Gregor Zeitlinger * add errorprone Signed-off-by: Gregor Zeitlinger * add errorprone Signed-off-by: Gregor Zeitlinger * add errorprone Signed-off-by: Gregor Zeitlinger * add errorprone Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .mvn/jvm.config | 10 +++++++++ .../multitarget/SampleMultiCollector.java | 5 +++-- .../metrics/it/exporter/test/ExporterIT.java | 10 +++++---- .../it/pushgateway/PushGatewayTestApp.java | 1 + pom.xml | 21 ++++++++++++++++++ .../config/ExporterFilterProperties.java | 14 +----------- .../config/PrometheusPropertiesLoader.java | 1 + .../io/prometheus/metrics/config/Util.java | 2 +- .../datapoints/DistributionDataPoint.java | 2 +- .../core/datapoints/GaugeDataPoint.java | 2 +- .../core/exemplars/ExemplarSampler.java | 12 +++++----- .../metrics/core/metrics/Buffer.java | 1 + .../metrics/core/metrics/CKMSQuantiles.java | 1 + .../metrics/core/metrics/Counter.java | 21 +++++------------- .../metrics/core/metrics/Gauge.java | 11 ---------- .../metrics/core/metrics/Histogram.java | 9 ++++---- .../prometheus/metrics/core/metrics/Info.java | 1 - .../core/metrics/MetricWithFixedMetadata.java | 1 + .../metrics/core/metrics/StateSet.java | 5 ----- .../metrics/core/metrics/StatefulMetric.java | 7 +++--- .../metrics/core/metrics/Summary.java | 5 ----- .../metrics/core/util/Scheduler.java | 2 ++ .../core/exemplars/ExemplarSamplerTest.java | 7 ++---- .../metrics/core/metrics/HistogramTest.java | 7 ++++-- .../common/PrometheusHttpRequest.java | 1 + .../exporter/httpserver/HTTPServer.java | 1 + .../exporter/httpserver/HTTPServerTest.java | 4 ++-- .../opentelemetry/OpenTelemetryExporter.java | 5 ++++- .../ResourceAttributesFromOtelAgent.java | 1 + .../otelmodel/PrometheusClassicHistogram.java | 2 +- .../exporter/pushgateway/PushGateway.java | 8 ++----- .../OpenMetricsTextFormatWriter.java | 3 ++- .../PrometheusTextFormatWriter.java | 1 + .../caffeine/CacheMetricsCollectorTest.java | 1 + .../dropwizard5/DropwizardExports.java | 22 +++++++++---------- .../dropwizard5/labels/MapperConfig.java | 2 +- .../jvm/JvmMemoryPoolAllocationMetrics.java | 16 +++++--------- .../instrumentation/jvm/ProcessMetrics.java | 13 +++++++++-- .../jvm/JvmThreadsMetricsTest.java | 1 + .../snapshots/ClassicHistogramBuckets.java | 6 ++--- .../metrics/model/snapshots/Labels.java | 3 ++- .../metrics/model/snapshots/Unit.java | 4 ++-- .../bridge/SimpleclientCollector.java | 16 +++----------- .../bridge/SimpleclientCollectorTest.java | 11 +++++----- 44 files changed, 137 insertions(+), 142 deletions(-) create mode 100644 .mvn/jvm.config diff --git a/.mvn/jvm.config b/.mvn/jvm.config new file mode 100644 index 000000000..32599cefe --- /dev/null +++ b/.mvn/jvm.config @@ -0,0 +1,10 @@ +--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED +--add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED +--add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED diff --git a/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java index f9cea3f87..dba3b1b9e 100644 --- a/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java +++ b/examples/example-exporter-multi-target/src/main/java/io/prometheus/metrics/examples/multitarget/SampleMultiCollector.java @@ -3,7 +3,6 @@ import io.prometheus.metrics.model.registry.MultiCollector; import io.prometheus.metrics.model.registry.PrometheusScrapeRequest; import io.prometheus.metrics.model.snapshots.CounterSnapshot; -import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot.Builder; import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshot; @@ -46,7 +45,8 @@ protected MetricSnapshots collectMetricSnapshots(PrometheusScrapeRequest scrapeR } else { targetName = targetNames[0]; } - Builder counterDataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder(); + CounterSnapshot.CounterDataPointSnapshot.Builder counterDataPointBuilder = + CounterSnapshot.CounterDataPointSnapshot.builder(); io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot.Builder gaugeDataPointBuilder = GaugeSnapshot.GaugeDataPointSnapshot.builder(); Labels lbls = Labels.of("target", targetName); @@ -77,6 +77,7 @@ protected MetricSnapshots collectMetricSnapshots(PrometheusScrapeRequest scrapeR return new MetricSnapshots(snaps); } + @Override public List getPrometheusNames() { List names = new ArrayList(); names.add("x_calls_total"); diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index 6bce50718..3e0caf954 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.zip.GZIPInputStream; @@ -67,7 +68,7 @@ public void testOpenMetricsTextFormat() throws IOException { assertThat(response.getHeader("Transfer-Encoding")).isNull(); assertThat(response.getHeader("Content-Length")) .isEqualTo(Integer.toString(response.body.length)); - String bodyString = new String(response.body); + String bodyString = new String(response.body, UTF_8); assertThat(bodyString) .contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1") .contains("temperature_celsius{location=\"inside\"} 23.0") @@ -90,7 +91,7 @@ public void testPrometheusTextFormat() throws IOException { assertThat(response.getHeader("Transfer-Encoding")).isNull(); assertThat(response.getHeader("Content-Length")) .isEqualTo(Integer.toString(response.body.length)); - String bodyString = new String(response.body); + String bodyString = new String(response.body, UTF_8); assertThat(bodyString) .contains("integration_test_info{test_name=\"" + sampleApp + "\"} 1") .contains("temperature_celsius{location=\"inside\"} 23.0") @@ -370,6 +371,7 @@ private Response scrape(String method, String queryString, String... requestHead try { Thread.sleep(100); } catch (InterruptedException ignored) { + // ignore } } } @@ -392,14 +394,14 @@ private Response(int status, Map> headers, byte[] body) { for (Map.Entry> entry : headers.entrySet()) { if (entry.getKey() != null) { // HttpUrlConnection uses pseudo key "null" for the status line - this.headers.put(entry.getKey().toLowerCase(), entry.getValue().get(0)); + this.headers.put(entry.getKey().toLowerCase(Locale.ROOT), entry.getValue().get(0)); } } } private String getHeader(String name) { // HTTP headers are case-insensitive - return headers.get(name.toLowerCase()); + return headers.get(name.toLowerCase(Locale.ROOT)); } } } diff --git a/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java b/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java index 61032600b..5c8605617 100644 --- a/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java +++ b/integration-tests/it-pushgateway/src/main/java/io/prometheus/metrics/it/pushgateway/PushGatewayTestApp.java @@ -79,6 +79,7 @@ private static void runSslTest() throws IOException { static TrustManager insecureTrustManager = new X509TrustManager() { + @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } diff --git a/pom.xml b/pom.xml index 6ae53a26b..3105a1b22 100644 --- a/pom.xml +++ b/pom.xml @@ -277,7 +277,28 @@ -Xlint:all -Werror + -XDcompilePolicy=simple + + -Xplugin:ErrorProne + -Xep:AlmostJavadoc:OFF + -Xep:MissingSummary:OFF + -Xep:LongDoubleConversion:OFF + -Xep:StringSplitter:OFF + -XepExcludedPaths:.*/generated/.* + + + + com.google.errorprone + error_prone_core + 2.33.0 + + + diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java index 4758a48fe..7a408bb58 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java @@ -24,15 +24,6 @@ private ExporterFilterProperties( List excludedNames, List allowedPrefixes, List excludedPrefixes) { - this(allowedNames, excludedNames, allowedPrefixes, excludedPrefixes, ""); - } - - private ExporterFilterProperties( - List allowedNames, - List excludedNames, - List allowedPrefixes, - List excludedPrefixes, - String prefix) { this.allowedNames = allowedNames == null ? null : Collections.unmodifiableList(new ArrayList<>(allowedNames)); this.excludedNames = @@ -45,7 +36,6 @@ private ExporterFilterProperties( excludedPrefixes == null ? null : Collections.unmodifiableList(new ArrayList<>(excludedPrefixes)); - validate(prefix); } public List getAllowedMetricNames() { @@ -64,8 +54,6 @@ public List getExcludedMetricNamePrefixes() { return excludedPrefixes; } - private void validate(String prefix) throws PrometheusPropertiesException {} - /** * Note that this will remove entries from {@code properties}. This is because we want to know if * there are unused properties remaining after all properties have been loaded. @@ -81,7 +69,7 @@ static ExporterFilterProperties load(String prefix, Map properti List excludedPrefixes = Util.loadStringList(prefix + "." + METRIC_NAME_MUST_NOT_START_WITH, properties); return new ExporterFilterProperties( - allowedNames, excludedNames, allowedPrefixes, excludedPrefixes, prefix); + allowedNames, excludedNames, allowedPrefixes, excludedPrefixes); } public static Builder builder() { diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java index 9d1fde4ab..e29f93036 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java @@ -113,6 +113,7 @@ private static Properties loadPropertiesFromClasspath() { .getResourceAsStream("prometheus.properties")) { properties.load(stream); } catch (Exception ignored) { + // No properties file found on the classpath. } return properties; } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java index 66d6b2d92..8adcd0af7 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java @@ -91,7 +91,7 @@ static Map loadMap(String name, Map properties) if (keyValue.length == 2) { String key = keyValue[0].trim(); String value = keyValue[1].trim(); - if (key.length() > 0 && value.length() > 0) { + if (!key.isEmpty() && !value.isEmpty()) { result.putIfAbsent(key, value); } } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DistributionDataPoint.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DistributionDataPoint.java index 57e7a3e86..82e42a892 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DistributionDataPoint.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/DistributionDataPoint.java @@ -25,7 +25,7 @@ public interface DistributionDataPoint extends DataPoint, TimerApi { /** Observe {@code value}, and create a custom exemplar with the given labels. */ void observeWithExemplar(double value, Labels labels); - /** {@inheritDoc} */ + @Override default Timer startTimer() { return new Timer(this::observe); } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java index 003e3e5e8..eec0304c7 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/GaugeDataPoint.java @@ -56,7 +56,7 @@ default void decWithExemplar(double amount, Labels labels) { /** Set the gauge to {@code value}, and create a custom exemplar with the given labels. */ void setWithExemplar(double value, Labels labels); - /** {@inheritDoc} */ + @Override default Timer startTimer() { return new Timer(this::set); } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java index 0d4a71f63..0e1c49f8c 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java @@ -98,7 +98,7 @@ public void observe(double value) { return; // This is the hot path in a high-throughput application and should be as efficient as // possible. } - rateLimitedObserve(acceptingNewExemplars, value, exemplars, () -> doObserve(value)); + rateLimitedObserve(acceptingNewExemplars, value, () -> doObserve(value)); } public void observeWithExemplar(double value, Labels labels) { @@ -107,10 +107,7 @@ public void observeWithExemplar(double value, Labels labels) { // possible. } rateLimitedObserve( - acceptingNewCustomExemplars, - value, - customExemplars, - () -> doObserveWithExemplar(value, labels)); + acceptingNewCustomExemplars, value, () -> doObserveWithExemplar(value, labels)); } private long doObserve(double value) { @@ -278,8 +275,8 @@ private long doObserveWithExemplarWithoutUpperBounds(double amount, Labels label *

    To avoid performance issues, we rate limit observing exemplars to {@link * ExemplarSamplerConfig#getSampleIntervalMillis()} milliseconds. */ - private void rateLimitedObserve( - AtomicBoolean accepting, double value, Exemplar[] exemplars, LongSupplier observeFunc) { + @SuppressWarnings("FutureReturnValueIgnored") + private void rateLimitedObserve(AtomicBoolean accepting, double value, LongSupplier observeFunc) { if (Double.isNaN(value)) { return; } @@ -352,6 +349,7 @@ private Labels doSampleExemplar() { } } } catch (NoClassDefFoundError ignored) { + // ignore } return Labels.EMPTY; } diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java index 720c8228c..69f6de86f 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java @@ -48,6 +48,7 @@ void reset() { reset = true; } + @SuppressWarnings("ThreadPriorityCheck") T run( Function complete, Supplier runnable, Consumer observeFunction) { double[] buffer; diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java index adfd5c6d8..9fc1e9634 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java @@ -38,6 +38,7 @@ final class CKMSQuantiles { int n = 0; /** List of sampled observations, ordered by Sample.value. */ + @SuppressWarnings("JdkObsolete") final LinkedList samples = new LinkedList<>(); /** diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java index 5e435f695..2e84b6ade 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java @@ -47,41 +47,36 @@ private Counter(Builder builder, PrometheusProperties prometheusProperties) { } } - /** {@inheritDoc} */ @Override public void inc(long amount) { getNoLabels().inc(amount); } - /** {@inheritDoc} */ @Override public void inc(double amount) { getNoLabels().inc(amount); } - /** {@inheritDoc} */ @Override public void incWithExemplar(long amount, Labels labels) { getNoLabels().incWithExemplar(amount, labels); } - /** {@inheritDoc} */ @Override public void incWithExemplar(double amount, Labels labels) { getNoLabels().incWithExemplar(amount, labels); } - /** {@inheritDoc} */ + @Override public double get() { return getNoLabels().get(); } - /** {@inheritDoc} */ + @Override public long getLongValue() { return getNoLabels().getLongValue(); } - /** {@inheritDoc} */ @Override public CounterSnapshot collect() { return (CounterSnapshot) super.collect(); @@ -131,26 +126,24 @@ private DataPoint(ExemplarSampler exemplarSampler) { this.exemplarSampler = exemplarSampler; } - /** {@inheritDoc} */ + @Override public double get() { return longValue.sum() + doubleValue.sum(); } - /** {@inheritDoc} */ + @Override public long getLongValue() { return longValue.sum() + (long) doubleValue.sum(); } - /** {@inheritDoc} */ @Override public void inc(long amount) { validateAndAdd(amount); if (isExemplarsEnabled()) { - exemplarSampler.observe(amount); + exemplarSampler.observe((double) amount); } } - /** {@inheritDoc} */ @Override public void inc(double amount) { validateAndAdd(amount); @@ -159,16 +152,14 @@ public void inc(double amount) { } } - /** {@inheritDoc} */ @Override public void incWithExemplar(long amount, Labels labels) { validateAndAdd(amount); if (isExemplarsEnabled()) { - exemplarSampler.observeWithExemplar(amount, labels); + exemplarSampler.observeWithExemplar((double) amount, labels); } } - /** {@inheritDoc} */ @Override public void incWithExemplar(double amount, Labels labels) { validateAndAdd(amount); diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java index a3f7e290d..4ba5d5ed3 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Gauge.java @@ -54,37 +54,31 @@ private Gauge(Builder builder, PrometheusProperties prometheusProperties) { } } - /** {@inheritDoc} */ @Override public void inc(double amount) { getNoLabels().inc(amount); } - /** {@inheritDoc} */ @Override public double get() { return getNoLabels().get(); } - /** {@inheritDoc} */ @Override public void incWithExemplar(double amount, Labels labels) { getNoLabels().incWithExemplar(amount, labels); } - /** {@inheritDoc} */ @Override public void set(double value) { getNoLabels().set(value); } - /** {@inheritDoc} */ @Override public void setWithExemplar(double value, Labels labels) { getNoLabels().setWithExemplar(value, labels); } - /** {@inheritDoc} */ @Override public GaugeSnapshot collect() { return (GaugeSnapshot) super.collect(); @@ -123,7 +117,6 @@ private DataPoint(ExemplarSampler exemplarSampler) { private final AtomicLong value = new AtomicLong(Double.doubleToRawLongBits(0)); - /** {@inheritDoc} */ @Override public void inc(double amount) { long next = @@ -133,7 +126,6 @@ public void inc(double amount) { } } - /** {@inheritDoc} */ @Override public void incWithExemplar(double amount, Labels labels) { long next = @@ -143,7 +135,6 @@ public void incWithExemplar(double amount, Labels labels) { } } - /** {@inheritDoc} */ @Override public void set(double value) { this.value.set(Double.doubleToRawLongBits(value)); @@ -152,13 +143,11 @@ public void set(double value) { } } - /** {@inheritDoc} */ @Override public double get() { return Double.longBitsToDouble(value.get()); } - /** {@inheritDoc} */ @Override public void setWithExemplar(double value, Labels labels) { this.value.set(Double.doubleToRawLongBits(value)); diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java index 2952222c6..bf70bec7c 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java @@ -165,13 +165,11 @@ private Histogram(Histogram.Builder builder, PrometheusProperties prometheusProp : new ExemplarSamplerConfig(exemplarsProperties, classicUpperBounds); } - /** {@inheritDoc} */ @Override public void observe(double amount) { getNoLabels().observe(amount); } - /** {@inheritDoc} */ @Override public void observeWithExemplar(double amount, Labels labels) { getNoLabels().observeWithExemplar(amount, labels); @@ -212,7 +210,6 @@ private DataPoint() { maybeScheduleNextReset(); } - /** {@inheritDoc} */ @Override public void observe(double value) { if (Double.isNaN(value)) { @@ -227,7 +224,6 @@ public void observe(double value) { } } - /** {@inheritDoc} */ @Override public void observeWithExemplar(double value, Labels labels) { if (Double.isNaN(value)) { @@ -574,6 +570,7 @@ private int findSmallestIndex(Map nativeBuckets) { // doubleBucketWidth is called in the synchronized block while new observations go into the // buffer. + @SuppressWarnings("NonAtomicVolatileUpdate") private void doubleBucketWidth() { doubleBucketWidth(nativeBucketsForPositiveValues); doubleBucketWidth(nativeBucketsForNegativeValues); @@ -609,6 +606,7 @@ private NativeHistogramBuckets toBucketList(ConcurrentHashMap 0) { Scheduler.schedule( @@ -617,7 +615,6 @@ private void maybeScheduleNextReset() { } } - /** {@inheritDoc} */ @Override public HistogramSnapshot collect() { return (HistogramSnapshot) super.collect(); @@ -667,8 +664,10 @@ public static Builder builder(PrometheusProperties config) { public static class Builder extends StatefulMetric.Builder { + @SuppressWarnings("MutablePublicArray") public static final double[] DEFAULT_CLASSIC_UPPER_BOUNDS = new double[] {.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10}; + private final double DEFAULT_NATIVE_MIN_ZERO_THRESHOLD = Math.pow(2.0, -128); private final double DEFAULT_NATIVE_MAX_ZERO_THRESHOLD = Math.pow(2.0, -128); private final int DEFAULT_NATIVE_INITIAL_SCHEMA = 5; diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Info.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Info.java index 49f8a1eb5..aac918943 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Info.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Info.java @@ -91,7 +91,6 @@ public void remove(String... labelValues) { labels.remove(toBeRemoved); } - /** {@inheritDoc} */ @Override public InfoSnapshot collect() { List data = new ArrayList<>(labels.size()); diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java index c121d0c56..056ef792c 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java @@ -91,6 +91,7 @@ public B labelNames(String... labelNames) { return self(); } + @Override public B constLabels(Labels constLabels) { for (String labelName : labelNames) { if (constLabels.contains(labelName)) { // Labels.contains() treats dots like underscores diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StateSet.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StateSet.java index e4d9eff88..20eb1783e 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StateSet.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StateSet.java @@ -71,19 +71,16 @@ private StateSet(Builder builder, PrometheusProperties prometheusProperties) { } } - /** {@inheritDoc} */ @Override public StateSetSnapshot collect() { return (StateSetSnapshot) super.collect(); } - /** {@inheritDoc} */ @Override public void setTrue(String state) { getNoLabels().setTrue(state); } - /** {@inheritDoc} */ @Override public void setFalse(String state) { getNoLabels().setFalse(state); @@ -116,13 +113,11 @@ class DataPoint implements StateSetDataPoint { private DataPoint() {} - /** {@inheritDoc} */ @Override public void setTrue(String state) { set(state, true); } - /** {@inheritDoc} */ @Override public void setFalse(String state) { set(state, false); diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java index 1d2bfe02e..67523eeee 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java @@ -47,6 +47,7 @@ protected StatefulMetric(Builder builder) { */ protected abstract MetricSnapshot collect(List labels, List metricData); + @Override public MetricSnapshot collect() { if (labelNames.length == 0 && data.isEmpty()) { // This is a metric without labels that has not been used yet. Initialize the data on the fly. @@ -157,9 +158,9 @@ protected MetricsProperties[] getMetricProperties( } } - protected T getConfigProperty( - MetricsProperties[] properties, Function getter) { - T result; + protected

    P getConfigProperty( + MetricsProperties[] properties, Function getter) { + P result; for (MetricsProperties props : properties) { result = getter.apply(props); if (result != null) { diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Summary.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Summary.java index 126626799..ddb3eb7f2 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Summary.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Summary.java @@ -82,19 +82,16 @@ protected boolean isExemplarsEnabled() { return exemplarsEnabled; } - /** {@inheritDoc} */ @Override public void observe(double amount) { getNoLabels().observe(amount); } - /** {@inheritDoc} */ @Override public void observeWithExemplar(double amount, Labels labels) { getNoLabels().observeWithExemplar(amount, labels); } - /** {@inheritDoc} */ @Override public SummarySnapshot collect() { return (SummarySnapshot) super.collect(); @@ -144,7 +141,6 @@ private DataPoint() { } } - /** {@inheritDoc} */ @Override public void observe(double value) { if (Double.isNaN(value)) { @@ -158,7 +154,6 @@ public void observe(double value) { } } - /** {@inheritDoc} */ @Override public void observeWithExemplar(double value, Labels labels) { if (Double.isNaN(value)) { diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java index 6af7fa54a..96e0643c5 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java @@ -14,6 +14,7 @@ public class Scheduler { private static class DaemonThreadFactory implements ThreadFactory { + @Override public Thread newThread(Runnable runnable) { Thread thread = new Thread(runnable); thread.setDaemon(true); @@ -29,6 +30,7 @@ public static ScheduledFuture schedule(Runnable command, long delay, TimeUnit } /** For unit test. Wait until the executor Thread is running. */ + @SuppressWarnings("FutureReturnValueIgnored") public static void awaitInitialization() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); Scheduler.schedule(latch::countDown, 0, TimeUnit.MILLISECONDS); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java index 1572eb645..059929c22 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/exemplars/ExemplarSamplerTest.java @@ -31,11 +31,10 @@ private static class SpanContext implements io.prometheus.metrics.tracer.common. int callCount = 0; boolean isSampled = true; - boolean isExemplar = false; @Override public String getCurrentTraceId() { - return "" + (callCount++); + return "" + callCount++; } @Override @@ -49,9 +48,7 @@ public boolean isCurrentSpanSampled() { } @Override - public void markCurrentSpanAsExemplar() { - isExemplar = true; - } + public void markCurrentSpanAsExemplar() {} } @Test diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index 4d55c3236..53280ba72 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -1498,7 +1498,7 @@ public void testObserveMultithreaded() } } assertThat(maxCount) - .isEqualTo(nThreads * 10_000); // the last collect() has seen all observations + .isEqualTo(nThreads * 10_000L); // the last collect() has seen all observations assertThat(nThreads * 10_000).isEqualTo(getBucket(histogram, 2.5, "status", "200").getCount()); executor.shutdown(); assertThat(executor.awaitTermination(5, TimeUnit.SECONDS)).isTrue(); @@ -1509,6 +1509,9 @@ private HistogramSnapshot.HistogramDataPointSnapshot getData( return histogram.collect().getDataPoints().stream() .filter(d -> d.getLabels().equals(Labels.of(labels))) .findAny() - .orElseThrow(() -> new RuntimeException("histogram with labels " + labels + " not found")); + .orElseThrow( + () -> + new RuntimeException( + "histogram with labels " + Arrays.toString(labels) + " not found")); } } diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java index 954facfef..6dc632cd9 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusHttpRequest.java @@ -38,6 +38,7 @@ default String getParameter(String name) { } /** See {@code jakarta.servlet.ServletRequest.getParameterValues(String)} */ + @Override default String[] getParameterValues(String name) { try { ArrayList result = new ArrayList<>(); diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java index 54e71d769..46c719bc1 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java @@ -326,6 +326,7 @@ public void rejectedExecution(Runnable runnable, ThreadPoolExecutor threadPoolEx try { threadPoolExecutor.getQueue().put(runnable); } catch (InterruptedException ignored) { + // ignore } } } diff --git a/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java b/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java index fc7df1dc9..ccc99bd01 100644 --- a/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java +++ b/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java @@ -22,7 +22,7 @@ public void testSubjectDoAs() throws Exception { final String user = "joe"; final Subject subject = new Subject(); - subject.getPrincipals().add(() -> (user)); + subject.getPrincipals().add(() -> user); Authenticator authenticator = new Authenticator() { @@ -68,7 +68,7 @@ public Result authenticate(HttpExchange exchange) { byte[] resp = new byte[500]; int read = socket.getInputStream().read(resp, 0, resp.length); if (read > 0) { - actualResponse = new String(resp, 0, read); + actualResponse = new String(resp, 0, read, StandardCharsets.UTF_8); } assertThat(actualResponse).contains("204"); diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java index c462a9d59..82f503ac9 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java @@ -14,6 +14,7 @@ import io.prometheus.metrics.model.registry.PrometheusRegistry; import java.time.Duration; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -58,6 +59,7 @@ private OpenTelemetryExporter( reader.register(prometheusMetricProducer); } + @Override public void close() { reader.shutdown(); } @@ -445,7 +447,8 @@ private static Map getResourceAttributes( } private static String getString(String otelPropertyName) { - String otelEnvVarName = otelPropertyName.replace(".", "_").replace("-", "_").toUpperCase(); + String otelEnvVarName = + otelPropertyName.replace(".", "_").replace("-", "_").toUpperCase(Locale.ROOT); if (System.getenv(otelEnvVarName) != null) { return System.getenv(otelEnvVarName); } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java index 698db602f..ce6baafe2 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java @@ -63,6 +63,7 @@ public static void addIfAbsent(Map result, String instrumentatio deleteTempDir(tmpDir.toFile()); } } catch (Exception ignored) { + // ignore } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java index fc31e6333..18e0151b2 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusClassicHistogram.java @@ -58,7 +58,7 @@ private HistogramPointData toOtelDataPoint( } private long calculateCount(ClassicHistogramBuckets buckets) { - int result = 0; + long result = 0; for (int i = 0; i < buckets.size(); i++) { result += buckets.getCount(i); } diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java index d879c3105..2b986adb4 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java @@ -391,7 +391,7 @@ private String getJob(ExporterPushgatewayProperties properties) { } } - private Format getFormat(ExporterPushgatewayProperties properties) { + private Format getFormat() { // currently not configurable via properties if (this.format != null) { return this.format; @@ -434,11 +434,7 @@ public PushGateway build() { config == null ? null : config.getExporterPushgatewayProperties(); try { return new PushGateway( - registry, - getFormat(properties), - makeUrl(properties), - connectionFactory, - requestHeaders); + registry, getFormat(), makeUrl(properties), connectionFactory, requestHeaders); } catch (MalformedURLException e) { throw new PrometheusPropertiesException( address + ": Invalid address. Expecting :"); diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java index 10f54848b..3d3eb862a 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java @@ -63,10 +63,11 @@ public String getContentType() { return CONTENT_TYPE; } + @Override public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); for (MetricSnapshot snapshot : metricSnapshots) { - if (snapshot.getDataPoints().size() > 0) { + if (!snapshot.getDataPoints().isEmpty()) { if (snapshot instanceof CounterSnapshot) { writeCounter(writer, (CounterSnapshot) snapshot); } else if (snapshot instanceof GaugeSnapshot) { diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java index 786e1d9bd..cdc02c26b 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java @@ -54,6 +54,7 @@ public String getContentType() { return CONTENT_TYPE; } + @Override public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { // See https://prometheus.io/docs/instrumenting/exposition_formats/ // "unknown", "gauge", "counter", "stateset", "info", "histogram", "gaugehistogram", and diff --git a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java index 4416c3e49..37f5f3670 100644 --- a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java +++ b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java @@ -21,6 +21,7 @@ import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Test; +@SuppressWarnings("CheckReturnValue") class CacheMetricsCollectorTest { @Test diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java index 6d99c176d..c4418b432 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java @@ -75,7 +75,7 @@ MetricSnapshot fromCounter(String dropwizardName, Counter counter) { CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder() .value(Long.valueOf(counter.getCount()).doubleValue()); - labelMapper.map( + labelMapper.ifPresent( mapper -> dataPointBuilder.labels( mapper.getLabels( @@ -103,7 +103,7 @@ MetricSnapshot fromGauge(String dropwizardName, Gauge gauge) { MetricMetadata metadata = getMetricMetaData(dropwizardName, gauge); GaugeSnapshot.GaugeDataPointSnapshot.Builder dataPointBuilder = GaugeSnapshot.GaugeDataPointSnapshot.builder().value(value); - labelMapper.map( + labelMapper.ifPresent( mapper -> dataPointBuilder.labels( mapper.getLabels( @@ -135,7 +135,7 @@ MetricSnapshot fromSnapshotAndCount( new MetricMetadata(PrometheusNaming.sanitizeMetricName(dropwizardName), helpMessage); SummarySnapshot.SummaryDataPointSnapshot.Builder dataPointBuilder = SummarySnapshot.SummaryDataPointSnapshot.builder().quantiles(quantiles).count(count); - labelMapper.map( + labelMapper.ifPresent( mapper -> dataPointBuilder.labels( mapper.getLabels( @@ -168,7 +168,7 @@ MetricSnapshot fromMeter(String dropwizardName, Meter meter) { MetricMetadata metadata = getMetricMetaData(dropwizardName + "_total", meter); CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder().value(meter.getCount()); - labelMapper.map( + labelMapper.ifPresent( mapper -> dataPointBuilder.labels( mapper.getLabels( @@ -180,22 +180,20 @@ MetricSnapshot fromMeter(String dropwizardName, Meter meter) { public MetricSnapshots collect() { MetricSnapshots.Builder metricSnapshots = MetricSnapshots.builder(); for (@SuppressWarnings("rawtypes") - SortedMap.Entry entry : registry.getGauges(metricFilter).entrySet()) { + Map.Entry entry : registry.getGauges(metricFilter).entrySet()) { Optional.ofNullable(fromGauge(entry.getKey().getKey(), entry.getValue())) - .map(metricSnapshots::metricSnapshot); + .ifPresent(metricSnapshots::metricSnapshot); } - for (SortedMap.Entry entry : - registry.getCounters(metricFilter).entrySet()) { + for (Map.Entry entry : registry.getCounters(metricFilter).entrySet()) { metricSnapshots.metricSnapshot(fromCounter(entry.getKey().getKey(), entry.getValue())); } - for (SortedMap.Entry entry : - registry.getHistograms(metricFilter).entrySet()) { + for (Map.Entry entry : registry.getHistograms(metricFilter).entrySet()) { metricSnapshots.metricSnapshot(fromHistogram(entry.getKey().getKey(), entry.getValue())); } - for (SortedMap.Entry entry : registry.getTimers(metricFilter).entrySet()) { + for (Map.Entry entry : registry.getTimers(metricFilter).entrySet()) { metricSnapshots.metricSnapshot(fromTimer(entry.getKey().getKey(), entry.getValue())); } - for (SortedMap.Entry entry : registry.getMeters(metricFilter).entrySet()) { + for (Map.Entry entry : registry.getMeters(metricFilter).entrySet()) { metricSnapshots.metricSnapshot(fromMeter(entry.getKey().getKey(), entry.getValue())); } return metricSnapshots.build(); diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java index 19e52d788..f69a27944 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java @@ -14,7 +14,7 @@ *

    Dropwizard metrics that match the "match" pattern will be further processed to have a new name * and new labels based on this config. */ -public class MapperConfig { +public final class MapperConfig { // each part of the metric name between dots private static final String METRIC_PART_REGEX = "[a-zA-Z_0-9](-?[a-zA-Z0-9_])+"; // Simplified GLOB: we can have "*." at the beginning and "*" only at the end diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java index 3bd39a59f..671c36c97 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java @@ -51,8 +51,7 @@ public class JvmMemoryPoolAllocationMetrics { private final List garbageCollectorBeans; - private JvmMemoryPoolAllocationMetrics( - List garbageCollectorBeans, PrometheusProperties config) { + private JvmMemoryPoolAllocationMetrics(List garbageCollectorBeans) { this.garbageCollectorBeans = garbageCollectorBeans; } @@ -142,21 +141,18 @@ private static long getAndSet(Map map, String key, long value) { } public static Builder builder() { - return new Builder(PrometheusProperties.get()); + return new Builder(); } + @SuppressWarnings("unused") public static Builder builder(PrometheusProperties config) { - return new Builder(config); + return new Builder(); } public static class Builder { - - private final PrometheusProperties config; private List garbageCollectorBeans; - private Builder(PrometheusProperties config) { - this.config = config; - } + private Builder() {} /** Package private. For testing only. */ Builder withGarbageCollectorBeans(List garbageCollectorBeans) { @@ -173,7 +169,7 @@ public void register(PrometheusRegistry registry) { if (garbageCollectorBeans == null) { garbageCollectorBeans = ManagementFactory.getGarbageCollectorMXBeans(); } - new JvmMemoryPoolAllocationMetrics(garbageCollectorBeans, config).register(registry); + new JvmMemoryPoolAllocationMetrics(garbageCollectorBeans).register(registry); } } } diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java index bd7fb14b1..a854f5e89 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java @@ -7,13 +7,15 @@ import io.prometheus.metrics.model.snapshots.Unit; import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; import java.io.IOException; +import java.io.InputStreamReader; import java.lang.management.ManagementFactory; import java.lang.management.OperatingSystemMXBean; import java.lang.management.RuntimeMXBean; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; /** * Process metrics. @@ -112,6 +114,7 @@ private void register(PrometheusRegistry registry) { callback.call(Unit.nanosToSeconds(processCpuTime)); } } catch (Exception ignored) { + // Ignored } }) .register(registry); @@ -134,6 +137,7 @@ private void register(PrometheusRegistry registry) { callback.call(openFds); } } catch (Exception ignored) { + // Ignored } }) .register(registry); @@ -149,6 +153,7 @@ private void register(PrometheusRegistry registry) { callback.call(maxFds); } } catch (Exception ignored) { + // Ignored } }) .register(registry); @@ -165,6 +170,7 @@ private void register(PrometheusRegistry registry) { String line = grepper.lineStartingWith(PROC_SELF_STATUS, "VmSize:"); callback.call(Unit.kiloBytesToBytes(Double.parseDouble(line.split("\\s+")[1]))); } catch (Exception ignored) { + // Ignored } }) .register(registry); @@ -179,6 +185,7 @@ private void register(PrometheusRegistry registry) { String line = grepper.lineStartingWith(PROC_SELF_STATUS, "VmRSS:"); callback.call(Unit.kiloBytesToBytes(Double.parseDouble(line.split("\\s+")[1]))); } catch (Exception ignored) { + // Ignored } }) .register(registry); @@ -235,7 +242,9 @@ private static class FileGrepper implements Grepper { @Override public String lineStartingWith(File file, String prefix) throws IOException { - try (BufferedReader reader = new BufferedReader(new FileReader(file))) { + try (BufferedReader reader = + new BufferedReader( + new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8))) { String line = reader.readLine(); while (line != null) { if (line.startsWith(prefix)) { diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java index fe97561aa..9c9e069b6 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetricsTest.java @@ -109,6 +109,7 @@ public void testInvalidThreadIds() { return; } } catch (NumberFormatException ignored) { + // ignore } PrometheusRegistry registry = new PrometheusRegistry(); JvmThreadsMetrics.builder().register(registry); diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBuckets.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBuckets.java index 6b5d4dea6..09e75181b 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBuckets.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBuckets.java @@ -35,7 +35,7 @@ private ClassicHistogramBuckets(double[] upperBounds, long[] counts) { * contain at least {@link Double#POSITIVE_INFINITY} for the {@code +Inf} bucket. An upper * bound must not be {@link Double#NaN}. The upperBounds array does not need to be sorted. * @param counts must have the same length as {@code upperBounds}. The entry at index {@code i} is - * the count for the {@code upperBound} at index {@code i}. For each count, {@link + * the count for the {@code upperBounds} at index {@code i}. For each count, {@link * Number#longValue()} is called to get the value. Counts are not cumulative. Counts * must not be negative. */ @@ -63,7 +63,7 @@ public static ClassicHistogramBuckets of( * contain at least {@link Double#POSITIVE_INFINITY} for the {@code +Inf} bucket. An upper * bound must not be {@link Double#NaN}. The upperBounds array does not need to be sorted. * @param counts must have the same length as {@code upperBounds}. The entry at index {@code i} is - * the count for the {@code upperBound} at index {@code i}. For each count, {@link + * the count for the {@code upperBounds} at index {@code i}. For each count, {@link * Number#longValue()} is called to get the value. Counts are not cumulative. Counts * must not be negative. */ @@ -87,7 +87,7 @@ public static ClassicHistogramBuckets of(double[] upperBounds, Number[] counts) * contain at least {@link Double#POSITIVE_INFINITY} for the {@code +Inf} bucket. An upper * bound must not be {@link Double#NaN}. The upperBounds array does not need to be sorted. * @param counts must have the same length as {@code upperBounds}. The entry at index {@code i} is - * the count for the {@code upperBound} at index {@code i}. Counts are not cumulative. + * the count for the {@code upperBounds} at index {@code i}. Counts are not cumulative. * Counts must not be negative. */ public static ClassicHistogramBuckets of(double[] upperBounds, long[] counts) { diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java index 170ec4fc2..dcb32f3bc 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java @@ -11,7 +11,7 @@ import java.util.stream.Stream; /** Immutable set of name/value pairs, sorted by name. */ -public class Labels implements Comparable, Iterable

    * * Note that in Prometheus, units are largely based on SI base units (seconds, bytes, joules, grams, - * meters, ratio, volts, amperes, and celsius). + * meters, ratio, volts, amperes, and Celsius). */ -public class Unit { +public final class Unit { private final String name; diff --git a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java index e68ebd968..c11d69e26 100644 --- a/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java +++ b/prometheus-metrics-simpleclient-bridge/src/main/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollector.java @@ -291,14 +291,6 @@ private MetricSnapshot convertUnknown(Collector.MetricFamilySamples samples) return unknown.build(); } - private String stripSuffix(String name, String suffix) { - if (name.endsWith(suffix)) { - return name.substring(0, name.length() - suffix.length()); - } else { - return name; - } - } - private Unit convertUnit(Collector.MetricFamilySamples samples) { if (samples.unit != null && !samples.unit.isEmpty()) { return new Unit(samples.unit); @@ -385,8 +377,9 @@ private Exemplar convertExemplar(io.prometheus.client.exemplars.Exemplar exempla * follow the pattern to pass the config everywhere so that we can introduce config options later * without the need for API changes. */ + @SuppressWarnings("unused") public static Builder builder(PrometheusProperties config) { - return new Builder(config); + return new Builder(); } public static Builder builder() { @@ -395,12 +388,9 @@ public static Builder builder() { public static class Builder { - private final PrometheusProperties config; private CollectorRegistry collectorRegistry; - private Builder(PrometheusProperties config) { - this.config = config; - } + private Builder() {} public Builder collectorRegistry(CollectorRegistry registry) { this.collectorRegistry = registry; diff --git a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java index a678bed93..89cae65ba 100644 --- a/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java +++ b/prometheus-metrics-simpleclient-bridge/src/test/java/io/prometheus/metrics/simpleclient/bridge/SimpleclientCollectorTest.java @@ -74,7 +74,7 @@ public void testGaugeComplete() throws IOException, InterruptedException { } @Test - public void testGaugeMinimal() throws IOException, InterruptedException { + public void testGaugeMinimal() throws IOException { Gauge gauge = Gauge.build() .name("temperature_centigrade") @@ -107,7 +107,7 @@ public void testHistogramComplete() throws IOException, InterruptedException { } @Test - public void testHistogramMinimal() throws IOException, InterruptedException { + public void testHistogramMinimal() throws IOException { Histogram.build().name("request_latency").help("request latency").register(origRegistry); assertThat(sort(newOpenMetrics())).isEqualTo(fixCounts(fixTimestamps(sort(origOpenMetrics())))); @@ -138,9 +138,8 @@ public void testSummaryComplete() throws IOException, InterruptedException { } @Test - public void testSummaryMinimal() throws IOException, InterruptedException { - Summary summary = - Summary.build().name("request_size").help("request size").register(origRegistry); + public void testSummaryMinimal() throws IOException { + Summary.build().name("request_size").help("request size").register(origRegistry); assertThat(sort(newOpenMetrics())).isEqualTo(fixCounts(fixTimestamps(sort(origOpenMetrics())))); } @@ -161,7 +160,7 @@ public void testInfoComplete() throws IOException, InterruptedException { } @Test - public void testInfoMinimal() throws IOException, InterruptedException { + public void testInfoMinimal() throws IOException { Info info = Info.build().name("jvm").help("JVM info").register(origRegistry); info.info("version", "17"); From 434c84c3d63b68ddd5d62a4886e66b320d6b3d3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 16:14:45 +0200 Subject: [PATCH 173/870] Bump org.wiremock:wiremock from 3.5.4 to 3.9.1 (#1143) Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.5.4 to 3.9.1. - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.5.4...3.9.1) --- updated-dependencies: - dependency-name: org.wiremock:wiremock dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 86d58ca30..4bb66dc1d 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -47,7 +47,7 @@ org.wiremock wiremock - 3.5.4 + 3.9.1 test From 850628087666a7678356696e45ca44f96053d324 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 16:14:59 +0200 Subject: [PATCH 174/870] Bump org.apache.maven.plugins:maven-project-info-reports-plugin (#1141) Bumps [org.apache.maven.plugins:maven-project-info-reports-plugin](https://github.com/apache/maven-project-info-reports-plugin) from 2.9 to 3.7.0. - [Commits](https://github.com/apache/maven-project-info-reports-plugin/compare/maven-project-info-reports-plugin-2.9...maven-project-info-reports-plugin-3.7.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-project-info-reports-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3105a1b22..9d4d95195 100644 --- a/pom.xml +++ b/pom.xml @@ -317,7 +317,7 @@ maven-project-info-reports-plugin - 2.9 + 3.7.0 maven-javadoc-plugin From 77226ce9f84ec947fc184ee04ceb3d7fae673daf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 16:15:22 +0200 Subject: [PATCH 175/870] Bump org.apache.maven.plugins:maven-release-plugin from 2.5.3 to 3.1.1 (#1140) Bumps [org.apache.maven.plugins:maven-release-plugin](https://github.com/apache/maven-release) from 2.5.3 to 3.1.1. - [Release notes](https://github.com/apache/maven-release/releases) - [Commits](https://github.com/apache/maven-release/compare/maven-release-2.5.3...maven-release-3.1.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-release-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9d4d95195..9dcbcb98b 100644 --- a/pom.xml +++ b/pom.xml @@ -158,7 +158,7 @@ maven-release-plugin - 2.5.3 + 3.1.1 maven-dependency-plugin From d921935f7e3c5e8ea3826e1bd332ec1553d969f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 16:15:34 +0200 Subject: [PATCH 176/870] Bump com.google.guava:guava from 33.2.1-jre to 33.3.1-jre (#1144) Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.2.1-jre to 33.3.1-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- prometheus-metrics-instrumentation-guava/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-instrumentation-guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml index 55c45f233..c3450c48b 100644 --- a/prometheus-metrics-instrumentation-guava/pom.xml +++ b/prometheus-metrics-instrumentation-guava/pom.xml @@ -37,7 +37,7 @@ com.google.guava guava - 33.2.1-jre + 33.3.1-jre provided From daf36286d4aadb4225cdc1eaffb3d9878645f7cc Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 11 Oct 2024 07:48:48 +0200 Subject: [PATCH 177/870] clean up maven (#1145) * clean up maven Signed-off-by: Gregor Zeitlinger * clean up maven Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .../example-greeting-service/pom.xml | 17 ++++------------ .../greeting/GreetingServlet.java | 2 +- .../example-hello-world-app/pom.xml | 17 ++++------------ .../otel_exemplars/app/HelloWorldServlet.java | 2 +- .../example-exemplars-tail-sampling/pom.xml | 16 ++++----------- .../example-exporter-servlet-tomcat/pom.xml | 17 ++++------------ .../tomcat_servlet/HelloWorldServlet.java | 2 +- .../it-exporter-servlet-tomcat-sample/pom.xml | 17 ++++------------ pom.xml | 7 ++++--- .../pom.xml | 20 +------------------ 10 files changed, 28 insertions(+), 89 deletions(-) diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index fc329b061..fd0750e6e 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -15,6 +15,10 @@ Part of a distributed "Hello, World" REST service to show Exemplars with OpenTelemetry's distributed tracing + + 17 + + io.prometheus @@ -41,19 +45,6 @@ ${project.artifactId} - - maven-compiler-plugin - - 17 - 17 - 17 - true - - -Xlint:all - -Werror - - - org.apache.maven.plugins maven-shade-plugin diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java index 45b2c8a79..a2b16f5f5 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java @@ -34,7 +34,7 @@ public GreetingServlet() { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { long start = System.nanoTime(); try { - Thread.sleep((long) (Math.abs((random.nextGaussian() + 1.0) * 100.0))); + Thread.sleep((long) Math.abs((random.nextGaussian() + 1.0) * 100.0)); resp.setStatus(200); resp.setContentType("text/plain"); resp.getWriter().println("Hello, World!"); diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index e7ab8cbd6..3e51aee99 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -15,6 +15,10 @@ Part of a distributed "Hello, World" REST service to show Exemplars with OpenTelemetry's distributed tracing + + 17 + + io.prometheus @@ -41,19 +45,6 @@ ${project.artifactId} - - maven-compiler-plugin - - 17 - 17 - 17 - true - - -Xlint:all - -Werror - - - org.apache.maven.plugins maven-shade-plugin diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java index f5a90d977..988f63819 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java @@ -41,7 +41,7 @@ public HelloWorldServlet() { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException { long start = System.nanoTime(); try { - Thread.sleep((long) (Math.abs((random.nextGaussian() + 1.0) * 100.0))); + Thread.sleep((long) Math.abs((random.nextGaussian() + 1.0) * 100.0)); String greeting = executeGreetingServiceRequest(); resp.setStatus(200); resp.setContentType("text/plain"); diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index 6fc7c9c2f..84117e965 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -16,20 +16,12 @@ Example project showing Examplars with OpenTelemetry's Tail Sampling. + + 11 + + example-greeting-service example-hello-world-app - - - - - maven-compiler-plugin - - 11 - 11 - - - - diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 357dd3118..81b81aa15 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -15,6 +15,10 @@ Prometheus Metrics Example using Embedded Tomcat and the Exporter Servlet + + 17 + + io.prometheus @@ -41,19 +45,6 @@ ${project.artifactId} - - maven-compiler-plugin - - 17 - 17 - 17 - true - - -Xlint:all - -Werror - - - org.apache.maven.plugins maven-shade-plugin diff --git a/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java b/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java index e2b654f34..309cc5ba4 100644 --- a/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java +++ b/examples/example-exporter-servlet-tomcat/src/main/java/io/prometheus/metrics/examples/tomcat_servlet/HelloWorldServlet.java @@ -44,7 +44,7 @@ public HelloWorldServlet() { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { long start = System.nanoTime(); try { - Thread.sleep((long) (Math.abs((random.nextGaussian() + 1.0) * 100.0))); + Thread.sleep((long) Math.abs((random.nextGaussian() + 1.0) * 100.0)); resp.setStatus(200); resp.setContentType("text/plain"); resp.getWriter().println("Hello, World!"); diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index e9ebcb583..67b6fa0c3 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -15,6 +15,10 @@ Tomcat Sample for the Exporter Integration Test + + 17 + + io.prometheus @@ -36,19 +40,6 @@ exporter-servlet-tomcat-sample - - maven-compiler-plugin - - 17 - 17 - 17 - true - - -Xlint:all - -Werror - - - org.apache.maven.plugins maven-shade-plugin diff --git a/pom.xml b/pom.xml index 9dcbcb98b..8665f90be 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,7 @@ --module-name-need-to-be-overriden-- 5.11.2 1.42.1 + 8 @@ -270,9 +271,9 @@ maven-compiler-plugin - 8 - 8 - 8 + ${java.version} + ${java.version} + ${java.version} true -Xlint:all diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index d135fb36d..c8852f597 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -19,6 +19,7 @@ io.prometheus.metrics.exporter.servlet.jakarta + 17 @@ -34,23 +35,4 @@ provided - - - - - maven-compiler-plugin - - 17 - 17 - 17 - true - - -Xlint:all - -Werror - - - - - - From 47ad01208703e2f5445b47bf8bb3c77547eb44f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 07:59:48 +0200 Subject: [PATCH 178/870] Bump org.eclipse.jetty:jetty-server from 11.0.21 to 12.0.14 (#1142) * Bump org.eclipse.jetty:jetty-server from 11.0.21 to 12.0.14 Bumps org.eclipse.jetty:jetty-server from 11.0.21 to 12.0.14. --- updated-dependencies: - dependency-name: org.eclipse.jetty:jetty-server dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * fix jetty Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .../it-exporter-servlet-jetty-sample/pom.xml | 12 ++++++++---- .../servlet/jetty/ExporterServletJettySample.java | 6 +++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index add87bf93..91b6c39e0 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -14,6 +14,10 @@ Jetty Sample for the Exporter Integration Test + + 12.0.14 + 17 + @@ -29,12 +33,12 @@ org.eclipse.jetty jetty-server - 11.0.21 + ${jetty-server.version} - org.eclipse.jetty - jetty-servlet - 11.0.21 + org.eclipse.jetty.ee10 + jetty-ee10-servlet + ${jetty-server.version} diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java index 1cc16ee4b..8c899b4ad 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java @@ -7,10 +7,10 @@ import io.prometheus.metrics.model.registry.Collector; import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.Unit; +import org.eclipse.jetty.ee10.servlet.ServletContextHandler; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; -import org.eclipse.jetty.servlet.ServletHandler; /** Sample application using the {@link PrometheusMetricsServlet} in Jetty. */ public class ExporterServletJettySample { @@ -73,8 +73,8 @@ public static void main(String[] args) throws Exception { server.setConnectors(new Connector[] {connector}); // register servlet - ServletHandler servletHandler = new ServletHandler(); - servletHandler.addServletWithMapping(PrometheusMetricsServlet.class, "/metrics"); + ServletContextHandler servletHandler = new ServletContextHandler("/"); + servletHandler.addServlet(PrometheusMetricsServlet.class, "/metrics"); server.setHandler(servletHandler); System.out.println("Running on http://localhost:" + port + "/metrics"); From 31c428846790f2b2f78fa23da7747d5fbf416887 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 11 Oct 2024 08:30:02 +0200 Subject: [PATCH 179/870] fix buffer sync logic using modern concurrency primitives (#991) * fix buffer sync logic using modern concurrency primitives Signed-off-by: Gregor Zeitlinger * format Signed-off-by: Gregor Zeitlinger * update benchmarks Signed-off-by: Gregor Zeitlinger * add errorprone Signed-off-by: Gregor Zeitlinger * update benchmarks Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- benchmarks/pom.xml | 31 ++++++-- .../metrics/benchmarks/CounterBenchmark.java | 22 +++--- .../benchmarks/HistogramBenchmark.java | 12 +-- pom.xml | 5 ++ .../metrics/core/metrics/Buffer.java | 75 +++++++++++++------ 5 files changed, 101 insertions(+), 44 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 90e5800d2..2bb1c15a6 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 @@ -51,9 +52,9 @@ ${simpleclient.version} - com.codahale.metrics - metrics-core - ${codahale.version} + com.codahale.metrics + metrics-core + ${codahale.version} io.opentelemetry @@ -74,6 +75,25 @@ ${project.artifactId} + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + -parameters + + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + + + + org.apache.maven.plugins maven-shade-plugin @@ -86,7 +106,8 @@ benchmarks - + io.prometheus.metrics.benchmarks.BenchmarkRunner diff --git a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java index 8ccf6a40d..f3c1e9309 100644 --- a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java +++ b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java @@ -18,21 +18,21 @@ import org.openjdk.jmh.annotations.Threads; /** - * Results on a machine with dedicated 8 vCPU cores: + * Results on a machine with dedicated Core i7 1265U: * *
      *
      * Benchmark                                     Mode  Cnt      Score     Error  Units
    - * CounterBenchmark.codahaleIncNoLabels         thrpt   25  25761.677 ± 122.947  ops/s
    - * CounterBenchmark.openTelemetryAdd            thrpt   25    545.026 ±  33.913  ops/s
    - * CounterBenchmark.openTelemetryInc            thrpt   25    550.577 ±  45.415  ops/s
    - * CounterBenchmark.openTelemetryIncNoLabels    thrpt   25    527.638 ±  32.020  ops/s
    - * CounterBenchmark.prometheusAdd               thrpt   25  20341.474 ±  40.973  ops/s
    - * CounterBenchmark.prometheusInc               thrpt   25  26414.616 ±  96.666  ops/s
    - * CounterBenchmark.prometheusNoLabelsInc       thrpt   25  26177.676 ± 120.342  ops/s
    - * CounterBenchmark.simpleclientAdd             thrpt   25   5503.867 ± 161.313  ops/s
    - * CounterBenchmark.simpleclientInc             thrpt   25   5568.125 ±  53.291  ops/s
    - * CounterBenchmark.simpleclientNoLabelsInc     thrpt   25   5394.692 ± 130.531  ops/s
    + * CounterBenchmark.codahaleIncNoLabels         thrpt   25  32969.795 ± 1547.775  ops/s
    + * CounterBenchmark.openTelemetryAdd            thrpt   25    747.068 ±   93.128  ops/s
    + * CounterBenchmark.openTelemetryInc            thrpt   25    760.784 ±   47.595  ops/s
    + * CounterBenchmark.openTelemetryIncNoLabels    thrpt   25    824.346 ±   45.131  ops/s
    + * CounterBenchmark.prometheusAdd               thrpt   25  28403.000 ±  250.774  ops/s
    + * CounterBenchmark.prometheusInc               thrpt   25  38368.142 ±  361.914  ops/s
    + * CounterBenchmark.prometheusNoLabelsInc       thrpt   25  35558.069 ± 4020.926  ops/s
    + * CounterBenchmark.simpleclientAdd             thrpt   25   4081.152 ±  620.094  ops/s
    + * CounterBenchmark.simpleclientInc             thrpt   25   5735.644 ± 1205.329  ops/s
    + * CounterBenchmark.simpleclientNoLabelsInc     thrpt   25   6852.563 ±  544.481  ops/s
      * 
    * * Prometheus counters are faster than counters of other libraries. For example, incrementing a diff --git a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java index 1bebec573..a8e6bddb1 100644 --- a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java +++ b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java @@ -17,15 +17,15 @@ import org.openjdk.jmh.annotations.Threads; /** - * Results on a machine with dedicated 8 vCPU cores: + * Results on a machine with dedicated Core i7 1265U: * *
      * Benchmark                                     Mode  Cnt      Score     Error  Units
    - * HistogramBenchmark.openTelemetryClassic      thrpt   25    258.660 ±   6.736  ops/s
    - * HistogramBenchmark.openTelemetryExponential  thrpt   25    210.963 ±  11.288  ops/s
    - * HistogramBenchmark.prometheusClassic         thrpt   25   1528.871 ±  43.598  ops/s
    - * HistogramBenchmark.prometheusNative          thrpt   25   1282.643 ± 110.210  ops/s
    - * HistogramBenchmark.simpleclient              thrpt   25   3376.016 ± 173.545  ops/s
    + * HistogramBenchmark.openTelemetryClassic      thrpt   25    390.982 ±   16.058  ops/s
    + * HistogramBenchmark.openTelemetryExponential  thrpt   25    320.160 ±   18.056  ops/s
    + * HistogramBenchmark.prometheusClassic         thrpt   25   2385.862 ±   34.766  ops/s
    + * HistogramBenchmark.prometheusNative          thrpt   25   1947.371 ±   48.193  ops/s
    + * HistogramBenchmark.simpleclient              thrpt   25   4324.961 ±   50.938  ops/s
      * 
    * * The simpleclient (i.e. client_java version 0.16.0 and older) histograms perform about the same as diff --git a/pom.xml b/pom.xml index 8665f90be..479a06133 100644 --- a/pom.xml +++ b/pom.xml @@ -48,6 +48,11 @@ Gregor Zeitlinger gregor.zeitlinger@grafana.com + + dhoard + Doug Hoard + doug.hoard@gmail.com + diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java index 69f6de86f..135b09044 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java @@ -3,6 +3,8 @@ import io.prometheus.metrics.model.snapshots.DataPointSnapshot; import java.util.Arrays; import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.ReentrantLock; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; @@ -15,17 +17,19 @@ */ class Buffer { - private static final long signBit = 1L << 63; + private static final long bufferActiveBit = 1L << 63; private final AtomicLong observationCount = new AtomicLong(0); private double[] observationBuffer = new double[0]; private int bufferPos = 0; private boolean reset = false; - private final Object appendLock = new Object(); - private final Object runLock = new Object(); + + ReentrantLock appendLock = new ReentrantLock(); + ReentrantLock runLock = new ReentrantLock(); + Condition bufferFilled = appendLock.newCondition(); boolean append(double value) { long count = observationCount.incrementAndGet(); - if ((count & signBit) == 0) { + if ((count & bufferActiveBit) == 0) { return false; // sign bit not set -> buffer not active. } else { doAppend(value); @@ -34,12 +38,17 @@ boolean append(double value) { } private void doAppend(double amount) { - synchronized (appendLock) { + appendLock.lock(); + try { if (bufferPos >= observationBuffer.length) { observationBuffer = Arrays.copyOf(observationBuffer, observationBuffer.length + 128); } observationBuffer[bufferPos] = amount; bufferPos++; + + bufferFilled.signalAll(); + } finally { + appendLock.unlock(); } } @@ -48,33 +57,55 @@ void reset() { reset = true; } - @SuppressWarnings("ThreadPriorityCheck") T run( - Function complete, Supplier runnable, Consumer observeFunction) { + Function complete, + Supplier createResult, + Consumer observeFunction) { double[] buffer; int bufferSize; T result; - synchronized (runLock) { - long count = observationCount.getAndAdd(signBit); - while (!complete.apply(count)) { - Thread.yield(); - } - result = runnable.get(); - int expectedBufferSize; - if (reset) { - expectedBufferSize = (int) ((observationCount.getAndSet(0) & ~signBit) - count); - reset = false; - } else { - expectedBufferSize = (int) (observationCount.addAndGet(signBit) - count); - } - while (bufferPos != expectedBufferSize) { - Thread.yield(); + + runLock.lock(); + try { + // Signal that the buffer is active. + Long expectedCount = observationCount.getAndAdd(bufferActiveBit); + + appendLock.lock(); + try { + while (!complete.apply(expectedCount)) { + // Wait until all in-flight threads have added their observations to the buffer. + bufferFilled.await(); + } + result = createResult.get(); + + // Signal that the buffer is inactive. + int expectedBufferSize; + if (reset) { + expectedBufferSize = + (int) ((observationCount.getAndSet(0) & ~bufferActiveBit) - expectedCount); + reset = false; + } else { + expectedBufferSize = (int) (observationCount.addAndGet(bufferActiveBit) - expectedCount); + } + + while (bufferPos < expectedBufferSize) { + // Wait until all in-flight threads have added their observations to the buffer. + bufferFilled.await(); + } + } finally { + appendLock.unlock(); } + buffer = observationBuffer; bufferSize = bufferPos; observationBuffer = new double[0]; bufferPos = 0; + } catch (InterruptedException e) { + throw new RuntimeException(e); + } finally { + runLock.unlock(); } + for (int i = 0; i < bufferSize; i++) { observeFunction.accept(buffer[i]); } From b8ff9853961dfa18e784eb75dacaf6d2a2f9b012 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 08:50:03 +0200 Subject: [PATCH 180/870] Bump org.eclipse.jetty:jetty-server (#1149) Bumps org.eclipse.jetty:jetty-server from 10.0.10 to 10.0.24. --- updated-dependencies: - dependency-name: org.eclipse.jetty:jetty-server dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- simpleclient-archive/simpleclient_jetty/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simpleclient-archive/simpleclient_jetty/pom.xml b/simpleclient-archive/simpleclient_jetty/pom.xml index db2dab617..85d7b49b3 100644 --- a/simpleclient-archive/simpleclient_jetty/pom.xml +++ b/simpleclient-archive/simpleclient_jetty/pom.xml @@ -17,7 +17,7 @@ - 10.0.10 + 10.0.24 From a133d761e14a25e62be7c66bf166004b63973ac5 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 15 Oct 2024 18:30:01 +0200 Subject: [PATCH 181/870] fix deadlock (#1152) * fix deadlock Signed-off-by: Gregor Zeitlinger * fix deadlock Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .../metrics/core/metrics/Buffer.java | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java index 135b09044..35c1fbe08 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java @@ -57,6 +57,7 @@ void reset() { reset = true; } + @SuppressWarnings("ThreadPriorityCheck") T run( Function complete, Supplier createResult, @@ -70,24 +71,26 @@ T run( // Signal that the buffer is active. Long expectedCount = observationCount.getAndAdd(bufferActiveBit); - appendLock.lock(); - try { - while (!complete.apply(expectedCount)) { - // Wait until all in-flight threads have added their observations to the buffer. - bufferFilled.await(); - } - result = createResult.get(); + while (!complete.apply(expectedCount)) { + // Wait until all in-flight threads have added their observations to the histogram + // we can't use a condition here, because the other thread doesn't have a lock as it's on + // the fast path. + Thread.yield(); + } + result = createResult.get(); - // Signal that the buffer is inactive. - int expectedBufferSize; - if (reset) { - expectedBufferSize = - (int) ((observationCount.getAndSet(0) & ~bufferActiveBit) - expectedCount); - reset = false; - } else { - expectedBufferSize = (int) (observationCount.addAndGet(bufferActiveBit) - expectedCount); - } + // Signal that the buffer is inactive. + int expectedBufferSize; + if (reset) { + expectedBufferSize = + (int) ((observationCount.getAndSet(0) & ~bufferActiveBit) - expectedCount); + reset = false; + } else { + expectedBufferSize = (int) (observationCount.addAndGet(bufferActiveBit) - expectedCount); + } + appendLock.lock(); + try { while (bufferPos < expectedBufferSize) { // Wait until all in-flight threads have added their observations to the buffer. bufferFilled.await(); From c9ff46b7162a3169a8e29c2bacc955884f556542 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 18:30:44 +0200 Subject: [PATCH 182/870] Bump org.mockito:mockito-core from 5.14.1 to 5.14.2 (#1151) Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.14.1 to 5.14.2. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.14.1...v5.14.2) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 479a06133..ede38b014 100644 --- a/pom.xml +++ b/pom.xml @@ -105,7 +105,7 @@ org.mockito mockito-core - 5.14.1 + 5.14.2 test From 0f32c6753489a1901b9c7091039187712592ce1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:10:59 +0200 Subject: [PATCH 183/870] Bump org.apache.tomcat.embed:tomcat-embed-core from 10.1.30 to 11.0.0 (#1146) * Bump org.apache.tomcat.embed:tomcat-embed-core from 10.1.30 to 11.0.0 Bumps org.apache.tomcat.embed:tomcat-embed-core from 10.1.30 to 11.0.0. --- updated-dependencies: - dependency-name: org.apache.tomcat.embed:tomcat-embed-core dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * fix tomcat Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- .../it-exporter-servlet-tomcat-sample/pom.xml | 2 +- .../metrics/it/exporter/test/ExporterIT.java | 10 +++++++++- .../prometheus/metrics/it/exporter/test/TomcatIT.java | 7 +++++++ 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index fd0750e6e..f0d2a6a46 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.30 + 11.0.0 diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 3e51aee99..299cb7656 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.30 + 11.0.0
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 81b81aa15..f41ba92f4 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.30 + 11.0.0
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 67b6fa0c3..8cb9faa81 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -33,7 +33,7 @@ org.apache.tomcat.embed tomcat-embed-core - 10.1.30 + 11.0.0
    diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index 3e0caf954..852b7cd0d 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -176,6 +176,10 @@ public void testErrorHandling() throws IOException { assertThat(new String(response.body, UTF_8)).contains("Simulating an error."); } + protected boolean headReturnsContentLength() { + return true; + } + @Test public void testHeadRequest() throws IOException { sampleAppContainer @@ -186,7 +190,11 @@ public void testHeadRequest() throws IOException { assertThat(size > 0).isTrue(); Response headResponse = scrape("HEAD", ""); assertThat(headResponse.status).isEqualTo(200); - assertThat(headResponse.getHeader("Content-Length")).isEqualTo(Integer.toString(size)); + if (headReturnsContentLength()) { + assertThat(headResponse.getHeader("Content-Length")).isEqualTo(Integer.toString(size)); + } else { + assertThat(headResponse.getHeader("Content-Length")).isNull(); + } assertThat(headResponse.body.length).isZero(); } diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java index ea5e6b69d..731e7fa3a 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java @@ -7,4 +7,11 @@ class TomcatIT extends ExporterIT { public TomcatIT() throws IOException, URISyntaxException { super("exporter-servlet-tomcat-sample"); } + + @Override + protected boolean headReturnsContentLength() { + // not any more since + // https://tomcat.apache.org/tomcat-11.0-doc/changelog.html#Tomcat_11.0.0-M3_(markt) + return false; + } } From c06da1a364823daeb5627973c1fbcd5602727a10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:21:22 +0200 Subject: [PATCH 184/870] Bump org.eclipse.jetty:jetty-server (#1153) Bumps org.eclipse.jetty:jetty-server from 11.0.10 to 11.0.24. --- updated-dependencies: - dependency-name: org.eclipse.jetty:jetty-server dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- simpleclient-archive/simpleclient_jetty_jdk8/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simpleclient-archive/simpleclient_jetty_jdk8/pom.xml b/simpleclient-archive/simpleclient_jetty_jdk8/pom.xml index 9ac30461d..a2e1027c7 100644 --- a/simpleclient-archive/simpleclient_jetty_jdk8/pom.xml +++ b/simpleclient-archive/simpleclient_jetty_jdk8/pom.xml @@ -25,7 +25,7 @@ org.eclipse.jetty jetty-server - 11.0.10 + 11.0.24 org.eclipse.jetty From 8963973aad31e93b6ad6ce4f5b1716479aed6035 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 16 Oct 2024 16:39:10 +0200 Subject: [PATCH 185/870] Release automation (#1154) * release automation Signed-off-by: Gregor Zeitlinger * release automation Signed-off-by: Gregor Zeitlinger * release Signed-off-by: Gregor Zeitlinger * release Signed-off-by: Gregor Zeitlinger * release Signed-off-by: Gregor Zeitlinger * release Signed-off-by: Gregor Zeitlinger * release Signed-off-by: Gregor Zeitlinger * release Signed-off-by: Gregor Zeitlinger * release Signed-off-by: Gregor Zeitlinger * secrets are not available for prs Signed-off-by: Gregor Zeitlinger * secrets are not available for prs Signed-off-by: Gregor Zeitlinger * secrets are not available for prs Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .github/workflows/build.yml | 2 +- .github/workflows/github-pages.yaml | 11 +- .github/workflows/release.yml | 48 ++++++++ CONTRIBUTING.md | 4 + MAINTAINER_NOTES.md | 71 ----------- RELEASING.md | 25 ++++ benchmarks/pom.xml | 3 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- .../example-exemplars-tail-sampling/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- .../example-exporter-multi-target/pom.xml | 2 +- .../example-exporter-opentelemetry/pom.xml | 2 +- .../example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- .../example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 6 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter-httpserver-sample/pom.xml | 2 +- .../it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter-servlet-tomcat-sample/pom.xml | 2 +- .../it-exporter/it-exporter-test/pom.xml | 6 +- integration-tests/it-exporter/pom.xml | 2 +- integration-tests/it-pushgateway/pom.xml | 6 +- integration-tests/pom.xml | 6 +- pom.xml | 114 +++++++++--------- prometheus-metrics-bom/pom.xml | 2 +- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- .../pom.xml | 2 +- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- 48 files changed, 179 insertions(+), 195 deletions(-) create mode 100644 .github/workflows/release.yml delete mode 100644 MAINTAINER_NOTES.md create mode 100644 RELEASING.md diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0ac4d429e..108ad6529 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,4 +28,4 @@ jobs: REQUIRE_PROTO_UP_TO_DATE: true run: | ./mvnw clean install - ./mvnw javadoc:javadoc + ./mvnw javadoc:javadoc -P release # just to check if javadoc is generated diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 43a6fd94d..56380ec7f 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -44,17 +44,10 @@ jobs: run: | wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ && sudo dpkg -i ${{ runner.temp }}/hugo.deb - #- name: Install Dart Sass - # run: sudo snap install dart-sass - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 - name: Build client_java - run: ./mvnw -B clean install -DskipTests + run: ./mvnw -B clean install -DskipTests -P release - name: Make Javadoc - run: ./mvnw -B clean compile javadoc:javadoc javadoc:aggregate + run: ./mvnw -B clean compile javadoc:javadoc javadoc:aggregate -P release - name: Move the Javadoc to docs/static/api/ run: mv ./target/reports/apidocs ./docs/static/api && echo && echo 'ls ./docs/static/api' && ls ./docs/static/api - name: Setup Pages diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..dde83081a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,48 @@ +name: Deploy to Maven Central + +#on: +# push: +# tags: +# - v* +on: + push: + branches: [ "main" ] +# pull_request: +# branches: [ "main" ] + +jobs: + deploy: + if: ${{ github.repository == 'prometheus/client_java' }} + runs-on: ubuntu-latest + + steps: + - name: Checkout Plugin Repository + uses: actions/checkout@v4 + + - name: Set Up JDK + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + cache: 'maven' + + - name: Build with Maven + run: mvn -B package -P release -Dmaven.test.skip=true + + - name: Set up Apache Maven Central + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_CENTRAL_TOKEN + gpg-private-key: ${{ secrets.GPG_SIGNING_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + + - name: Publish to Apache Maven Central + run: mvn deploy -P release + env: + MAVEN_USERNAME: ${{ secrets.SONATYPE_MAVEN_REPOSITORY_USERNAME }} + MAVEN_CENTRAL_TOKEN: ${{ secrets.SONATYPE_MAVEN_REPOSITORY_PASSWORD }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_SIGNING_PASSPHRASE }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dbac64dd5..d9e3d5779 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,3 +22,7 @@ Run `./mvnw spotless:apply` to format the code (only changed files) before commi If you're getting errors when running tests: - Make sure that the IDE uses only the "Maven Shade" dependency of "prometheus-metrics-exposition-formats" and the "prometheus-metrics-tracer*" dependencies. + +## Updating the Protobuf Java Classes + +Use `PROTO_GENERATION=true mvn clean install` to generate protobuf classes. diff --git a/MAINTAINER_NOTES.md b/MAINTAINER_NOTES.md deleted file mode 100644 index 495fab6cf..000000000 --- a/MAINTAINER_NOTES.md +++ /dev/null @@ -1,71 +0,0 @@ -# Maintainer Notes - -## Update Dependency Versions - -Use the [Versions Maven Plugin](https://www.mojohaus.org/versions-maven-plugin/index.html). Rules are configured in [version-rules.xml](version-rules.xml). - -``` -./mvnw versions:use-latest-releases -``` - -The versions plugin does not catch the `otel.version` in `prometheus-metrics-exporter-opentelemetry`. This needs to be updated manually. - -## Update Shaded Dependencies - -There are two modules for shaded dependencies: -* `prometheus-metrics-shaded-protobuf`: Google's protobuf library. - -The shaded modules are commented out in the root `pom.xml`. Instead of using the shaded dependencies from the project, we use the latest shaded dependencies from Maven central (or from the local Maven repository in `~/.m2/repository/`). This way we can `include` the shaded package name directly. We find this easier than importing the original package name and have it renamed at build time. - -In order to update dependencies of the shaded modules (like Google's protobuf library or the OpenTelemetry library), do the following: - -Step 1: Install updated versions of the shaded dependencies in your local Maven repository. - -* Update the dependency versions in the shaded modules (both `*.version` and `*.version.string`). -* `cd ./prometheus-metrics-shaded-dependencies ; ../mvnw install ; cd ..` - -Step 2: Update `prometheus-metrics-expositon-formats` - -* Change the version of the `prometheus-metrics-shaded-protobuf` dependency in `pom.xml` to `${project.version}`. -* Update `PROTOBUF_VERSION_STRING` in `generate-protobuf.sh` and run the script to update the source code. -* Use find-and-replace to update the version numbers in the imported package names in the source code of `prometheus-metrics-exposition-formats` and `prometheus-metrics-core`. - -Step 3: Update `prometheus-metrics-exporter-opentelemetry` - -* Change the version of the `prometheus-metrics-shaded-opentelemetry` dependency in `pom.xml` to `${project.version}`. -* Use find-and-replace to update the version numbers in the imported package names in the source code of `prometheus-metrics-exporter-opentelemetry`. - -Step 4: Update `prometheus-metrics-bom` - -* Set the shaded dependency version property to `${project.version}` in `prometheus-metrics-bom/pom.xml` - -Step 5: Release - -_see below_ - -## Release - -Create a commit to temporarily add shaded dependencies to the project: - -* Add the `prometheus-metrics-shaded-dependencies` module to the root `pom.xml`. -* Change the versions of the shaded dependencies to `${project.version}` in `prometheus-metrics-exporter-opentelemetry`, `prometheus-metrics-exposition-formats`, and `prometheus-metrics-bom`. - -Release: - -``` -./mvnw release:prepare -DreleaseVersion=1.2.0 -DdevelopmentVersion=1.3.0-SNAPSHOT -./mvnw release:perform -DreleaseVersion=1.2.0 -DdevelopmentVersion=1.3.0-SNAPSHOT -``` - -`release:prepare` does GitHub tags and commits, while `release:perform` signs the artifacts and uploads them to the staging repositoring on [https://oss.sonatype.org](https://oss.sonatype.org). - -After that, manually verify the uploaded artifacts on [https://oss.sonatype.org/#stagingRepositories](https://oss.sonatype.org/#stagingRepositories), click `Close` to trigger Sonatype's verification, and then `Release`. - -Create a commit to remove dependencies from the build (undoing the first step): - -* Comment out the `prometheus-metrics-shaded-dependencies` module to the root `pom.xml`. -* Change the versions of the shaded dependencies to the latest released version on Maven Central in `prometheus-metrics-exporter-opentelemetry`, `prometheus-metrics-exposition-formats`, and `prometheus-metrics-bom`. - -## Notes - -- `PROTO_GENERATION=true mvn clean install` to generate protobuf classes. diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 000000000..c7b195c8b --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,25 @@ +## Update Version + +In a new PR, update the version in `pom.xml` using + +```shell +mvn versions:set -DnewVersion= +``` + +Commit the changes and open a PR. + +## Publish Release via Github Workflow + +On main branch, create a tag for the new version to trigger the release workflow. + +```sh +git tag -a v -m "Release v" +git push origin v +``` + +## Create a Release + +1. Go to https://github.com/prometheus/client_java/releases +2. Click on "Choose a tag", enter the tag name (e.g. `v0.1.0`), and click "Create a new tag". +3. Click on "Generate release notes" to auto-generate the release notes based on the commits since the last release. +4. Click on "Publish release". diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 2bb1c15a6..4b7d53b79 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 benchmarks @@ -20,7 +20,6 @@ 1.37 0.16.0 3.0.2 - true diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index f0d2a6a46..bb152565a 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 example-greeting-service diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 299cb7656..0a62eee13 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 example-hello-world-app diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index 84117e965..85cecfeb2 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 example-exemplars-tail-sampling diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index 575cc479a..97a53e64c 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 example-exporter-httpserver diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index 8b7382275..23ee8b63c 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 example-exporter-multi-target diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index 057022269..a1cd6c28f 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 example-exporter-opentelemetry diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index f41ba92f4..520141b58 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 example-exporter-servlet-tomcat diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index 0d17251ae..ed97c5e46 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 example-native-histogram diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index 0c910483f..ad68ab386 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 example-prometheus-properties diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index 0e2607f1c..e80429b30 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 example-simpleclient-bridge diff --git a/examples/pom.xml b/examples/pom.xml index 3a24e5724..def095f43 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 examples @@ -16,10 +16,6 @@ Example projects for the Prometheus Metrics Library. - - true - - example-exemplars-tail-sampling example-exporter-servlet-tomcat diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index 0b779da40..ecf5f9cb2 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 it-common diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index e44f4396a..16aa565e4 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index 91b6c39e0..105f43f90 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 8cb9faa81..15c8e89e3 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 97748af84..8b7465d52 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 it-exporter-test @@ -16,10 +16,6 @@ Integration Tests for Exporters - - true - - io.prometheus diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index 1c7066298..cd143e911 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 it-exporter diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index 15177eeb6..95ef595bd 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 it-pushgateway @@ -16,10 +16,6 @@ Integration tests for the Pushgateway Exporter - - true - - io.prometheus diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 89315a227..dbd6754c6 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 integration-tests @@ -18,10 +18,6 @@ Integration tests for the Exporter modules - - true - - it-common it-exporter diff --git a/pom.xml b/pom.xml index ede38b014..5735d8581 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 Prometheus Metrics Library http://github.com/prometheus/client_java @@ -73,22 +73,8 @@ prometheus-metrics-instrumentation-dropwizard5 prometheus-metrics-instrumentation-guava prometheus-metrics-simpleclient-bridge - examples - benchmarks - integration-tests - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - - - org.junit.jupiter @@ -162,10 +148,6 @@ maven-failsafe-plugin 3.5.1
    - - maven-release-plugin - 3.1.1 - maven-dependency-plugin 3.8.0 @@ -231,21 +213,6 @@ - - org.apache.maven.plugins - maven-release-plugin - - true - false - release - deploy - v${project.version} - - - - org.apache.maven.plugins - maven-deploy-plugin - org.apache.felix maven-bundle-plugin @@ -261,18 +228,6 @@ org.apache.maven.plugins maven-surefire-plugin - - maven-javadoc-plugin - - UTF-8 - UTF-8 - true - all - public - io.prometheus.metrics.expositionformats.generated.* - 8 - - maven-compiler-plugin @@ -347,10 +302,42 @@ + + default + + true + + + examples + benchmarks + integration-tests + + release + + maven-javadoc-plugin + + UTF-8 + UTF-8 + true + all + public + io.prometheus.metrics.expositionformats.generated.* + + 8 + + + + attach-javadocs + + jar + + + + org.apache.maven.plugins maven-gpg-plugin @@ -361,6 +348,12 @@ sign + + + --pinentry-mode + loopback + + @@ -377,19 +370,28 @@ - org.apache.maven.plugins - maven-javadoc-plugin - - - attach-javadocs - - jar - - - + org.sonatype.central + central-publishing-maven-plugin + 0.5.0 + true + + ossrh + false + + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index ccd57519e..b175c9cb1 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-bom diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index a6c8e008f..2a77f617e 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 1f1079992..4da7c366e 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index e4ef51b74..c4269458c 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index 1dd7b36fe..35a0c24e3 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 4bb66dc1d..3e293ad39 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index aa02be7c6..889089997 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-exporter-pushgateway diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index c8852f597..7cc114f8f 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml index b173a3b07..2877f0518 100644 --- a/prometheus-metrics-exporter-servlet-javax/pom.xml +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-exporter-servlet-javax diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 4f2f35422..3abc67b96 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-instrumentation-caffeine/pom.xml b/prometheus-metrics-instrumentation-caffeine/pom.xml index 026c1fec7..d8fe77578 100644 --- a/prometheus-metrics-instrumentation-caffeine/pom.xml +++ b/prometheus-metrics-instrumentation-caffeine/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-instrumentation-caffeine diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index 714da9a9e..bcedc6446 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-instrumentation-dropwizard5 diff --git a/prometheus-metrics-instrumentation-guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml index c3450c48b..19b07a944 100644 --- a/prometheus-metrics-instrumentation-guava/pom.xml +++ b/prometheus-metrics-instrumentation-guava/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-instrumentation-guava diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index fb3458df4..767c0fe61 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index 3c6af3fe3..7d8c0c960 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-model diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index be74a4dec..c5fd6089b 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-simpleclient-bridge diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 68e169524..84938cff4 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index 40c3d566f..f16f47f4b 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index c32ab9aed..51066bd41 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index 3ab18baf1..85c0a8d8e 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index 68dd6c81a..83788e746 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.4.0-SNAPSHOT + 0.0.1-releasetest1 prometheus-metrics-tracer-otel From e69c5b514a2973fe3cf21a23093f3b991c00a367 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 16 Oct 2024 17:33:36 +0200 Subject: [PATCH 186/870] release automation (#1155) * release automation Signed-off-by: Gregor Zeitlinger * release automation Signed-off-by: Gregor Zeitlinger * release automation Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .github/workflows/build.yml | 2 +- .github/workflows/github-pages.yaml | 4 +--- .github/workflows/release.yml | 4 ++++ pom.xml | 13 ++++++++++++- .../io/prometheus/metrics/core/metrics/Buffer.java | 3 ++- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 108ad6529..10a46622a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,4 +28,4 @@ jobs: REQUIRE_PROTO_UP_TO_DATE: true run: | ./mvnw clean install - ./mvnw javadoc:javadoc -P release # just to check if javadoc is generated + ./mvnw javadoc:javadoc -P javadoc # just to check if javadoc is generated diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 56380ec7f..4e91f37f9 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -44,10 +44,8 @@ jobs: run: | wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ && sudo dpkg -i ${{ runner.temp }}/hugo.deb - - name: Build client_java - run: ./mvnw -B clean install -DskipTests -P release - name: Make Javadoc - run: ./mvnw -B clean compile javadoc:javadoc javadoc:aggregate -P release + run: ./mvnw -B clean compile javadoc:javadoc javadoc:aggregate -P javadoc - name: Move the Javadoc to docs/static/api/ run: mv ./target/reports/apidocs ./docs/static/api && echo && echo 'ls ./docs/static/api' && ls ./docs/static/api - name: Setup Pages diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dde83081a..a890367c8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,6 +16,10 @@ jobs: runs-on: ubuntu-latest steps: + - name: Debug gpg key - remove after debugging + run: | + echo "$GPG_SIGNING_KEY" | wc -c + echo "$GPG_SIGNING_KEY" | gpg --batch --import-options import-show --import - name: Checkout Plugin Repository uses: actions/checkout@v4 diff --git a/pom.xml b/pom.xml index 5735d8581..4b62d968f 100644 --- a/pom.xml +++ b/pom.xml @@ -314,7 +314,7 @@ - release + javadoc @@ -329,6 +329,17 @@ 8 + + + + + + release + + + + org.apache.maven.plugins + maven-javadoc-plugin attach-javadocs diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java index 35c1fbe08..d4ff33a37 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Buffer.java @@ -72,7 +72,8 @@ T run( Long expectedCount = observationCount.getAndAdd(bufferActiveBit); while (!complete.apply(expectedCount)) { - // Wait until all in-flight threads have added their observations to the histogram + // Wait until all in-flight threads have added their observations to the histogram / + // summary. // we can't use a condition here, because the other thread doesn't have a lock as it's on // the fast path. Thread.yield(); From 6f4793cbfcdf08d9ceefd0888f61aa94aaefb51a Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 16 Oct 2024 17:46:39 +0200 Subject: [PATCH 187/870] release automation (#1156) Signed-off-by: Gregor Zeitlinger --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a890367c8..f637bc517 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,6 +17,8 @@ jobs: steps: - name: Debug gpg key - remove after debugging + env: + GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} run: | echo "$GPG_SIGNING_KEY" | wc -c echo "$GPG_SIGNING_KEY" | gpg --batch --import-options import-show --import From 38188b92676ba25258cb67e27eac3ca5576ace77 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 17 Oct 2024 12:26:55 +0200 Subject: [PATCH 188/870] use otel autoconfigure (#1147) * use otel autoconfig Signed-off-by: Gregor Zeitlinger * add oats test Signed-off-by: Gregor Zeitlinger * add oats test Signed-off-by: Gregor Zeitlinger * add oats test Signed-off-by: Gregor Zeitlinger * add oats test Signed-off-by: Gregor Zeitlinger * add oats test Signed-off-by: Gregor Zeitlinger * add oats test Signed-off-by: Gregor Zeitlinger * extra project for otel resource attributes Signed-off-by: Gregor Zeitlinger * extra project for otel resource attributes Signed-off-by: Gregor Zeitlinger * extra project for otel resource attributes Signed-off-by: Gregor Zeitlinger * add otel tests Signed-off-by: Gregor Zeitlinger * release automation Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .github/workflows/acceptance-tests.yml | 41 +++ CONTRIBUTING.md | 2 + benchmarks/pom.xml | 15 +- .../oats-tests/agent/Dockerfile | 9 + .../oats-tests/agent/docker-compose.yml | 13 + .../oats-tests/agent/oats.yaml | 12 + .../agent/service-instance-id-check.py | 33 ++ .../oats-tests/http/Dockerfile | 5 + .../oats-tests/http/docker-compose.yml | 13 + .../oats-tests/http/oats.yaml | 10 + .../metrics/examples/opentelemetry/Main.java | 2 + otel-agent-resources/pom.xml | 67 ++++ .../ResourceAttributesFromOtelAgent.java | 16 +- .../src/main/resources/lib/.gitignore | 0 pom.xml | 11 +- .../ExporterOpenTelemetryProperties.java | 72 ++-- .../io/prometheus/metrics/config/Util.java | 12 +- .../pom.xml | 73 ++-- .../opentelemetry/OpenTelemetryExporter.java | 337 +----------------- .../opentelemetry/OtelAutoConfig.java | 117 ++++++ .../PropertiesResourceProvider.java | 35 ++ .../opentelemetry/PropertyMapper.java | 112 ++++++ .../opentelemetry/ResourceAttributes.java | 36 -- .../ResourceAttributesDefaults.java | 14 - .../ResourceAttributesFromJarFileName.java | 60 ---- .../opentelemetry/OtelAutoConfigTest.java | 296 +++++++++++++++ prometheus-metrics-tracer/pom.xml | 18 +- scripts/run-acceptance-tests.sh | 10 + 28 files changed, 932 insertions(+), 509 deletions(-) create mode 100644 .github/workflows/acceptance-tests.yml create mode 100644 examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile create mode 100644 examples/example-exporter-opentelemetry/oats-tests/agent/docker-compose.yml create mode 100644 examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml create mode 100755 examples/example-exporter-opentelemetry/oats-tests/agent/service-instance-id-check.py create mode 100644 examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile create mode 100644 examples/example-exporter-opentelemetry/oats-tests/http/docker-compose.yml create mode 100644 examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml create mode 100644 otel-agent-resources/pom.xml rename {prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry => otel-agent-resources/src/main/java/io/prometheus/otelagent}/ResourceAttributesFromOtelAgent.java (88%) rename {prometheus-metrics-exporter-opentelemetry => otel-agent-resources}/src/main/resources/lib/.gitignore (100%) create mode 100644 prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfig.java create mode 100644 prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PropertiesResourceProvider.java create mode 100644 prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PropertyMapper.java delete mode 100644 prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributes.java delete mode 100644 prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesDefaults.java delete mode 100644 prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromJarFileName.java create mode 100644 prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java create mode 100755 scripts/run-acceptance-tests.sh diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml new file mode 100644 index 000000000..590c12946 --- /dev/null +++ b/.github/workflows/acceptance-tests.yml @@ -0,0 +1,41 @@ +name: OpenTelemetry Acceptance Tests + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + acceptance-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check out oats + uses: actions/checkout@v4 + with: + repository: grafana/oats + ref: 7cd5ca42fff009fd67ea986d42c79134ac99ae48 + path: oats + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + cache: 'maven' + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.23' + cache-dependency-path: oats/go.sum + - name: Run the Maven verify phase + run: | + ./mvnw clean install -DskipTests + - name: Run acceptance tests + run: ./scripts/run-acceptance-tests.sh + - name: upload log file + uses: actions/upload-artifact@v4 + if: failure() + with: + name: docker-compose.log + path: oats/yaml/build/**/*.log diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d9e3d5779..79cd4b6ca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,6 +17,8 @@ This repository uses [Google Java Format](https://github.com/google/google-java- Run `./mvnw spotless:apply` to format the code (only changed files) before committing. +Use `-Dspotless.check.skip=true` to skip the formatting check during development. + ## Running Tests If you're getting errors when running tests: diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 4b7d53b79..99c4ecee8 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -22,6 +22,18 @@ 3.0.2 + + + + io.opentelemetry.instrumentation + opentelemetry-instrumentation-bom-alpha + ${otel.instrumentation.version} + pom + import + + + + org.openjdk.jmh @@ -58,17 +70,14 @@ io.opentelemetry opentelemetry-api - ${otel.version} io.opentelemetry opentelemetry-sdk - ${otel.version} io.opentelemetry opentelemetry-sdk-testing - ${otel.version} diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile b/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile new file mode 100644 index 000000000..23f980005 --- /dev/null +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile @@ -0,0 +1,9 @@ +FROM eclipse-temurin:21-jre + +COPY target/example-exporter-opentelemetry.jar ./app.jar +# check that the resource attributs from the agent are used, epsecially the service.instance.id should be the same +ADD --chmod=644 https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v2.8.0/opentelemetry-javaagent.jar /usr/src/app/opentelemetry-javaagent.jar +ENV JAVA_TOOL_OPTIONS=-javaagent:/usr/src/app/opentelemetry-javaagent.jar + +#ENTRYPOINT [ "java", "-Dotel.javaagent.debug=true","-jar", "./app.jar" ] # for debugging +ENTRYPOINT [ "java", "-jar", "./app.jar" ] diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/docker-compose.yml b/examples/example-exporter-opentelemetry/oats-tests/agent/docker-compose.yml new file mode 100644 index 000000000..9c0fc66fb --- /dev/null +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/docker-compose.yml @@ -0,0 +1,13 @@ +# OATS is an acceptance testing framework for OpenTelemetry - https://github.com/grafana/oats/tree/main/yaml +version: '3.4' + +services: + java: + build: + context: ../.. + dockerfile: oats-tests/agent/Dockerfile + environment: + OTEL_SERVICE_NAME: "rolldice" + OTEL_EXPORTER_OTLP_ENDPOINT: http://lgtm:4317 + OTEL_EXPORTER_OTLP_PROTOCOL: grpc + OTEL_METRIC_EXPORT_INTERVAL: "5000" # so we don't have to wait 60s for metrics diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml b/examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml new file mode 100644 index 000000000..08e4d8d3f --- /dev/null +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml @@ -0,0 +1,12 @@ +# OATS is an acceptance testing framework for OpenTelemetry - https://github.com/grafana/oats/tree/main/yaml +docker-compose: + generator: docker-lgtm + files: + - ./docker-compose.yml +expected: + custom-checks: + - script: ./service-instance-id-check.py + metrics: + - promql: 'uptime_seconds_total{}' + value: '>= 0' + diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/service-instance-id-check.py b/examples/example-exporter-opentelemetry/oats-tests/agent/service-instance-id-check.py new file mode 100755 index 000000000..196c629c9 --- /dev/null +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/service-instance-id-check.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 + +# This script is used to check if the service instance id is present in the exported data +# The script will return 0 if the service instance id is present in the exported data + +from urllib.request import urlopen +import urllib.parse +import json + +url = ' http://localhost:9090/api/v1/label/instance/values' +res = json.loads(urlopen(url).read().decode('utf-8')) + +values = list(res['data']) +print(values) + +if "localhost:8888" in values: + values.remove("localhost:8888") + +# both the agent and the exporter should report the same instance id +assert len(values) == 1 + +path = 'target_info{instance="%s"}' % values[0] +path = urllib.parse.quote_plus(path) +url = 'http://localhost:9090/api/v1/query?query=%s' % path +res = json.loads(urlopen(url).read().decode('utf-8')) + +infos = res['data']['result'] +print(infos) + +# they should not have the same target info +# e.g. only the agent has telemetry_distro_name +assert len(infos) == 2 + diff --git a/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile b/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile new file mode 100644 index 000000000..22191f07e --- /dev/null +++ b/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile @@ -0,0 +1,5 @@ +FROM eclipse-temurin:21-jre + +COPY target/example-exporter-opentelemetry.jar ./app.jar + +ENTRYPOINT [ "java", "-jar", "./app.jar" ] diff --git a/examples/example-exporter-opentelemetry/oats-tests/http/docker-compose.yml b/examples/example-exporter-opentelemetry/oats-tests/http/docker-compose.yml new file mode 100644 index 000000000..cec15bf19 --- /dev/null +++ b/examples/example-exporter-opentelemetry/oats-tests/http/docker-compose.yml @@ -0,0 +1,13 @@ +# OATS is an acceptance testing framework for OpenTelemetry - https://github.com/grafana/oats/tree/main/yaml +version: '3.4' + +services: + java: + build: + context: ../.. + dockerfile: oats-tests/http/Dockerfile + environment: + OTEL_SERVICE_NAME: "rolldice" + OTEL_EXPORTER_OTLP_ENDPOINT: http://lgtm:4318 + OTEL_EXPORTER_OTLP_PROTOCOL: http/protobuf + OTEL_METRIC_EXPORT_INTERVAL: "5000" # so we don't have to wait 60s for metrics diff --git a/examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml b/examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml new file mode 100644 index 000000000..a3af9ffc2 --- /dev/null +++ b/examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml @@ -0,0 +1,10 @@ +# OATS is an acceptance testing framework for OpenTelemetry - https://github.com/grafana/oats/tree/main/yaml +docker-compose: + generator: docker-lgtm + files: + - ./docker-compose.yml +expected: + metrics: + - promql: 'uptime_seconds_total{}' + value: '>= 0' + diff --git a/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/Main.java b/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/Main.java index defe85074..b1aa440b1 100644 --- a/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/Main.java +++ b/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/Main.java @@ -9,6 +9,7 @@ public class Main { public static void main(String[] args) throws Exception { + System.out.println("Starting example application"); // Note: Some JVM metrics are also defined as OpenTelemetry's semantic conventions. // We have plans to implement a configuration option for JvmMetrics to use OpenTelemetry @@ -34,6 +35,7 @@ public static void main(String[] args) throws Exception { while (true) { Thread.sleep(1000); + System.out.println("Incrementing counter"); counter.inc(); } } diff --git a/otel-agent-resources/pom.xml b/otel-agent-resources/pom.xml new file mode 100644 index 000000000..176c2c6eb --- /dev/null +++ b/otel-agent-resources/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + + io.prometheus + client_java + 0.0.1-releasetest1 + + + otel-agent-resources + bundle + + OpenTelemetry Agent Resource Extractor + + Reads the OpenTelemetry Agent resources the GlobalOpenTelemetry instance + + + + io.prometheus.otel.resource.attributes + + 1.29.0 + + + + + + + + + src/main/resources + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy + validate + + copy + + + + + + + io.opentelemetry + opentelemetry-api + ${otel-dynamic-load.version} + ${project.basedir}/src/main/resources/lib/ + + + io.opentelemetry + opentelemetry-context + ${otel-dynamic-load.version} + ${project.basedir}/src/main/resources/lib/ + + + + + + + diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java b/otel-agent-resources/src/main/java/io/prometheus/otelagent/ResourceAttributesFromOtelAgent.java similarity index 88% rename from prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java rename to otel-agent-resources/src/main/java/io/prometheus/otelagent/ResourceAttributesFromOtelAgent.java index ce6baafe2..215b79de5 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromOtelAgent.java +++ b/otel-agent-resources/src/main/java/io/prometheus/otelagent/ResourceAttributesFromOtelAgent.java @@ -1,4 +1,4 @@ -package io.prometheus.metrics.exporter.opentelemetry; +package io.prometheus.otelagent; import static java.nio.file.Files.createTempDirectory; @@ -11,6 +11,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.util.Collections; +import java.util.HashMap; import java.util.Map; public class ResourceAttributesFromOtelAgent { @@ -31,8 +33,11 @@ public class ResourceAttributesFromOtelAgent { * *

    After that we discard the class loader so that all OTel specific classes are unloaded. No * runtime dependency on any OTel version remains. + * + *

    The test for this class is in + * examples/example-exporter-opentelemetry/oats-tests/agent/service-instance-id-check.py */ - public static void addIfAbsent(Map result, String instrumentationScopeName) { + public static Map getResourceAttributes(String instrumentationScopeName) { try { Path tmpDir = createTempDirectory(instrumentationScopeName + "-"); try { @@ -43,7 +48,7 @@ public static void addIfAbsent(Map result, String instrumentatio classLoader.loadClass("io.opentelemetry.api.GlobalOpenTelemetry"); Object globalOpenTelemetry = globalOpenTelemetryClass.getMethod("get").invoke(null); if (globalOpenTelemetry.getClass().getSimpleName().contains("ApplicationOpenTelemetry")) { - // GlobalOpenTelemetry is injected by the OTel Java aqent + // GlobalOpenTelemetry is injected by the OTel Java agent Object applicationMeterProvider = callMethod("getMeterProvider", globalOpenTelemetry); Object agentMeterProvider = getField("agentMeterProvider", applicationMeterProvider); Object sdkMeterProvider = getField("delegate", agentMeterProvider); @@ -52,11 +57,13 @@ public static void addIfAbsent(Map result, String instrumentatio Object attributes = callMethod("getAttributes", resource); Map attributeMap = (Map) callMethod("asMap", attributes); + Map result = new HashMap<>(); for (Map.Entry entry : attributeMap.entrySet()) { if (entry.getKey() != null && entry.getValue() != null) { - result.putIfAbsent(entry.getKey().toString(), entry.getValue().toString()); + result.put(entry.getKey().toString(), entry.getValue().toString()); } } + return Collections.unmodifiableMap(result); } } } finally { @@ -65,6 +72,7 @@ public static void addIfAbsent(Map result, String instrumentatio } catch (Exception ignored) { // ignore } + return Collections.emptyMap(); } private static Object getField(String name, Object obj) throws Exception { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/resources/lib/.gitignore b/otel-agent-resources/src/main/resources/lib/.gitignore similarity index 100% rename from prometheus-metrics-exporter-opentelemetry/src/main/resources/lib/.gitignore rename to otel-agent-resources/src/main/resources/lib/.gitignore diff --git a/pom.xml b/pom.xml index 4b62d968f..273f97881 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ UTF-8 --module-name-need-to-be-overriden-- 5.11.2 - 1.42.1 + 2.8.0-alpha 8 @@ -73,6 +73,7 @@ prometheus-metrics-instrumentation-dropwizard5 prometheus-metrics-instrumentation-guava prometheus-metrics-simpleclient-bridge + otel-agent-resources @@ -100,6 +101,12 @@ 3.26.3 test + + org.slf4j + slf4j-simple + 1.7.36 + test + @@ -236,7 +243,7 @@ ${java.version} true - -Xlint:all + -Xlint:all,-serial,-processing -Werror -XDcompilePolicy=simple diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java index b8498d6c5..d009d2603 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java @@ -8,22 +8,23 @@ public class ExporterOpenTelemetryProperties { // See // https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure/README.md - private static String PROTOCOL = "protocol"; // otel.exporter.otlp.protocol - private static String ENDPOINT = "endpoint"; // otel.exporter.otlp.endpoint - private static String HEADERS = "headers"; // otel.exporter.otlp.headers - private static String INTERVAL_SECONDS = "intervalSeconds"; // otel.metric.export.interval - private static String TIMEOUT_SECONDS = "timeoutSeconds"; // otel.exporter.otlp.timeout - private static String SERVICE_NAME = "serviceName"; // otel.service.name - private static String SERVICE_NAMESPACE = "serviceNamespace"; - private static String SERVICE_INSTANCE_ID = "serviceInstanceId"; - private static String SERVICE_VERSION = "serviceVersion"; - private static String RESOURCE_ATTRIBUTES = "resourceAttributes"; // otel.resource.attributes + private static final String PROTOCOL = "protocol"; // otel.exporter.otlp.protocol + private static final String ENDPOINT = "endpoint"; // otel.exporter.otlp.endpoint + private static final String HEADERS = "headers"; // otel.exporter.otlp.headers + private static final String INTERVAL_SECONDS = "intervalSeconds"; // otel.metric.export.interval + private static final String TIMEOUT_SECONDS = "timeoutSeconds"; // otel.exporter.otlp.timeout + private static final String SERVICE_NAME = "serviceName"; // otel.service.name + private static final String SERVICE_NAMESPACE = "serviceNamespace"; + private static final String SERVICE_INSTANCE_ID = "serviceInstanceId"; + private static final String SERVICE_VERSION = "serviceVersion"; + private static final String RESOURCE_ATTRIBUTES = + "resourceAttributes"; // otel.resource.attributes private final String protocol; private final String endpoint; private final Map headers; - private final Integer intervalSeconds; - private final Integer timeoutSeconds; + private final String interval; + private final String timeout; private final String serviceName; private final String serviceNamespace; private final String serviceInstanceId; @@ -34,8 +35,8 @@ private ExporterOpenTelemetryProperties( String protocol, String endpoint, Map headers, - Integer intervalSeconds, - Integer timeoutSeconds, + String interval, + String timeout, String serviceName, String serviceNamespace, String serviceInstanceId, @@ -44,8 +45,8 @@ private ExporterOpenTelemetryProperties( this.protocol = protocol; this.endpoint = endpoint; this.headers = headers; - this.intervalSeconds = intervalSeconds; - this.timeoutSeconds = timeoutSeconds; + this.interval = interval; + this.timeout = timeout; this.serviceName = serviceName; this.serviceNamespace = serviceNamespace; this.serviceInstanceId = serviceInstanceId; @@ -65,12 +66,12 @@ public Map getHeaders() { return headers; } - public Integer getIntervalSeconds() { - return intervalSeconds; + public String getInterval() { + return interval; } - public Integer getTimeoutSeconds() { - return timeoutSeconds; + public String getTimeout() { + return timeout; } public String getServiceName() { @@ -102,27 +103,20 @@ static ExporterOpenTelemetryProperties load(String prefix, Map p String protocol = Util.loadString(prefix + "." + PROTOCOL, properties); String endpoint = Util.loadString(prefix + "." + ENDPOINT, properties); Map headers = Util.loadMap(prefix + "." + HEADERS, properties); - Integer intervalSeconds = Util.loadInteger(prefix + "." + INTERVAL_SECONDS, properties); - Integer timeoutSeconds = Util.loadInteger(prefix + "." + TIMEOUT_SECONDS, properties); + String interval = Util.loadStringAddSuffix(prefix + "." + INTERVAL_SECONDS, properties, "s"); + String timeout = Util.loadStringAddSuffix(prefix + "." + TIMEOUT_SECONDS, properties, "s"); String serviceName = Util.loadString(prefix + "." + SERVICE_NAME, properties); String serviceNamespace = Util.loadString(prefix + "." + SERVICE_NAMESPACE, properties); String serviceInstanceId = Util.loadString(prefix + "." + SERVICE_INSTANCE_ID, properties); String serviceVersion = Util.loadString(prefix + "." + SERVICE_VERSION, properties); Map resourceAttributes = Util.loadMap(prefix + "." + RESOURCE_ATTRIBUTES, properties); - Util.assertValue(intervalSeconds, t -> t > 0, "Expecting value > 0", prefix, INTERVAL_SECONDS); - Util.assertValue(timeoutSeconds, t -> t > 0, "Expecting value > 0", prefix, TIMEOUT_SECONDS); - if (protocol != null && !protocol.equals("grpc") && !protocol.equals("http/protobuf")) { - throw new PrometheusPropertiesException( - protocol - + ": Unsupported OpenTelemetry exporter protocol. Expecting grpc or http/protobuf"); - } return new ExporterOpenTelemetryProperties( protocol, endpoint, headers, - intervalSeconds, - timeoutSeconds, + interval, + timeout, serviceName, serviceNamespace, serviceInstanceId, @@ -138,14 +132,14 @@ public static class Builder { private String protocol; private String endpoint; - private Map headers = new HashMap<>(); - private Integer intervalSeconds; - private Integer timeoutSeconds; + private final Map headers = new HashMap<>(); + private String interval; + private String timeout; private String serviceName; private String serviceNamespace; private String serviceInstanceId; private String serviceVersion; - private Map resourceAttributes = new HashMap<>(); + private final Map resourceAttributes = new HashMap<>(); private Builder() {} @@ -173,7 +167,7 @@ public Builder intervalSeconds(int intervalSeconds) { if (intervalSeconds <= 0) { throw new IllegalArgumentException(intervalSeconds + ": Expecting intervalSeconds > 0"); } - this.intervalSeconds = intervalSeconds; + this.interval = intervalSeconds + "s"; return this; } @@ -181,7 +175,7 @@ public Builder timeoutSeconds(int timeoutSeconds) { if (timeoutSeconds <= 0) { throw new IllegalArgumentException(timeoutSeconds + ": Expecting timeoutSeconds > 0"); } - this.timeoutSeconds = timeoutSeconds; + this.timeout = timeoutSeconds + "s"; return this; } @@ -215,8 +209,8 @@ public ExporterOpenTelemetryProperties build() { protocol, endpoint, headers, - intervalSeconds, - timeoutSeconds, + interval, + timeout, serviceName, serviceNamespace, serviceInstanceId, diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java index 8adcd0af7..15a61f7fe 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java @@ -9,7 +9,7 @@ class Util { - private static String getProperty(String name, Map properties) { + static String getProperty(String name, Map properties) { Object object = properties.remove(name); if (object != null) { return object.toString(); @@ -46,6 +46,14 @@ static String loadString(String name, Map properties) return getProperty(name, properties); } + static String loadStringAddSuffix(String name, Map properties, String suffix) { + Object object = properties.remove(name); + if (object != null) { + return object + suffix; + } + return null; + } + static List loadStringList(String name, Map properties) throws PrometheusPropertiesException { String property = getProperty(name, properties); @@ -87,7 +95,7 @@ static Map loadMap(String name, Map properties) String[] pairs = property.split(","); for (String pair : pairs) { if (pair.contains("=")) { - String[] keyValue = pair.split("=", 1); + String[] keyValue = pair.split("=", 2); if (keyValue.length == 2) { String key = keyValue[0].trim(); String value = keyValue[1].trim(); diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 3e293ad39..d9ecaaa1c 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -21,26 +21,52 @@ io.prometheus.metrics.exporter.opentelemetry + + + + io.opentelemetry.instrumentation + opentelemetry-instrumentation-bom-alpha + ${otel.instrumentation.version} + pom + import + + + + io.prometheus prometheus-metrics-core ${project.version} + + io.prometheus + otel-agent-resources + ${project.version} + io.opentelemetry opentelemetry-api - ${otel.version} io.opentelemetry opentelemetry-sdk - ${otel.version} io.opentelemetry opentelemetry-exporter-otlp - ${otel.version} + + + io.opentelemetry + opentelemetry-sdk-extension-autoconfigure + + + io.opentelemetry + opentelemetry-sdk-extension-incubator + + + io.opentelemetry.instrumentation + opentelemetry-resources @@ -68,19 +94,10 @@ 1.7.1-alpha test - - io.opentelemetry - opentelemetry-sdk-trace - ${otel.version} - test - - - src/main/resources - src/main/resources-filtered true @@ -98,9 +115,9 @@ regex-property - otel.string-version - ${otel.version} - \. + otel.instrumentation.string-version + ${otel.instrumentation.version} + [\.-] _ true @@ -120,6 +137,8 @@ io.opentelemetry:* + io.opentelemetry.semconv:* + io.opentelemetry.instrumentation:* com.squareup.*:* org.jetbrains:* org.jetbrains.*:* @@ -129,37 +148,49 @@ io.opentelemetry - io.prometheus.metrics.shaded.io_opentelemetry_${otel.string-version} + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version} + + + + io.opentelemetry.instrumentation + + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.instrumentation + + + + io.opentelemetry.semconv + + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.semconv okhttp3 - io.prometheus.metrics.shaded.io_opentelemetry_${otel.string-version}.okhttp3 + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.okhttp3 kotlin - io.prometheus.metrics.shaded.io_opentelemetry_${otel.string-version}.kotlin + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.kotlin org.intellij - io.prometheus.metrics.shaded.io_opentelemetry_${otel.string-version}.org.intellij + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.org.intellij org.jetbrains - io.prometheus.metrics.shaded.io_opentelemetry_${otel.string-version}.org.jetbrains + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.org.jetbrains okio - io.prometheus.metrics.shaded.io_opentelemetry_${otel.string-version}.okio + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.okio diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java index 82f503ac9..a00b2ef85 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.java @@ -1,62 +1,16 @@ package io.prometheus.metrics.exporter.opentelemetry; -import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter; -import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder; -import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter; -import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; -import io.opentelemetry.sdk.common.InstrumentationScopeInfo; -import io.opentelemetry.sdk.metrics.export.MetricExporter; -import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader; -import io.opentelemetry.sdk.resources.Resource; -import io.opentelemetry.sdk.resources.ResourceBuilder; -import io.prometheus.metrics.config.ExporterOpenTelemetryProperties; +import io.opentelemetry.sdk.metrics.export.MetricReader; import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import java.time.Duration; import java.util.HashMap; -import java.util.Locale; import java.util.Map; -import java.util.concurrent.TimeUnit; public class OpenTelemetryExporter implements AutoCloseable { - private final PeriodicMetricReader reader; + private final MetricReader reader; - private OpenTelemetryExporter( - Builder builder, PrometheusProperties config, PrometheusRegistry registry) { - InstrumentationScopeInfo instrumentationScopeInfo = - PrometheusInstrumentationScope.loadInstrumentationScopeInfo(); - ExporterOpenTelemetryProperties properties = config.getExporterOpenTelemetryProperties(); - Resource resource = initResourceAttributes(builder, properties, instrumentationScopeInfo); - MetricExporter exporter; - if (ConfigHelper.getProtocol(builder, properties).equals("grpc")) { - OtlpGrpcMetricExporterBuilder exporterBuilder = - OtlpGrpcMetricExporter.builder() - .setTimeout(Duration.ofSeconds(ConfigHelper.getTimeoutSeconds(builder, properties))) - .setEndpoint(ConfigHelper.getEndpoint(builder, properties)); - for (Map.Entry header : - ConfigHelper.getHeaders(builder, properties).entrySet()) { - exporterBuilder.addHeader(header.getKey(), header.getValue()); - } - exporter = exporterBuilder.build(); - } else { - OtlpHttpMetricExporterBuilder exporterBuilder = - OtlpHttpMetricExporter.builder() - .setTimeout(Duration.ofSeconds(ConfigHelper.getTimeoutSeconds(builder, properties))) - .setEndpoint(ConfigHelper.getEndpoint(builder, properties)); - for (Map.Entry header : - ConfigHelper.getHeaders(builder, properties).entrySet()) { - exporterBuilder.addHeader(header.getKey(), header.getValue()); - } - exporter = exporterBuilder.build(); - } - reader = - PeriodicMetricReader.builder(exporter) - .setInterval(Duration.ofSeconds(ConfigHelper.getIntervalSeconds(builder, properties))) - .build(); - - PrometheusMetricProducer prometheusMetricProducer = - new PrometheusMetricProducer(registry, instrumentationScopeInfo, resource); - reader.register(prometheusMetricProducer); + public OpenTelemetryExporter(MetricReader reader) { + this.reader = reader; } @Override @@ -64,29 +18,6 @@ public void close() { reader.shutdown(); } - private Resource initResourceAttributes( - Builder builder, - ExporterOpenTelemetryProperties properties, - InstrumentationScopeInfo instrumentationScopeInfo) { - String serviceName = ConfigHelper.getServiceName(builder, properties); - String serviceNamespace = ConfigHelper.getServiceNamespace(builder, properties); - String serviceInstanceId = ConfigHelper.getServiceInstanceId(builder, properties); - String serviceVersion = ConfigHelper.getServiceVersion(builder, properties); - Map resourceAttributes = - ResourceAttributes.get( - instrumentationScopeInfo.getName(), - serviceName, - serviceNamespace, - serviceInstanceId, - serviceVersion, - ConfigHelper.getResourceAttributes(builder, properties)); - ResourceBuilder resourceBuilder = Resource.builder(); - for (Map.Entry entry : resourceAttributes.entrySet()) { - resourceBuilder.put(entry.getKey(), entry.getValue()); - } - return resourceBuilder.build(); - } - public static Builder builder() { return new Builder(PrometheusProperties.get()); } @@ -99,16 +30,16 @@ public static class Builder { private final PrometheusProperties config; private PrometheusRegistry registry = null; - private String protocol; - private String endpoint; - private final Map headers = new HashMap<>(); - private Integer intervalSeconds; - private Integer timeoutSeconds; - private String serviceName; - private String serviceNamespace; - private String serviceInstanceId; - private String serviceVersion; - private final Map resourceAttributes = new HashMap<>(); + String protocol; + String endpoint; + final Map headers = new HashMap<>(); + String interval; + String timeout; + String serviceName; + String serviceNamespace; + String serviceInstanceId; + String serviceVersion; + final Map resourceAttributes = new HashMap<>(); private Builder(PrometheusProperties config) { this.config = config; @@ -181,7 +112,7 @@ public Builder intervalSeconds(int intervalSeconds) { if (intervalSeconds <= 0) { throw new IllegalStateException(intervalSeconds + ": expecting a push interval > 0s"); } - this.intervalSeconds = intervalSeconds; + this.interval = intervalSeconds + "s"; return this; } @@ -196,7 +127,7 @@ public Builder timeoutSeconds(int timeoutSeconds) { if (timeoutSeconds <= 0) { throw new IllegalStateException(timeoutSeconds + ": expecting a push interval > 0s"); } - this.timeoutSeconds = timeoutSeconds; + this.timeout = timeoutSeconds + "s"; return this; } @@ -266,241 +197,7 @@ public OpenTelemetryExporter buildAndStart() { if (registry == null) { registry = PrometheusRegistry.defaultRegistry; } - return new OpenTelemetryExporter(this, config, registry); - } - } - - private static class ConfigHelper { - - private static String getProtocol( - OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String protocol = config.getProtocol(); - if (protocol != null) { - return protocol; - } - protocol = getString("otel.exporter.otlp.protocol"); - if (protocol != null) { - if (!protocol.equals("grpc") && !protocol.equals("http/protobuf")) { - throw new IllegalStateException( - protocol - + ": Unsupported OpenTelemetry exporter protocol. Expecting grpc or http/protobuf."); - } - return protocol; - } - if (builder.protocol != null) { - return builder.protocol; - } - return "grpc"; - } - - private static String getEndpoint( - OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String endpoint = config.getEndpoint(); - if (endpoint == null) { - endpoint = getString("otel.exporter.otlp.metrics.endpoint"); - } - if (endpoint == null) { - endpoint = getString("otel.exporter.otlp.endpoint"); - } - if (endpoint == null) { - endpoint = builder.endpoint; - } - if (endpoint == null) { - if (getProtocol(builder, config).equals("grpc")) { - endpoint = "http://localhost:4317"; - } else { // http/protobuf - endpoint = "http://localhost:4318/v1/metrics"; - } - } - if (getProtocol(builder, config).equals("grpc")) { - return endpoint; - } else { // http/protobuf - if (!endpoint.endsWith("v1/metrics")) { - if (!endpoint.endsWith("/")) { - return endpoint + "/v1/metrics"; - } else { - return endpoint + "v1/metrics"; - } - } else { - return endpoint; - } - } - } - - private static Map getHeaders( - OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - Map headers = config.getHeaders(); - if (!headers.isEmpty()) { - return headers; - } - headers = getMap("otel.exporter.otlp.headers"); - if (!headers.isEmpty()) { - return headers; - } - if (!builder.headers.isEmpty()) { - return builder.headers; - } - return new HashMap<>(); - } - - private static int getIntervalSeconds( - OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - Integer intervalSeconds = config.getIntervalSeconds(); - if (intervalSeconds != null) { - return intervalSeconds; - } - intervalSeconds = getPositiveInteger("otel.metric.export.interval"); - if (intervalSeconds != null) { - return (int) TimeUnit.MILLISECONDS.toSeconds(intervalSeconds); - } - if (builder.intervalSeconds != null) { - return builder.intervalSeconds; - } - return 60; - } - - private static int getTimeoutSeconds( - OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - Integer timeoutSeconds = config.getTimeoutSeconds(); - if (timeoutSeconds != null) { - return timeoutSeconds; - } - Integer timeoutMilliseconds = getPositiveInteger("otel.exporter.otlp.metrics.timeout"); - if (timeoutMilliseconds == null) { - timeoutMilliseconds = getPositiveInteger("otel.exporter.otlp.timeout"); - } - if (timeoutMilliseconds != null) { - return (int) TimeUnit.MILLISECONDS.toSeconds(timeoutMilliseconds); - } - if (builder.timeoutSeconds != null) { - return builder.timeoutSeconds; - } - return 10; - } - - private static String getServiceName( - OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String serviceName = config.getServiceName(); - if (serviceName != null) { - return serviceName; - } - serviceName = getString("otel.service.name"); - if (serviceName != null) { - return serviceName; - } - if (builder.serviceName != null) { - return builder.serviceName; - } - return null; - } - - private static String getServiceNamespace( - OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String serviceNamespace = config.getServiceNamespace(); - if (serviceNamespace != null) { - return serviceNamespace; - } - if (builder.serviceNamespace != null) { - return builder.serviceNamespace; - } - return null; - } - - private static String getServiceInstanceId( - OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String serviceInstanceId = config.getServiceInstanceId(); - if (serviceInstanceId != null) { - return serviceInstanceId; - } - if (builder.serviceInstanceId != null) { - return builder.serviceInstanceId; - } - return null; - } - - private static String getServiceVersion( - OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - String serviceVersion = config.getServiceVersion(); - if (serviceVersion != null) { - return serviceVersion; - } - if (builder.serviceVersion != null) { - return builder.serviceVersion; - } - return null; - } - - private static Map getResourceAttributes( - OpenTelemetryExporter.Builder builder, ExporterOpenTelemetryProperties config) { - Map resourceAttributes = config.getResourceAttributes(); - if (!resourceAttributes.isEmpty()) { - return resourceAttributes; - } - resourceAttributes = getMap("otel.resource.attributes"); - if (!resourceAttributes.isEmpty()) { - return resourceAttributes; - } - if (!builder.resourceAttributes.isEmpty()) { - return builder.resourceAttributes; - } - return new HashMap<>(); - } - - private static String getString(String otelPropertyName) { - String otelEnvVarName = - otelPropertyName.replace(".", "_").replace("-", "_").toUpperCase(Locale.ROOT); - if (System.getenv(otelEnvVarName) != null) { - return System.getenv(otelEnvVarName); - } - if (System.getProperty(otelPropertyName) != null) { - return System.getProperty(otelPropertyName); - } - return null; - } - - private static Integer getInteger(String otelPropertyName) { - String result = getString(otelPropertyName); - if (result == null) { - return null; - } else { - try { - return Integer.parseInt(result); - } catch (NumberFormatException e) { - throw new IllegalStateException(otelPropertyName + "=" + result + " - illegal value."); - } - } - } - - private static Integer getPositiveInteger(String otelPropertyName) { - Integer result = getInteger(otelPropertyName); - if (result == null) { - return null; - } - if (result <= 0) { - throw new IllegalStateException(otelPropertyName + "=" + result + ": Expecting value > 0."); - } - return result; - } - - private static Map getMap(String otelPropertyName) { - Map result = new HashMap<>(); - String property = getString(otelPropertyName); - if (property != null) { - String[] pairs = property.split(","); - for (String pair : pairs) { - if (pair.contains("=")) { - String[] keyValue = pair.split("=", 1); - if (keyValue.length == 2) { - String key = keyValue[0].trim(); - String value = keyValue[1].trim(); - if (key.length() > 0 && value.length() > 0) { - result.putIfAbsent(key, value); - } - } - } - } - } - return result; + return new OpenTelemetryExporter(OtelAutoConfig.createReader(this, config, registry)); } } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfig.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfig.java new file mode 100644 index 000000000..fb6ebff7e --- /dev/null +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfig.java @@ -0,0 +1,117 @@ +package io.prometheus.metrics.exporter.opentelemetry; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; +import io.opentelemetry.sdk.autoconfigure.ResourceConfiguration; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.metrics.export.MetricReader; +import io.opentelemetry.sdk.resources.Resource; +import io.prometheus.metrics.config.ExporterOpenTelemetryProperties; +import io.prometheus.metrics.config.PrometheusProperties; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.prometheus.otelagent.ResourceAttributesFromOtelAgent; +import java.lang.reflect.Method; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; + +public class OtelAutoConfig { + + private static final String SERVICE_INSTANCE_ID = "service.instance.id"; + + static MetricReader createReader( + OpenTelemetryExporter.Builder builder, + PrometheusProperties config, + PrometheusRegistry registry) { + AtomicReference readerRef = new AtomicReference<>(); + InstrumentationScopeInfo instrumentationScopeInfo = + PrometheusInstrumentationScope.loadInstrumentationScopeInfo(); + + AutoConfiguredOpenTelemetrySdk sdk = + createAutoConfiguredOpenTelemetrySdk( + builder, + readerRef, + config.getExporterOpenTelemetryProperties(), + instrumentationScopeInfo); + + MetricReader reader = readerRef.get(); + reader.register( + new PrometheusMetricProducer(registry, instrumentationScopeInfo, getResourceField(sdk))); + return reader; + } + + static AutoConfiguredOpenTelemetrySdk createAutoConfiguredOpenTelemetrySdk( + OpenTelemetryExporter.Builder builder, + AtomicReference readerRef, + ExporterOpenTelemetryProperties properties, + InstrumentationScopeInfo instrumentationScopeInfo) { + PropertyMapper propertyMapper = PropertyMapper.create(properties, builder); + + return AutoConfiguredOpenTelemetrySdk.builder() + .addPropertiesSupplier(() -> propertyMapper.configLowPriority) + .addPropertiesCustomizer( + c -> PropertyMapper.customizeProperties(propertyMapper.configHighPriority, c)) + .addMetricReaderCustomizer( + (reader, unused) -> { + readerRef.set(reader); + return reader; + }) + .addResourceCustomizer( + (resource, c) -> + getResource(builder, resource, instrumentationScopeInfo, c, properties)) + .build(); + } + + private static Resource getResource( + OpenTelemetryExporter.Builder builder, + Resource resource, + InstrumentationScopeInfo instrumentationScopeInfo, + ConfigProperties configProperties, + ExporterOpenTelemetryProperties properties) { + return resource + .merge( + PropertiesResourceProvider.mergeResource( + builder.resourceAttributes, + builder.serviceName, + builder.serviceNamespace, + builder.serviceInstanceId, + builder.serviceVersion)) + .merge(ResourceConfiguration.createEnvironmentResource(configProperties)) + .merge( + PropertiesResourceProvider.mergeResource( + properties.getResourceAttributes(), + properties.getServiceName(), + properties.getServiceNamespace(), + properties.getServiceInstanceId(), + properties.getServiceVersion())) + .merge(Resource.create(otelResourceAttributes(instrumentationScopeInfo))); + } + + /** + * Only copy the service instance id from the Otel agent resource attributes. + * + *

    All other attributes are calculated from the configuration using OTel SDK AutoConfig. + */ + private static Attributes otelResourceAttributes( + InstrumentationScopeInfo instrumentationScopeInfo) { + AttributesBuilder builder = Attributes.builder(); + Map attributes = + ResourceAttributesFromOtelAgent.getResourceAttributes(instrumentationScopeInfo.getName()); + String id = attributes.get(SERVICE_INSTANCE_ID); + if (id != null) { + builder.put(SERVICE_INSTANCE_ID, id); + } + return builder.build(); + } + + static Resource getResourceField(AutoConfiguredOpenTelemetrySdk sdk) { + try { + Method method = AutoConfiguredOpenTelemetrySdk.class.getDeclaredMethod("getResource"); + method.setAccessible(true); + return (Resource) method.invoke(sdk); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PropertiesResourceProvider.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PropertiesResourceProvider.java new file mode 100644 index 000000000..1bb6b19bf --- /dev/null +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PropertiesResourceProvider.java @@ -0,0 +1,35 @@ +package io.prometheus.metrics.exporter.opentelemetry; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.sdk.resources.Resource; +import java.util.HashMap; +import java.util.Map; + +final class PropertiesResourceProvider { + + static Resource mergeResource( + Map resourceAttributes, + String serviceName, + String serviceNamespace, + String serviceInstanceId, + String serviceVersion) { + Map resource = new HashMap<>(resourceAttributes); + if (serviceName != null) { + resource.put("service.name", serviceName); + } + if (serviceNamespace != null) { + resource.put("service.namespace", serviceNamespace); + } + if (serviceInstanceId != null) { + resource.put("service.instance.id", serviceInstanceId); + } + if (serviceVersion != null) { + resource.put("service.version", serviceVersion); + } + + AttributesBuilder builder = Attributes.builder(); + resource.forEach(builder::put); + return Resource.create(builder.build()); + } +} diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PropertyMapper.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PropertyMapper.java new file mode 100644 index 000000000..be30197fa --- /dev/null +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PropertyMapper.java @@ -0,0 +1,112 @@ +package io.prometheus.metrics.exporter.opentelemetry; + +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.prometheus.metrics.config.ExporterOpenTelemetryProperties; +import io.prometheus.metrics.config.PrometheusPropertiesException; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +class PropertyMapper { + + private static final String METRICS_ENDPOINT = "otel.exporter.otlp.metrics.endpoint"; + Map configLowPriority = new HashMap<>(); + Map configHighPriority = new HashMap<>(); + + static PropertyMapper create( + ExporterOpenTelemetryProperties properties, OpenTelemetryExporter.Builder builder) + throws PrometheusPropertiesException { + return new PropertyMapper() + .addString( + builder.protocol, properties.getProtocol(), "otel.exporter.otlp.metrics.protocol") + .addString(builder.endpoint, properties.getEndpoint(), METRICS_ENDPOINT) + .addString( + mapToOtelString(builder.headers), + mapToOtelString(properties.getHeaders()), + "otel.exporter.otlp.metrics.headers") + .addString(builder.interval, properties.getInterval(), "otel.metric.export.interval") + .addString(builder.timeout, properties.getTimeout(), "otel.exporter.otlp.metrics.timeout") + .addString(builder.serviceName, properties.getServiceName(), "otel.service.name"); + } + + PropertyMapper addString(String builderValue, String propertyValue, String otelKey) { + if (builderValue != null) { + // the low priority config should not be used for the metrics settings, so that both general + // and metrics settings + // can be used to override the values + configLowPriority.put(otelKey.replace("otlp.metrics", "otlp"), builderValue); + } + if (propertyValue != null) { + configHighPriority.put(otelKey, propertyValue); + } + return this; + } + + private static String mapToOtelString(Map map) { + if (map.isEmpty()) { + return null; + } + StringBuilder sb = new StringBuilder(); + for (Map.Entry entry : map.entrySet()) { + sb.append(entry.getKey()).append("=").append(entry.getValue()).append(","); + } + return sb.substring(0, sb.length() - 1); + } + + static Map customizeProperties(Map result, ConfigProperties c) { + Map map = fixEndpointPaths(result, c); + map.put("otel.logs.exporter", "none"); + map.put("otel.traces.exporter", "none"); + return map; + } + + static Map fixEndpointPaths(Map result, ConfigProperties c) { + transformEndpointPath( + result, + c, + METRICS_ENDPOINT, + endpoint -> { + if (!endpoint.endsWith("v1/metrics")) { + if (!endpoint.endsWith("/")) { + return endpoint + "/v1/metrics"; + } else { + return endpoint + "v1/metrics"; + } + } + return endpoint; + }); + + transformEndpointPath( + result, + c, + "otel.exporter.otlp.endpoint", + endpoint -> { + if (endpoint.endsWith("v1/metrics")) { + return endpoint.substring(0, endpoint.length() - "v1/metrics".length()); + } + return endpoint; + }); + + return result; + } + + static void transformEndpointPath( + Map result, + ConfigProperties c, + String key, + Function valueMapper) { + String endpoint = c.getString(key); + if (endpoint == null) { + return; + } + String protocol = c.getString("otel.exporter.otlp.metrics.protocol"); + if (protocol == null) { + protocol = c.getString("otel.exporter.otlp.protocol"); + } + + if (!"grpc".equals(protocol)) { // http/protobuf + endpoint = valueMapper.apply(endpoint); + result.put(key, endpoint); + } + } +} diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributes.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributes.java deleted file mode 100644 index 2c88badfc..000000000 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributes.java +++ /dev/null @@ -1,36 +0,0 @@ -package io.prometheus.metrics.exporter.opentelemetry; - -import java.util.HashMap; -import java.util.Map; - -public class ResourceAttributes { - - // TODO: The OTel Java instrumentation also has a SpringBootServiceNameDetector, we should port - // this over. - public static Map get( - String instrumentationScopeName, - String serviceName, - String serviceNamespace, - String serviceInstanceId, - String serviceVersion, - Map configuredResourceAttributes) { - Map result = new HashMap<>(); - ResourceAttributesFromOtelAgent.addIfAbsent(result, instrumentationScopeName); - putIfAbsent(result, "service.name", serviceName); - putIfAbsent(result, "service.namespace", serviceNamespace); - putIfAbsent(result, "service.instance.id", serviceInstanceId); - putIfAbsent(result, "service.version", serviceVersion); - for (Map.Entry attribute : configuredResourceAttributes.entrySet()) { - putIfAbsent(result, attribute.getKey(), attribute.getValue()); - } - ResourceAttributesFromJarFileName.addIfAbsent(result); - ResourceAttributesDefaults.addIfAbsent(result); - return result; - } - - private static void putIfAbsent(Map result, String key, String value) { - if (value != null) { - result.putIfAbsent(key, value); - } - } -} diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesDefaults.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesDefaults.java deleted file mode 100644 index 19328fd73..000000000 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesDefaults.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.prometheus.metrics.exporter.opentelemetry; - -import java.util.Map; -import java.util.UUID; - -public class ResourceAttributesDefaults { - - private static final String instanceId = UUID.randomUUID().toString(); - - public static void addIfAbsent(Map result) { - result.putIfAbsent("service.instance.id", instanceId); - result.putIfAbsent("service.name", "unknown_service:java"); - } -} diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromJarFileName.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromJarFileName.java deleted file mode 100644 index 7cf7a51aa..000000000 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/ResourceAttributesFromJarFileName.java +++ /dev/null @@ -1,60 +0,0 @@ -package io.prometheus.metrics.exporter.opentelemetry; - -import java.nio.file.Files; -import java.nio.file.InvalidPathException; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Map; - -// See io.opentelemetry.instrumentation.resources.JarServiceNameDetector -public class ResourceAttributesFromJarFileName { - - public static void addIfAbsent(Map result) { - if (result.containsKey("service.name")) { - return; - } - Path jarPath = getJarPathFromSunCommandLine(); - if (jarPath == null) { - return; - } - String serviceName = getServiceName(jarPath); - result.putIfAbsent("service.name", serviceName); - } - - private static Path getJarPathFromSunCommandLine() { - String programArguments = System.getProperty("sun.java.command"); - if (programArguments == null) { - return null; - } - // Take the path until the first space. If the path doesn't exist extend it up to the next - // space. Repeat until a path that exists is found or input runs out. - int next = 0; - while (true) { - int nextSpace = programArguments.indexOf(' ', next); - if (nextSpace == -1) { - return pathIfExists(programArguments); - } - Path path = pathIfExists(programArguments.substring(0, nextSpace)); - next = nextSpace + 1; - if (path != null) { - return path; - } - } - } - - private static Path pathIfExists(String programArguments) { - Path candidate; - try { - candidate = Paths.get(programArguments); - } catch (InvalidPathException e) { - return null; - } - return Files.isRegularFile(candidate) ? candidate : null; - } - - private static String getServiceName(Path jarPath) { - String jarName = jarPath.getFileName().toString(); - int dotIndex = jarName.lastIndexOf("."); - return dotIndex == -1 ? jarName : jarName.substring(0, dotIndex); - } -} diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java new file mode 100644 index 000000000..9b9b12420 --- /dev/null +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java @@ -0,0 +1,296 @@ +package io.prometheus.metrics.exporter.opentelemetry; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.common.collect.ImmutableMap; +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; +import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.prometheus.metrics.config.ExporterOpenTelemetryProperties; +import io.prometheus.metrics.config.PrometheusPropertiesLoader; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Consumer; +import java.util.stream.Stream; +import org.assertj.core.api.AbstractStringAssert; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class OtelAutoConfigTest { + + static class TestCase { + Map systemProperties = new HashMap<>(); + Map> expectedProperties = Collections.emptyMap(); + Map expectedResourceAttributes = Collections.emptyMap(); + Consumer exporterBuilder; + Consumer propertiesBuilder; + + public TestCase() {} + + public TestCase expectedProperties(Map> expectedProperties) { + this.expectedProperties = expectedProperties; + return this; + } + + public TestCase expectedResourceAttributes(Map expectedResourceAttributes) { + this.expectedResourceAttributes = expectedResourceAttributes; + return this; + } + + public TestCase systemProperties(Map systemProperties) { + this.systemProperties.putAll(systemProperties); + return this; + } + + public TestCase exporterBuilder(Consumer exporterBuilder) { + this.exporterBuilder = exporterBuilder; + return this; + } + + public TestCase propertiesBuilder( + Consumer propertiesBuilder) { + this.propertiesBuilder = propertiesBuilder; + return this; + } + } + + public static Stream testCases() { + return Stream.of( + Arguments.of( + "values from builder", + new TestCase() + .expectedProperties( + ImmutableMap.>builder() + .put("otel.exporter.otlp.protocol", Optional.of("http/protobuf")) + .put("otel.exporter.otlp.endpoint", Optional.of("http://builder:4318")) + .put("otel.exporter.otlp.headers", Optional.of("h=builder-v")) + .put("otel.metric.export.interval", Optional.of("2s")) + .put("otel.exporter.otlp.timeout", Optional.of("3s")) + .put("otel.service.name", Optional.of("builder-service")) + .build()) + .expectedResourceAttributes( + ImmutableMap.of( + "key", + "builder-value", + "service.name", + "builder-service", + "service.namespace", + "builder-namespace", + "service.instance.id", + "builder-instance", + "service.version", + "builder-version")) + .exporterBuilder(OtelAutoConfigTest::setBuilderValues)), + Arguments.of( + "builder endpoint with path", + new TestCase() + .expectedProperties( + ImmutableMap.of( + "otel.exporter.otlp.endpoint", Optional.of("http://builder:4318/"))) + .exporterBuilder(builder -> builder.endpoint("http://builder:4318/v1/metrics"))), + Arguments.of( + "values from otel have precedence over builder", + new TestCase() + .expectedProperties( + ImmutableMap.>builder() + .put("otel.exporter.otlp.protocol", Optional.of("grpc")) + .put("otel.exporter.otlp.metrics.protocol", Optional.empty()) + .put("otel.exporter.otlp.endpoint", Optional.of("http://otel:4317")) + .put("otel.exporter.otlp.metrics.endpoint", Optional.empty()) + .put("otel.exporter.otlp.headers", Optional.of("h=otel-v")) + .put("otel.exporter.otlp.metrics.headers", Optional.empty()) + .put("otel.metric.export.interval", Optional.of("12s")) + .put("otel.exporter.otlp.timeout", Optional.of("13s")) + .put("otel.exporter.otlp.metrics.timeout", Optional.empty()) + .put("otel.service.name", Optional.of("otel-service")) + .build()) + .expectedResourceAttributes( + ImmutableMap.of( + "key", + "otel-value", + "service.name", + "otel-service", + "service.namespace", + "otel-namespace", + "service.instance.id", + "otel-instance", + "service.version", + "otel-version")) + .exporterBuilder(OtelAutoConfigTest::setBuilderValues) + .systemProperties(otelOverrides())), + Arguments.of( + "values from prom properties have precedence over builder and otel", + new TestCase() + .expectedProperties( + ImmutableMap.>builder() + .put("otel.exporter.otlp.metrics.protocol", Optional.of("http/protobuf")) + .put("otel.exporter.otlp.protocol", Optional.of("grpc")) + .put("otel.exporter.otlp.metrics.endpoint", Optional.of("http://prom:4317")) + .put("otel.exporter.otlp.endpoint", Optional.of("http://otel:4317")) + .put("otel.exporter.otlp.metrics.headers", Optional.of("h=prom-v")) + .put("otel.exporter.otlp.headers", Optional.of("h=otel-v")) + .put("otel.metric.export.interval", Optional.of("22s")) + .put("otel.exporter.otlp.metrics.timeout", Optional.of("23s")) + .put("otel.exporter.otlp.timeout", Optional.of("13s")) + .put("otel.service.name", Optional.of("prom-service")) + .build()) + .expectedResourceAttributes( + ImmutableMap.of( + "key", + "prom-value", + "service.name", + "prom-service", + "service.namespace", + "prom-namespace", + "service.instance.id", + "prom-instance", + "service.version", + "prom-version")) + .exporterBuilder(OtelAutoConfigTest::setBuilderValues) + .systemProperties(otelOverrides()) + .systemProperties( + ImmutableMap.builder() + .put("io.prometheus.exporter.opentelemetry.protocol", "http/protobuf") + .put("io.prometheus.exporter.opentelemetry.endpoint", "http://prom:4317") + .put("io.prometheus.exporter.opentelemetry.headers", "h=prom-v") + .put("io.prometheus.exporter.opentelemetry.intervalSeconds", "22") + .put("io.prometheus.exporter.opentelemetry.timeoutSeconds", "23") + .put("io.prometheus.exporter.opentelemetry.serviceName", "prom-service") + .put( + "io.prometheus.exporter.opentelemetry.serviceNamespace", + "prom-namespace") + .put( + "io.prometheus.exporter.opentelemetry.serviceInstanceId", + "prom-instance") + .put("io.prometheus.exporter.opentelemetry.serviceVersion", "prom-version") + .put( + "io.prometheus.exporter.opentelemetry.resourceAttributes", + "key=prom-value") + .build())), + Arguments.of( + "values from prom properties builder have precedence over builder and otel", + new TestCase() + .expectedProperties( + ImmutableMap.>builder() + .put("otel.exporter.otlp.metrics.protocol", Optional.of("http/protobuf")) + .put("otel.exporter.otlp.protocol", Optional.of("grpc")) + .put("otel.exporter.otlp.metrics.endpoint", Optional.of("http://prom:4317")) + .put("otel.exporter.otlp.endpoint", Optional.of("http://otel:4317")) + .put("otel.exporter.otlp.metrics.headers", Optional.of("h=prom-v")) + .put("otel.exporter.otlp.headers", Optional.of("h=otel-v")) + .put("otel.metric.export.interval", Optional.of("22s")) + .put("otel.exporter.otlp.metrics.timeout", Optional.of("23s")) + .put("otel.exporter.otlp.timeout", Optional.of("13s")) + .put("otel.service.name", Optional.of("prom-service")) + .build()) + .expectedResourceAttributes( + ImmutableMap.of( + "key", + "prom-value", + "service.name", + "prom-service", + "service.namespace", + "prom-namespace", + "service.instance.id", + "prom-instance", + "service.version", + "prom-version")) + .exporterBuilder(OtelAutoConfigTest::setBuilderValues) + .systemProperties(otelOverrides()) + .propertiesBuilder( + builder -> + builder + .protocol("http/protobuf") + .endpoint("http://prom:4317") + .header("h", "prom-v") + .intervalSeconds(22) + .timeoutSeconds(23) + .serviceName("prom-service") + .serviceNamespace("prom-namespace") + .serviceInstanceId("prom-instance") + .serviceVersion("prom-version") + .resourceAttribute("key", "prom-value")))); + } + + private static ImmutableMap otelOverrides() { + return ImmutableMap.builder() + .put("otel.exporter.otlp.protocol", "grpc") + .put("otel.exporter.otlp.endpoint", "http://otel:4317") + .put("otel.exporter.otlp.headers", "h=otel-v") + .put("otel.metric.export.interval", "12s") + .put("otel.exporter.otlp.timeout", "13s") + .put("otel.service.name", "otel-service") + .put( + "otel.resource.attributes", + "key=otel-value,service.namespace=otel-namespace,service.instance.id=otel-instance,service.version=otel-version") + .build(); + } + + private static void setBuilderValues(OpenTelemetryExporter.Builder builder) { + builder + .protocol("http/protobuf") + .endpoint("http://builder:4318") + .header("h", "builder-v") + .intervalSeconds(2) + .timeoutSeconds(3) + .serviceName("builder-service") + .serviceNamespace("builder-namespace") + .serviceInstanceId("builder-instance") + .serviceVersion("builder-version") + .resourceAttribute("key", "builder-value"); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("testCases") + void properties(String name, TestCase testCase) { + testCase.systemProperties.forEach(System::setProperty); + + try { + OpenTelemetryExporter.Builder builder = OpenTelemetryExporter.builder(); + if (testCase.exporterBuilder != null) { + testCase.exporterBuilder.accept(builder); + } + AutoConfiguredOpenTelemetrySdk sdk = + OtelAutoConfig.createAutoConfiguredOpenTelemetrySdk( + builder, + new AtomicReference<>(), + getExporterOpenTelemetryProperties(testCase), + PrometheusInstrumentationScope.loadInstrumentationScopeInfo()); + + ConfigProperties config = AutoConfigureUtil.getConfig(sdk); + Map, Object> map = + OtelAutoConfig.getResourceField(sdk).getAttributes().asMap(); + testCase.expectedProperties.forEach( + (key, value) -> { + AbstractStringAssert o = assertThat(config.getString(key)).describedAs("key=" + key); + if (value.isPresent()) { + o.isEqualTo(value.get()); + } else { + o.isNull(); + } + }); + testCase.expectedResourceAttributes.forEach( + (key, value) -> + assertThat(map.get(AttributeKey.stringKey(key))) + .describedAs("key=" + key) + .hasToString(value)); + } finally { + testCase.systemProperties.keySet().forEach(System::clearProperty); + } + } + + private static ExporterOpenTelemetryProperties getExporterOpenTelemetryProperties( + TestCase testCase) { + if (testCase.propertiesBuilder == null) { + return PrometheusPropertiesLoader.load().getExporterOpenTelemetryProperties(); + } + ExporterOpenTelemetryProperties.Builder builder = ExporterOpenTelemetryProperties.builder(); + testCase.propertiesBuilder.accept(builder); + return builder.build(); + } +} diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 84938cff4..953b09dc5 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -17,14 +17,16 @@ - - - io.opentelemetry - opentelemetry-api - ${otel.version} - - - + + + io.opentelemetry.instrumentation + opentelemetry-instrumentation-bom-alpha + ${otel.instrumentation.version} + pom + import + + + prometheus-metrics-tracer-common diff --git a/scripts/run-acceptance-tests.sh b/scripts/run-acceptance-tests.sh new file mode 100755 index 000000000..151783f77 --- /dev/null +++ b/scripts/run-acceptance-tests.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -euo pipefail + +cd oats/yaml +go install github.com/onsi/ginkgo/v2/ginkgo +export TESTCASE_SKIP_BUILD=true +export TESTCASE_TIMEOUT=5m +export TESTCASE_BASE_PATH=../../examples +ginkgo -r # is parallel causing problems? -p From 413f88940565d4fc4da6443894f9dae5904975ff Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 17 Oct 2024 15:29:19 +0200 Subject: [PATCH 189/870] Add clear() method into PrometheusRegistry to unregister all collectors (#1158) * Add clear() method into PrometheusRegistry to unregister all collectors Signed-off-by: Petr Holubec * format Signed-off-by: Gregor Zeitlinger * test Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger Co-authored-by: Petr Holubec --- .../metrics/model/registry/PrometheusRegistry.java | 6 ++++++ .../model/registry/PrometheusRegistryTest.java | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java index 026560bb9..5038da894 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/PrometheusRegistry.java @@ -56,6 +56,12 @@ public void unregister(MultiCollector collector) { } } + public void clear() { + collectors.clear(); + multiCollectors.clear(); + prometheusNames.clear(); + } + public MetricSnapshots scrape() { return scrape((PrometheusScrapeRequest) null); } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java index 6557c0ecf..e0f22a9dc 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/PrometheusRegistryTest.java @@ -145,4 +145,16 @@ public void registerOkMultiCollector() { snapshots = registry.scrape(); assertThat(snapshots.size()).isZero(); } + + @Test + public void clearOk() { + PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(counterA1); + registry.register(counterB); + registry.register(gaugeA); + assertThat(registry.scrape().size()).isEqualTo(3); + + registry.clear(); + assertThat(registry.scrape().size()).isZero(); + } } From 27ffb91a0e090aa30c5e1e53de1861f03c5af27b Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 17 Oct 2024 15:57:21 +0200 Subject: [PATCH 190/870] add test Coverage check (#1159) * add coverage check Signed-off-by: Gregor Zeitlinger * add coverage check Signed-off-by: Gregor Zeitlinger * add coverage check Signed-off-by: Gregor Zeitlinger * add coverage check Signed-off-by: Gregor Zeitlinger * add coverage check Signed-off-by: Gregor Zeitlinger * add coverage check Signed-off-by: Gregor Zeitlinger * add coverage check Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- benchmarks/pom.xml | 1 + examples/pom.xml | 4 + integration-tests/pom.xml | 4 + otel-agent-resources/pom.xml | 3 - pom.xml | 66 ++++++++ .../metrics/config/ExemplarsProperties.java | 21 +-- .../config/ExporterFilterProperties.java | 11 +- .../config/ExporterHttpServerProperties.java | 7 +- .../ExporterOpenTelemetryProperties.java | 23 +-- .../metrics/config/ExporterProperties.java | 7 +- .../config/ExporterPushgatewayProperties.java | 13 +- .../metrics/config/MetricsProperties.java | 10 +- .../config/PrometheusPropertiesLoader.java | 15 +- .../io/prometheus/metrics/config/Util.java | 6 +- .../config/ExemplarsPropertiesTest.java | 60 +++++++ .../config/ExporterFilterPropertiesTest.java | 45 +++++ .../ExporterHttpServerPropertiesTest.java | 31 ++++ .../ExporterOpenTelemetryPropertiesTest.java | 70 ++++++++ .../config/ExporterPropertiesTest.java | 58 +++++++ .../ExporterPushgatewayPropertiesTest.java | 35 ++++ .../metrics/config/MetricsPropertiesTest.java | 154 ++++++++++++++++++ ...va => PrometheusPropertiesLoaderTest.java} | 16 +- .../core/metrics/MetricWithFixedMetadata.java | 5 +- .../core/datapoints/CounterDataPointTest.java | 39 +++++ .../metrics/core/datapoints/TimerApiTest.java | 28 +++- .../core/metrics/CallbackMetricTest.java | 46 ++++++ .../metrics/core/metrics/CounterTest.java | 41 ++++- .../metrics/core/metrics/GaugeTest.java | 38 ++++- .../metrics/core/metrics/InfoTest.java | 23 +++ .../metrics/core/metrics/StateSetTest.java | 8 + .../pom.xml | 2 + .../pom.xml | 2 + .../PrometheusInstrumentationScope.java | 26 +-- .../PrometheusInstrumentationScopeTest.java | 38 +++++ .../exporter/pushgateway/SchemeTest.java | 18 ++ .../ExpositionFormatsTest.java | 29 +++- .../pom.xml | 4 +- .../pom.xml | 1 - .../pom.xml | 1 + .../instrumentation/jvm/JvmMetricsTest.java | 22 +++ .../jvm/JvmNativeMemoryMetricsTest.java | 8 + .../model/snapshots/PrometheusNaming.java | 2 +- .../metrics/model/registry/CollectorTest.java | 29 ++++ .../ClassicHistogramBucketsTest.java | 14 ++ .../model/snapshots/ExemplarsTest.java | 2 + .../snapshots/HistogramSnapshotTest.java | 8 +- .../model/snapshots/InfoSnapshotTest.java | 7 + .../metrics/model/snapshots/LabelTest.java | 32 ++++ .../model/snapshots/MetricSnapshotTest.java | 10 +- .../model/snapshots/StateSetSnapshotTest.java | 13 +- 50 files changed, 1071 insertions(+), 85 deletions(-) create mode 100644 prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExemplarsPropertiesTest.java create mode 100644 prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterFilterPropertiesTest.java create mode 100644 prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterHttpServerPropertiesTest.java create mode 100644 prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterOpenTelemetryPropertiesTest.java create mode 100644 prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java create mode 100644 prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPushgatewayPropertiesTest.java create mode 100644 prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/MetricsPropertiesTest.java rename prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/{PrometheusPropertiesLoaderTests.java => PrometheusPropertiesLoaderTest.java} (74%) create mode 100644 prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/CounterDataPointTest.java create mode 100644 prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CallbackMetricTest.java create mode 100644 prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScopeTest.java create mode 100644 prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/SchemeTest.java create mode 100644 prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/CollectorTest.java create mode 100644 prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelTest.java diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 99c4ecee8..11e24c3bd 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -20,6 +20,7 @@ 1.37 0.16.0 3.0.2 + 0.0 diff --git a/examples/pom.xml b/examples/pom.xml index def095f43..e1fd7ceb4 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -16,6 +16,10 @@ Example projects for the Prometheus Metrics Library. + + 0.0 + + example-exemplars-tail-sampling example-exporter-servlet-tomcat diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index dbd6754c6..ad98ba538 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -18,6 +18,10 @@ Integration tests for the Exporter modules + + 0.0 + + it-common it-exporter diff --git a/otel-agent-resources/pom.xml b/otel-agent-resources/pom.xml index 176c2c6eb..b18153b7c 100644 --- a/otel-agent-resources/pom.xml +++ b/otel-agent-resources/pom.xml @@ -23,9 +23,6 @@ 1.29.0 - - - diff --git a/pom.xml b/pom.xml index 273f97881..b84550bf1 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,7 @@ 5.11.2 2.8.0-alpha 8 + 0.70 @@ -76,6 +77,16 @@ otel-agent-resources + + + + com.google.guava + guava + 33.3.1-jre + + + + org.junit.jupiter @@ -101,12 +112,23 @@ 3.26.3 test + + com.google.guava + guava + test + org.slf4j slf4j-simple 1.7.36 test + + org.junit-pioneer + junit-pioneer + 2.3.0 + test + @@ -200,6 +222,50 @@ + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + **/generated/** + + + + + + prepare-agent + + + + report + test + + report + + + + check + + check + + + + + CLASS + + + LINE + COVEREDRATIO + ${jacoco.line-coverage} + + + + + + + + org.apache.maven.plugins maven-enforcer-plugin diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java index f660725bf..017d67909 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java @@ -5,6 +5,7 @@ /** Properties starting with io.prometheus.exemplars */ public class ExemplarsProperties { + private static final String PREFIX = "io.prometheus.exemplars"; private static final String MIN_RETENTION_PERIOD_SECONDS = "minRetentionPeriodSeconds"; private static final String MAX_RETENTION_PERIOD_SECONDS = "maxRetentionPeriodSeconds"; private static final String SAMPLE_INTERVAL_MILLISECONDS = "sampleIntervalMilliseconds"; @@ -55,42 +56,42 @@ public Integer getSampleIntervalMilliseconds() { * Note that this will remove entries from {@code properties}. This is because we want to know if * there are unused properties remaining after all properties have been loaded. */ - static ExemplarsProperties load(String prefix, Map properties) + static ExemplarsProperties load(Map properties) throws PrometheusPropertiesException { Integer minRetentionPeriodSeconds = - Util.loadInteger(prefix + "." + MIN_RETENTION_PERIOD_SECONDS, properties); + Util.loadInteger(PREFIX + "." + MIN_RETENTION_PERIOD_SECONDS, properties); Integer maxRetentionPeriodSeconds = - Util.loadInteger(prefix + "." + MAX_RETENTION_PERIOD_SECONDS, properties); + Util.loadInteger(PREFIX + "." + MAX_RETENTION_PERIOD_SECONDS, properties); Integer sampleIntervalMilliseconds = - Util.loadInteger(prefix + "." + SAMPLE_INTERVAL_MILLISECONDS, properties); + Util.loadInteger(PREFIX + "." + SAMPLE_INTERVAL_MILLISECONDS, properties); Util.assertValue( minRetentionPeriodSeconds, t -> t > 0, "Expecting value > 0.", - prefix, + PREFIX, MIN_RETENTION_PERIOD_SECONDS); Util.assertValue( - minRetentionPeriodSeconds, + maxRetentionPeriodSeconds, t -> t > 0, "Expecting value > 0.", - prefix, + PREFIX, MAX_RETENTION_PERIOD_SECONDS); Util.assertValue( sampleIntervalMilliseconds, t -> t > 0, "Expecting value > 0.", - prefix, + PREFIX, SAMPLE_INTERVAL_MILLISECONDS); if (minRetentionPeriodSeconds != null && maxRetentionPeriodSeconds != null) { if (minRetentionPeriodSeconds > maxRetentionPeriodSeconds) { throw new PrometheusPropertiesException( - prefix + PREFIX + "." + MIN_RETENTION_PERIOD_SECONDS + " must not be greater than " - + prefix + + PREFIX + "." + MAX_RETENTION_PERIOD_SECONDS + "."); diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java index 7a408bb58..c2c3d48d3 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java @@ -13,6 +13,7 @@ public class ExporterFilterProperties { public static final String METRIC_NAME_MUST_NOT_BE_EQUAL_TO = "metricNameMustNotBeEqualTo"; public static final String METRIC_NAME_MUST_START_WITH = "metricNameMustStartWith"; public static final String METRIC_NAME_MUST_NOT_START_WITH = "metricNameMustNotStartWith"; + private static final String PREFIX = "io.prometheus.exporter.filter"; private final List allowedNames; private final List excludedNames; @@ -58,16 +59,16 @@ public List getExcludedMetricNamePrefixes() { * Note that this will remove entries from {@code properties}. This is because we want to know if * there are unused properties remaining after all properties have been loaded. */ - static ExporterFilterProperties load(String prefix, Map properties) + static ExporterFilterProperties load(Map properties) throws PrometheusPropertiesException { List allowedNames = - Util.loadStringList(prefix + "." + METRIC_NAME_MUST_BE_EQUAL_TO, properties); + Util.loadStringList(PREFIX + "." + METRIC_NAME_MUST_BE_EQUAL_TO, properties); List excludedNames = - Util.loadStringList(prefix + "." + METRIC_NAME_MUST_NOT_BE_EQUAL_TO, properties); + Util.loadStringList(PREFIX + "." + METRIC_NAME_MUST_NOT_BE_EQUAL_TO, properties); List allowedPrefixes = - Util.loadStringList(prefix + "." + METRIC_NAME_MUST_START_WITH, properties); + Util.loadStringList(PREFIX + "." + METRIC_NAME_MUST_START_WITH, properties); List excludedPrefixes = - Util.loadStringList(prefix + "." + METRIC_NAME_MUST_NOT_START_WITH, properties); + Util.loadStringList(PREFIX + "." + METRIC_NAME_MUST_NOT_START_WITH, properties); return new ExporterFilterProperties( allowedNames, excludedNames, allowedPrefixes, excludedPrefixes); } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterHttpServerProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterHttpServerProperties.java index fe048ac6b..6618ab88e 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterHttpServerProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterHttpServerProperties.java @@ -6,6 +6,7 @@ public class ExporterHttpServerProperties { private static final String PORT = "port"; + private static final String PREFIX = "io.prometheus.exporter.httpServer"; private final Integer port; private ExporterHttpServerProperties(Integer port) { @@ -20,10 +21,10 @@ public Integer getPort() { * Note that this will remove entries from {@code properties}. This is because we want to know if * there are unused properties remaining after all properties have been loaded. */ - static ExporterHttpServerProperties load(String prefix, Map properties) + static ExporterHttpServerProperties load(Map properties) throws PrometheusPropertiesException { - Integer port = Util.loadInteger(prefix + "." + PORT, properties); - Util.assertValue(port, t -> t > 0, "Expecting value > 0", prefix, PORT); + Integer port = Util.loadInteger(PREFIX + "." + PORT, properties); + Util.assertValue(port, t -> t > 0, "Expecting value > 0.", PREFIX, PORT); return new ExporterHttpServerProperties(port); } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java index d009d2603..53acb6b14 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java @@ -19,6 +19,7 @@ public class ExporterOpenTelemetryProperties { private static final String SERVICE_VERSION = "serviceVersion"; private static final String RESOURCE_ATTRIBUTES = "resourceAttributes"; // otel.resource.attributes + private static final String PREFIX = "io.prometheus.exporter.opentelemetry"; private final String protocol; private final String endpoint; @@ -98,19 +99,19 @@ public Map getResourceAttributes() { * Note that this will remove entries from {@code properties}. This is because we want to know if * there are unused properties remaining after all properties have been loaded. */ - static ExporterOpenTelemetryProperties load(String prefix, Map properties) + static ExporterOpenTelemetryProperties load(Map properties) throws PrometheusPropertiesException { - String protocol = Util.loadString(prefix + "." + PROTOCOL, properties); - String endpoint = Util.loadString(prefix + "." + ENDPOINT, properties); - Map headers = Util.loadMap(prefix + "." + HEADERS, properties); - String interval = Util.loadStringAddSuffix(prefix + "." + INTERVAL_SECONDS, properties, "s"); - String timeout = Util.loadStringAddSuffix(prefix + "." + TIMEOUT_SECONDS, properties, "s"); - String serviceName = Util.loadString(prefix + "." + SERVICE_NAME, properties); - String serviceNamespace = Util.loadString(prefix + "." + SERVICE_NAMESPACE, properties); - String serviceInstanceId = Util.loadString(prefix + "." + SERVICE_INSTANCE_ID, properties); - String serviceVersion = Util.loadString(prefix + "." + SERVICE_VERSION, properties); + String protocol = Util.loadString(PREFIX + "." + PROTOCOL, properties); + String endpoint = Util.loadString(PREFIX + "." + ENDPOINT, properties); + Map headers = Util.loadMap(PREFIX + "." + HEADERS, properties); + String interval = Util.loadStringAddSuffix(PREFIX + "." + INTERVAL_SECONDS, properties, "s"); + String timeout = Util.loadStringAddSuffix(PREFIX + "." + TIMEOUT_SECONDS, properties, "s"); + String serviceName = Util.loadString(PREFIX + "." + SERVICE_NAME, properties); + String serviceNamespace = Util.loadString(PREFIX + "." + SERVICE_NAMESPACE, properties); + String serviceInstanceId = Util.loadString(PREFIX + "." + SERVICE_INSTANCE_ID, properties); + String serviceVersion = Util.loadString(PREFIX + "." + SERVICE_VERSION, properties); Map resourceAttributes = - Util.loadMap(prefix + "." + RESOURCE_ATTRIBUTES, properties); + Util.loadMap(PREFIX + "." + RESOURCE_ATTRIBUTES, properties); return new ExporterOpenTelemetryProperties( protocol, endpoint, diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java index dd0606e6d..72c04c33b 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java @@ -7,6 +7,7 @@ public class ExporterProperties { private static final String INCLUDE_CREATED_TIMESTAMPS = "includeCreatedTimestamps"; private static final String EXEMPLARS_ON_ALL_METRIC_TYPES = "exemplarsOnAllMetricTypes"; + private static final String PREFIX = "io.prometheus.exporter"; private final Boolean includeCreatedTimestamps; private final Boolean exemplarsOnAllMetricTypes; @@ -33,12 +34,12 @@ public boolean getExemplarsOnAllMetricTypes() { * Note that this will remove entries from {@code properties}. This is because we want to know if * there are unused properties remaining after all properties have been loaded. */ - static ExporterProperties load(String prefix, Map properties) + static ExporterProperties load(Map properties) throws PrometheusPropertiesException { Boolean includeCreatedTimestamps = - Util.loadBoolean(prefix + "." + INCLUDE_CREATED_TIMESTAMPS, properties); + Util.loadBoolean(PREFIX + "." + INCLUDE_CREATED_TIMESTAMPS, properties); Boolean exemplarsOnAllMetricTypes = - Util.loadBoolean(prefix + "." + EXEMPLARS_ON_ALL_METRIC_TYPES, properties); + Util.loadBoolean(PREFIX + "." + EXEMPLARS_ON_ALL_METRIC_TYPES, properties); return new ExporterProperties(includeCreatedTimestamps, exemplarsOnAllMetricTypes); } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java index 4a794eba2..8aafba3a4 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java @@ -7,6 +7,7 @@ public class ExporterPushgatewayProperties { private static final String ADDRESS = "address"; private static final String JOB = "job"; private static final String SCHEME = "scheme"; + private static final String PREFIX = "io.prometheus.exporter.pushgateway"; private final String scheme; private final String address; private final String job; @@ -42,15 +43,17 @@ public String getScheme() { * Note that this will remove entries from {@code properties}. This is because we want to know if * there are unused properties remaining after all properties have been loaded. */ - static ExporterPushgatewayProperties load(String prefix, Map properties) + static ExporterPushgatewayProperties load(Map properties) throws PrometheusPropertiesException { - String address = Util.loadString(prefix + "." + ADDRESS, properties); - String job = Util.loadString(prefix + "." + JOB, properties); - String scheme = Util.loadString(prefix + "." + SCHEME, properties); + String address = Util.loadString(PREFIX + "." + ADDRESS, properties); + String job = Util.loadString(PREFIX + "." + JOB, properties); + String scheme = Util.loadString(PREFIX + "." + SCHEME, properties); if (scheme != null) { if (!scheme.equals("http") && !scheme.equals("https")) { throw new PrometheusPropertiesException( - prefix + "." + SCHEME + "=" + scheme + ": Illegal value. Expecting 'http' or 'https'."); + String.format( + "%s.%s: Illegal value. Expecting 'http' or 'https'. Found: %s", + PREFIX, SCHEME, scheme)); } } return new ExporterPushgatewayProperties(address, job, scheme); diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/MetricsProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/MetricsProperties.java index 744822005..7667fadce 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/MetricsProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/MetricsProperties.java @@ -164,11 +164,11 @@ private void validate(String prefix) throws PrometheusPropertiesException { prefix, HISTOGRAM_NATIVE_RESET_DURATION_SECONDS); Util.assertValue( - summaryMaxAgeSeconds, t -> t > 0, "Expecting value > 0", prefix, SUMMARY_MAX_AGE_SECONDS); + summaryMaxAgeSeconds, t -> t > 0, "Expecting value > 0.", prefix, SUMMARY_MAX_AGE_SECONDS); Util.assertValue( summaryNumberOfAgeBuckets, t -> t > 0, - "Expecting value > 0", + "Expecting value > 0.", prefix, SUMMARY_NUMBER_OF_AGE_BUCKETS); @@ -201,7 +201,11 @@ private void validate(String prefix) throws PrometheusPropertiesException { for (double quantile : summaryQuantiles) { if (quantile < 0 || quantile > 1) { throw new PrometheusPropertiesException( - prefix + "." + SUMMARY_QUANTILES + ": Expecting 0.0 <= quantile <= 1.0"); + prefix + + "." + + SUMMARY_QUANTILES + + ": Expecting 0.0 <= quantile <= 1.0. Found: " + + quantile); } } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java index e29f93036..82170cf49 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java @@ -33,18 +33,15 @@ public static PrometheusProperties load(Map externalProperties) Map metricsConfigs = loadMetricsConfigs(properties); MetricsProperties defaultMetricsProperties = MetricsProperties.load("io.prometheus.metrics", properties); - ExemplarsProperties exemplarConfig = - ExemplarsProperties.load("io.prometheus.exemplars", properties); - ExporterProperties exporterProperties = - ExporterProperties.load("io.prometheus.exporter", properties); - ExporterFilterProperties exporterFilterProperties = - ExporterFilterProperties.load("io.prometheus.exporter.filter", properties); + ExemplarsProperties exemplarConfig = ExemplarsProperties.load(properties); + ExporterProperties exporterProperties = ExporterProperties.load(properties); + ExporterFilterProperties exporterFilterProperties = ExporterFilterProperties.load(properties); ExporterHttpServerProperties exporterHttpServerProperties = - ExporterHttpServerProperties.load("io.prometheus.exporter.httpServer", properties); + ExporterHttpServerProperties.load(properties); ExporterPushgatewayProperties exporterPushgatewayProperties = - ExporterPushgatewayProperties.load("io.prometheus.exporter.pushgateway", properties); + ExporterPushgatewayProperties.load(properties); ExporterOpenTelemetryProperties exporterOpenTelemetryProperties = - ExporterOpenTelemetryProperties.load("io.prometheus.exporter.opentelemetry", properties); + ExporterOpenTelemetryProperties.load(properties); validateAllPropertiesProcessed(properties); return new PrometheusProperties( defaultMetricsProperties, diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java index 15a61f7fe..7092df068 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java @@ -23,7 +23,7 @@ static Boolean loadBoolean(String name, Map properties) if (property != null) { if (!"true".equalsIgnoreCase(property) && !"false".equalsIgnoreCase(property)) { throw new PrometheusPropertiesException( - name + "=" + property + ": Expecting 'true' or 'false'"); + String.format("%s: Expecting 'true' or 'false'. Found: %s", name, property)); } return Boolean.parseBoolean(property); } @@ -154,7 +154,9 @@ static void assertValue( throws PrometheusPropertiesException { if (number != null && !predicate.test(number)) { String fullMessage = - prefix == null ? name + ": " + message : prefix + "." + name + ": " + message; + prefix == null + ? name + ": " + message + : String.format("%s.%s: %s Found: %s", prefix, name, message, number); throw new PrometheusPropertiesException(fullMessage); } } diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExemplarsPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExemplarsPropertiesTest.java new file mode 100644 index 000000000..55be3086e --- /dev/null +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExemplarsPropertiesTest.java @@ -0,0 +1,60 @@ +package io.prometheus.metrics.config; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import com.google.common.collect.ImmutableMap; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Test; + +class ExemplarsPropertiesTest { + + @Test + void load() { + ExemplarsProperties properties = + load( + ImmutableMap.of( + "io.prometheus.exemplars.minRetentionPeriodSeconds", "1", + "io.prometheus.exemplars.maxRetentionPeriodSeconds", "2", + "io.prometheus.exemplars.sampleIntervalMilliseconds", "3")); + assertThat(properties.getMinRetentionPeriodSeconds()).isOne(); + assertThat(properties.getMaxRetentionPeriodSeconds()).isEqualTo(2); + assertThat(properties.getSampleIntervalMilliseconds()).isEqualTo(3); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> load(ImmutableMap.of("io.prometheus.exemplars.minRetentionPeriodSeconds", "-1"))) + .withMessage( + "io.prometheus.exemplars.minRetentionPeriodSeconds: Expecting value > 0. Found: -1"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> load(ImmutableMap.of("io.prometheus.exemplars.maxRetentionPeriodSeconds", "0"))) + .withMessage( + "io.prometheus.exemplars.maxRetentionPeriodSeconds: Expecting value > 0. Found: 0"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> load(ImmutableMap.of("io.prometheus.exemplars.sampleIntervalMilliseconds", "-1"))) + .withMessage( + "io.prometheus.exemplars.sampleIntervalMilliseconds: Expecting value > 0. Found: -1"); + } + + private static ExemplarsProperties load(Map map) { + return ExemplarsProperties.load(new HashMap<>(map)); + } + + @Test + void builder() { + ExemplarsProperties properties = + ExemplarsProperties.builder() + .minRetentionPeriodSeconds(1) + .maxRetentionPeriodSeconds(2) + .sampleIntervalMilliseconds(3) + .build(); + assertThat(properties.getMinRetentionPeriodSeconds()).isOne(); + assertThat(properties.getMaxRetentionPeriodSeconds()).isEqualTo(2); + assertThat(properties.getSampleIntervalMilliseconds()).isEqualTo(3); + } +} diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterFilterPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterFilterPropertiesTest.java new file mode 100644 index 000000000..273b058a7 --- /dev/null +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterFilterPropertiesTest.java @@ -0,0 +1,45 @@ +package io.prometheus.metrics.config; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.common.collect.ImmutableMap; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Test; + +class ExporterFilterPropertiesTest { + + @Test + void load() { + ExporterFilterProperties properties = + load( + ImmutableMap.of( + "io.prometheus.exporter.filter.metricNameMustBeEqualTo", "a,b,c", + "io.prometheus.exporter.filter.metricNameMustNotBeEqualTo", "d,e,f", + "io.prometheus.exporter.filter.metricNameMustStartWith", "g,h,i", + "io.prometheus.exporter.filter.metricNameMustNotStartWith", "j,k,l")); + assertThat(properties.getAllowedMetricNames()).containsExactly("a", "b", "c"); + assertThat(properties.getExcludedMetricNames()).containsExactly("d", "e", "f"); + assertThat(properties.getAllowedMetricNamePrefixes()).containsExactly("g", "h", "i"); + assertThat(properties.getExcludedMetricNamePrefixes()).containsExactly("j", "k", "l"); + } + + private static ExporterFilterProperties load(Map map) { + return ExporterFilterProperties.load(new HashMap<>(map)); + } + + @Test + void builder() { + ExporterFilterProperties properties = + ExporterFilterProperties.builder() + .allowedNames("a", "b", "c") + .excludedNames("d", "e", "f") + .allowedPrefixes("g", "h", "i") + .excludedPrefixes("j", "k", "l") + .build(); + assertThat(properties.getAllowedMetricNames()).containsExactly("a", "b", "c"); + assertThat(properties.getExcludedMetricNames()).containsExactly("d", "e", "f"); + assertThat(properties.getAllowedMetricNamePrefixes()).containsExactly("g", "h", "i"); + assertThat(properties.getExcludedMetricNamePrefixes()).containsExactly("j", "k", "l"); + } +} diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterHttpServerPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterHttpServerPropertiesTest.java new file mode 100644 index 000000000..5da84fed2 --- /dev/null +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterHttpServerPropertiesTest.java @@ -0,0 +1,31 @@ +package io.prometheus.metrics.config; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import com.google.common.collect.ImmutableMap; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Test; + +class ExporterHttpServerPropertiesTest { + @Test + void load() { + ExporterHttpServerProperties properties = + load(ImmutableMap.of("io.prometheus.exporter.httpServer.port", "1")); + assertThat(properties.getPort()).isOne(); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy(() -> load(ImmutableMap.of("io.prometheus.exporter.httpServer.port", "0"))) + .withMessage("io.prometheus.exporter.httpServer.port: Expecting value > 0. Found: 0"); + } + + @Test + void builder() { + assertThat(ExporterHttpServerProperties.builder().port(1).build().getPort()).isOne(); + } + + private static ExporterHttpServerProperties load(Map map) { + return ExporterHttpServerProperties.load(new HashMap<>(map)); + } +} diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterOpenTelemetryPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterOpenTelemetryPropertiesTest.java new file mode 100644 index 000000000..b6a67c3c1 --- /dev/null +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterOpenTelemetryPropertiesTest.java @@ -0,0 +1,70 @@ +package io.prometheus.metrics.config; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.common.collect.ImmutableMap; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Test; + +class ExporterOpenTelemetryPropertiesTest { + + @Test + void load() { + ExporterOpenTelemetryProperties properties = + load( + ImmutableMap.of( + "io.prometheus.exporter.opentelemetry.protocol", "grpc", + "io.prometheus.exporter.opentelemetry.endpoint", "http://localhost:8080", + "io.prometheus.exporter.opentelemetry.headers", "key1=value1,key2=value2", + "io.prometheus.exporter.opentelemetry.intervalSeconds", "10", + "io.prometheus.exporter.opentelemetry.timeoutSeconds", "5", + "io.prometheus.exporter.opentelemetry.serviceName", "serviceName", + "io.prometheus.exporter.opentelemetry.serviceNamespace", "serviceNamespace", + "io.prometheus.exporter.opentelemetry.serviceInstanceId", "serviceInstanceId", + "io.prometheus.exporter.opentelemetry.serviceVersion", "serviceVersion", + "io.prometheus.exporter.opentelemetry.resourceAttributes", + "key1=value1,key2=value2")); + + assertValues(properties); + } + + private static void assertValues(ExporterOpenTelemetryProperties properties) { + assertThat(properties.getProtocol()).isEqualTo("grpc"); + assertThat(properties.getEndpoint()).isEqualTo("http://localhost:8080"); + assertThat(properties.getHeaders()) + .containsExactlyInAnyOrderEntriesOf(ImmutableMap.of("key1", "value1", "key2", "value2")); + assertThat(properties.getInterval()).isEqualTo("10s"); + assertThat(properties.getTimeout()).isEqualTo("5s"); + assertThat(properties.getServiceName()).isEqualTo("serviceName"); + assertThat(properties.getServiceNamespace()).isEqualTo("serviceNamespace"); + assertThat(properties.getServiceInstanceId()).isEqualTo("serviceInstanceId"); + assertThat(properties.getServiceVersion()).isEqualTo("serviceVersion"); + assertThat(properties.getResourceAttributes()) + .containsExactlyInAnyOrderEntriesOf(ImmutableMap.of("key1", "value1", "key2", "value2")); + } + + private static ExporterOpenTelemetryProperties load(Map map) { + return ExporterOpenTelemetryProperties.load(new HashMap<>(map)); + } + + @Test + void builder() { + ExporterOpenTelemetryProperties properties = + ExporterOpenTelemetryProperties.builder() + .protocol("grpc") + .endpoint("http://localhost:8080") + .header("key1", "value1") + .header("key2", "value2") + .intervalSeconds(10) + .timeoutSeconds(5) + .serviceName("serviceName") + .serviceNamespace("serviceNamespace") + .serviceInstanceId("serviceInstanceId") + .serviceVersion("serviceVersion") + .resourceAttribute("key1", "value1") + .resourceAttribute("key2", "value2") + .build(); + assertValues(properties); + } +} diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java new file mode 100644 index 000000000..8da66da11 --- /dev/null +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java @@ -0,0 +1,58 @@ +package io.prometheus.metrics.config; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import com.google.common.collect.ImmutableMap; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Test; + +class ExporterPropertiesTest { + + @Test + void load() { + ExporterProperties properties = + load( + new HashMap<>( + ImmutableMap.of( + "io.prometheus.exporter.includeCreatedTimestamps", "true", + "io.prometheus.exporter.exemplarsOnAllMetricTypes", "true"))); + assertThat(properties.getIncludeCreatedTimestamps()).isTrue(); + assertThat(properties.getExemplarsOnAllMetricTypes()).isTrue(); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> + load( + new HashMap<>( + ImmutableMap.of( + "io.prometheus.exporter.includeCreatedTimestamps", "invalid")))) + .withMessage( + "io.prometheus.exporter.includeCreatedTimestamps: Expecting 'true' or 'false'. Found: invalid"); + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> + load( + new HashMap<>( + ImmutableMap.of( + "io.prometheus.exporter.exemplarsOnAllMetricTypes", "invalid")))) + .withMessage( + "io.prometheus.exporter.exemplarsOnAllMetricTypes: Expecting 'true' or 'false'. Found: invalid"); + } + + private static ExporterProperties load(Map map) { + return ExporterProperties.load(new HashMap<>(map)); + } + + @Test + void builder() { + ExporterProperties properties = + ExporterProperties.builder() + .includeCreatedTimestamps(true) + .exemplarsOnAllMetricTypes(true) + .build(); + assertThat(properties.getIncludeCreatedTimestamps()).isTrue(); + assertThat(properties.getExemplarsOnAllMetricTypes()).isTrue(); + } +} diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPushgatewayPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPushgatewayPropertiesTest.java new file mode 100644 index 000000000..d5600e770 --- /dev/null +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPushgatewayPropertiesTest.java @@ -0,0 +1,35 @@ +package io.prometheus.metrics.config; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import com.google.common.collect.ImmutableMap; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Test; + +class ExporterPushgatewayPropertiesTest { + + @Test + void load() { + ExporterPushgatewayProperties properties = + load( + ImmutableMap.of( + "io.prometheus.exporter.pushgateway.address", "http://localhost", + "io.prometheus.exporter.pushgateway.job", "job", + "io.prometheus.exporter.pushgateway.scheme", "http")); + + assertThat(properties.getAddress()).isEqualTo("http://localhost"); + assertThat(properties.getJob()).isEqualTo("job"); + assertThat(properties.getScheme()).isEqualTo("http"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy(() -> load(ImmutableMap.of("io.prometheus.exporter.pushgateway.scheme", "foo"))) + .withMessage( + "io.prometheus.exporter.pushgateway.scheme: Illegal value. Expecting 'http' or 'https'. Found: foo"); + } + + private static ExporterPushgatewayProperties load(Map map) { + return ExporterPushgatewayProperties.load(new HashMap<>(map)); + } +} diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/MetricsPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/MetricsPropertiesTest.java new file mode 100644 index 000000000..83cca06eb --- /dev/null +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/MetricsPropertiesTest.java @@ -0,0 +1,154 @@ +package io.prometheus.metrics.config; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import org.junit.jupiter.api.Test; + +class MetricsPropertiesTest { + @Test + void builder() { + assertThat(MetricsProperties.builder().exemplarsEnabled(true).build().getExemplarsEnabled()) + .isTrue(); + assertThat( + MetricsProperties.builder().histogramNativeOnly(true).build().getHistogramNativeOnly()) + .isTrue(); + assertThat( + MetricsProperties.builder() + .histogramClassicOnly(true) + .build() + .getHistogramClassicOnly()) + .isTrue(); + assertThat( + MetricsProperties.builder() + .histogramClassicUpperBounds(1.0, 2.0) + .build() + .getHistogramClassicUpperBounds()) + .containsExactly(1.0, 2.0); + + assertThat(MetricsProperties.builder().summaryQuantiles(0.1, 0.2).build().getSummaryQuantiles()) + .containsExactly(0.1, 0.2); + assertThat( + MetricsProperties.builder().summaryMaxAgeSeconds(1L).build().getSummaryMaxAgeSeconds()) + .isOne(); + assertThat( + MetricsProperties.builder() + .summaryQuantiles(0.2) + .summaryQuantileErrors(1.0) + .build() + .getSummaryQuantileErrors()) + .containsExactly(1.0); + assertThat( + MetricsProperties.builder() + .summaryNumberOfAgeBuckets(1) + .build() + .getSummaryNumberOfAgeBuckets()) + .isOne(); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy(() -> MetricsProperties.builder().summaryNumberOfAgeBuckets(0).build()) + .withMessage(".summaryNumberOfAgeBuckets: Expecting value > 0. Found: 0"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy(() -> MetricsProperties.builder().summaryQuantiles(2L).build()) + .withMessage(".summaryQuantiles: Expecting 0.0 <= quantile <= 1.0. Found: 2.0"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy(() -> MetricsProperties.builder().summaryQuantileErrors(0.9).build()) + .withMessage( + ".summaryQuantileErrors: Can't configure summaryQuantileErrors without configuring summaryQuantiles"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> + MetricsProperties.builder() + .summaryQuantiles(0.1) + .summaryQuantileErrors(0.1, 0.9) + .build()) + .withMessage(".summaryQuantileErrors: must have the same length as summaryQuantiles"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> + MetricsProperties.builder() + .summaryQuantiles(0.1) + .summaryQuantileErrors(-0.9) + .build()) + .withMessage(".summaryQuantileErrors: Expecting 0.0 <= error <= 1.0"); + } + + @Test + void nativeBuilder() { + assertThat( + MetricsProperties.builder() + .histogramNativeInitialSchema(1) + .build() + .getHistogramNativeInitialSchema()) + .isOne(); + assertThat( + MetricsProperties.builder() + .histogramNativeMinZeroThreshold(.1) + .build() + .getHistogramNativeMinZeroThreshold()) + .isEqualTo(.1); + assertThat( + MetricsProperties.builder() + .histogramNativeMaxZeroThreshold(.1) + .build() + .getHistogramNativeMaxZeroThreshold()) + .isEqualTo(.1); + assertThat( + MetricsProperties.builder() + .histogramNativeMaxNumberOfBuckets(1) + .build() + .getHistogramNativeMaxNumberOfBuckets()) + .isOne(); + assertThat( + MetricsProperties.builder() + .histogramNativeResetDurationSeconds(1L) + .build() + .getHistogramNativeResetDurationSeconds()) + .isOne(); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy(() -> MetricsProperties.builder().histogramNativeInitialSchema(10).build()) + .withMessage( + ".histogramNativeInitialSchema: Expecting number between -4 and +8. Found: 10"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy(() -> MetricsProperties.builder().histogramNativeMinZeroThreshold(-1.0).build()) + .withMessage(".histogramNativeMinZeroThreshold: Expecting value >= 0. Found: -1.0"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy(() -> MetricsProperties.builder().histogramNativeMaxZeroThreshold(-1.0).build()) + .withMessage(".histogramNativeMaxZeroThreshold: Expecting value >= 0. Found: -1.0"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy(() -> MetricsProperties.builder().histogramNativeMaxNumberOfBuckets(-1).build()) + .withMessage(".histogramNativeMaxNumberOfBuckets: Expecting value >= 0. Found: -1"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> MetricsProperties.builder().histogramNativeResetDurationSeconds(-1L).build()) + .withMessage(".histogramNativeResetDurationSeconds: Expecting value >= 0. Found: -1"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> + MetricsProperties.builder() + .histogramNativeOnly(true) + .histogramClassicOnly(true) + .build()) + .withMessage(".histogramNativeOnly and .histogramClassicOnly cannot both be true"); + + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> + MetricsProperties.builder() + .histogramNativeMinZeroThreshold(0.1) + .histogramNativeMaxZeroThreshold(0.01) + .build()) + .withMessage( + ".histogramNativeMinZeroThreshold cannot be greater than .histogramNativeMaxZeroThreshold"); + } +} diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTest.java similarity index 74% rename from prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java rename to prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTest.java index 9da800c27..f0a2d5d3e 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTests.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTest.java @@ -1,12 +1,14 @@ package io.prometheus.metrics.config; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import java.util.Properties; import org.junit.jupiter.api.Test; +import org.junitpioneer.jupiter.SetSystemProperty; /** Tests for {@link PrometheusPropertiesLoader}. */ -class PrometheusPropertiesLoaderTests { +class PrometheusPropertiesLoaderTest { @Test public void propertiesShouldBeLoadedFromPropertiesFile() { @@ -22,6 +24,18 @@ public void propertiesShouldBeLoadedFromPropertiesFile() { .isTrue(); } + @Test + @SetSystemProperty(key = "prometheus.config", value = "nonexistent.properties") + void cantLoadPropertiesFile() { + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> { + PrometheusPropertiesLoader.load(new Properties()); + }) + .withMessage( + "Failed to read Prometheus properties from nonexistent.properties: nonexistent.properties"); + } + @Test public void externalPropertiesShouldOverridePropertiesFile() { Properties properties = new Properties(); diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java index 056ef792c..9b213a85d 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/MetricWithFixedMetadata.java @@ -57,8 +57,9 @@ protected Builder(List illegalLabelNames, PrometheusProperties propertie } public B name(String name) { - if (!PrometheusNaming.isValidMetricName(name)) { - throw new IllegalArgumentException("'" + name + "': Illegal metric name."); + String error = PrometheusNaming.validateMetricName(name); + if (error != null) { + throw new IllegalArgumentException("'" + name + "': Illegal metric name: " + error); } this.name = name; return self(); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/CounterDataPointTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/CounterDataPointTest.java new file mode 100644 index 000000000..3e70ef199 --- /dev/null +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/CounterDataPointTest.java @@ -0,0 +1,39 @@ +package io.prometheus.metrics.core.datapoints; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.prometheus.metrics.model.snapshots.Labels; +import org.junit.jupiter.api.Test; + +class CounterDataPointTest { + + private double value = 0; + + @Test + void inc() { + CounterDataPoint counterDataPoint = + new CounterDataPoint() { + @Override + public void inc(double value) { + CounterDataPointTest.this.value += value; + } + + @Override + public void incWithExemplar(double amount, Labels labels) {} + + @Override + public long getLongValue() { + return 0; + } + + @Override + public double get() { + return 0; + } + }; + counterDataPoint.inc(1); + assertThat(value).isOne(); + counterDataPoint.incWithExemplar(1, null); + assertThat(value).isEqualTo(2); + } +} diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java index 70755b938..b7c9ea836 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/datapoints/TimerApiTest.java @@ -1,6 +1,32 @@ package io.prometheus.metrics.core.datapoints; +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + class TimerApiTest { - // TODO: Port this from the simpleclient SimpleTimerTest + private double time = 0; + + private io.prometheus.metrics.core.datapoints.Timer timer = + new io.prometheus.metrics.core.datapoints.Timer(t -> time = t) {}; + private TimerApi api = () -> timer; + + @Test + void runnable() { + api.time(() -> {}); + assertThat(time).isPositive(); + } + + @Test + void supplier() { + assertThat(api.time(() -> "foo")).isEqualTo("foo"); + assertThat(time).isPositive(); + } + + @Test + void callable() throws Exception { + assertThat(api.timeChecked(() -> "foo")).isEqualTo("foo"); + assertThat(time).isPositive(); + } } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CallbackMetricTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CallbackMetricTest.java new file mode 100644 index 000000000..16cd443d9 --- /dev/null +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CallbackMetricTest.java @@ -0,0 +1,46 @@ +package io.prometheus.metrics.core.metrics; + +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import org.junit.jupiter.api.Test; + +class CallbackMetricTest { + + @Test + void makeLabels() { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + CounterWithCallback.builder() + .name("c") + .callback(callback -> {}) + .labelNames("label1", "label2") + .build() + .makeLabels("foo")) + .withMessage( + "CounterWithCallback was created with 2 label names, but the callback was called with 1 label values."); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + CounterWithCallback.builder() + .name("c") + .callback(callback -> {}) + .labelNames("label1", "label2") + .build() + .makeLabels((String[]) null)) + .withMessage( + "CounterWithCallback was created with label names, but the callback was called without label values."); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + CounterWithCallback.builder() + .name("c") + .callback(callback -> {}) + .build() + .makeLabels("foo")) + .withMessage( + "Cannot pass label values to a CounterWithCallback that was created without label names."); + } +} diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index a87153ec6..a9d83c6af 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.core.metrics; import static io.prometheus.metrics.core.metrics.TestUtil.assertExemplarEquals; -import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; @@ -198,16 +198,17 @@ private void assertExemplar(Counter counter, double value, String... labels) { @Test public void testExemplarSampler() throws Exception { - final Exemplar exemplar1 = Exemplar.builder().value(2.0).traceId("abc").spanId("123").build(); - final Exemplar exemplar2 = Exemplar.builder().value(1.0).traceId("def").spanId("456").build(); - final Exemplar exemplar3 = Exemplar.builder().value(1.0).traceId("123").spanId("abc").build(); - final Exemplar customExemplar = + Exemplar exemplar1 = Exemplar.builder().value(2.0).traceId("abc").spanId("123").build(); + Exemplar exemplar2 = Exemplar.builder().value(1.0).traceId("def").spanId("456").build(); + Exemplar exemplar3 = Exemplar.builder().value(1.0).traceId("123").spanId("abc").build(); + Exemplar customExemplar = Exemplar.builder() .value(1.0) .traceId("bab") .spanId("cdc") .labels(Labels.of("test", "test")) .build(); + SpanContext spanContext = new SpanContext() { private int callNumber = 0; @@ -293,6 +294,36 @@ public void markCurrentSpanAsExemplar() {} assertExemplarEquals(customExemplar, getData(counter).getExemplar()); } + @Test + void inc() { + Counter counter = Counter.builder().name("count_total").build(); + counter.inc(2.0); + + assertThat(getData(counter).getValue()).isCloseTo(2.0, offset(0.0001)); + assertThat(counter.get()).isEqualTo(2.0); + assertThat(counter.getLongValue()).isEqualTo(2L); + } + + @Test + void incWithExemplar() { + Counter counter = Counter.builder().name("count_total").build(); + counter.incWithExemplar(Labels.of("test", "test2")); + + assertExemplarEquals( + Exemplar.builder().value(1.0).labels(Labels.of("test", "test2")).build(), + getData(counter).getExemplar()); + } + + @Test + void incWithExemplar2() { + Counter counter = Counter.builder().name("count_total").build(); + counter.incWithExemplar(1.0, Labels.of("test", "test2")); + + assertExemplarEquals( + Exemplar.builder().value(1.0).labels(Labels.of("test", "test2")).build(), + getData(counter).getExemplar()); + } + @Test public void testExemplarSamplerDisabled() { Counter counter = diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java index 9aa0b04b3..11ec60c5b 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/GaugeTest.java @@ -104,10 +104,10 @@ public void testLabels() { @Test public void testExemplarSampler() throws Exception { - final Exemplar exemplar1 = Exemplar.builder().value(2.0).traceId("abc").spanId("123").build(); - final Exemplar exemplar2 = Exemplar.builder().value(6.5).traceId("def").spanId("456").build(); - final Exemplar exemplar3 = Exemplar.builder().value(7.0).traceId("123").spanId("abc").build(); - final Exemplar customExemplar = + Exemplar exemplar1 = Exemplar.builder().value(2.0).traceId("abc").spanId("123").build(); + Exemplar exemplar2 = Exemplar.builder().value(6.5).traceId("def").spanId("456").build(); + Exemplar exemplar3 = Exemplar.builder().value(7.0).traceId("123").spanId("abc").build(); + Exemplar customExemplar = Exemplar.builder() .value(8.0) .traceId("bab") @@ -199,6 +199,36 @@ public void markCurrentSpanAsExemplar() {} assertExemplarEquals(customExemplar, getData(gauge).getExemplar()); } + @Test + void incWithExemplar() { + Gauge gauge = Gauge.builder().name("count").build(); + gauge.incWithExemplar(1.0, Labels.of("test", "test2")); + + assertExemplarEquals( + Exemplar.builder().value(1.0).labels(Labels.of("test", "test2")).build(), + getData(gauge).getExemplar()); + } + + @Test + void dec() { + Gauge gauge = Gauge.builder().name("count").build(); + gauge.decWithExemplar(Labels.of("test", "test2")); + + assertExemplarEquals( + Exemplar.builder().value(-1.0).labels(Labels.of("test", "test2")).build(), + getData(gauge).getExemplar()); + } + + @Test + void decWithExemplar() { + Gauge gauge = Gauge.builder().name("count").build(); + gauge.decWithExemplar(1.0, Labels.of("test", "test2")); + + assertExemplarEquals( + Exemplar.builder().value(-1.0).labels(Labels.of("test", "test2")).build(), + getData(gauge).getExemplar()); + } + @Test public void testExemplarSamplerDisabled() { Gauge gauge = Gauge.builder().name("test").withoutExemplars().build(); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index e3b06ecc8..dfdc16be0 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -9,6 +9,7 @@ import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import io.prometheus.metrics.model.snapshots.Unit; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -50,6 +51,11 @@ public void testAddAndRemove() { assertThat(info.collect().getDataPoints()).hasSize(1); info.remove("val2", "val2"); assertThat(info.collect().getDataPoints()).isEmpty(); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> info.addLabelValues("val1", "val2", "extra")) + .withMessage( + "Info test was created with 2 label names, but you called addLabelValues() with 3 label values."); } @Test @@ -67,6 +73,16 @@ public void testSet() throws IOException { assertTextFormat( "target_info{service_instance_id=\"123\",service_name=\"test\",service_version=\"2.0.0\"} 1\n", info); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> info.setLabelValues("2.0.0", "extra")) + .withMessage( + "Info target was created with 1 label names, but you called setLabelValues() with 2 label values."); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> info.remove("2.0.0", "extra")) + .withMessage( + "Info target was created with 1 label names, but you called remove() with 2 label values."); } @Test @@ -80,6 +96,13 @@ public void testConstLabelsOnly() throws IOException { assertTextFormat("target_info{service_instance_id=\"123\",service_name=\"test\"} 1\n", info); } + @Test + void unit() { + assertThatExceptionOfType(UnsupportedOperationException.class) + .isThrownBy(() -> Info.builder().unit(Unit.BYTES).build()) + .withMessage("Info metrics cannot have a unit."); + } + @Test public void testConstLabelsDuplicate1() { assertThatExceptionOfType(IllegalArgumentException.class) diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java index a419e876c..09678874a 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StateSetTest.java @@ -63,6 +63,14 @@ public void testDefaultFalse() { assertThat(getData(stateSet).isTrue(2)).isFalse(); } + @Test + void illegalName() { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> StateSet.builder().name("state1").states("state1", "state2").build()) + .withMessage( + "Label name state1 is illegal (can't use the metric name as label name in state set metrics)"); + } + private StateSetSnapshot.StateSetDataPointSnapshot getData(StateSet stateSet, String... labels) { return stateSet.collect().getDataPoints().stream() .filter(d -> d.getLabels().equals(Labels.of(labels))) diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index 35a0c24e3..ccc68fc07 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -18,6 +18,8 @@ io.prometheus.metrics.exporter.httpserver + + 0.0 diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index d9ecaaa1c..04790be25 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -19,6 +19,8 @@ io.prometheus.metrics.exporter.opentelemetry + + 0.0 diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java index a8c43e7f9..5f02d38cc 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScope.java @@ -11,28 +11,34 @@ class PrometheusInstrumentationScope { private static final String instrumentationScopeVersionKey = "instrumentationScope.version"; public static InstrumentationScopeInfo loadInstrumentationScopeInfo() { + return loadInstrumentationScopeInfo( + instrumentationScopePropertiesFile, + instrumentationScopeNameKey, + instrumentationScopeVersionKey); + } + + static InstrumentationScopeInfo loadInstrumentationScopeInfo( + String path, String nameKey, String versionKey) { try { Properties properties = new Properties(); properties.load( - PrometheusInstrumentationScope.class - .getClassLoader() - .getResourceAsStream(instrumentationScopePropertiesFile)); - String instrumentationScopeName = properties.getProperty(instrumentationScopeNameKey); + PrometheusInstrumentationScope.class.getClassLoader().getResourceAsStream(path)); + String instrumentationScopeName = properties.getProperty(nameKey); if (instrumentationScopeName == null) { throw new IllegalStateException( "Prometheus metrics library initialization error: " - + instrumentationScopeNameKey + + nameKey + " not found in " - + instrumentationScopePropertiesFile + + path + " in classpath."); } - String instrumentationScopeVersion = properties.getProperty(instrumentationScopeVersionKey); + String instrumentationScopeVersion = properties.getProperty(versionKey); if (instrumentationScopeVersion == null) { throw new IllegalStateException( "Prometheus metrics library initialization error: " - + instrumentationScopeVersionKey + + versionKey + " not found in " - + instrumentationScopePropertiesFile + + path + " in classpath."); } return InstrumentationScopeInfo.builder(instrumentationScopeName) @@ -41,7 +47,7 @@ public static InstrumentationScopeInfo loadInstrumentationScopeInfo() { } catch (Exception e) { throw new IllegalStateException( "Prometheus metrics library initialization error: Failed to read " - + instrumentationScopePropertiesFile + + path + " from classpath.", e); } diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScopeTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScopeTest.java new file mode 100644 index 000000000..e1b97e04d --- /dev/null +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusInstrumentationScopeTest.java @@ -0,0 +1,38 @@ +package io.prometheus.metrics.exporter.opentelemetry; + +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class PrometheusInstrumentationScopeTest { + + @Test + void loadInstrumentationScopeInfo() { + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy( + () -> + PrometheusInstrumentationScope.loadInstrumentationScopeInfo( + "path", "name", "version")) + .withMessage( + "Prometheus metrics library initialization error: Failed to read path from classpath."); + + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy( + () -> + PrometheusInstrumentationScope.loadInstrumentationScopeInfo( + "instrumentationScope.properties", "name", "version")) + .havingRootCause() + .withMessage( + "Prometheus metrics library initialization error: name not found in instrumentationScope.properties in classpath."); + + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy( + () -> + PrometheusInstrumentationScope.loadInstrumentationScopeInfo( + "instrumentationScope.properties", "instrumentationScope.name", "version")) + .havingRootCause() + .withMessage( + "Prometheus metrics library initialization error: version not found in instrumentationScope.properties in classpath."); + } +} diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/SchemeTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/SchemeTest.java new file mode 100644 index 000000000..6695a2911 --- /dev/null +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/SchemeTest.java @@ -0,0 +1,18 @@ +package io.prometheus.metrics.exporter.pushgateway; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import org.junit.jupiter.api.Test; + +class SchemeTest { + + @Test + void fromString() { + assertThat(Scheme.HTTP).hasToString("http"); + assertThat(Scheme.HTTPS).hasToString("https"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> Scheme.fromString("ftp")) + .withMessage("ftp: Unsupported scheme. Expecting 'http' or 'https'."); + } +} diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index a5e427a89..cdcfd5f0b 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -3,10 +3,26 @@ import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics; -import io.prometheus.metrics.model.snapshots.*; +import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; +import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; +import io.prometheus.metrics.model.snapshots.Exemplar; +import io.prometheus.metrics.model.snapshots.Exemplars; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; +import io.prometheus.metrics.model.snapshots.HistogramSnapshot; +import io.prometheus.metrics.model.snapshots.InfoSnapshot; +import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.model.snapshots.MetricSnapshot; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import io.prometheus.metrics.model.snapshots.NativeHistogramBuckets; +import io.prometheus.metrics.model.snapshots.PrometheusNaming; +import io.prometheus.metrics.model.snapshots.Quantiles; +import io.prometheus.metrics.model.snapshots.StateSetSnapshot; +import io.prometheus.metrics.model.snapshots.SummarySnapshot; import io.prometheus.metrics.model.snapshots.SummarySnapshot.SummaryDataPointSnapshot; +import io.prometheus.metrics.model.snapshots.Unit; +import io.prometheus.metrics.model.snapshots.UnknownSnapshot; import io.prometheus.metrics.model.snapshots.UnknownSnapshot.UnknownDataPointSnapshot; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -77,6 +93,17 @@ class ExpositionFormatsTest { .timestampMillis(1690298864383L) .build(); + @Test + void init() { + ExpositionFormats formats = ExpositionFormats.init(); + assertThat(formats.findWriter("application/openmetrics-text")).isNotNull(); + assertThat(formats.findWriter("application/vnd.google.protobuf")).isNotNull(); + assertThat(formats.findWriter("text/plain")).isNotNull(); + assertThat(formats.getOpenMetricsTextFormatWriter()).isNotNull(); + assertThat(formats.getPrometheusProtobufWriter()).isNotNull(); + assertThat(formats.getPrometheusTextFormatWriter()).isNotNull(); + } + @Test public void testCounterComplete() throws IOException { String openMetricsText = diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index bcedc6446..9779c036f 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 @@ -18,6 +19,7 @@ io.prometheus.metrics.instrumentation.dropwizard5 + 0.50 diff --git a/prometheus-metrics-instrumentation-guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml index 19b07a944..304bff254 100644 --- a/prometheus-metrics-instrumentation-guava/pom.xml +++ b/prometheus-metrics-instrumentation-guava/pom.xml @@ -37,7 +37,6 @@ com.google.guava guava - 33.3.1-jre provided diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index 767c0fe61..225572b49 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -18,6 +18,7 @@ io.prometheus.metrics.instrumentation.jvm + 0.55 diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java index ab8b0d61d..2bb908a37 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmMetricsTest.java @@ -2,11 +2,19 @@ import static org.assertj.core.api.Assertions.assertThat; +import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.model.registry.PrometheusRegistry; +import java.lang.management.ManagementFactory; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class JvmMetricsTest { + @BeforeEach + void setUp() { + PrometheusRegistry.defaultRegistry.clear(); + } + @Test public void testRegisterIdempotent() { PrometheusRegistry registry = new PrometheusRegistry(); @@ -15,4 +23,18 @@ public void testRegisterIdempotent() { assertThat(registry.scrape().size()).isGreaterThan(0); JvmMetrics.builder().register(registry); } + + @Test + void pool() { + // for coverage + JvmMemoryPoolAllocationMetrics.builder(PrometheusProperties.get()) + .withGarbageCollectorBeans(ManagementFactory.getGarbageCollectorMXBeans()) + .register(); + } + + @Test + void testJvmMetrics() { + JvmMetrics.builder(PrometheusProperties.get()).register(); + JvmMetrics.builder().register(); + } } diff --git a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java index 3bc424985..9e4256d60 100644 --- a/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java +++ b/prometheus-metrics-instrumentation-jvm/src/test/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetricsTest.java @@ -30,6 +30,14 @@ public void testNativeMemoryTrackingFail() throws IOException { assertThat(convertToOpenMetricsFormat(snapshots)).isEqualTo(expected); } + @Test + void nativeMemoryTrackingNotEnabled() { + assertThat( + new JvmNativeMemoryMetrics.DefaultPlatformMBeanServerAdapter() + .vmNativeMemorySummaryInBytes()) + .isEqualTo("Native memory tracking is not enabled\n"); + } + @Test public void testNativeMemoryTrackingEmpty() throws IOException { JvmNativeMemoryMetrics.isEnabled.set(true); diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java index d4f9db699..5cb1604d1 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java @@ -70,7 +70,7 @@ public static boolean isValidMetricName(String name) { * *

    The name is valid if the error message is {@code null}. */ - static String validateMetricName(String name) { + public static String validateMetricName(String name) { for (String reservedSuffix : RESERVED_METRIC_NAME_SUFFIXES) { if (name.endsWith(reservedSuffix)) { return "The metric name must not include the '" + reservedSuffix + "' suffix."; diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/CollectorTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/CollectorTest.java new file mode 100644 index 000000000..65102c17b --- /dev/null +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/registry/CollectorTest.java @@ -0,0 +1,29 @@ +package io.prometheus.metrics.model.registry; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import org.junit.jupiter.api.Test; + +class CollectorTest { + + Collector collector = () -> CounterSnapshot.builder().name("counter_a").build(); + + @Test + void predicate() { + PrometheusScrapeRequest request = + new PrometheusScrapeRequest() { + @Override + public String getRequestPath() { + return "/metrics"; + } + + @Override + public String[] getParameterValues(String name) { + return new String[0]; + } + }; + assertThat(collector.collect(name -> false, request)).isNull(); + assertThat(collector.collect(name -> true, request)).isNotNull(); + } +} diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java index e832e1d13..d39b32436 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ClassicHistogramBucketsTest.java @@ -4,6 +4,8 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; import org.junit.jupiter.api.Test; class ClassicHistogramBucketsTest { @@ -113,4 +115,16 @@ public void testImmutable() { iterator.next(); assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } + + @Test + public void compare() { + ClassicHistogramBuckets buckets = + ClassicHistogramBuckets.builder() + .bucket(1.0, 7) + .bucket(2.0, 8) + .bucket(Double.POSITIVE_INFINITY, 0) + .build(); + List list = buckets.stream().collect(Collectors.toList()); + assertThat(list.get(0)).isNotEqualByComparingTo(list.get(1)); + } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java index ea179641b..b26eaf84a 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/ExemplarsTest.java @@ -52,5 +52,7 @@ public void testGet() { assertThat(middle).isSameAs(result); result = exemplars.get(0.9, Double.POSITIVE_INFINITY); assertThat(newest).isSameAs(result); + + assertThat(exemplars.getLatest()).isSameAs(newest); } } diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java index 05841c4cc..8867c73e3 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/HistogramSnapshotTest.java @@ -5,6 +5,7 @@ import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.model.snapshots.HistogramSnapshot.HistogramDataPointSnapshot; +import java.util.Collections; import java.util.Iterator; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; @@ -170,8 +171,13 @@ public void testGoodCaseComplete() { @Test public void testEmptyHistogram() { - HistogramSnapshot snapshot = HistogramSnapshot.builder().name("empty_histogram").build(); + assertThat(HistogramSnapshot.builder().name("empty_histogram").build().getDataPoints()) + .isEmpty(); + HistogramSnapshot snapshot = + new HistogramSnapshot( + new MetricMetadata("empty_bytes", "help", Unit.BYTES), Collections.emptyList()); assertThat(snapshot.getDataPoints()).isEmpty(); + assertThat(snapshot.isGaugeHistogram()).isFalse(); } @Test diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java index 423b57da7..983450181 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/InfoSnapshotTest.java @@ -25,6 +25,13 @@ public void testCompleteGoodCase() { assertThat(snapshot.getDataPoints().size()).isOne(); } + @Test + void create() { + InfoSnapshot.InfoDataPointSnapshot snapshot = + new InfoSnapshot.InfoDataPointSnapshot(Labels.EMPTY); + assertThat(snapshot.getScrapeTimestampMillis()).isZero(); + } + @Test public void testEmptyInfo() { InfoSnapshot snapshot = InfoSnapshot.builder().name("target").build(); diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelTest.java new file mode 100644 index 000000000..386f29f15 --- /dev/null +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/LabelTest.java @@ -0,0 +1,32 @@ +package io.prometheus.metrics.model.snapshots; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class LabelTest { + + private static final Label LABEL = new Label("name", "value"); + private static final Label SAME = new Label("name", "value"); + private static final Label LABEL2 = new Label("name", "value2"); + + @Test + void compareTo() { + assertThat(LABEL).isEqualByComparingTo(SAME).isLessThan(LABEL2); + } + + @Test + void testToString() { + assertThat(LABEL).hasToString("Label{name='name', value='value'}"); + } + + @Test + void testEquals() { + assertThat(LABEL).isEqualTo(SAME).isNotEqualTo(LABEL2); + } + + @Test + void testHashCode() { + assertThat(LABEL).hasSameHashCodeAs(SAME).doesNotHaveSameHashCodeAs(LABEL2); + } +} diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java index 25cd6a4ec..581ba6599 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/MetricSnapshotTest.java @@ -9,7 +9,7 @@ class MetricSnapshotTest { @Test public void testDuplicateLabels() { - assertThatExceptionOfType(IllegalArgumentException.class) + assertThatExceptionOfType(DuplicateLabelsException.class) .isThrownBy( () -> CounterSnapshot.builder() @@ -29,7 +29,13 @@ public void testDuplicateLabels() { .labels(Labels.of("status", "200", "path", "/hello")) .value(3.0) .build()) - .build()); + .build()) + .satisfies( + e -> { + assertThat(e.getMetadata().getName()).isEqualTo("events"); + assertThat((Iterable) e.getLabels()) + .isEqualTo(Labels.of("path", "/hello", "status", "200")); + }); } @Test diff --git a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java index cb3c70f8d..05e102b9d 100644 --- a/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java +++ b/prometheus-metrics-model/src/test/java/io/prometheus/metrics/model/snapshots/StateSetSnapshotTest.java @@ -100,8 +100,13 @@ public void testDataImmutable() { .state("b", true) .state("c", true) .build(); + assertThat(data.iterator().next()) + .usingRecursiveComparison() + .isEqualTo(data.stream().iterator().next()); Iterator iterator = data.iterator(); - iterator.next(); + StateSetSnapshot.State state = iterator.next(); + assertThat(state.getName()).isEqualTo("a"); + assertThat(state.isTrue()).isTrue(); assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(iterator::remove); } @@ -117,6 +122,12 @@ public void testDuplicateState() { .build()); } + @Test + public void noUnit() { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> StateSetSnapshot.builder().name("flags").unit(Unit.BYTES).build()); + } + @Test public void testStateSetImmutable() { StateSetSnapshot snapshot = From 247f1a688da6001d7b58f41eaf2a989ebe4a2f3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:57:39 +0200 Subject: [PATCH 191/870] Bump org.sonatype.central:central-publishing-maven-plugin (#1160) Bumps [org.sonatype.central:central-publishing-maven-plugin](https://github.com/sonatype/central-publishing-maven-plugin) from 0.5.0 to 0.6.0. - [Commits](https://github.com/sonatype/central-publishing-maven-plugin/commits) --- updated-dependencies: - dependency-name: org.sonatype.central:central-publishing-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b84550bf1..d80b89efe 100644 --- a/pom.xml +++ b/pom.xml @@ -456,7 +456,7 @@ org.sonatype.central central-publishing-maven-plugin - 0.5.0 + 0.6.0 true ossrh From f8e61b6a231096c10deed76b45a9c22a836357c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:57:57 +0200 Subject: [PATCH 192/870] Bump org.slf4j:slf4j-simple from 1.7.36 to 2.0.16 (#1161) Bumps org.slf4j:slf4j-simple from 1.7.36 to 2.0.16. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d80b89efe..79130011c 100644 --- a/pom.xml +++ b/pom.xml @@ -120,7 +120,7 @@ org.slf4j slf4j-simple - 1.7.36 + 2.0.16 test From 28b40484bcdc8b2bf32b1c1c37e8852f775f31b8 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 18 Oct 2024 07:48:58 +0200 Subject: [PATCH 193/870] add coverage check (#1162) Signed-off-by: Gregor Zeitlinger --- CONTRIBUTING.md | 10 +- benchmarks/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/pom.xml | 2 +- pom.xml | 7 +- .../pom.xml | 7 +- .../otelmodel/PrometheusInfo.java | 1 + .../otelmodel/PrometheusMetricData.java | 2 +- .../otelmodel/PrometheusStateSet.java | 1 + .../exporter/opentelemetry/ExportTest.java | 312 ++++++++++++++++++ .../otelmodel/PrometheusMetricDataTest.java | 47 +++ .../model/snapshots/CounterSnapshot.java | 1 + .../model/snapshots/DataPointSnapshot.java | 1 + .../model/snapshots/MetricSnapshot.java | 5 +- 14 files changed, 387 insertions(+), 13 deletions(-) create mode 100644 prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java create mode 100644 prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricDataTest.java diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 79cd4b6ca..3d8c766ec 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,14 +17,18 @@ This repository uses [Google Java Format](https://github.com/google/google-java- Run `./mvnw spotless:apply` to format the code (only changed files) before committing. -Use `-Dspotless.check.skip=true` to skip the formatting check during development. - ## Running Tests If you're getting errors when running tests: - Make sure that the IDE uses only the "Maven Shade" dependency of "prometheus-metrics-exposition-formats" and the "prometheus-metrics-tracer*" dependencies. - + +### Avoid failures while running tests + +- Use `-Dspotless.check.skip=true` to skip the formatting check during development. +- Use `-Dcoverage.skip=true` to skip the coverage check during development. +- Use `-Dwarnings=-nowarn` to skip the warnings during development. + ## Updating the Protobuf Java Classes Use `PROTO_GENERATION=true mvn clean install` to generate protobuf classes. diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 11e24c3bd..64a929953 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -20,7 +20,7 @@ 1.37 0.16.0 3.0.2 - 0.0 + true diff --git a/examples/pom.xml b/examples/pom.xml index e1fd7ceb4..079ceb982 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -17,7 +17,7 @@ - 0.0 + true diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index ad98ba538..ce13424df 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -19,7 +19,7 @@ - 0.0 + true diff --git a/pom.xml b/pom.xml index 79130011c..f7f9dd3fe 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,8 @@ 2.8.0-alpha 8 0.70 + false + -Werror @@ -227,6 +229,7 @@ jacoco-maven-plugin 0.8.12 + ${coverage.skip} **/generated/** @@ -309,8 +312,8 @@ ${java.version} true - -Xlint:all,-serial,-processing - -Werror + -Xlint:all,-serial,-processing,-options + ${warnings} -XDcompilePolicy=simple -Xplugin:ErrorProne diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 04790be25..a603302c7 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -19,8 +19,6 @@ io.prometheus.metrics.exporter.opentelemetry - - 0.0 @@ -96,6 +94,11 @@ 1.7.1-alpha test + + io.opentelemetry + opentelemetry-sdk-testing + test + diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java index 33e4c158d..2a7b8110f 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusInfo.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.stream.Collectors; +@SuppressWarnings("this-escape") public class PrometheusInfo extends PrometheusData implements SumData { diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java index 4995b98d6..baca70774 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java @@ -48,7 +48,7 @@ private String getNameWithoutUnit(MetricMetadata metricMetadata) { // See // https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/6cf4dec6cb42d87d8840e9f67d4acf66d4eb8fda/pkg/translator/prometheus/normalize_name.go#L19 - private String convertUnit(Unit unit) { + static String convertUnit(Unit unit) { if (unit == null) { return null; } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java index b0bb39841..10417afc7 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusStateSet.java @@ -16,6 +16,7 @@ public class PrometheusStateSet extends PrometheusData private final List points; + @SuppressWarnings("this-escape") public PrometheusStateSet(StateSetSnapshot snapshot, long currentTimeMillis) { super(MetricDataType.DOUBLE_SUM); this.points = new ArrayList<>(); diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java new file mode 100644 index 000000000..55589ce84 --- /dev/null +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java @@ -0,0 +1,312 @@ +package io.prometheus.metrics.exporter.opentelemetry; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.export.MetricReader; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.testing.assertj.MetricAssert; +import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; +import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension; +import io.prometheus.metrics.core.metrics.Counter; +import io.prometheus.metrics.core.metrics.Gauge; +import io.prometheus.metrics.core.metrics.Histogram; +import io.prometheus.metrics.core.metrics.Info; +import io.prometheus.metrics.core.metrics.StateSet; +import io.prometheus.metrics.core.metrics.Summary; +import io.prometheus.metrics.model.registry.Collector; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.model.snapshots.Unit; +import io.prometheus.metrics.model.snapshots.UnknownSnapshot; +import java.lang.reflect.Field; +import java.util.Collections; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +public class ExportTest { + + private static final Attributes ATTRIBUTES = + Attributes.of(AttributeKey.stringKey("label"), "val", AttributeKey.stringKey("key"), "value"); + @RegisterExtension OpenTelemetryExtension testing = OpenTelemetryExtension.create(); + + private final PrometheusRegistry registry = new PrometheusRegistry(); + + @BeforeEach + void setUp() throws IllegalAccessException, NoSuchFieldException { + Field field = testing.getClass().getDeclaredField("metricReader"); + field.setAccessible(true); + MetricReader reader = (MetricReader) field.get(testing); + + PrometheusMetricProducer prometheusMetricProducer = + new PrometheusMetricProducer( + registry, + InstrumentationScopeInfo.create("test"), + Resource.create(Attributes.builder().put("staticRes", "value").build())); + + reader.register(prometheusMetricProducer); + } + + @Test + void targetInfo() { + Info.builder().name("target").constLabels(Labels.of("res", "value")).register(registry); + Labels scope = Labels.of("otel_scope_name", "scope", "otel_scope_version", "1"); + Info.builder() + .name("otel_scope") + .constLabels(scope.add("scopeKey", "value")) + .register(registry); + Counter counter = Counter.builder().name("name").constLabels(scope).register(registry); + counter.inc(); + metricAssert() + .hasResource( + Resource.create( + Attributes.builder().put("res", "value").put("staticRes", "value").build())) + .hasInstrumentationScope( + InstrumentationScopeInfo.builder("scope") + .setAttributes(Attributes.of(AttributeKey.stringKey("scopeKey"), "value")) + .setVersion("1") + .build()); + } + + @Test + void counter() { + Counter counter = + Counter.builder() + .name("name") + .help("help") + .constLabels(Labels.of("key", "value")) + .labelNames("label") + .unit(Unit.BYTES) + .withExemplars() + .register(registry); + counter.labelValues("val").inc(); + metricAssert() + .hasName("name") + .hasDescription("help") + .hasUnit("By") + .hasDoubleSumSatisfying( + sum -> + sum.isMonotonic() + .isCumulative() + .hasPointsSatisfying(points -> points.hasValue(1.0).hasAttributes(ATTRIBUTES))); + } + + @Test + void histogram() { + Histogram histogram = + Histogram.builder() + .name("name") + .help("help") + .constLabels(Labels.of("key", "value")) + .labelNames("label") + .unit(Unit.BYTES) + .classicOnly() + .classicUpperBounds(1, 2, 3) + .register(registry); + histogram.labelValues("val").observe(1); + metricAssert() + .hasName("name") + .hasDescription("help") + .hasUnit("By") + .hasHistogramSatisfying( + hist -> + hist.hasPointsSatisfying( + points -> + points + .hasAttributes(ATTRIBUTES) + .hasCount(1) + .hasSum(1.0) + .satisfies( + p -> { + assertThat(p.getMin()).isNaN(); + assertThat(p.getMax()).isNaN(); + assertThat(p.getStartEpochNanos()).isPositive(); + assertThat(p.getEpochNanos()).isPositive(); + }) + .hasExemplars() + .hasBucketBoundaries(1, 2, 3, Double.POSITIVE_INFINITY) + .hasBucketCounts(1, 0, 0, 0))); + } + + @Test + void exponentialHistogram() { + Histogram histogram = + Histogram.builder() + .name("name") + .help("help") + .constLabels(Labels.of("key", "value")) + .labelNames("label") + .unit(Unit.BYTES) + .nativeOnly() + .register(registry); + histogram.labelValues("val").observe(1); + metricAssert() + .hasName("name") + .hasDescription("help") + .hasUnit("By") + .hasExponentialHistogramSatisfying( + hist -> + hist.isCumulative() + .hasPointsSatisfying( + points -> + points + .hasAttributes(ATTRIBUTES) + .hasCount(1) + .hasScale(5) + .hasZeroCount(0) + .hasSum(1.0) + .satisfies( + p -> { + assertThat(p.getMin()).isNaN(); + assertThat(p.getMax()).isNaN(); + assertThat(p.getStartEpochNanos()).isPositive(); + assertThat(p.getEpochNanos()).isPositive(); + }) + .hasExemplars() + .hasPositiveBucketsSatisfying( + buckets -> + buckets + .hasOffset(-1) + .hasTotalCount(1) + .hasCounts(Collections.singletonList(1L))))); + } + + @Test + void summary() { + Summary summary = + Summary.builder() + .name("name") + .help("help") + .constLabels(Labels.of("key", "value")) + .labelNames("label") + .unit(Unit.BYTES) + .quantile(0.5, 0.1) + .register(registry); + summary.labelValues("val").observe(1); + metricAssert() + .hasName("name") + .hasDescription("help") + .hasUnit("By") + .hasSummarySatisfying( + sum -> + sum.hasPointsSatisfying( + points -> + points + .hasAttributes(ATTRIBUTES) + .hasCount(1) + .hasSum(1.0) + .satisfies( + p -> { + assertThat(p.getStartEpochNanos()).isPositive(); + assertThat(p.getEpochNanos()).isPositive(); + }) + .hasValuesSatisfying(values -> values.hasQuantile(0.5).hasValue(1.0)))); + } + + @Test + void gauge() { + Gauge gauge = + Gauge.builder() + .name("name") + .help("help") + .constLabels(Labels.of("key", "value")) + .labelNames("label") + .unit(Unit.BYTES) + .register(registry); + gauge.labelValues("val").set(1); + metricAssert() + .hasName("name") + .hasDescription("help") + .hasUnit("By") + .hasDoubleGaugeSatisfying( + gaugeData -> + gaugeData.hasPointsSatisfying( + points -> points.hasValue(1.0).hasExemplars().hasAttributes(ATTRIBUTES))); + } + + @Test + void stateSet() { + StateSet stateSet = + StateSet.builder() + .name("name") + .help("help") + .constLabels(Labels.of("key", "value")) + .labelNames("label") + .states("state") + .register(registry); + stateSet.labelValues("val").setTrue("state"); + metricAssert() + .hasName("name") + .hasDescription("help") + .hasDoubleSumSatisfying( + sum -> + sum.isNotMonotonic() + .isCumulative() + .hasPointsSatisfying( + points -> + points + .hasValue(1.0) + .hasAttributes( + ATTRIBUTES.toBuilder().put("name", "state").build()))); + } + + @Test + void info() { + Info info = + Info.builder() + .name("name") + .help("help") + .constLabels(Labels.of("key", "value")) + .labelNames("label") + .register(registry); + info.addLabelValues("val"); + metricAssert() + .hasName("name") + .hasDescription("help") + .hasDoubleSumSatisfying( + sum -> + sum.isCumulative() + .isNotMonotonic() + .hasPointsSatisfying(points -> points.hasAttributes(ATTRIBUTES).hasValue(1.0))); + } + + @Test + void unknown() { + Collector collector = + () -> + UnknownSnapshot.builder() + .name("name_bytes") + .help("help") + .unit(Unit.BYTES) + .dataPoint( + UnknownSnapshot.UnknownDataPointSnapshot.builder() + .value(1.0) + .labels(Labels.of("label", "val")) + .build()) + .build(); + registry.register(collector); + metricAssert() + .hasName("name") + .hasDescription("help") + .hasUnit("By") + .hasDoubleGaugeSatisfying( + gaugeData -> + gaugeData.hasPointsSatisfying( + points -> + points + .hasValue(1.0) + .hasExemplars() + .hasAttributes(Attributes.of(AttributeKey.stringKey("label"), "val")))); + } + + private MetricAssert metricAssert() { + List metrics = testing.getMetrics(); + assertThat(metrics).hasSize(1); + return OpenTelemetryAssertions.assertThat(metrics.get(0)); + } +} diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricDataTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricDataTest.java new file mode 100644 index 000000000..2c84b1e37 --- /dev/null +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricDataTest.java @@ -0,0 +1,47 @@ +package io.prometheus.metrics.exporter.opentelemetry.otelmodel; + +import static org.junit.jupiter.api.Assertions.*; + +import com.google.common.collect.ImmutableMap; +import io.prometheus.metrics.model.snapshots.Unit; +import org.junit.jupiter.api.Test; + +class PrometheusMetricDataTest { + + ImmutableMap translations = + ImmutableMap.builder() + .put("days", "d") + .put("hours", "h") + .put("minutes", "min") + .put("seconds", "s") + .put("milliseconds", "ms") + .put("microseconds", "us") + .put("nanoseconds", "ns") + .put("bytes", "By") + .put("kibibytes", "KiBy") + .put("mebibytes", "MiBy") + .put("gibibytes", "GiBy") + .put("tibibytes", "TiBy") + .put("kilobytes", "KBy") + .put("megabytes", "MBy") + .put("gigabytes", "GBy") + .put("terabytes", "TBy") + .put("meters", "m") + .put("volts", "V") + .put("amperes", "A") + .put("joules", "J") + .put("watts", "W") + .put("grams", "g") + .put("celsius", "Cel") + .put("hertz", "Hz") + .put("percent", "%") + .build(); + + @Test + void convertUnit() { + translations.forEach( + (unit, expected) -> { + assertEquals(expected, PrometheusMetricData.convertUnit(new Unit(unit.toString()))); + }); + } +} diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java index 45be6f0f1..c74a68e39 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/CounterSnapshot.java @@ -50,6 +50,7 @@ public CounterDataPointSnapshot( * scrape timestamp is usually set by the Prometheus server during scraping. Exceptions include * mirroring metrics with given timestamps from other metric sources. */ + @SuppressWarnings("this-escape") public CounterDataPointSnapshot( double value, Labels labels, diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java index 47ad4486b..4c2d57e8e 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java @@ -1,5 +1,6 @@ package io.prometheus.metrics.model.snapshots; +@SuppressWarnings("this-escape") public abstract class DataPointSnapshot { private final Labels labels; private final long createdTimestampMillis; diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java index 420feeced..5d4c15461 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricSnapshot.java @@ -23,7 +23,7 @@ protected MetricSnapshot(MetricMetadata metadata, Collection dataPoints) { List dataCopy = new ArrayList<>(dataPoints); dataCopy.sort(Comparator.comparing(DataPointSnapshot::getLabels)); this.dataPoints = Collections.unmodifiableList(dataCopy); - validateLabels(); + validateLabels(this.dataPoints, metadata); } public MetricMetadata getMetadata() { @@ -32,7 +32,8 @@ public MetricMetadata getMetadata() { public abstract List getDataPoints(); - protected void validateLabels() { + private static void validateLabels( + List dataPoints, MetricMetadata metadata) { // Verify that labels are unique (the same set of names/values must not be used multiple times // for the same metric). for (int i = 0; i < dataPoints.size() - 1; i++) { From a2d3b209fc10d570ba50a4eb933c3b987a931322 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 18 Oct 2024 15:16:52 +0200 Subject: [PATCH 194/870] add tests (#1163) * allow java 17 in tests Signed-off-by: Gregor Zeitlinger * allow java 17 in tests Signed-off-by: Gregor Zeitlinger * add coverage Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- .tool-versions | 1 + pom.xml | 4 + .../config/ExemplarsPropertiesTest.java | 12 +-- .../config/ExporterFilterPropertiesTest.java | 3 +- .../ExporterHttpServerPropertiesTest.java | 5 +- .../ExporterOpenTelemetryPropertiesTest.java | 7 +- .../config/ExporterPropertiesTest.java | 9 +- .../ExporterPushgatewayPropertiesTest.java | 5 +- .../pom.xml | 3 +- .../BlockingRejectedExecutionHandler.java | 18 ++++ .../exporter/httpserver/HTTPServer.java | 15 ---- .../exporter/httpserver/HTTPServerTest.java | 86 +++++++++++++++++-- .../httpserver/MetricsHandlerTest.java | 36 ++++++++ .../opentelemetry/OtelAutoConfigTest.java | 23 +++-- .../otelmodel/PrometheusMetricDataTest.java | 58 ++++++------- 15 files changed, 197 insertions(+), 88 deletions(-) create mode 100644 .tool-versions create mode 100644 prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/BlockingRejectedExecutionHandler.java create mode 100644 prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/MetricsHandlerTest.java diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 000000000..cc92f91ec --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +java temurin-17.0.7+7 diff --git a/pom.xml b/pom.xml index f7f9dd3fe..09c999861 100644 --- a/pom.xml +++ b/pom.xml @@ -232,6 +232,7 @@ ${coverage.skip} **/generated/** + **/*BlockingRejectedExecutionHandler* @@ -310,6 +311,9 @@ ${java.version} ${java.version} ${java.version} + 17 + 17 + 17 true -Xlint:all,-serial,-processing,-options diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExemplarsPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExemplarsPropertiesTest.java index 55be3086e..53f7ae072 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExemplarsPropertiesTest.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExemplarsPropertiesTest.java @@ -3,7 +3,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import com.google.common.collect.ImmutableMap; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Test; @@ -14,7 +13,7 @@ class ExemplarsPropertiesTest { void load() { ExemplarsProperties properties = load( - ImmutableMap.of( + Map.of( "io.prometheus.exemplars.minRetentionPeriodSeconds", "1", "io.prometheus.exemplars.maxRetentionPeriodSeconds", "2", "io.prometheus.exemplars.sampleIntervalMilliseconds", "3")); @@ -23,20 +22,17 @@ void load() { assertThat(properties.getSampleIntervalMilliseconds()).isEqualTo(3); assertThatExceptionOfType(PrometheusPropertiesException.class) - .isThrownBy( - () -> load(ImmutableMap.of("io.prometheus.exemplars.minRetentionPeriodSeconds", "-1"))) + .isThrownBy(() -> load(Map.of("io.prometheus.exemplars.minRetentionPeriodSeconds", "-1"))) .withMessage( "io.prometheus.exemplars.minRetentionPeriodSeconds: Expecting value > 0. Found: -1"); assertThatExceptionOfType(PrometheusPropertiesException.class) - .isThrownBy( - () -> load(ImmutableMap.of("io.prometheus.exemplars.maxRetentionPeriodSeconds", "0"))) + .isThrownBy(() -> load(Map.of("io.prometheus.exemplars.maxRetentionPeriodSeconds", "0"))) .withMessage( "io.prometheus.exemplars.maxRetentionPeriodSeconds: Expecting value > 0. Found: 0"); assertThatExceptionOfType(PrometheusPropertiesException.class) - .isThrownBy( - () -> load(ImmutableMap.of("io.prometheus.exemplars.sampleIntervalMilliseconds", "-1"))) + .isThrownBy(() -> load(Map.of("io.prometheus.exemplars.sampleIntervalMilliseconds", "-1"))) .withMessage( "io.prometheus.exemplars.sampleIntervalMilliseconds: Expecting value > 0. Found: -1"); } diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterFilterPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterFilterPropertiesTest.java index 273b058a7..0b30fbd43 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterFilterPropertiesTest.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterFilterPropertiesTest.java @@ -2,7 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.google.common.collect.ImmutableMap; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Test; @@ -13,7 +12,7 @@ class ExporterFilterPropertiesTest { void load() { ExporterFilterProperties properties = load( - ImmutableMap.of( + Map.of( "io.prometheus.exporter.filter.metricNameMustBeEqualTo", "a,b,c", "io.prometheus.exporter.filter.metricNameMustNotBeEqualTo", "d,e,f", "io.prometheus.exporter.filter.metricNameMustStartWith", "g,h,i", diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterHttpServerPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterHttpServerPropertiesTest.java index 5da84fed2..07b00a2a4 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterHttpServerPropertiesTest.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterHttpServerPropertiesTest.java @@ -3,7 +3,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import com.google.common.collect.ImmutableMap; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Test; @@ -12,11 +11,11 @@ class ExporterHttpServerPropertiesTest { @Test void load() { ExporterHttpServerProperties properties = - load(ImmutableMap.of("io.prometheus.exporter.httpServer.port", "1")); + load(Map.of("io.prometheus.exporter.httpServer.port", "1")); assertThat(properties.getPort()).isOne(); assertThatExceptionOfType(PrometheusPropertiesException.class) - .isThrownBy(() -> load(ImmutableMap.of("io.prometheus.exporter.httpServer.port", "0"))) + .isThrownBy(() -> load(Map.of("io.prometheus.exporter.httpServer.port", "0"))) .withMessage("io.prometheus.exporter.httpServer.port: Expecting value > 0. Found: 0"); } diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterOpenTelemetryPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterOpenTelemetryPropertiesTest.java index b6a67c3c1..7ba275570 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterOpenTelemetryPropertiesTest.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterOpenTelemetryPropertiesTest.java @@ -2,7 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.google.common.collect.ImmutableMap; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Test; @@ -13,7 +12,7 @@ class ExporterOpenTelemetryPropertiesTest { void load() { ExporterOpenTelemetryProperties properties = load( - ImmutableMap.of( + Map.of( "io.prometheus.exporter.opentelemetry.protocol", "grpc", "io.prometheus.exporter.opentelemetry.endpoint", "http://localhost:8080", "io.prometheus.exporter.opentelemetry.headers", "key1=value1,key2=value2", @@ -33,7 +32,7 @@ private static void assertValues(ExporterOpenTelemetryProperties properties) { assertThat(properties.getProtocol()).isEqualTo("grpc"); assertThat(properties.getEndpoint()).isEqualTo("http://localhost:8080"); assertThat(properties.getHeaders()) - .containsExactlyInAnyOrderEntriesOf(ImmutableMap.of("key1", "value1", "key2", "value2")); + .containsExactlyInAnyOrderEntriesOf(Map.of("key1", "value1", "key2", "value2")); assertThat(properties.getInterval()).isEqualTo("10s"); assertThat(properties.getTimeout()).isEqualTo("5s"); assertThat(properties.getServiceName()).isEqualTo("serviceName"); @@ -41,7 +40,7 @@ private static void assertValues(ExporterOpenTelemetryProperties properties) { assertThat(properties.getServiceInstanceId()).isEqualTo("serviceInstanceId"); assertThat(properties.getServiceVersion()).isEqualTo("serviceVersion"); assertThat(properties.getResourceAttributes()) - .containsExactlyInAnyOrderEntriesOf(ImmutableMap.of("key1", "value1", "key2", "value2")); + .containsExactlyInAnyOrderEntriesOf(Map.of("key1", "value1", "key2", "value2")); } private static ExporterOpenTelemetryProperties load(Map map) { diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java index 8da66da11..c09bc12c3 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java @@ -3,7 +3,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import com.google.common.collect.ImmutableMap; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Test; @@ -15,7 +14,7 @@ void load() { ExporterProperties properties = load( new HashMap<>( - ImmutableMap.of( + Map.of( "io.prometheus.exporter.includeCreatedTimestamps", "true", "io.prometheus.exporter.exemplarsOnAllMetricTypes", "true"))); assertThat(properties.getIncludeCreatedTimestamps()).isTrue(); @@ -26,8 +25,7 @@ void load() { () -> load( new HashMap<>( - ImmutableMap.of( - "io.prometheus.exporter.includeCreatedTimestamps", "invalid")))) + Map.of("io.prometheus.exporter.includeCreatedTimestamps", "invalid")))) .withMessage( "io.prometheus.exporter.includeCreatedTimestamps: Expecting 'true' or 'false'. Found: invalid"); assertThatExceptionOfType(PrometheusPropertiesException.class) @@ -35,8 +33,7 @@ void load() { () -> load( new HashMap<>( - ImmutableMap.of( - "io.prometheus.exporter.exemplarsOnAllMetricTypes", "invalid")))) + Map.of("io.prometheus.exporter.exemplarsOnAllMetricTypes", "invalid")))) .withMessage( "io.prometheus.exporter.exemplarsOnAllMetricTypes: Expecting 'true' or 'false'. Found: invalid"); } diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPushgatewayPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPushgatewayPropertiesTest.java index d5600e770..9e0ed0dbf 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPushgatewayPropertiesTest.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPushgatewayPropertiesTest.java @@ -3,7 +3,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import com.google.common.collect.ImmutableMap; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Test; @@ -14,7 +13,7 @@ class ExporterPushgatewayPropertiesTest { void load() { ExporterPushgatewayProperties properties = load( - ImmutableMap.of( + Map.of( "io.prometheus.exporter.pushgateway.address", "http://localhost", "io.prometheus.exporter.pushgateway.job", "job", "io.prometheus.exporter.pushgateway.scheme", "http")); @@ -24,7 +23,7 @@ void load() { assertThat(properties.getScheme()).isEqualTo("http"); assertThatExceptionOfType(PrometheusPropertiesException.class) - .isThrownBy(() -> load(ImmutableMap.of("io.prometheus.exporter.pushgateway.scheme", "foo"))) + .isThrownBy(() -> load(Map.of("io.prometheus.exporter.pushgateway.scheme", "foo"))) .withMessage( "io.prometheus.exporter.pushgateway.scheme: Illegal value. Expecting 'http' or 'https'. Found: foo"); } diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index ccc68fc07..174022d9d 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -18,8 +18,7 @@ io.prometheus.metrics.exporter.httpserver - - 0.0 + 0.45 diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/BlockingRejectedExecutionHandler.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/BlockingRejectedExecutionHandler.java new file mode 100644 index 000000000..023d3f2f0 --- /dev/null +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/BlockingRejectedExecutionHandler.java @@ -0,0 +1,18 @@ +package io.prometheus.metrics.exporter.httpserver; + +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; + +class BlockingRejectedExecutionHandler implements RejectedExecutionHandler { + + @Override + public void rejectedExecution(Runnable runnable, ThreadPoolExecutor threadPoolExecutor) { + if (!threadPoolExecutor.isShutdown()) { + try { + threadPoolExecutor.getQueue().put(runnable); + } catch (InterruptedException ignored) { + // ignore + } + } + } +} diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java index 46c719bc1..5702a0b21 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java @@ -18,7 +18,6 @@ import java.security.PrivilegedExceptionAction; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; -import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -317,18 +316,4 @@ private void assertNull(Object o, String msg) { } } } - - private static class BlockingRejectedExecutionHandler implements RejectedExecutionHandler { - - @Override - public void rejectedExecution(Runnable runnable, ThreadPoolExecutor threadPoolExecutor) { - if (!threadPoolExecutor.isShutdown()) { - try { - threadPoolExecutor.getQueue().put(runnable); - } catch (InterruptedException ignored) { - // ignore - } - } - } - } } diff --git a/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java b/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java index ccc99bd01..06ab75b24 100644 --- a/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java +++ b/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java @@ -1,23 +1,33 @@ package io.prometheus.metrics.exporter.httpserver; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import com.sun.net.httpserver.Authenticator; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpPrincipal; +import com.sun.net.httpserver.HttpsConfigurator; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.prometheus.metrics.model.registry.PrometheusScrapeRequest; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; import java.io.IOException; +import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.charset.StandardCharsets; import java.security.AccessController; +import java.security.NoSuchAlgorithmException; import java.security.Principal; +import java.util.concurrent.Executors; +import javax.net.ssl.SSLContext; import javax.security.auth.Subject; import org.junit.jupiter.api.Test; public class HTTPServerTest { @Test + @SuppressWarnings({"removal"}) public void testSubjectDoAs() throws Exception { final String user = "joe"; @@ -56,11 +66,16 @@ public Result authenticate(HttpExchange exchange) { .authenticatedSubjectAttributeName("aa") .buildAndStart(); - Socket socket = new Socket(); - try { + run(server, "204", "/"); + } + + private static void run(HTTPServer server, String expected, String path) throws IOException { + try (Socket socket = new Socket()) { socket.connect(new InetSocketAddress("localhost", server.getPort())); - socket.getOutputStream().write("GET / HTTP/1.1 \r\n".getBytes(StandardCharsets.UTF_8)); + socket + .getOutputStream() + .write(("GET " + path + " HTTP/1.1 \r\n").getBytes(StandardCharsets.UTF_8)); socket.getOutputStream().write("HOST: localhost \r\n\r\n".getBytes(StandardCharsets.UTF_8)); socket.getOutputStream().flush(); @@ -70,10 +85,67 @@ public Result authenticate(HttpExchange exchange) { if (read > 0) { actualResponse = new String(resp, 0, read, StandardCharsets.UTF_8); } - assertThat(actualResponse).contains("204"); - - } finally { - socket.close(); + assertThat(actualResponse).contains(expected); } } + + @Test + void defaultHandler() throws IOException { + run(HTTPServer.builder().port(0).buildAndStart(), "200", "/"); + } + + @Test + void metrics() throws IOException { + run( + HTTPServer.builder() + .port(0) + .registry(new PrometheusRegistry()) + .executorService(Executors.newFixedThreadPool(1)) + .buildAndStart(), + "200", + "/metrics"); + } + + @Test + void registryThrows() throws IOException { + HTTPServer server = + HTTPServer.builder() + .port(0) + .registry( + new PrometheusRegistry() { + @Override + public MetricSnapshots scrape(PrometheusScrapeRequest scrapeRequest) { + throw new IllegalStateException("test"); + } + }) + .buildAndStart(); + run(server, "500", "/metrics"); + } + + @Test + void config() throws NoSuchAlgorithmException, IOException { + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy( + () -> + HTTPServer.builder() + .port(0) + .hostname("localhost") + .inetAddress(InetAddress.getByName("localhost")) + .buildAndStart()) + .withMessage("cannot configure 'inetAddress' and 'hostname' at the same time"); + + // ssl doesn't work without in tests + run( + HTTPServer.builder() + .port(0) + .httpsConfigurator(new HttpsConfigurator(SSLContext.getDefault())) + .buildAndStart(), + "", + "/"); + } + + @Test + void health() throws IOException { + run(HTTPServer.builder().port(0).buildAndStart(), "200", "/-/healthy"); + } } diff --git a/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/MetricsHandlerTest.java b/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/MetricsHandlerTest.java new file mode 100644 index 000000000..703223861 --- /dev/null +++ b/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/MetricsHandlerTest.java @@ -0,0 +1,36 @@ +package io.prometheus.metrics.exporter.httpserver; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.RETURNS_MOCKS; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import io.prometheus.metrics.config.PrometheusProperties; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import org.junit.jupiter.api.Test; + +class MetricsHandlerTest { + + @Test + void ctor() { + assertThat(new MetricsHandler()) + .extracting("prometheusScrapeHandler") + .extracting("registry") + .isEqualTo(PrometheusRegistry.defaultRegistry); + + PrometheusRegistry registry = new PrometheusRegistry(); + assertThat(new MetricsHandler(registry)) + .extracting("prometheusScrapeHandler") + .extracting("registry") + .isEqualTo(registry); + + PrometheusProperties properties = mock(PrometheusProperties.class, RETURNS_MOCKS); + + assertThat(new MetricsHandler(properties)) + .extracting("prometheusScrapeHandler") + .extracting("registry") + .isEqualTo(PrometheusRegistry.defaultRegistry); + + verify(properties).getExporterProperties(); + } +} diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java index 9b9b12420..5a9103565 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java @@ -65,16 +65,21 @@ public static Stream testCases() { "values from builder", new TestCase() .expectedProperties( - ImmutableMap.>builder() - .put("otel.exporter.otlp.protocol", Optional.of("http/protobuf")) - .put("otel.exporter.otlp.endpoint", Optional.of("http://builder:4318")) - .put("otel.exporter.otlp.headers", Optional.of("h=builder-v")) - .put("otel.metric.export.interval", Optional.of("2s")) - .put("otel.exporter.otlp.timeout", Optional.of("3s")) - .put("otel.service.name", Optional.of("builder-service")) - .build()) + Map.of( + "otel.exporter.otlp.protocol", + Optional.of("http/protobuf"), + "otel.exporter.otlp.endpoint", + Optional.of("http://builder:4318"), + "otel.exporter.otlp.headers", + Optional.of("h=builder-v"), + "otel.metric.export.interval", + Optional.of("2s"), + "otel.exporter.otlp.timeout", + Optional.of("3s"), + "otel.service.name", + Optional.of("builder-service"))) .expectedResourceAttributes( - ImmutableMap.of( + Map.of( "key", "builder-value", "service.name", diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricDataTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricDataTest.java index 2c84b1e37..fb5542538 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricDataTest.java +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricDataTest.java @@ -1,41 +1,41 @@ package io.prometheus.metrics.exporter.opentelemetry.otelmodel; +import static java.util.Map.entry; import static org.junit.jupiter.api.Assertions.*; -import com.google.common.collect.ImmutableMap; import io.prometheus.metrics.model.snapshots.Unit; +import java.util.Map; import org.junit.jupiter.api.Test; class PrometheusMetricDataTest { - ImmutableMap translations = - ImmutableMap.builder() - .put("days", "d") - .put("hours", "h") - .put("minutes", "min") - .put("seconds", "s") - .put("milliseconds", "ms") - .put("microseconds", "us") - .put("nanoseconds", "ns") - .put("bytes", "By") - .put("kibibytes", "KiBy") - .put("mebibytes", "MiBy") - .put("gibibytes", "GiBy") - .put("tibibytes", "TiBy") - .put("kilobytes", "KBy") - .put("megabytes", "MBy") - .put("gigabytes", "GBy") - .put("terabytes", "TBy") - .put("meters", "m") - .put("volts", "V") - .put("amperes", "A") - .put("joules", "J") - .put("watts", "W") - .put("grams", "g") - .put("celsius", "Cel") - .put("hertz", "Hz") - .put("percent", "%") - .build(); + Map translations = + Map.ofEntries( + entry("days", "d"), + entry("hours", "h"), + entry("minutes", "min"), + entry("seconds", "s"), + entry("milliseconds", "ms"), + entry("microseconds", "us"), + entry("nanoseconds", "ns"), + entry("bytes", "By"), + entry("kibibytes", "KiBy"), + entry("mebibytes", "MiBy"), + entry("gibibytes", "GiBy"), + entry("tibibytes", "TiBy"), + entry("kilobytes", "KBy"), + entry("megabytes", "MBy"), + entry("gigabytes", "GBy"), + entry("terabytes", "TBy"), + entry("meters", "m"), + entry("volts", "V"), + entry("amperes", "A"), + entry("joules", "J"), + entry("watts", "W"), + entry("grams", "g"), + entry("celsius", "Cel"), + entry("hertz", "Hz"), + entry("percent", "%")); @Test void convertUnit() { From 21bcfacc3c178e3b9abfe19788035b06ec7134b1 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Sat, 19 Oct 2024 10:02:42 +0200 Subject: [PATCH 195/870] release (#1166) Signed-off-by: Gregor Zeitlinger --- .github/workflows/release.yml | 9 ++------- RELEASING.md | 4 ++++ benchmarks/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exemplars-tail-sampling/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-multi-target/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter/it-exporter-httpserver-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-exporter/pom.xml | 2 +- integration-tests/it-pushgateway/pom.xml | 2 +- integration-tests/pom.xml | 2 +- otel-agent-resources/pom.xml | 2 +- pom.xml | 2 +- prometheus-metrics-bom/pom.xml | 2 +- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- prometheus-metrics-exporter-httpserver/pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exporter-pushgateway/pom.xml | 2 +- prometheus-metrics-exporter-servlet-jakarta/pom.xml | 2 +- prometheus-metrics-exporter-servlet-javax/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- prometheus-metrics-instrumentation-caffeine/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard5/pom.xml | 2 +- prometheus-metrics-instrumentation-guava/pom.xml | 2 +- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- prometheus-metrics-simpleclient-bridge/pom.xml | 2 +- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../prometheus-metrics-tracer-initializer/pom.xml | 2 +- .../prometheus-metrics-tracer-otel-agent/pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- 45 files changed, 49 insertions(+), 50 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f637bc517..be3f8ca80 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,14 +1,9 @@ name: Deploy to Maven Central -#on: -# push: -# tags: -# - v* on: push: - branches: [ "main" ] -# pull_request: -# branches: [ "main" ] + tags: + - "v*.*.*" jobs: deploy: diff --git a/RELEASING.md b/RELEASING.md index c7b195c8b..241717ee2 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -17,6 +17,10 @@ git tag -a v -m "Release v" git push origin v ``` +This will trigger the release workflow which will deploy the release to Maven Central. + +Go to https://central.sonatype.com/publishing/deployments to publish the release to Maven Central. + ## Create a Release 1. Go to https://github.com/prometheus/client_java/releases diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 64a929953..4d6a198da 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 benchmarks diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index bb152565a..b12c21f0f 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 0.0.1-releasetest1 + 1.3.2 example-greeting-service diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 0a62eee13..1c3957525 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 0.0.1-releasetest1 + 1.3.2 example-hello-world-app diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index 85cecfeb2..0e03d4c33 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 0.0.1-releasetest1 + 1.3.2 example-exemplars-tail-sampling diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index 97a53e64c..0a200658a 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 0.0.1-releasetest1 + 1.3.2 example-exporter-httpserver diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index 23ee8b63c..b433db6e2 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 0.0.1-releasetest1 + 1.3.2 example-exporter-multi-target diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index a1cd6c28f..9c8b0f12e 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 0.0.1-releasetest1 + 1.3.2 example-exporter-opentelemetry diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 520141b58..8803acde8 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 0.0.1-releasetest1 + 1.3.2 example-exporter-servlet-tomcat diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index ed97c5e46..8079b9076 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 0.0.1-releasetest1 + 1.3.2 example-native-histogram diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index ad68ab386..4dc3739b7 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 0.0.1-releasetest1 + 1.3.2 example-prometheus-properties diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index e80429b30..42f53b2bd 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 0.0.1-releasetest1 + 1.3.2 example-simpleclient-bridge diff --git a/examples/pom.xml b/examples/pom.xml index 079ceb982..17dbe3611 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 examples diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index ecf5f9cb2..e3d2b9151 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 0.0.1-releasetest1 + 1.3.2 it-common diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index 16aa565e4..14afd612e 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 0.0.1-releasetest1 + 1.3.2 it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index 105f43f90..3cfaac277 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 0.0.1-releasetest1 + 1.3.2 it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 15c8e89e3..9212326f0 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 0.0.1-releasetest1 + 1.3.2 it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 8b7465d52..46a26be73 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 0.0.1-releasetest1 + 1.3.2 it-exporter-test diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index cd143e911..34a554a73 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 0.0.1-releasetest1 + 1.3.2 it-exporter diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index 95ef595bd..4b4351c1a 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 0.0.1-releasetest1 + 1.3.2 it-pushgateway diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index ce13424df..c07d02a00 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 integration-tests diff --git a/otel-agent-resources/pom.xml b/otel-agent-resources/pom.xml index b18153b7c..ba9816174 100644 --- a/otel-agent-resources/pom.xml +++ b/otel-agent-resources/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 otel-agent-resources diff --git a/pom.xml b/pom.xml index 09c999861..6a0dc9b6d 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 Prometheus Metrics Library http://github.com/prometheus/client_java diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index b175c9cb1..97b8ac913 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-bom diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index 2a77f617e..ede7a64a7 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 4da7c366e..1485a46be 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index c4269458c..383913530 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index 174022d9d..9e210993f 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index a603302c7..be437370b 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index 889089997..734bd8446 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-exporter-pushgateway diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 7cc114f8f..a46ef36da 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml index 2877f0518..963655da3 100644 --- a/prometheus-metrics-exporter-servlet-javax/pom.xml +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-exporter-servlet-javax diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 3abc67b96..014b69aa8 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-instrumentation-caffeine/pom.xml b/prometheus-metrics-instrumentation-caffeine/pom.xml index d8fe77578..6e91f54f5 100644 --- a/prometheus-metrics-instrumentation-caffeine/pom.xml +++ b/prometheus-metrics-instrumentation-caffeine/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-instrumentation-caffeine diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index 9779c036f..6c9f64dd5 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-instrumentation-dropwizard5 diff --git a/prometheus-metrics-instrumentation-guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml index 304bff254..f227c571f 100644 --- a/prometheus-metrics-instrumentation-guava/pom.xml +++ b/prometheus-metrics-instrumentation-guava/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-instrumentation-guava diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index 225572b49..b1f19fe0e 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index 7d8c0c960..a85464083 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-model diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index c5fd6089b..4bc85f723 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-simpleclient-bridge diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 953b09dc5..e3f34fb6a 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index f16f47f4b..dcfef35f2 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index 51066bd41..e63cc5eac 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index 85c0a8d8e..da8ae734d 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index 83788e746..86fc0312f 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 0.0.1-releasetest1 + 1.3.2 prometheus-metrics-tracer-otel From 333a77d8a054d65b062f3a45793d8568babfc465 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:18:42 -0400 Subject: [PATCH 196/870] Bump junit-jupiter.version from 5.11.2 to 5.11.3 (#1171) Bumps `junit-jupiter.version` from 5.11.2 to 5.11.3. Updates `org.junit.jupiter:junit-jupiter-engine` from 5.11.2 to 5.11.3 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.2...r5.11.3) Updates `org.junit.jupiter:junit-jupiter-params` from 5.11.2 to 5.11.3 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.2...r5.11.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.junit.jupiter:junit-jupiter-params dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6a0dc9b6d..a62390e97 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ UTF-8 --module-name-need-to-be-overriden-- - 5.11.2 + 5.11.3 2.8.0-alpha 8 0.70 From 5d8967c085d02c6c08a36d412eee5f813be6d230 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:19:03 -0400 Subject: [PATCH 197/870] Bump org.apache.maven.plugins:maven-site-plugin from 3.20.0 to 3.21.0 (#1170) Bumps [org.apache.maven.plugins:maven-site-plugin](https://github.com/apache/maven-site-plugin) from 3.20.0 to 3.21.0. - [Release notes](https://github.com/apache/maven-site-plugin/releases) - [Commits](https://github.com/apache/maven-site-plugin/compare/maven-site-plugin-3.20.0...maven-site-plugin-3.21.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-site-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a62390e97..a71b37d64 100644 --- a/pom.xml +++ b/pom.xml @@ -168,7 +168,7 @@ maven-site-plugin - 3.20.0 + 3.21.0 From 451acb4d4b17389d9c68199b34a338d219384c77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:19:15 -0400 Subject: [PATCH 198/870] Bump org.apache.maven.plugins:maven-project-info-reports-plugin (#1169) Bumps [org.apache.maven.plugins:maven-project-info-reports-plugin](https://github.com/apache/maven-project-info-reports-plugin) from 3.7.0 to 3.8.0. - [Commits](https://github.com/apache/maven-project-info-reports-plugin/compare/maven-project-info-reports-plugin-3.7.0...maven-project-info-reports-plugin-3.8.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-project-info-reports-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a71b37d64..057064285 100644 --- a/pom.xml +++ b/pom.xml @@ -358,7 +358,7 @@ maven-project-info-reports-plugin - 3.7.0 + 3.8.0 maven-javadoc-plugin From e279fc11817e4b5bc1720b11c7b9d1a36e93d43f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:24:20 -0400 Subject: [PATCH 199/870] Bump com.google.errorprone:error_prone_core from 2.33.0 to 2.35.1 (#1176) Bumps [com.google.errorprone:error_prone_core](https://github.com/google/error-prone) from 2.33.0 to 2.35.1. - [Release notes](https://github.com/google/error-prone/releases) - [Commits](https://github.com/google/error-prone/compare/v2.33.0...v2.35.1) --- updated-dependencies: - dependency-name: com.google.errorprone:error_prone_core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Doug Hoard --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 057064285..f7476cbc3 100644 --- a/pom.xml +++ b/pom.xml @@ -332,7 +332,7 @@ com.google.errorprone error_prone_core - 2.33.0 + 2.35.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 9b58c9707..803fcb1e3 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -57,7 +57,7 @@ - io.prometheus.metrics.examples.otel_exemplars.greeting.Main + io.prometheus.metrics.examples.otel.exemplars.greeting.Main diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel/exemplars/greeting/GreetingServlet.java similarity index 95% rename from examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java rename to examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel/exemplars/greeting/GreetingServlet.java index a2b16f5f5..8b80268df 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/GreetingServlet.java +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel/exemplars/greeting/GreetingServlet.java @@ -1,4 +1,4 @@ -package io.prometheus.metrics.examples.otel_exemplars.greeting; +package io.prometheus.metrics.examples.otel.exemplars.greeting; import static io.prometheus.metrics.model.snapshots.Unit.nanosToSeconds; diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/Main.java b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel/exemplars/greeting/Main.java similarity index 93% rename from examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/Main.java rename to examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel/exemplars/greeting/Main.java index c0cf09830..99ba1084c 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel_exemplars/greeting/Main.java +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/src/main/java/io/prometheus/metrics/examples/otel/exemplars/greeting/Main.java @@ -1,4 +1,4 @@ -package io.prometheus.metrics.examples.otel_exemplars.greeting; +package io.prometheus.metrics.examples.otel.exemplars.greeting; import io.prometheus.metrics.exporter.servlet.jakarta.PrometheusMetricsServlet; import io.prometheus.metrics.instrumentation.jvm.JvmMetrics; diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index deb15f4fe..e89809ff8 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -57,7 +57,7 @@ - io.prometheus.metrics.examples.otel_exemplars.app.Main + io.prometheus.metrics.examples.otel.exemplars.app.Main diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel/exemplars/app/HelloWorldServlet.java similarity index 97% rename from examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java rename to examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel/exemplars/app/HelloWorldServlet.java index 988f63819..b770c29fb 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/HelloWorldServlet.java +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel/exemplars/app/HelloWorldServlet.java @@ -1,4 +1,4 @@ -package io.prometheus.metrics.examples.otel_exemplars.app; +package io.prometheus.metrics.examples.otel.exemplars.app; import static io.prometheus.metrics.model.snapshots.Unit.nanosToSeconds; import static java.net.http.HttpResponse.BodyHandlers.ofString; diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/Main.java b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel/exemplars/app/Main.java similarity index 94% rename from examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/Main.java rename to examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel/exemplars/app/Main.java index dc58256cb..25ea8a1c6 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel_exemplars/app/Main.java +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/src/main/java/io/prometheus/metrics/examples/otel/exemplars/app/Main.java @@ -1,4 +1,4 @@ -package io.prometheus.metrics.examples.otel_exemplars.app; +package io.prometheus.metrics.examples.otel.exemplars.app; import io.prometheus.metrics.exporter.servlet.jakarta.PrometheusMetricsServlet; import io.prometheus.metrics.instrumentation.jvm.JvmMetrics; diff --git a/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java b/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java index 7a2715647..b2aa8950f 100644 --- a/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java +++ b/examples/example-exporter-opentelemetry/src/main/java/io/prometheus/metrics/examples/opentelemetry/ManualCompleteMetricsTest.java @@ -59,7 +59,8 @@ public static void main(String[] args) throws Exception { histogram.labelValues("200").observe(random.nextGaussian()); } - // Explicitly use a classic-only histogram to have an example of a classic histogram in OpenTelemetry + // Explicitly use a classic-only histogram to have an example of a classic + // histogram in OpenTelemetry Histogram classicHistogram = Histogram.newBuilder() .withName("request_size_bytes") .withHelp("Request size in Bytes") diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java b/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java index 4c665dd81..8490cd64e 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/src/main/java/io/prometheus/metrics/it/exporter/httpserver/HTTPServerSample.java @@ -26,7 +26,10 @@ public static void main(String[] args) throws IOException, InterruptedException int port = parsePortOrExit(args[0]); Mode mode = parseModeOrExit(args[1]); + run(mode, port); + } + private static void run(Mode mode, int port) throws IOException, InterruptedException { Counter counter = Counter.builder() .name("uptime_seconds_total") diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java index 8c899b4ad..c694eda02 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/jetty/ExporterServletJettySample.java @@ -29,7 +29,10 @@ public static void main(String[] args) throws Exception { int port = parsePortOrExit(args[0]); Mode mode = parseModeOrExit(args[1]); + run(mode, port); + } + private static void run(Mode mode, int port) throws Exception { Counter counter = Counter.builder() .name("uptime_seconds_total") diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java index ead2ee88f..fa470b306 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/src/main/java/io/prometheus/metrics/it/exporter/servlet/tomcat/ExporterServletTomcatSample.java @@ -32,7 +32,10 @@ public static void main(String[] args) throws LifecycleException, IOException { int port = parsePortOrExit(args[0]); Mode mode = parseModeOrExit(args[1]); + run(mode, port); + } + private static void run(Mode mode, int port) throws IOException, LifecycleException { Counter counter = Counter.builder() .name("uptime_seconds_total") diff --git a/pom.xml b/pom.xml index 37f1fdbfe..dfc5a427e 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ 2.9.0-alpha 8 0.70 + false false -Werror @@ -224,6 +225,28 @@ + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.5.0 + + true + google_checks.xml + checkstyle.xml + warning + true + ${checkstyle.skip} + checkstyle-suppressions.xml + **/generated/**,**/jmh_generated/* + + + + + check + + + + org.jacoco jacoco-maven-plugin diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/StateSetDataPoint.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/StateSetDataPoint.java index 61b458ba8..bf13b5214 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/StateSetDataPoint.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/datapoints/StateSetDataPoint.java @@ -14,12 +14,6 @@ public interface StateSetDataPoint extends DataPoint { */ void setTrue(String state); - /** - * {@code state} must be one of the states from when the {@code StateSet} was created with {@link - * io.prometheus.metrics.core.metrics.StateSet.Builder#states(String...)}. - */ - void setFalse(String state); - /** * {@code state} must be one of the states from when the {@code StateSet} was created with {@link * io.prometheus.metrics.core.metrics.StateSet.Builder#states(Class)}. @@ -28,6 +22,12 @@ default void setTrue(Enum state) { setTrue(state.toString()); } + /** + * {@code state} must be one of the states from when the {@code StateSet} was created with {@link + * io.prometheus.metrics.core.metrics.StateSet.Builder#states(String...)}. + */ + void setFalse(String state); + /** * {@code state} must be one of the states from when the {@code StateSet} was created with {@link * io.prometheus.metrics.core.metrics.StateSet.Builder#states(Class)}. diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java index 0e1c49f8c..15b0355cd 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/exemplars/ExemplarSampler.java @@ -130,6 +130,16 @@ private long doObserveSingleExemplar(double value) { return 0; } + private long doObserveSingleExemplar(double amount, Labels labels) { + long now = System.currentTimeMillis(); + Exemplar current = customExemplars[0]; + if (current == null + || now - current.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { + return updateCustomExemplar(0, amount, labels, now); + } + return 0; + } + private long doObserveWithUpperBounds(double value) { long now = System.currentTimeMillis(); double[] upperBounds = config.getHistogramClassicUpperBounds(); @@ -212,16 +222,6 @@ private long doObserveWithExemplar(double amount, Labels labels) { } } - private long doObserveSingleExemplar(double amount, Labels labels) { - long now = System.currentTimeMillis(); - Exemplar current = customExemplars[0]; - if (current == null - || now - current.getTimestampMillis() > config.getMinRetentionPeriodMillis()) { - return updateCustomExemplar(0, amount, labels, now); - } - return 0; - } - private long doObserveWithExemplarWithUpperBounds(double value, Labels labels) { long now = System.currentTimeMillis(); double[] upperBounds = config.getHistogramClassicUpperBounds(); diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java index 9fc1e9634..74ce18e72 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CKMSQuantiles.java @@ -26,6 +26,8 @@ import java.util.LinkedList; import java.util.ListIterator; +// CHECKSTYLE:OFF: checkstyle + /** * Algorithm solving the "Targeted Quantile Problem" as described in "Effective Computation of * Biased Quantiles over Data Streams" by Cormode, Korn, Muthukrishnan, and Srivastava. @@ -273,3 +275,5 @@ public String toString() { } } } + +// CHECKSTYLE:ON: checkstyle diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CallbackMetric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CallbackMetric.java index cf25e6527..2afaffae7 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CallbackMetric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CallbackMetric.java @@ -28,7 +28,8 @@ protected Labels makeLabels(String... labelValues) { if (labelValues == null) { throw new IllegalArgumentException( this.getClass().getSimpleName() - + " was created with label names, but the callback was called without label values."); + + " was created with label names, " + + "but the callback was called without label values."); } if (labelValues.length != labelNames.length) { throw new IllegalArgumentException( diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java index 2e84b6ade..8ed9b0001 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Counter.java @@ -82,6 +82,15 @@ public CounterSnapshot collect() { return (CounterSnapshot) super.collect(); } + @Override + protected CounterSnapshot collect(List labels, List metricData) { + List data = new ArrayList<>(labels.size()); + for (int i = 0; i < labels.size(); i++) { + data.add(metricData.get(i).collect(labels.get(i))); + } + return new CounterSnapshot(getMetadata(), data); + } + @Override protected boolean isExemplarsEnabled() { return exemplarsEnabled; @@ -96,15 +105,6 @@ protected DataPoint newDataPoint() { } } - @Override - protected CounterSnapshot collect(List labels, List metricData) { - List data = new ArrayList<>(labels.size()); - for (int i = 0; i < labels.size(); i++) { - data.add(metricData.get(i).collect(labels.get(i))); - } - return new CounterSnapshot(getMetadata(), data); - } - static String stripTotalSuffix(String name) { if (name != null && (name.endsWith("_total") || name.endsWith(".total"))) { name = name.substring(0, name.length() - 6); diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CounterWithCallback.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CounterWithCallback.java index 5dc533d58..f8c1b162c 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CounterWithCallback.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/CounterWithCallback.java @@ -15,7 +15,7 @@ * * CounterWithCallback.builder() * .name("classes_loaded_total") - * .help("The total number of classes that have been loaded since the JVM has started execution") + * .help("The total number of classes since the JVM has started execution") * .callback(callback -> callback.call(classLoadingMXBean.getLoadedClassCount())) * .register(); * }

    diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java index bf70bec7c..8f76819f1 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java @@ -63,7 +63,7 @@ public class Histogram extends StatefulMetric max ? min : max; + max == Builder.DEFAULT_NATIVE_MAX_ZERO_THRESHOLD && min > max ? min : max; nativeMinZeroThreshold = Math.min(min, nativeMaxZeroThreshold); nativeMaxBuckets = getConfigProperty(properties, MetricsProperties::getHistogramNativeMaxNumberOfBuckets); @@ -447,9 +447,9 @@ private void maybeScaleDown(AtomicBoolean wasReset) { // Now we are in the synchronized block while new observations go into the buffer. // Check again if we need to limit the bucket size, because another thread might // have limited it in the meantime. - int nBuckets = + int numBuckets = nativeBucketsForPositiveValues.size() + nativeBucketsForNegativeValues.size(); - if (nBuckets <= nativeMaxBuckets || nativeSchema == -4) { + if (numBuckets <= nativeMaxBuckets || nativeSchema == -4) { return null; } if (maybeReset()) { @@ -668,11 +668,11 @@ public static class Builder extends StatefulMetric.Builder labels, List metricDataList) { List data = new ArrayList<>(labels.size()); @@ -97,6 +87,16 @@ protected StateSetSnapshot collect(List labels, List metricDa return new StateSetSnapshot(getMetadata(), data); } + @Override + public void setTrue(String state) { + getNoLabels().setTrue(state); + } + + @Override + public void setFalse(String state) { + getNoLabels().setFalse(state); + } + @Override protected DataPoint newDataPoint() { return new DataPoint(); diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java index 5a838c649..d7fb3afd0 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java @@ -105,7 +105,8 @@ public D labelValues(String... labelValues) { getClass().getSimpleName() + " " + getMetadata().getName() - + " was created with label names, so you must call labelValues(...) when using it."); + + " was created with label names, so you must call labelValues(...)" + + " when using it."); } else { throw new IllegalArgumentException( "Expected " + labelNames.length + " label values, but got " + labelValues.length + "."); diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java index dee7098fb..f871addfd 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java @@ -46,7 +46,6 @@ public PrometheusScrapeHandler(PrometheusProperties config, PrometheusRegistry r public void handleRequest(PrometheusHttpExchange exchange) throws IOException { try { PrometheusHttpRequest request = exchange.getRequest(); - PrometheusHttpResponse response = exchange.getResponse(); MetricSnapshots snapshots = scrape(request); if (writeDebugResponse(snapshots, exchange)) { return; @@ -57,6 +56,7 @@ public void handleRequest(PrometheusHttpExchange exchange) throws IOException { ExpositionFormatWriter writer = expositionFormats.findWriter(acceptHeader); writer.write(responseBuffer, snapshots); lastResponseSize.set(responseBuffer.size()); + PrometheusHttpResponse response = exchange.getResponse(); response.setHeader("Content-Type", writer.getContentType()); if (shouldUseCompression(request)) { @@ -106,16 +106,6 @@ private Predicate makeNameFilter(ExporterFilterProperties props) { } } - private MetricSnapshots scrape(PrometheusHttpRequest request) { - - Predicate filter = makeNameFilter(request.getParameterValues("name[]")); - if (filter != null) { - return registry.scrape(filter, request); - } else { - return registry.scrape(request); - } - } - private Predicate makeNameFilter(String[] includedNames) { Predicate result = null; if (includedNames != null && includedNames.length > 0) { @@ -129,6 +119,16 @@ private Predicate makeNameFilter(String[] includedNames) { return result; } + private MetricSnapshots scrape(PrometheusHttpRequest request) { + + Predicate filter = makeNameFilter(request.getParameterValues("name[]")); + if (filter != null) { + return registry.scrape(filter, request); + } else { + return registry.scrape(request); + } + } + private boolean writeDebugResponse(MetricSnapshots snapshots, PrometheusHttpExchange exchange) throws IOException { String debugParam = exchange.getRequest().getParameter("debug"); @@ -157,7 +157,8 @@ private boolean writeDebugResponse(MetricSnapshots snapshots, PrometheusHttpExch body.write( ("debug=" + debugParam - + ": Unsupported query parameter. Valid values are 'openmetrics', 'text', and 'prometheus-protobuf'.") + + ": Unsupported query parameter. Valid values are 'openmetrics', " + + "'text', and 'prometheus-protobuf'.") .getBytes(StandardCharsets.UTF_8)); break; } diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java index eeb2f70f6..506da12bc 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/DefaultHandler.java @@ -21,15 +21,19 @@ public DefaultHandler() { + "

    Metrics Path

    \n" + "The metrics path is /metrics.\n" + "

    Name Filter

    \n" - + "If you want to scrape only specific metrics, use the name[] parameter like this:\n" + + "If you want to scrape only specific metrics, " + + "use the name[] parameter like this:\n" + "\n" + "You can also use multiple name[] parameters to query multiple metrics:\n" + "\n" - + "The name[] parameter can be used by the Prometheus server for scraping. Add the following snippet to your scrape job configuration in prometheus.yaml:\n" + + "The name[] parameter can be used by the Prometheus server for scraping. " + + "Add the following snippet to your scrape job configuration in " + + "prometheus.yaml:\n" + "
    \n"
                 + "params:\n"
                 + "    name[]:\n"
    @@ -38,16 +42,28 @@ public DefaultHandler() {
                 + "
    \n" + "

    Debug Parameter

    \n" + "The Prometheus Java metrics library supports multiple exposition formats.\n" - + "The Prometheus server sends the Accept header to indicate which format it accepts.\n" - + "By default, the Prometheus server accepts OpenMetrics text format, unless the Prometheus server is started with feature flag --enable-feature=native-histograms,\n" + + "The Prometheus server sends the Accept header " + + "to indicate which format it accepts.\n" + + "By default, the Prometheus server accepts OpenMetrics text format, " + + "unless the Prometheus server is started with feature flag " + + "--enable-feature=native-histograms,\n" + "in which case the default is Prometheus protobuf.\n" - + "The Prometheus Java metrics library supports a debug query parameter for viewing the different formats in a Web browser:\n" + + "The Prometheus Java metrics library supports a debug query parameter " + + "for viewing the different formats in a Web browser:\n" + "\n" - + "Note that the debug parameter is only for viewing different formats in a Web browser, it should not be used by the Prometheus server for scraping. The Prometheus server uses the Accept header for indicating which format it accepts.\n" + + "Note that the debug parameter is only for viewing different formats in a " + + "Web browser, it should not be used by the Prometheus server for scraping. " + + "The Prometheus server uses the Accept " + + "header for indicating which format it accepts.\n" + "\n" + "\n"; this.responseBytes = responseString.getBytes(StandardCharsets.UTF_8); diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java index 5702a0b21..90aaf9d42 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java @@ -117,7 +117,9 @@ public void handle(HttpExchange exchange) throws IOException { } catch (PrivilegedActionException e) { if (e.getException() != null) { throw new IOException(e.getException()); - } else throw new IOException(e); + } else { + throw new IOException(e); + } } } else { drainInputAndClose(exchange); @@ -130,8 +132,9 @@ public void handle(HttpExchange exchange) throws IOException { private void drainInputAndClose(HttpExchange httpExchange) throws IOException { InputStream inputStream = httpExchange.getRequestBody(); byte[] b = new byte[4096]; - while (inputStream.read(b) != -1) - ; + while (inputStream.read(b) != -1) { + // nop + } inputStream.close(); } diff --git a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java index e7d33d310..3e0322309 100644 --- a/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java +++ b/prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HttpExchangeAdapter.java @@ -120,7 +120,8 @@ private void sendErrorResponseWithStackTrace(Exception requestHandlerException) Logger.getLogger(this.getClass().getName()) .log( Level.SEVERE, - "The Prometheus metrics HTTPServer caught an Exception during scrape and failed to send an error response to the client.", + "The Prometheus metrics HTTPServer caught an Exception during scrape and " + + "failed to send an error response to the client.", errorWriterException); Logger.getLogger(this.getClass().getName()) .log( @@ -134,7 +135,8 @@ private void sendErrorResponseWithStackTrace(Exception requestHandlerException) Logger.getLogger(this.getClass().getName()) .log( Level.SEVERE, - "The Prometheus metrics HTTPServer caught an Exception while trying to send the metrics response.", + "The Prometheus metrics HTTPServer caught an Exception while trying to send " + + "the metrics response.", requestHandlerException); } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java index 39a293640..ff9be1cf8 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java @@ -44,7 +44,7 @@ public Collection collectAllMetrics() { // registry.scrape(filter) if a filter is configured, like in the Servlet exporter. MetricSnapshots snapshots = registry.scrape(); Resource resourceWithTargetInfo = resource.merge(resourceFromTargetInfo(snapshots)); - InstrumentationScopeInfo scopeFromInfo = instrumentationScopeFromOTelScopeInfo(snapshots); + InstrumentationScopeInfo scopeFromInfo = instrumentationScopeFromOtelScopeInfo(snapshots); List result = new ArrayList<>(snapshots.size()); MetricDataFactory factory = new MetricDataFactory( @@ -93,7 +93,7 @@ private Resource resourceFromTargetInfo(MetricSnapshots snapshots) { return result.build(); } - private InstrumentationScopeInfo instrumentationScopeFromOTelScopeInfo( + private InstrumentationScopeInfo instrumentationScopeFromOtelScopeInfo( MetricSnapshots snapshots) { for (MetricSnapshot snapshot : snapshots) { if (snapshot.getMetadata().getPrometheusName().equals("otel_scope") diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java index 64b82bd8b..9d2cff6a8 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusData.java @@ -10,7 +10,11 @@ import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.opentelemetry.sdk.metrics.data.PointData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableDoubleExemplarData; -import io.prometheus.metrics.model.snapshots.*; +import io.prometheus.metrics.model.snapshots.DataPointSnapshot; +import io.prometheus.metrics.model.snapshots.Exemplar; +import io.prometheus.metrics.model.snapshots.Exemplars; +import io.prometheus.metrics.model.snapshots.Label; +import io.prometheus.metrics.model.snapshots.Labels; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java index 2b986adb4..2bafc6aa2 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java @@ -10,10 +10,24 @@ import io.prometheus.metrics.model.registry.Collector; import io.prometheus.metrics.model.registry.MultiCollector; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import java.io.*; -import java.net.*; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.InetAddress; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; +import java.net.URLEncoder; +import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.Base64; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; /** * Export metrics via the Prometheus diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index 9e5dd9d09..866da038d 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -29,6 +29,8 @@ curl -sL https://raw.githubusercontent.com/prometheus/client_model/master/io/pro sed -i "s/java_package = \"io.prometheus.client\"/java_package = \"$PACKAGE\"/" $PROTO_DIR/metrics.proto protoc --java_out $TARGET_DIR $PROTO_DIR/metrics.proto +sed -i '1 i\//CHECKSTYLE:OFF: checkstyle' $(find src/main/generated/io -type f) +sed -i -e $'$a\\\n//CHECKSTYLE:ON: checkstyle' $(find src/main/generated/io -type f) GENERATED_WITH=$(grep -oP '\/\/ Protobuf Java Version: \K.*' "$TARGET_DIR/${PACKAGE//\.//}"/Metrics.java) diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_28_3/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_28_3/Metrics.java index 0f74014ed..ffa9b1d87 100644 --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_28_3/Metrics.java +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_28_3/Metrics.java @@ -1,3 +1,4 @@ +//CHECKSTYLE:OFF: checkstyle // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: src/main/protobuf/metrics.proto @@ -15114,3 +15115,4 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 // @@protoc_insertion_point(outer_class_scope) } +//CHECKSTYLE:ON: checkstyle diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java index fc5ac874e..fb3b9412d 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java @@ -33,7 +33,8 @@ public class PrometheusProtobufWriter implements ExpositionFormatWriter { public static final String CONTENT_TYPE = - "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited"; + "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; " + + "encoding=delimited"; @Override public boolean accepts(String acceptHeader) { @@ -53,7 +54,7 @@ public String getContentType() { public String toDebugString(MetricSnapshots metricSnapshots) { StringBuilder stringBuilder = new StringBuilder(); for (MetricSnapshot snapshot : metricSnapshots) { - if (snapshot.getDataPoints().size() > 0) { + if (!snapshot.getDataPoints().isEmpty()) { stringBuilder.append(TextFormat.printer().printToString(convert(snapshot))); } } @@ -63,7 +64,7 @@ public String toDebugString(MetricSnapshots metricSnapshots) { @Override public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { for (MetricSnapshot snapshot : metricSnapshots) { - if (snapshot.getDataPoints().size() > 0) { + if (!snapshot.getDataPoints().isEmpty()) { convert(snapshot).writeDelimitedTo(out); } } @@ -122,32 +123,13 @@ public Metrics.MetricFamily convert(MetricSnapshot snapshot) { return builder.build(); } - private void setMetadataUnlessEmpty( - Metrics.MetricFamily.Builder builder, - MetricMetadata metadata, - String nameSuffix, - Metrics.MetricType type) { - if (builder.getMetricCount() == 0) { - return; - } - if (nameSuffix == null) { - builder.setName(metadata.getPrometheusName()); - } else { - builder.setName(metadata.getPrometheusName() + nameSuffix); - } - if (metadata.getHelp() != null) { - builder.setHelp(metadata.getHelp()); - } - builder.setType(type); - } - private Metrics.Metric.Builder convert(CounterDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); Metrics.Counter.Builder counterBuilder = Metrics.Counter.newBuilder(); counterBuilder.setValue(data.getValue()); if (data.getExemplar() != null) { counterBuilder.setExemplar(convert(data.getExemplar())); } + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); addLabels(metricBuilder, data.getLabels()); metricBuilder.setCounter(counterBuilder.build()); setScrapeTimestamp(metricBuilder, data); @@ -155,9 +137,9 @@ private Metrics.Metric.Builder convert(CounterDataPointSnapshot data) { } private Metrics.Metric.Builder convert(GaugeSnapshot.GaugeDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); gaugeBuilder.setValue(data.getValue()); + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); addLabels(metricBuilder, data.getLabels()); metricBuilder.setGauge(gaugeBuilder); setScrapeTimestamp(metricBuilder, data); @@ -219,6 +201,94 @@ private Metrics.Metric.Builder convert(HistogramSnapshot.HistogramDataPointSnaps return metricBuilder; } + private Metrics.Metric.Builder convert(SummarySnapshot.SummaryDataPointSnapshot data) { + Metrics.Summary.Builder summaryBuilder = Metrics.Summary.newBuilder(); + if (data.hasCount()) { + summaryBuilder.setSampleCount(data.getCount()); + } + if (data.hasSum()) { + summaryBuilder.setSampleSum(data.getSum()); + } + Quantiles quantiles = data.getQuantiles(); + for (int i = 0; i < quantiles.size(); i++) { + summaryBuilder.addQuantile( + Metrics.Quantile.newBuilder() + .setQuantile(quantiles.get(i).getQuantile()) + .setValue(quantiles.get(i).getValue()) + .build()); + } + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + addLabels(metricBuilder, data.getLabels()); + metricBuilder.setSummary(summaryBuilder.build()); + setScrapeTimestamp(metricBuilder, data); + return metricBuilder; + } + + private Metrics.Metric.Builder convert(InfoSnapshot.InfoDataPointSnapshot data) { + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); + gaugeBuilder.setValue(1); + addLabels(metricBuilder, data.getLabels()); + metricBuilder.setGauge(gaugeBuilder); + setScrapeTimestamp(metricBuilder, data); + return metricBuilder; + } + + private Metrics.Metric.Builder convert( + StateSetSnapshot.StateSetDataPointSnapshot data, String name, int i) { + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); + addLabels(metricBuilder, data.getLabels()); + metricBuilder.addLabel( + Metrics.LabelPair.newBuilder().setName(name).setValue(data.getName(i)).build()); + if (data.isTrue(i)) { + gaugeBuilder.setValue(1); + } else { + gaugeBuilder.setValue(0); + } + metricBuilder.setGauge(gaugeBuilder); + setScrapeTimestamp(metricBuilder, data); + return metricBuilder; + } + + private Metrics.Metric.Builder convert(UnknownSnapshot.UnknownDataPointSnapshot data) { + Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); + Metrics.Untyped.Builder untypedBuilder = Metrics.Untyped.newBuilder(); + untypedBuilder.setValue(data.getValue()); + addLabels(metricBuilder, data.getLabels()); + metricBuilder.setUntyped(untypedBuilder); + return metricBuilder; + } + + private Metrics.Exemplar.Builder convert(Exemplar exemplar) { + Metrics.Exemplar.Builder builder = Metrics.Exemplar.newBuilder(); + builder.setValue(exemplar.getValue()); + addLabels(builder, exemplar.getLabels()); + if (exemplar.hasTimestamp()) { + builder.setTimestamp(timestampFromMillis(exemplar.getTimestampMillis())); + } + return builder; + } + + private void setMetadataUnlessEmpty( + Metrics.MetricFamily.Builder builder, + MetricMetadata metadata, + String nameSuffix, + Metrics.MetricType type) { + if (builder.getMetricCount() == 0) { + return; + } + if (nameSuffix == null) { + builder.setName(metadata.getPrometheusName()); + } else { + builder.setName(metadata.getPrometheusName() + nameSuffix); + } + if (metadata.getHelp() != null) { + builder.setHelp(metadata.getHelp()); + } + builder.setType(type); + } + private long getNativeCount(HistogramSnapshot.HistogramDataPointSnapshot data) { if (data.hasCount()) { return data.getCount(); @@ -284,65 +354,6 @@ private void addBuckets( } } - private Metrics.Metric.Builder convert(SummarySnapshot.SummaryDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Summary.Builder summaryBuilder = Metrics.Summary.newBuilder(); - if (data.hasCount()) { - summaryBuilder.setSampleCount(data.getCount()); - } - if (data.hasSum()) { - summaryBuilder.setSampleSum(data.getSum()); - } - Quantiles quantiles = data.getQuantiles(); - for (int i = 0; i < quantiles.size(); i++) { - summaryBuilder.addQuantile( - Metrics.Quantile.newBuilder() - .setQuantile(quantiles.get(i).getQuantile()) - .setValue(quantiles.get(i).getValue()) - .build()); - } - addLabels(metricBuilder, data.getLabels()); - metricBuilder.setSummary(summaryBuilder.build()); - setScrapeTimestamp(metricBuilder, data); - return metricBuilder; - } - - private Metrics.Metric.Builder convert(InfoSnapshot.InfoDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); - gaugeBuilder.setValue(1); - addLabels(metricBuilder, data.getLabels()); - metricBuilder.setGauge(gaugeBuilder); - setScrapeTimestamp(metricBuilder, data); - return metricBuilder; - } - - private Metrics.Metric.Builder convert( - StateSetSnapshot.StateSetDataPointSnapshot data, String name, int i) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder(); - addLabels(metricBuilder, data.getLabels()); - metricBuilder.addLabel( - Metrics.LabelPair.newBuilder().setName(name).setValue(data.getName(i)).build()); - if (data.isTrue(i)) { - gaugeBuilder.setValue(1); - } else { - gaugeBuilder.setValue(0); - } - metricBuilder.setGauge(gaugeBuilder); - setScrapeTimestamp(metricBuilder, data); - return metricBuilder; - } - - private Metrics.Metric.Builder convert(UnknownSnapshot.UnknownDataPointSnapshot data) { - Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder(); - Metrics.Untyped.Builder untypedBuilder = Metrics.Untyped.newBuilder(); - untypedBuilder.setValue(data.getValue()); - addLabels(metricBuilder, data.getLabels()); - metricBuilder.setUntyped(untypedBuilder); - return metricBuilder; - } - private void addLabels(Metrics.Metric.Builder metricBuilder, Labels labels) { for (int i = 0; i < labels.size(); i++) { metricBuilder.addLabel( @@ -363,16 +374,6 @@ private void addLabels(Metrics.Exemplar.Builder metricBuilder, Labels labels) { } } - private Metrics.Exemplar.Builder convert(Exemplar exemplar) { - Metrics.Exemplar.Builder builder = Metrics.Exemplar.newBuilder(); - builder.setValue(exemplar.getValue()); - addLabels(builder, exemplar.getLabels()); - if (exemplar.hasTimestamp()) { - builder.setTimestamp(timestampFromMillis(exemplar.getTimestampMillis())); - } - return builder; - } - private void setScrapeTimestamp(Metrics.Metric.Builder metricBuilder, DataPointSnapshot data) { if (data.hasScrapeTimestamp()) { metricBuilder.setTimestampMs(data.getScrapeTimestampMillis()); diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java index ce0318912..bd3a163ac 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java @@ -1,19 +1,36 @@ package io.prometheus.metrics.instrumentation.dropwizard5; -import io.dropwizard.metrics5.*; +import io.dropwizard.metrics5.Counter; +import io.dropwizard.metrics5.Gauge; +import io.dropwizard.metrics5.Histogram; +import io.dropwizard.metrics5.Meter; +import io.dropwizard.metrics5.Metric; +import io.dropwizard.metrics5.MetricFilter; +import io.dropwizard.metrics5.MetricName; +import io.dropwizard.metrics5.MetricRegistry; +import io.dropwizard.metrics5.Snapshot; import io.dropwizard.metrics5.Timer; import io.prometheus.metrics.instrumentation.dropwizard5.labels.CustomLabelMapper; import io.prometheus.metrics.model.registry.MultiCollector; import io.prometheus.metrics.model.registry.PrometheusRegistry; -import io.prometheus.metrics.model.snapshots.*; -import java.util.*; +import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot; +import io.prometheus.metrics.model.snapshots.MetricMetadata; +import io.prometheus.metrics.model.snapshots.MetricSnapshot; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import io.prometheus.metrics.model.snapshots.PrometheusNaming; +import io.prometheus.metrics.model.snapshots.Quantiles; +import io.prometheus.metrics.model.snapshots.SummarySnapshot; +import java.util.Collections; +import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; /** Collect Dropwizard metrics from a MetricRegistry. */ public class DropwizardExports implements MultiCollector { - private static final Logger LOGGER = Logger.getLogger(DropwizardExports.class.getName()); + private static final Logger logger = Logger.getLogger(DropwizardExports.class.getName()); private final MetricRegistry registry; private final MetricFilter metricFilter; private final Optional labelMapper; @@ -92,7 +109,7 @@ MetricSnapshot fromGauge(String dropwizardName, Gauge gauge) { } else if (obj instanceof Boolean) { value = ((Boolean) obj) ? 1 : 0; } else { - LOGGER.log( + logger.log( Level.FINE, String.format( "Invalid type for Gauge %s: %s", diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java index f69a27944..22f1c3339 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/labels/MapperConfig.java @@ -127,13 +127,21 @@ private void validateLabels(final Map labels) { @Override public boolean equals(final Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } final MapperConfig that = (MapperConfig) o; - if (match != null ? !match.equals(that.match) : that.match != null) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; + if (match != null ? !match.equals(that.match) : that.match != null) { + return false; + } + if (name != null ? !name.equals(that.name) : that.name != null) { + return false; + } return labels != null ? labels.equals(that.labels) : that.labels == null; } diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.java index f87618f63..ebd0f296c 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.java @@ -67,7 +67,8 @@ private void register(PrometheusRegistry registry) { CounterWithCallback.builder(config) .name(JVM_CLASSES_UNLOADED_TOTAL) .help( - "The total number of classes that have been unloaded since the JVM has started execution") + "The total number of classes that have been unloaded since the JVM has " + + "started execution") .callback(callback -> callback.call(classLoadingBean.getUnloadedClassCount())) .register(registry); } diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.java index b0672aaf3..0b6a4d993 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.java @@ -309,11 +309,11 @@ public void register() { } public void register(PrometheusRegistry registry) { - MemoryMXBean memoryMXBean = + MemoryMXBean bean = this.memoryBean != null ? this.memoryBean : ManagementFactory.getMemoryMXBean(); List poolBeans = this.poolBeans != null ? this.poolBeans : ManagementFactory.getMemoryPoolMXBeans(); - new JvmMemoryMetrics(poolBeans, memoryMXBean, config).register(registry); + new JvmMemoryMetrics(poolBeans, bean, config).register(registry); } } } diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java index 671c36c97..a5e7768c8 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.java @@ -56,21 +56,20 @@ private JvmMemoryPoolAllocationMetrics(List garbageColle } private void register(PrometheusRegistry registry) { - Counter allocatedCounter = Counter.builder() .name(JVM_MEMORY_POOL_ALLOCATED_BYTES_TOTAL) .help( - "Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.") + "Total bytes allocated in a given JVM memory pool. Only updated after GC, " + + "not continuously.") .labelNames("pool") .register(registry); AllocationCountingNotificationListener listener = new AllocationCountingNotificationListener(allocatedCounter); - for (GarbageCollectorMXBean garbageCollectorMXBean : garbageCollectorBeans) { - if (garbageCollectorMXBean instanceof NotificationEmitter) { - ((NotificationEmitter) garbageCollectorMXBean) - .addNotificationListener(listener, null, null); + for (GarbageCollectorMXBean bean : garbageCollectorBeans) { + if (bean instanceof NotificationEmitter) { + ((NotificationEmitter) bean).addNotificationListener(listener, null, null); } } } diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java index e350568ac..53225edca 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmNativeMemoryMetrics.java @@ -110,7 +110,8 @@ private void register(PrometheusRegistry registry) { GaugeWithCallback.builder(config) .name(JVM_NATIVE_MEMORY_RESERVED_BYTES) .help( - "Reserved bytes of a given JVM. Reserved memory represents the total amount of memory the JVM can potentially use.") + "Reserved bytes of a given JVM. Reserved memory represents the total amount of " + + "memory the JVM can potentially use.") .unit(Unit.BYTES) .labelNames("pool") .callback(makeCallback(true)) @@ -119,7 +120,8 @@ private void register(PrometheusRegistry registry) { GaugeWithCallback.builder(config) .name(JVM_NATIVE_MEMORY_COMMITTED_BYTES) .help( - "Committed bytes of a given JVM. Committed memory represents the amount of memory the JVM is using right now.") + "Committed bytes of a given JVM. Committed memory represents the amount of " + + "memory the JVM is using right now.") .unit(Unit.BYTES) .labelNames("pool") .callback(makeCallback(false)) diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java index 8b6e57ac1..d3d140250 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.java @@ -109,7 +109,8 @@ private void register(PrometheusRegistry registry) { GaugeWithCallback.builder(config) .name(JVM_THREADS_DEADLOCKED) .help( - "Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers") + "Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or " + + "ownable synchronizers") .callback( callback -> callback.call(nullSafeArrayLength(threadBean.findDeadlockedThreads()))) .register(registry); @@ -148,7 +149,7 @@ private Map getThreadStateCountMap(ThreadMXBean threadBean) { } } - int numberOfInvalidThreadIds = threadIds.length - writePos; + final int numberOfInvalidThreadIds = threadIds.length - writePos; threadIds = Arrays.copyOf(threadIds, writePos); // Get thread information without computing any stack traces diff --git a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java index a854f5e89..e4dabd275 100644 --- a/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java +++ b/prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.java @@ -301,10 +301,10 @@ public void register() { public void register(PrometheusRegistry registry) { OperatingSystemMXBean osBean = this.osBean != null ? this.osBean : ManagementFactory.getOperatingSystemMXBean(); - RuntimeMXBean runtimeMXBean = + RuntimeMXBean bean = this.runtimeBean != null ? this.runtimeBean : ManagementFactory.getRuntimeMXBean(); Grepper grepper = this.grepper != null ? this.grepper : new FileGrepper(); - new ProcessMetrics(osBean, runtimeMXBean, grepper, config).register(registry); + new ProcessMetrics(osBean, bean, grepper, config).register(registry); } } } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java index 4c2d57e8e..6b455bff6 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/DataPointSnapshot.java @@ -21,11 +21,13 @@ private void validate() { } if (createdTimestampMillis < 0) { throw new IllegalArgumentException( - "Created timestamp cannot be negative. Use 0 if the metric doesn't have a created timestamp."); + "Created timestamp cannot be negative. " + + "Use 0 if the metric doesn't have a created timestamp."); } if (scrapeTimestampMillis < 0) { throw new IllegalArgumentException( - "Scrape timestamp cannot be negative. Use 0 to indicate that the Prometheus server should set the scrape timestamp."); + "Scrape timestamp cannot be negative. " + + "Use 0 to indicate that the Prometheus server should set the scrape timestamp."); } if (hasCreatedTimestamp() && hasScrapeTimestamp()) { if (scrapeTimestampMillis < createdTimestampMillis) { diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java index eb6213d6b..51b529616 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/HistogramSnapshot.java @@ -270,7 +270,8 @@ private static long calculateCount( nativeZeroCount, nativeBucketsForPositiveValues, nativeBucketsForNegativeValues); if (classicCount != nativeCount) { throw new IllegalArgumentException( - "Inconsistent observation count: If a histogram has both classic and native data the observation count must be the same. Classic count is " + "Inconsistent observation count: If a histogram has both classic and native " + + "data the observation count must be the same. Classic count is " + classicCount + " but native count is " + nativeCount diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java index f14af41ce..45acd56ee 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Label.java @@ -34,8 +34,12 @@ public String toString() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Label label = (Label) o; return Objects.equals(name, label.name) && Objects.equals(value, label.value); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java index dcb32f3bc..97cbfd43a 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Labels.java @@ -70,19 +70,6 @@ public static Labels of(String... keyValuePairs) { } // package private for testing - static String[] makePrometheusNames(String[] names) { - String[] prometheusNames = names; - for (int i = 0; i < names.length; i++) { - if (names[i].contains(".")) { - if (prometheusNames == names) { - prometheusNames = Arrays.copyOf(names, names.length); - } - prometheusNames[i] = PrometheusNaming.prometheusName(names[i]); - } - } - return prometheusNames; - } - /** * Create a new Labels instance. You can either create Labels with one of the static {@code * Labels.of(...)} methods, or you can use the {@link Labels#builder()}. @@ -129,6 +116,19 @@ public static Labels of(String[] names, String[] values) { return new Labels(namesCopy, prometheusNames, valuesCopy); } + static String[] makePrometheusNames(String[] names) { + String[] prometheusNames = names; + for (int i = 0; i < names.length; i++) { + if (names[i].contains(".")) { + if (prometheusNames == names) { + prometheusNames = Arrays.copyOf(names, names.length); + } + prometheusNames[i] = PrometheusNaming.prometheusName(names[i]); + } + } + return prometheusNames; + } + /** * Test if these labels contain a specific label name. * @@ -286,14 +286,6 @@ public Labels merge(Labels other) { return new Labels(names, prometheusNames, values); } - /** - * Create a new Labels instance containing the labels of this and the label passed as name and - * value. The label name must not already be contained in this Labels instance. - */ - public Labels add(String name, String value) { - return merge(Labels.of(name, value)); - } - /** * Create a new Labels instance containing the labels of this and the labels passed as names and * values. The new label names must not already be contained in this Labels instance. @@ -313,6 +305,14 @@ public Labels merge(String[] names, String[] values) { return new Labels(mergedNames, prometheusNames, mergedValues); } + /** + * Create a new Labels instance containing the labels of this and the label passed as name and + * value. The label name must not already be contained in this Labels instance. + */ + public Labels add(String name, String value) { + return merge(Labels.of(name, value)); + } + public boolean hasSameNames(Labels other) { return Arrays.equals(prometheusNames, other.prometheusNames); } @@ -400,8 +400,12 @@ private void appendEscapedLabelValue(StringBuilder b, String value) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Labels labels = (Labels) o; return labels.hasSameNames(this) && labels.hasSameValues(this); } diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java index 868cdb394..581cb9143 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/MetricMetadata.java @@ -108,7 +108,8 @@ private void validate() { throw new IllegalArgumentException( "'" + name - + "': Illegal metric name. If the unit is non-null, the name must end with the unit: _" + + "': Illegal metric name. If the unit is non-null, " + + "the name must end with the unit: _" + unit + "." + " Call " diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantiles.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantiles.java index 135af6658..34a9bc048 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantiles.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Quantiles.java @@ -1,6 +1,11 @@ package io.prometheus.metrics.model.snapshots; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; /** Immutable list of quantiles. */ public class Quantiles implements Iterable { diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java index d95f93195..31a9524e7 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java @@ -61,8 +61,12 @@ public static double kiloBytesToBytes(double kilobytes) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Unit unit = (Unit) o; return Objects.equals(name, unit.name); } diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/src/main/java/io/prometheus/metrics/tracer/initializer/SpanContextSupplier.java b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/src/main/java/io/prometheus/metrics/tracer/initializer/SpanContextSupplier.java index 11d14ed8f..de8bf24f5 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/src/main/java/io/prometheus/metrics/tracer/initializer/SpanContextSupplier.java +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/src/main/java/io/prometheus/metrics/tracer/initializer/SpanContextSupplier.java @@ -1,8 +1,8 @@ package io.prometheus.metrics.tracer.initializer; +import io.prometheus.metrics.tracer.agent.OpenTelemetryAgentSpanContext; import io.prometheus.metrics.tracer.common.SpanContext; import io.prometheus.metrics.tracer.otel.OpenTelemetrySpanContext; -import io.prometheus.metrics.tracer.otel_agent.OpenTelemetryAgentSpanContext; import java.util.concurrent.atomic.AtomicReference; public class SpanContextSupplier { diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/src/main/java/io/prometheus/metrics/tracer/otel_agent/OpenTelemetryAgentSpanContext.java b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/src/main/java/io/prometheus/metrics/tracer/agent/OpenTelemetryAgentSpanContext.java similarity index 97% rename from prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/src/main/java/io/prometheus/metrics/tracer/otel_agent/OpenTelemetryAgentSpanContext.java rename to prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/src/main/java/io/prometheus/metrics/tracer/agent/OpenTelemetryAgentSpanContext.java index 3c757ed6b..f5f93e6f3 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/src/main/java/io/prometheus/metrics/tracer/otel_agent/OpenTelemetryAgentSpanContext.java +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/src/main/java/io/prometheus/metrics/tracer/agent/OpenTelemetryAgentSpanContext.java @@ -1,4 +1,4 @@ -package io.prometheus.metrics.tracer.otel_agent; +package io.prometheus.metrics.tracer.agent; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanId; From db472756d3f49410188d03357ef79c87b558df64 Mon Sep 17 00:00:00 2001 From: Philipp Trulson Date: Tue, 12 Nov 2024 12:51:32 +0100 Subject: [PATCH 222/870] Add instrumentation for Guava & Caffeine to BOM (#1175) Signed-off-by: Philipp Trulson Co-authored-by: Gregor Zeitlinger --- prometheus-metrics-bom/pom.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index b56bea193..acdee81fb 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -72,6 +72,16 @@ prometheus-metrics-instrumentation-dropwizard5 ${project.version} + + io.prometheus + prometheus-metrics-instrumentation-caffeine + ${project.version} + + + io.prometheus + prometheus-metrics-instrumentation-guava + ${project.version} + io.prometheus prometheus-metrics-instrumentation-jvm From 8e434c160c8a4e16479c8ca99e452da6055880f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 15:07:50 +0100 Subject: [PATCH 223/870] Bump org.apache.maven.plugins:maven-checkstyle-plugin (#1202) Bumps [org.apache.maven.plugins:maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin) from 3.5.0 to 3.6.0. - [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.5.0...maven-checkstyle-plugin-3.6.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-checkstyle-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dfc5a427e..e856b4447 100644 --- a/pom.xml +++ b/pom.xml @@ -228,7 +228,7 @@ org.apache.maven.plugins maven-checkstyle-plugin - 3.5.0 + 3.6.0 true google_checks.xml From cafbc1474c681705a7b0700789046112cab3c85c Mon Sep 17 00:00:00 2001 From: Petar Heyken <48122009+pheyken@users.noreply.github.com> Date: Wed, 13 Nov 2024 12:12:37 +0100 Subject: [PATCH 224/870] fix register part of documentation for caffeine & guava instrumentation + fix typo in method name (#1203) Signed-off-by: Petar Heyken --- .../instrumentation/caffeine/CacheMetricsCollector.java | 5 +++-- .../metrics/instrumentation/guava/CacheMetricsCollector.java | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java index c195ae77c..313e2f48f 100644 --- a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java +++ b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java @@ -25,7 +25,8 @@ *
    {@code
      * // Note that `recordStats()` is required to gather non-zero statistics
      * Cache cache = Caffeine.newBuilder().recordStats().build();
    - * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector().register();
    + * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector();
    + * PrometheusRegistry.defaultRegistry.register(cacheMetrics);
      * cacheMetrics.addCache("mycache", cache);
      *
      * }
    @@ -87,7 +88,7 @@ public void addCache(String cacheName, AsyncCache cache) { * * @param cacheName cache to be removed */ - public Cache nremoveCache(String cacheName) { + public Cache removeCache(String cacheName) { return children.remove(cacheName); } diff --git a/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java index e1da20071..2962b0bf3 100644 --- a/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java +++ b/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java @@ -23,7 +23,8 @@ *
    {@code
      * // Note that `recordStats()` is required to gather non-zero statistics
      * Cache cache = CacheBuilder.newBuilder().recordStats().build();
    - * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector().register();
    + * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector();
    + * PrometheusRegistry.defaultRegistry.register(cacheMetrics);
      * cacheMetrics.addCache("mycache", cache);
      *
      * }
    From 8461bad07a4a5cff9c67babe568e85e71b2d7a98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 23:27:37 -0500 Subject: [PATCH 225/870] Bump org.codehaus.mojo:versions-maven-plugin from 2.17.1 to 2.18.0 (#1205) Bumps [org.codehaus.mojo:versions-maven-plugin](https://github.com/mojohaus/versions) from 2.17.1 to 2.18.0. - [Release notes](https://github.com/mojohaus/versions/releases) - [Changelog](https://github.com/mojohaus/versions/blob/master/ReleaseNotes.md) - [Commits](https://github.com/mojohaus/versions/compare/2.17.1...2.18.0) --- updated-dependencies: - dependency-name: org.codehaus.mojo:versions-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e856b4447..1a041375a 100644 --- a/pom.xml +++ b/pom.xml @@ -368,7 +368,7 @@ org.codehaus.mojo versions-maven-plugin - 2.17.1 + 2.18.0 file://${project.basedir}/version-rules.xml From c005c0518c3b0c6f65cfe050d397df4d5b50ba77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Nov 2024 09:14:09 -0500 Subject: [PATCH 226/870] Bump commons-io:commons-io from 2.17.0 to 2.18.0 (#1209) Bumps commons-io:commons-io from 2.17.0 to 2.18.0. --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 98f3d32c9..5adba2699 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -25,7 +25,7 @@ commons-io commons-io - 2.17.0 + 2.18.0 test From e17c0a10d5b55afc107b2e0114a433742b96a0ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 09:16:23 +0100 Subject: [PATCH 227/870] Bump io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha (#1204) Bumps [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://github.com/open-telemetry/opentelemetry-java-instrumentation) from 2.9.0-alpha to 2.10.0-alpha. - [Release notes](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-java-instrumentation/commits) --- updated-dependencies: - dependency-name: io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1a041375a..fb197fabc 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ UTF-8 --module-name-need-to-be-overriden-- 5.11.3 - 2.9.0-alpha + 2.10.0-alpha 8 0.70 false From 2f300386388e8da475bc1c5b48a37ed1e32f71ee Mon Sep 17 00:00:00 2001 From: Petar Heyken <48122009+pheyken@users.noreply.github.com> Date: Thu, 21 Nov 2024 13:58:29 +0100 Subject: [PATCH 228/870] [prometheus-metrics-instrumentation-caffeine] implement getPrometheusNames (#1206) Signed-off-by: Petar Heyken --- .../caffeine/CacheMetricsCollector.java | 47 +++++++++++++++---- .../caffeine/CacheMetricsCollectorTest.java | 30 ++++++++++++ 2 files changed, 68 insertions(+), 9 deletions(-) diff --git a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java index 313e2f48f..c5c9fef3c 100644 --- a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java +++ b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java @@ -55,6 +55,30 @@ public class CacheMetricsCollector implements MultiCollector { private static final double NANOSECONDS_PER_SECOND = 1_000_000_000.0; + private static final String METRIC_NAME_CACHE_HIT = "caffeine_cache_hit"; + private static final String METRIC_NAME_CACHE_MISS = "caffeine_cache_miss"; + private static final String METRIC_NAME_CACHE_REQUESTS = "caffeine_cache_requests"; + private static final String METRIC_NAME_CACHE_EVICTION = "caffeine_cache_eviction"; + private static final String METRIC_NAME_CACHE_EVICTION_WEIGHT = "caffeine_cache_eviction_weight"; + private static final String METRIC_NAME_CACHE_LOAD_FAILURE = "caffeine_cache_load_failure"; + private static final String METRIC_NAME_CACHE_LOADS = "caffeine_cache_loads"; + private static final String METRIC_NAME_CACHE_ESTIMATED_SIZE = "caffeine_cache_estimated_size"; + private static final String METRIC_NAME_CACHE_LOAD_DURATION_SECONDS = + "caffeine_cache_load_duration_seconds"; + + private static final List ALL_METRIC_NAMES = + Collections.unmodifiableList( + Arrays.asList( + METRIC_NAME_CACHE_HIT, + METRIC_NAME_CACHE_MISS, + METRIC_NAME_CACHE_REQUESTS, + METRIC_NAME_CACHE_EVICTION, + METRIC_NAME_CACHE_EVICTION_WEIGHT, + METRIC_NAME_CACHE_LOAD_FAILURE, + METRIC_NAME_CACHE_LOADS, + METRIC_NAME_CACHE_ESTIMATED_SIZE, + METRIC_NAME_CACHE_LOAD_DURATION_SECONDS)); + protected final ConcurrentMap> children = new ConcurrentHashMap<>(); /** @@ -107,40 +131,40 @@ public MetricSnapshots collect() { final List labelNames = Arrays.asList("cache"); final CounterSnapshot.Builder cacheHitTotal = - CounterSnapshot.builder().name("caffeine_cache_hit").help("Cache hit totals"); + CounterSnapshot.builder().name(METRIC_NAME_CACHE_HIT).help("Cache hit totals"); final CounterSnapshot.Builder cacheMissTotal = - CounterSnapshot.builder().name("caffeine_cache_miss").help("Cache miss totals"); + CounterSnapshot.builder().name(METRIC_NAME_CACHE_MISS).help("Cache miss totals"); final CounterSnapshot.Builder cacheRequestsTotal = CounterSnapshot.builder() - .name("caffeine_cache_requests") + .name(METRIC_NAME_CACHE_REQUESTS) .help("Cache request totals, hits + misses"); final CounterSnapshot.Builder cacheEvictionTotal = CounterSnapshot.builder() - .name("caffeine_cache_eviction") + .name(METRIC_NAME_CACHE_EVICTION) .help("Cache eviction totals, doesn't include manually removed entries"); final GaugeSnapshot.Builder cacheEvictionWeight = GaugeSnapshot.builder() - .name("caffeine_cache_eviction_weight") + .name(METRIC_NAME_CACHE_EVICTION_WEIGHT) .help("Cache eviction weight"); final CounterSnapshot.Builder cacheLoadFailure = - CounterSnapshot.builder().name("caffeine_cache_load_failure").help("Cache load failures"); + CounterSnapshot.builder().name(METRIC_NAME_CACHE_LOAD_FAILURE).help("Cache load failures"); final CounterSnapshot.Builder cacheLoadTotal = CounterSnapshot.builder() - .name("caffeine_cache_loads") + .name(METRIC_NAME_CACHE_LOADS) .help("Cache loads: both success and failures"); final GaugeSnapshot.Builder cacheSize = - GaugeSnapshot.builder().name("caffeine_cache_estimated_size").help("Estimated cache size"); + GaugeSnapshot.builder().name(METRIC_NAME_CACHE_ESTIMATED_SIZE).help("Estimated cache size"); final SummarySnapshot.Builder cacheLoadSummary = SummarySnapshot.builder() - .name("caffeine_cache_load_duration_seconds") + .name(METRIC_NAME_CACHE_LOAD_DURATION_SECONDS) .help("Cache load duration: both success and failures"); for (final Map.Entry> c : children.entrySet()) { @@ -223,4 +247,9 @@ public MetricSnapshots collect() { .metricSnapshot(cacheLoadSummary.build()) .build(); } + + @Override + public List getPrometheusNames() { + return ALL_METRIC_NAMES; + } } diff --git a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java index 37f5f3670..4ffb1d794 100644 --- a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java +++ b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java @@ -14,11 +14,13 @@ import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.DataPointSnapshot; import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; import io.prometheus.metrics.model.snapshots.SummarySnapshot; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; +import java.util.List; import org.junit.jupiter.api.Test; @SuppressWarnings("CheckReturnValue") @@ -115,6 +117,34 @@ public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { assertThat(loadDuration.getSum()).isGreaterThan(0); } + @Test + public void getPrometheusNamesHasSameSizeAsMetricSizeWhenScraping() { + final CacheMetricsCollector collector = new CacheMetricsCollector(); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + final MetricSnapshots metricSnapshots = registry.scrape(); + final List prometheusNames = collector.getPrometheusNames(); + + assertThat(prometheusNames).hasSize(metricSnapshots.size()); + } + + @Test + public void collectedMetricNamesAreKnownPrometheusNames() { + final CacheMetricsCollector collector = new CacheMetricsCollector(); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + final MetricSnapshots metricSnapshots = registry.scrape(); + final List prometheusNames = collector.getPrometheusNames(); + + metricSnapshots.forEach( + metricSnapshot -> + assertThat(prometheusNames).contains(metricSnapshot.getMetadata().getPrometheusName())); + } + private void assertCounterMetric( PrometheusRegistry registry, String name, String cacheName, double value) { final CounterSnapshot.CounterDataPointSnapshot dataPointSnapshot = From 2debe2b49c5023cd5612b0d35b7212b3f710cc50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 13:58:50 +0100 Subject: [PATCH 229/870] Bump com.google.errorprone:error_prone_core from 2.35.1 to 2.36.0 (#1208) * Bump com.google.errorprone:error_prone_core from 2.35.1 to 2.36.0 Bumps [com.google.errorprone:error_prone_core](https://github.com/google/error-prone) from 2.35.1 to 2.36.0. - [Release notes](https://github.com/google/error-prone/releases) - [Commits](https://github.com/google/error-prone/compare/v2.35.1...v2.36.0) --- updated-dependencies: - dependency-name: com.google.errorprone:error_prone_core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * add flag Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fb197fabc..4dc20a62d 100644 --- a/pom.xml +++ b/pom.xml @@ -341,6 +341,7 @@ -Xlint:all,-serial,-processing,-options ${warnings} + --should-stop=ifError=FLOW -XDcompilePolicy=simple -Xplugin:ErrorProne @@ -355,7 +356,7 @@ com.google.errorprone error_prone_core - 2.35.1 + 2.36.0 + + + io.prometheus + it-spring-boot-smoke-test + 1.3.3 + + Integration Test - Spring Smoke Tests + + Spring Smoke Tests + + + 17 + + + + + + io.prometheus + prometheus-metrics-bom + ${project.version} + pom + import + + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-registry-prometheus + runtime + + + + org.springframework.boot + spring-boot-starter-test + test + + + io.prometheus + it-common + test-jar + ${project.version} + test + + + + + + + org.graalvm.buildtools + native-maven-plugin + + + org.springframework.boot + spring-boot-maven-plugin + + + com.diffplug.spotless + spotless-maven-plugin + 2.43.0 + + + + + + + + verify + + check + + + + + + + + diff --git a/integration-tests/it-spring-boot-smoke-test/src/main/java/io/prometheus/metrics/it/springboot/Application.java b/integration-tests/it-spring-boot-smoke-test/src/main/java/io/prometheus/metrics/it/springboot/Application.java new file mode 100644 index 000000000..955ea4033 --- /dev/null +++ b/integration-tests/it-spring-boot-smoke-test/src/main/java/io/prometheus/metrics/it/springboot/Application.java @@ -0,0 +1,12 @@ +package io.prometheus.metrics.it.springboot; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/integration-tests/it-spring-boot-smoke-test/src/main/resources/application.yaml b/integration-tests/it-spring-boot-smoke-test/src/main/resources/application.yaml new file mode 100644 index 000000000..fdcf1351d --- /dev/null +++ b/integration-tests/it-spring-boot-smoke-test/src/main/resources/application.yaml @@ -0,0 +1,5 @@ +management: + endpoints: + web: + exposure: + include: '*' diff --git a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java new file mode 100644 index 000000000..3d893d894 --- /dev/null +++ b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java @@ -0,0 +1,35 @@ +package io.prometheus.metrics.it.springboot; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.prometheus.client.it.common.ExporterTest; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import java.io.IOException; +import java.net.URL; +import java.util.List; +import java.util.Optional; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.actuate.observability.AutoConfigureObservability; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) +@AutoConfigureObservability +class ApplicationTest { + @Test + public void testPrometheusProtobufFormat() throws IOException { + ExporterTest.Response response = + ExporterTest.scrape( + "GET", + new URL("http://localhost:8080/actuator/prometheus"), + "Accept", + "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited"); + assertThat(response.status).isEqualTo(200); + + List metrics = response.protoBody(); + Optional metric = + metrics.stream() + .filter(m -> m.getName().equals("application_started_time_seconds")) + .findFirst(); + assertThat(metric).isPresent(); + } +} diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 2a75a4942..ece364ae9 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -13,7 +13,6 @@ pom Integration Tests - http://github.com/prometheus/client_java Integration tests for the Exporter modules @@ -26,6 +25,7 @@ it-common it-exporter it-pushgateway + it-spring-boot-smoke-test @@ -46,7 +46,13 @@ + + + commons-io + commons-io + 2.18.0 + org.testcontainers junit-jupiter diff --git a/pom.xml b/pom.xml index 4dc20a62d..ac7d26403 100644 --- a/pom.xml +++ b/pom.xml @@ -66,18 +66,19 @@ prometheus-metrics-model prometheus-metrics-tracer prometheus-metrics-exposition-formats + prometheus-metrics-exposition-textformats prometheus-metrics-exporter-common prometheus-metrics-exporter-servlet-jakarta prometheus-metrics-exporter-servlet-javax prometheus-metrics-exporter-httpserver prometheus-metrics-exporter-opentelemetry + prometheus-metrics-exporter-opentelemetry-otel-agent-resources prometheus-metrics-exporter-pushgateway prometheus-metrics-instrumentation-caffeine prometheus-metrics-instrumentation-jvm prometheus-metrics-instrumentation-dropwizard5 prometheus-metrics-instrumentation-guava prometheus-metrics-simpleclient-bridge - otel-agent-resources @@ -91,6 +92,14 @@ + + com.google.code.findbugs + jsr305 + 3.0.2 + provided + + + org.junit.jupiter junit-jupiter-engine @@ -200,6 +209,16 @@ maven-enforcer-plugin 3.5.0
    + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.0 + + + org.codehaus.mojo + exec-maven-plugin + 3.5.0 + com.diffplug.spotless spotless-maven-plugin diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index 801876b74..d2bf832d5 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -6,9 +6,9 @@ import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; -import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; -import io.prometheus.metrics.expositionformats.TextFormatUtil; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; +import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.Label; @@ -112,8 +112,9 @@ public void testTotalStrippedFromName() { "my_counter_seconds", "my.counter.seconds" }) { Counter counter = Counter.builder().name(name).unit(Unit.SECONDS).build(); - Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(counter.collect()); - assertThat(TextFormatUtil.shortDebugString(protobufData)) + Metrics.MetricFamily protobufData = + new PrometheusProtobufWriterImpl().convert(counter.collect()); + assertThat(ProtobufUtil.shortDebugString(protobufData)) .isEqualTo( "name: \"my_counter_seconds_total\" type: COUNTER metric { counter { value: 0.0 } }"); } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index 89a4e853c..5a8d7cda8 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -8,9 +8,9 @@ import io.prometheus.metrics.core.datapoints.DistributionDataPoint; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; -import io.prometheus.metrics.expositionformats.TextFormatUtil; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; +import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket; import io.prometheus.metrics.model.snapshots.Exemplar; import io.prometheus.metrics.model.snapshots.Exemplars; @@ -89,10 +89,10 @@ private void run() throws NoSuchFieldException, IllegalAccessException { } } Metrics.MetricFamily protobufData = - new PrometheusProtobufWriter().convert(histogram.collect()); + new PrometheusProtobufWriterImpl().convert(histogram.collect()); String expectedWithMetadata = "name: \"test\" type: HISTOGRAM metric { histogram { " + expected + " } }"; - assertThat(TextFormatUtil.shortDebugString(protobufData)) + assertThat(ProtobufUtil.shortDebugString(protobufData)) .as("test \"" + name + "\" failed") .isEqualTo(expectedWithMetadata); } @@ -940,8 +940,8 @@ public void testDefaults() throws IOException { + "# EOF\n"; // protobuf - Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(snapshot); - assertThat(TextFormatUtil.shortDebugString(protobufData)).isEqualTo(expectedProtobuf); + Metrics.MetricFamily protobufData = new PrometheusProtobufWriterImpl().convert(snapshot); + assertThat(ProtobufUtil.shortDebugString(protobufData)).isEqualTo(expectedProtobuf); // text ByteArrayOutputStream out = new ByteArrayOutputStream(); diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index 3084cdb10..427b6a55f 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -4,9 +4,9 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; -import io.prometheus.metrics.expositionformats.TextFormatUtil; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; +import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import io.prometheus.metrics.model.snapshots.Unit; @@ -27,8 +27,9 @@ public void testInfoStrippedFromName() { for (String labelName : new String[] {"my.key", "my_key"}) { Info info = Info.builder().name(name).labelNames(labelName).build(); info.addLabelValues("value"); - Metrics.MetricFamily protobufData = new PrometheusProtobufWriter().convert(info.collect()); - assertThat(TextFormatUtil.shortDebugString(protobufData)) + Metrics.MetricFamily protobufData = + new PrometheusProtobufWriterImpl().convert(info.collect()); + assertThat(ProtobufUtil.shortDebugString(protobufData)) .isEqualTo( "name: \"jvm_runtime_info\" type: GAUGE metric { label { name: \"my_key\" value: \"value\" } gauge { value: 1.0 } }"); } diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index 30b2cd9ae..cea87262b 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -26,10 +26,16 @@ prometheus-metrics-model ${project.version}
    + + io.prometheus + prometheus-metrics-exposition-textformats + ${project.version} + io.prometheus prometheus-metrics-exposition-formats ${project.version} + runtime diff --git a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java index f871addfd..f978a9b36 100644 --- a/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java +++ b/prometheus-metrics-exporter-common/src/main/java/io/prometheus/metrics/exporter/common/PrometheusScrapeHandler.java @@ -11,8 +11,10 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Arrays; import java.util.Enumeration; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Predicate; import java.util.zip.GZIPOutputStream; @@ -23,7 +25,8 @@ public class PrometheusScrapeHandler { private final PrometheusRegistry registry; private final ExpositionFormats expositionFormats; private final Predicate nameFilter; - private AtomicInteger lastResponseSize = new AtomicInteger(2 << 9); // 0.5 MB + private final AtomicInteger lastResponseSize = new AtomicInteger(2 << 9); // 0.5 MB + private final List supportedFormats; public PrometheusScrapeHandler() { this(PrometheusProperties.get(), PrometheusRegistry.defaultRegistry); @@ -41,6 +44,10 @@ public PrometheusScrapeHandler(PrometheusProperties config, PrometheusRegistry r this.expositionFormats = ExpositionFormats.init(config.getExporterProperties()); this.registry = registry; this.nameFilter = makeNameFilter(config.getExporterFilterProperties()); + supportedFormats = new ArrayList<>(Arrays.asList("openmetrics", "text")); + if (expositionFormats.getPrometheusProtobufWriter().isAvailable()) { + supportedFormats.add("prometheus-protobuf"); + } } public void handleRequest(PrometheusHttpExchange exchange) throws IOException { @@ -137,9 +144,7 @@ private boolean writeDebugResponse(MetricSnapshots snapshots, PrometheusHttpExch return false; } else { response.setHeader("Content-Type", "text/plain; charset=utf-8"); - boolean supportedFormat = - Arrays.asList("openmetrics", "text", "prometheus-protobuf").contains(debugParam); - int responseStatus = supportedFormat ? 200 : 500; + int responseStatus = supportedFormats.contains(debugParam) ? 200 : 500; OutputStream body = response.sendHeadersAndGetBody(responseStatus, 0); switch (debugParam) { case "openmetrics": diff --git a/otel-agent-resources/pom.xml b/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml similarity index 96% rename from otel-agent-resources/pom.xml rename to prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml index c4e9a4741..0d6f63623 100644 --- a/otel-agent-resources/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml @@ -9,7 +9,7 @@ 1.3.3 - otel-agent-resources + prometheus-metrics-exporter-opentelemetry-otel-agent-resources bundle OpenTelemetry Agent Resource Extractor diff --git a/otel-agent-resources/src/main/java/io/prometheus/otelagent/ResourceAttributesFromOtelAgent.java b/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/src/main/java/io/prometheus/otelagent/ResourceAttributesFromOtelAgent.java similarity index 100% rename from otel-agent-resources/src/main/java/io/prometheus/otelagent/ResourceAttributesFromOtelAgent.java rename to prometheus-metrics-exporter-opentelemetry-otel-agent-resources/src/main/java/io/prometheus/otelagent/ResourceAttributesFromOtelAgent.java diff --git a/otel-agent-resources/src/main/resources/lib/.gitignore b/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/src/main/resources/lib/.gitignore similarity index 100% rename from otel-agent-resources/src/main/resources/lib/.gitignore rename to prometheus-metrics-exporter-opentelemetry-otel-agent-resources/src/main/resources/lib/.gitignore diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index e8051258e..462ff19d1 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -41,7 +41,7 @@ io.prometheus - otel-agent-resources + prometheus-metrics-exporter-opentelemetry-otel-agent-resources ${project.version} @@ -112,7 +112,6 @@ org.codehaus.mojo build-helper-maven-plugin - 3.6.0 regex-property diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java index 2bafc6aa2..6c89185f1 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java @@ -5,6 +5,7 @@ import io.prometheus.metrics.config.ExporterPushgatewayProperties; import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.config.PrometheusPropertiesException; +import io.prometheus.metrics.expositionformats.ExpositionFormatWriter; import io.prometheus.metrics.expositionformats.PrometheusProtobufWriter; import io.prometheus.metrics.expositionformats.PrometheusTextFormatWriter; import io.prometheus.metrics.model.registry.Collector; @@ -78,7 +79,7 @@ public class PushGateway { private static final int MILLISECONDS_PER_SECOND = 1000; private final URL url; - private final Format format; + private final ExpositionFormatWriter writer; private final Map requestHeaders; private final PrometheusRegistry registry; private final HttpConnectionFactory connectionFactory; @@ -90,10 +91,22 @@ private PushGateway( HttpConnectionFactory connectionFactory, Map requestHeaders) { this.registry = registry; - this.format = format; this.url = url; this.requestHeaders = Collections.unmodifiableMap(new HashMap<>(requestHeaders)); this.connectionFactory = connectionFactory; + writer = getWriter(format); + if (!writer.isAvailable()) { + throw new RuntimeException(writer.getClass() + " is not available"); + } + } + + private ExpositionFormatWriter getWriter(Format format) { + if (format == Format.PROMETHEUS_TEXT) { + return new PrometheusTextFormatWriter(false); + } else { + // use reflection to avoid a compile-time dependency on the expositionformats module + return new PrometheusProtobufWriter(); + } } /** @@ -174,11 +187,7 @@ private void doRequest(PrometheusRegistry registry, String method) throws IOExce try { HttpURLConnection connection = connectionFactory.create(url); requestHeaders.forEach(connection::setRequestProperty); - if (format == Format.PROMETHEUS_TEXT) { - connection.setRequestProperty("Content-Type", PrometheusTextFormatWriter.CONTENT_TYPE); - } else { - connection.setRequestProperty("Content-Type", PrometheusProtobufWriter.CONTENT_TYPE); - } + connection.setRequestProperty("Content-Type", writer.getContentType()); if (!method.equals("DELETE")) { connection.setDoOutput(true); } @@ -191,11 +200,7 @@ private void doRequest(PrometheusRegistry registry, String method) throws IOExce try { if (!method.equals("DELETE")) { OutputStream outputStream = connection.getOutputStream(); - if (format == Format.PROMETHEUS_TEXT) { - new PrometheusTextFormatWriter(false).write(outputStream, registry.scrape()); - } else { - new PrometheusProtobufWriter().write(outputStream, registry.scrape()); - } + writer.write(outputStream, registry.scrape()); outputStream.flush(); outputStream.close(); } diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index 866da038d..db27d9457 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -17,7 +17,7 @@ mkdir -p $TARGET_DIR rm -rf $PROTO_DIR || true mkdir -p $PROTO_DIR -OLD_PACKAGE=$(sed -nE 's/import (io.prometheus.metrics.expositionformats.generated.*).Metrics;/\1/p' src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java) +OLD_PACKAGE=$(sed -nE 's/import (io.prometheus.metrics.expositionformats.generated.*).Metrics;/\1/p' src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java) PACKAGE="io.prometheus.metrics.expositionformats.generated.com_google_protobuf_${PROTOBUF_VERSION_STRING}" if [[ $OLD_PACKAGE != "$PACKAGE" ]]; then diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index a6975525a..e27a73573 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -25,12 +25,7 @@ io.prometheus - prometheus-metrics-model - ${project.version} - - - io.prometheus - prometheus-metrics-config + prometheus-metrics-exposition-textformats ${project.version} @@ -45,7 +40,6 @@ org.codehaus.mojo build-helper-maven-plugin - 3.6.0 regex-property @@ -90,7 +84,6 @@ exec-maven-plugin org.codehaus.mojo - 3.5.0 Generate Protobuf diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriter.java deleted file mode 100644 index e693e0c15..000000000 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriter.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.prometheus.metrics.expositionformats; - -import io.prometheus.metrics.model.snapshots.MetricSnapshots; -import java.io.IOException; -import java.io.OutputStream; - -public interface ExpositionFormatWriter { - boolean accepts(String acceptHeader); - - /** Text formats use UTF-8 encoding. */ - void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException; - - String getContentType(); -} diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java deleted file mode 100644 index 5b192c23d..000000000 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ProtobufUtil.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.prometheus.metrics.expositionformats; - -import com.google.protobuf.Timestamp; - -public class ProtobufUtil { - - static Timestamp timestampFromMillis(long timestampMillis) { - return Timestamp.newBuilder() - .setSeconds(timestampMillis / 1000L) - .setNanos((int) (timestampMillis % 1000L * 1000000L)) - .build(); - } -} diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java similarity index 94% rename from prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java rename to prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java index fb3b9412d..a52a83adf 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java @@ -1,8 +1,9 @@ -package io.prometheus.metrics.expositionformats; +package io.prometheus.metrics.expositionformats.internal; -import static io.prometheus.metrics.expositionformats.ProtobufUtil.timestampFromMillis; +import static io.prometheus.metrics.expositionformats.internal.ProtobufUtil.timestampFromMillis; import com.google.protobuf.TextFormat; +import io.prometheus.metrics.expositionformats.ExpositionFormatWriter; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.CounterSnapshot; @@ -24,33 +25,19 @@ import java.io.IOException; import java.io.OutputStream; -/** - * Write the Prometheus protobuf format as defined in
    github.com/prometheus/client_model. - * - *

    As of today, this is the only exposition format that supports native histograms. - */ -public class PrometheusProtobufWriter implements ExpositionFormatWriter { - - public static final String CONTENT_TYPE = - "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; " - + "encoding=delimited"; +public class PrometheusProtobufWriterImpl implements ExpositionFormatWriter { @Override public boolean accepts(String acceptHeader) { - if (acceptHeader == null) { - return false; - } else { - return acceptHeader.contains("application/vnd.google.protobuf") - && acceptHeader.contains("proto=io.prometheus.client.MetricFamily"); - } + throw new IllegalStateException("use PrometheusProtobufWriter instead"); } @Override public String getContentType() { - return CONTENT_TYPE; + throw new IllegalStateException("use PrometheusProtobufWriter instead"); } + @Override public String toDebugString(MetricSnapshots metricSnapshots) { StringBuilder stringBuilder = new StringBuilder(); for (MetricSnapshot snapshot : metricSnapshots) { diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/ProtobufUtil.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/ProtobufUtil.java new file mode 100644 index 000000000..75e3d0ef2 --- /dev/null +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/ProtobufUtil.java @@ -0,0 +1,19 @@ +package io.prometheus.metrics.expositionformats.internal; + +import com.google.protobuf.MessageOrBuilder; +import com.google.protobuf.TextFormat; +import com.google.protobuf.Timestamp; + +public class ProtobufUtil { + + static Timestamp timestampFromMillis(long timestampMillis) { + return Timestamp.newBuilder() + .setSeconds(timestampMillis / 1000L) + .setNanos((int) (timestampMillis % 1000L * 1000000L)) + .build(); + } + + public static String shortDebugString(MessageOrBuilder protobufData) { + return TextFormat.printer().emittingSingleLine(true).printToString(protobufData); + } +} diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index e5cd3f089..1d98925e3 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -3,6 +3,8 @@ import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; +import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; @@ -2658,9 +2660,9 @@ private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot } private void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { - PrometheusProtobufWriter writer = new PrometheusProtobufWriter(); + PrometheusProtobufWriterImpl writer = new PrometheusProtobufWriterImpl(); Metrics.MetricFamily protobufData = writer.convert(snapshot); - String actual = TextFormatUtil.shortDebugString(protobufData); + String actual = ProtobufUtil.shortDebugString(protobufData); assertThat(actual).isEqualTo(expected); } } diff --git a/prometheus-metrics-exposition-textformats/pom.xml b/prometheus-metrics-exposition-textformats/pom.xml new file mode 100644 index 000000000..161fb005f --- /dev/null +++ b/prometheus-metrics-exposition-textformats/pom.xml @@ -0,0 +1,36 @@ + + + 4.0.0 + + + io.prometheus + client_java + 1.3.3 + + + prometheus-metrics-exposition-textformats + bundle + + Prometheus Metrics Exposition Text Formats + + Prometheus exposition text formats. + + + + io.prometheus.writer.text + + + + + io.prometheus + prometheus-metrics-model + ${project.version} + + + io.prometheus + prometheus-metrics-config + ${project.version} + + + diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriter.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriter.java new file mode 100644 index 000000000..b472af0e1 --- /dev/null +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriter.java @@ -0,0 +1,32 @@ +package io.prometheus.metrics.expositionformats; + +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +public interface ExpositionFormatWriter { + boolean accepts(String acceptHeader); + + /** Text formats use UTF-8 encoding. */ + void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException; + + default String toDebugString(MetricSnapshots metricSnapshots) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + try { + write(out, metricSnapshots); + return out.toString("UTF-8"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + String getContentType(); + + /** + * Returns true if the writer is available. If false, the writer will throw an exception if used. + */ + default boolean isAvailable() { + return true; + } +} diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java similarity index 100% rename from prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java rename to prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java similarity index 100% rename from prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java rename to prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java new file mode 100644 index 000000000..0572a99a7 --- /dev/null +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java @@ -0,0 +1,73 @@ +package io.prometheus.metrics.expositionformats; + +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import java.io.IOException; +import java.io.OutputStream; +import javax.annotation.Nullable; + +/** + * Write the Prometheus protobuf format as defined in github.com/prometheus/client_model. + * + *

    As of today, this is the only exposition format that supports native histograms. + */ +public class PrometheusProtobufWriter implements ExpositionFormatWriter { + + @Nullable private static final ExpositionFormatWriter DELEGATE = createProtobufWriter(); + + public static final String CONTENT_TYPE = + "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; " + + "encoding=delimited"; + + @Nullable + private static ExpositionFormatWriter createProtobufWriter() { + try { + return Class.forName( + "io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl") + .asSubclass(ExpositionFormatWriter.class) + .getDeclaredConstructor() + .newInstance(); + } catch (Exception e) { + // not in classpath + return null; + } + } + + @Override + public boolean accepts(String acceptHeader) { + if (acceptHeader == null) { + return false; + } else { + return acceptHeader.contains("application/vnd.google.protobuf") + && acceptHeader.contains("proto=io.prometheus.client.MetricFamily"); + } + } + + @Override + public String getContentType() { + return CONTENT_TYPE; + } + + @Override + public boolean isAvailable() { + return DELEGATE != null; + } + + @Override + public String toDebugString(MetricSnapshots metricSnapshots) { + checkAvailable(); + return DELEGATE.toDebugString(metricSnapshots); + } + + @Override + public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException { + checkAvailable(); + DELEGATE.write(out, metricSnapshots); + } + + private void checkAvailable() { + if (DELEGATE == null) { + throw new UnsupportedOperationException("Prometheus protobuf writer not available"); + } + } +} diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java similarity index 100% rename from prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java rename to prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java similarity index 90% rename from prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java rename to prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java index c61a8f1b6..54daaaa3e 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java @@ -1,7 +1,5 @@ package io.prometheus.metrics.expositionformats; -import com.google.protobuf.MessageOrBuilder; -import com.google.protobuf.TextFormat; import io.prometheus.metrics.model.snapshots.Labels; import java.io.IOException; import java.io.OutputStreamWriter; @@ -83,8 +81,4 @@ static void writeLabels( } writer.write('}'); } - - public static String shortDebugString(MessageOrBuilder protobufData) { - return TextFormat.printer().emittingSingleLine(true).printToString(protobufData); - } } diff --git a/prometheus-metrics-instrumentation-caffeine/pom.xml b/prometheus-metrics-instrumentation-caffeine/pom.xml index 56a7b1836..41a7a6e62 100644 --- a/prometheus-metrics-instrumentation-caffeine/pom.xml +++ b/prometheus-metrics-instrumentation-caffeine/pom.xml @@ -44,7 +44,7 @@ io.prometheus - prometheus-metrics-exposition-formats + prometheus-metrics-exposition-textformats ${project.version} test diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index d75143796..ae0d657bc 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -43,7 +43,7 @@ io.prometheus - prometheus-metrics-exposition-formats + prometheus-metrics-exposition-textformats ${project.version} test diff --git a/prometheus-metrics-instrumentation-guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml index c4427df91..6e816ee31 100644 --- a/prometheus-metrics-instrumentation-guava/pom.xml +++ b/prometheus-metrics-instrumentation-guava/pom.xml @@ -41,7 +41,7 @@ io.prometheus - prometheus-metrics-exposition-formats + prometheus-metrics-exposition-textformats ${project.version} test diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index ba433c0b7..a9edf9352 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -37,7 +37,7 @@ io.prometheus - prometheus-metrics-exposition-formats + prometheus-metrics-exposition-textformats ${project.version} test diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index 6d9ff2785..3112db2f9 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -41,7 +41,7 @@ io.prometheus - prometheus-metrics-exposition-formats + prometheus-metrics-exposition-textformats ${project.version} test diff --git a/scripts/build-release.sh b/scripts/build-release.sh new file mode 100755 index 000000000..ecbb07b8e --- /dev/null +++ b/scripts/build-release.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -euo pipefail + +TAG=$1 +VERSION=${TAG#v} + +mvn versions:set -DnewVersion=$VERSION +cd integration-tests/it-spring-boot-smoke-test +mvn versions:set -DnewVersion=$VERSION +mvn -B package -P release -Dmaven.test.skip=true diff --git a/scripts/run-native-tests.sh b/scripts/run-native-tests.sh new file mode 100755 index 000000000..535bc136c --- /dev/null +++ b/scripts/run-native-tests.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -euo pipefail + +./mvnw clean install -DskipTests +cd integration-tests/it-spring-boot-smoke-test +../../mvnw test -PnativeTest From c98423bbecffeaa9a1e0fb0ac8184c823acafb95 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 16:34:10 +0100 Subject: [PATCH 233/870] Bump org.springframework.boot:spring-boot-starter-parent (#1212) Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.5 to 3.4.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.5...v3.4.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 50e9b7669..3982046ee 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -7,7 +7,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.5 + 3.4.0 From bdfe25ce9c3ff3c2940b37bc7192b57b2f351df8 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 25 Nov 2024 17:03:23 +0100 Subject: [PATCH 234/870] fix release (#1213) Signed-off-by: Gregor Zeitlinger --- RELEASING.md | 2 +- scripts/build-release.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASING.md b/RELEASING.md index af5d1b862..a58656474 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,6 +1,6 @@ ## Create a Release -1. Go to https://github.com/prometheus/client_java/releases +1. Go to https://github.com/prometheus/client_java/releases/new 2. Click on "Choose a tag", enter the tag name (e.g. `v0.1.0`), and click "Create a new tag". 3. Click on "Generate release notes" to auto-generate the release notes based on the commits since the last release. 4. Click on "Publish release". diff --git a/scripts/build-release.sh b/scripts/build-release.sh index ecbb07b8e..de3154591 100755 --- a/scripts/build-release.sh +++ b/scripts/build-release.sh @@ -6,6 +6,7 @@ TAG=$1 VERSION=${TAG#v} mvn versions:set -DnewVersion=$VERSION +mvn install -DskipTests=true # to find the new version in the next step cd integration-tests/it-spring-boot-smoke-test mvn versions:set -DnewVersion=$VERSION mvn -B package -P release -Dmaven.test.skip=true From d0e2dd35d4885b47954d120cef539c64d10d403d Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 25 Nov 2024 18:01:08 +0100 Subject: [PATCH 235/870] fix release (#1214) * set snapshot version Signed-off-by: Gregor Zeitlinger * fix release Signed-off-by: Gregor Zeitlinger * fix release Signed-off-by: Gregor Zeitlinger * fix release Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: Gregor Zeitlinger --- benchmarks/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exemplars-tail-sampling/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-multi-target/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter/it-exporter-httpserver-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-exporter/it-no-protobuf-test/pom.xml | 2 +- integration-tests/it-exporter/pom.xml | 2 +- integration-tests/it-pushgateway/pom.xml | 2 +- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- integration-tests/pom.xml | 2 +- pom.xml | 2 +- prometheus-metrics-bom/pom.xml | 2 +- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- prometheus-metrics-exporter-httpserver/pom.xml | 2 +- .../pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exporter-pushgateway/pom.xml | 2 +- prometheus-metrics-exporter-servlet-jakarta/pom.xml | 2 +- prometheus-metrics-exporter-servlet-javax/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- prometheus-metrics-exposition-textformats/pom.xml | 2 +- prometheus-metrics-instrumentation-caffeine/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard5/pom.xml | 2 +- prometheus-metrics-instrumentation-guava/pom.xml | 2 +- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- prometheus-metrics-simpleclient-bridge/pom.xml | 2 +- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../prometheus-metrics-tracer-initializer/pom.xml | 2 +- .../prometheus-metrics-tracer-otel-agent/pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- scripts/build-release.sh | 3 --- 48 files changed, 47 insertions(+), 50 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 105995a0b..de53b2edd 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT benchmarks diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 803fcb1e3..9aab1d452 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.3.3 + 10.0.0-SNAPSHOT example-greeting-service diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index e89809ff8..40efc62f1 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 1.3.3 + 10.0.0-SNAPSHOT example-hello-world-app diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index 45886970c..3c62dfb66 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.3 + 10.0.0-SNAPSHOT example-exemplars-tail-sampling diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index 3a102819b..74124c6bd 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.3 + 10.0.0-SNAPSHOT example-exporter-httpserver diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index c69e9a895..8ba600b73 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.3 + 10.0.0-SNAPSHOT example-exporter-multi-target diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index 01439da7b..e8546c5a0 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.3 + 10.0.0-SNAPSHOT example-exporter-opentelemetry diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 46c07fc41..355f8e830 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.3 + 10.0.0-SNAPSHOT example-exporter-servlet-tomcat diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index 203fb3af6..3aebe8278 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.3 + 10.0.0-SNAPSHOT example-native-histogram diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index 2019d69b6..112b775d9 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.3 + 10.0.0-SNAPSHOT example-prometheus-properties diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index 481d8a589..abd461450 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 1.3.3 + 10.0.0-SNAPSHOT example-simpleclient-bridge diff --git a/examples/pom.xml b/examples/pom.xml index e33b1766a..3e7864ff1 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT examples diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index 6c7044978..511cf9a8c 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -6,7 +6,7 @@ io.prometheus integration-tests - 1.3.3 + 10.0.0-SNAPSHOT it-common diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index 2b6d6c127..25696a247 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.3 + 10.0.0-SNAPSHOT it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml b/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml index 67e20e8e2..4a0dc8772 100644 --- a/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml +++ b/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 1.3.3 + 10.0.0-SNAPSHOT it-exporter-no-protobuf diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index d52bf4938..4c4670d2f 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.3 + 10.0.0-SNAPSHOT it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 34c77ddb5..78a94b724 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.3 + 10.0.0-SNAPSHOT it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 4e72d1db9..5a6496ba2 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 1.3.3 + 10.0.0-SNAPSHOT it-exporter-test diff --git a/integration-tests/it-exporter/it-no-protobuf-test/pom.xml b/integration-tests/it-exporter/it-no-protobuf-test/pom.xml index f10cd3e16..8ceda5e8f 100644 --- a/integration-tests/it-exporter/it-no-protobuf-test/pom.xml +++ b/integration-tests/it-exporter/it-no-protobuf-test/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 1.3.3 + 10.0.0-SNAPSHOT it-no-protobuf-test diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index 4badf828d..4ea63136e 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.3.3 + 10.0.0-SNAPSHOT it-exporter diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index 050d6c37a..15f99ff46 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 1.3.3 + 10.0.0-SNAPSHOT it-pushgateway diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 3982046ee..fc5fc6083 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -13,7 +13,7 @@ io.prometheus it-spring-boot-smoke-test - 1.3.3 + 10.0.0-SNAPSHOT Integration Test - Spring Smoke Tests diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index ece364ae9..41adf0e40 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT integration-tests diff --git a/pom.xml b/pom.xml index ac7d26403..7faf167c0 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT Prometheus Metrics Library http://github.com/prometheus/client_java diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index acdee81fb..d1299470b 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-bom diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index 738991196..420ed8a13 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 18a52afca..7305675bd 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index cea87262b..e54f925fd 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index e6bd442b4..5e639f3f8 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml b/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml index 0d6f63623..a1ee03d71 100644 --- a/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry-otel-agent-resources diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 462ff19d1..ff6effb5c 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index 4fb54c66b..a3881f472 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-exporter-pushgateway diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 4d20171b5..3cf77ca86 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml index a2918175b..b5657ffb0 100644 --- a/prometheus-metrics-exporter-servlet-javax/pom.xml +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-exporter-servlet-javax diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index e27a73573..1811e2c7e 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-exposition-textformats/pom.xml b/prometheus-metrics-exposition-textformats/pom.xml index 161fb005f..6a38dd67b 100644 --- a/prometheus-metrics-exposition-textformats/pom.xml +++ b/prometheus-metrics-exposition-textformats/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-exposition-textformats diff --git a/prometheus-metrics-instrumentation-caffeine/pom.xml b/prometheus-metrics-instrumentation-caffeine/pom.xml index 41a7a6e62..0de05d99c 100644 --- a/prometheus-metrics-instrumentation-caffeine/pom.xml +++ b/prometheus-metrics-instrumentation-caffeine/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-instrumentation-caffeine diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index ae0d657bc..e79f236ef 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-instrumentation-dropwizard5 diff --git a/prometheus-metrics-instrumentation-guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml index 6e816ee31..08ea80411 100644 --- a/prometheus-metrics-instrumentation-guava/pom.xml +++ b/prometheus-metrics-instrumentation-guava/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-instrumentation-guava diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index a9edf9352..24758db8c 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index c7b14885f..4e803ee5a 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-model diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index 3112db2f9..76f0b203d 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-simpleclient-bridge diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index ad5c86b50..885120d4a 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index a7a4ab485..fcdf81d2f 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index 88689d6db..432fa0dfa 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index 0044ef763..d4efbd099 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index a08bb4daa..72fdb71d6 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 1.3.3 + 10.0.0-SNAPSHOT prometheus-metrics-tracer-otel diff --git a/scripts/build-release.sh b/scripts/build-release.sh index de3154591..8cbc50a61 100755 --- a/scripts/build-release.sh +++ b/scripts/build-release.sh @@ -5,8 +5,5 @@ set -euo pipefail TAG=$1 VERSION=${TAG#v} -mvn versions:set -DnewVersion=$VERSION -mvn install -DskipTests=true # to find the new version in the next step -cd integration-tests/it-spring-boot-smoke-test mvn versions:set -DnewVersion=$VERSION mvn -B package -P release -Dmaven.test.skip=true From 28f3cc9f4d10a7aa6a721310c5a613798efb8281 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 17:29:18 +0100 Subject: [PATCH 236/870] Bump org.wiremock:wiremock from 3.9.2 to 3.10.0 (#1218) Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.9.2 to 3.10.0. - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.9.2...3.10.0) --- updated-dependencies: - dependency-name: org.wiremock:wiremock dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index ff6effb5c..5145d1504 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -73,7 +73,7 @@ org.wiremock wiremock - 3.9.2 + 3.10.0 test From 049a61abc181b71f91ed12ea64f0ce56b6042888 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 17:29:48 +0100 Subject: [PATCH 237/870] Bump org.apache.felix:maven-bundle-plugin from 5.1.9 to 6.0.0 (#1216) Bumps org.apache.felix:maven-bundle-plugin from 5.1.9 to 6.0.0. --- updated-dependencies: - dependency-name: org.apache.felix:maven-bundle-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7faf167c0..da02be263 100644 --- a/pom.xml +++ b/pom.xml @@ -335,7 +335,7 @@ org.apache.felix maven-bundle-plugin - 5.1.9 + 6.0.0 true From 99d3dec20372ddd26480bb9405c398b6fb9ab016 Mon Sep 17 00:00:00 2001 From: Doug Hoard Date: Tue, 3 Dec 2024 23:00:49 -0500 Subject: [PATCH 238/870] Changed GitHub action containers (#1221) Signed-off-by: dhoard --- .github/workflows/acceptance-tests.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/github-pages.yaml | 4 ++-- .github/workflows/native-tests.yml | 2 +- .github/workflows/release.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 590c12946..e6a64579e 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -8,7 +8,7 @@ on: jobs: acceptance-tests: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: Check out oats diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dd0668345..cd607b3eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: Setup ASDF diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 7ca7128b5..87daffd26 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -29,7 +29,7 @@ defaults: jobs: # Build job build: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 env: HUGO_VERSION: 0.115.4 steps: @@ -82,7 +82,7 @@ jobs: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 needs: build steps: - name: Deploy to GitHub Pages diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index f632f730f..9a4ed50a6 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -8,7 +8,7 @@ on: jobs: native-tests: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: Set up JDK diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7e7d81574..57c7a6f53 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,7 +8,7 @@ on: jobs: deploy: if: ${{ github.repository == 'prometheus/client_java' }} - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Debug gpg key - remove after debugging From 9a0848d82840b00d5c42f15606f1adda980f4ddf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 08:40:16 -0500 Subject: [PATCH 239/870] Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.11.1 to 3.11.2 (#1225) Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.11.1 to 3.11.2. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.11.1...maven-javadoc-plugin-3.11.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index da02be263..212fe042d 100644 --- a/pom.xml +++ b/pom.xml @@ -195,7 +195,7 @@ maven-javadoc-plugin - 3.11.1 + 3.11.2 maven-gpg-plugin From e486e4d0e4a78203a529eea2036320cd7ebaae66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:54:47 +0100 Subject: [PATCH 240/870] Bump com.google.protobuf:protobuf-java from 4.28.3 to 4.29.1 (#1222) * Bump com.google.protobuf:protobuf-java from 4.28.3 to 4.29.1 Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.28.3 to 4.29.1. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl) - [Commits](https://github.com/protocolbuffers/protobuf/commits) --- updated-dependencies: - dependency-name: com.google.protobuf:protobuf-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * update protobuf Signed-off-by: Gregor Zeitlinger --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Doug Hoard Co-authored-by: Gregor Zeitlinger --- .tool-versions | 2 +- .../client/it/common/ExporterTest.java | 2 +- .../metrics/it/exporter/test/ExporterIT.java | 2 +- .../it/springboot/ApplicationTest.java | 2 +- .../metrics/core/metrics/CounterTest.java | 2 +- .../metrics/core/metrics/HistogramTest.java | 2 +- .../metrics/core/metrics/InfoTest.java | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- .../Metrics.java | 1838 ++++++++--------- .../PrometheusProtobufWriterImpl.java | 2 +- .../ExpositionFormatsTest.java | 2 +- 11 files changed, 929 insertions(+), 929 deletions(-) rename prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/{com_google_protobuf_4_28_3 => com_google_protobuf_4_29_1}/Metrics.java (88%) diff --git a/.tool-versions b/.tool-versions index 0847e3abe..a0b8f5ad4 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ java temurin-17.0.13+11 -protoc 28.3 +protoc 29.1 diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java index e1b194d7c..7f8d84715 100644 --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index 4819ed924..38ebf8f31 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -5,7 +5,7 @@ import com.google.common.io.Resources; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics; import java.io.IOException; import java.net.URISyntaxException; import java.net.URLEncoder; diff --git a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java index 3d893d894..f986b6a24 100644 --- a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java +++ b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java @@ -3,7 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics; import java.io.IOException; import java.net.URL; import java.util.List; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index d2bf832d5..6ab4e74ca 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -6,7 +6,7 @@ import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.CounterSnapshot; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index 5a8d7cda8..fbd89ea15 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -8,7 +8,7 @@ import io.prometheus.metrics.core.datapoints.DistributionDataPoint; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index 427b6a55f..54f9b6032 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.Labels; diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 1811e2c7e..7a063dc35 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -19,7 +19,7 @@ io.prometheus.metrics.expositionformats - 4.28.3 + 4.29.1 diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_28_3/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_1/Metrics.java similarity index 88% rename from prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_28_3/Metrics.java rename to prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_1/Metrics.java index ffa9b1d87..85e9cbb23 100644 --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_28_3/Metrics.java +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_1/Metrics.java @@ -2,9 +2,9 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: src/main/protobuf/metrics.proto -// Protobuf Java Version: 4.28.3 +// Protobuf Java Version: 4.29.1 -package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3; +package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1; public final class Metrics { private Metrics() {} @@ -12,8 +12,8 @@ private Metrics() {} com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 28, - /* patch= */ 3, + /* minor= */ 29, + /* patch= */ 1, /* suffix= */ "", Metrics.class.getName()); } @@ -85,8 +85,8 @@ public enum MetricType com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 28, - /* patch= */ 3, + /* minor= */ 29, + /* patch= */ 1, /* suffix= */ "", MetricType.class.getName()); } @@ -192,7 +192,7 @@ public MetricType findValueByNumber(int number) { } public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.getDescriptor().getEnumTypes().get(0); + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.getDescriptor().getEnumTypes().get(0); } private static final MetricType[] VALUES = values(); @@ -265,8 +265,8 @@ public static final class LabelPair extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 28, - /* patch= */ 3, + /* minor= */ 29, + /* patch= */ 1, /* suffix= */ "", LabelPair.class.getName()); } @@ -281,15 +281,15 @@ private LabelPair() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder.class); } private int bitField0_; @@ -436,10 +436,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair) obj; if (hasName() != other.hasName()) return false; if (hasName()) { @@ -475,44 +475,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -520,26 +520,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -552,7 +552,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -573,21 +573,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.newBuilder() private Builder() { } @@ -609,17 +609,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -627,14 +627,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -650,16 +650,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance()) return this; if (other.hasName()) { name_ = other.name_; bitField0_ |= 0x00000001; @@ -887,12 +887,12 @@ public Builder setValueBytes( } // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -928,7 +928,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -961,8 +961,8 @@ public static final class Gauge extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 28, - /* patch= */ 3, + /* minor= */ 29, + /* patch= */ 1, /* suffix= */ "", Gauge.class.getName()); } @@ -975,15 +975,15 @@ private Gauge() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder.class); } private int bitField0_; @@ -1046,10 +1046,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -1078,44 +1078,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1123,26 +1123,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1155,7 +1155,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1176,21 +1176,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.GaugeOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.newBuilder() private Builder() { } @@ -1211,17 +1211,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1229,14 +1229,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1248,16 +1248,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -1353,12 +1353,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -1394,7 +1394,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -1424,11 +1424,11 @@ public interface CounterOrBuilder extends * optional .io.prometheus.client.Exemplar exemplar = 2; * @return The exemplar. */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getExemplar(); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar(); /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder(); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder(); /** * optional .google.protobuf.Timestamp created_timestamp = 3; @@ -1457,8 +1457,8 @@ public static final class Counter extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 28, - /* patch= */ 3, + /* minor= */ 29, + /* patch= */ 1, /* suffix= */ "", Counter.class.getName()); } @@ -1471,15 +1471,15 @@ private Counter() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder.class); } private int bitField0_; @@ -1503,7 +1503,7 @@ public double getValue() { } public static final int EXEMPLAR_FIELD_NUMBER = 2; - private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar exemplar_; + private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar exemplar_; /** * optional .io.prometheus.client.Exemplar exemplar = 2; * @return Whether the exemplar field is set. @@ -1517,15 +1517,15 @@ public boolean hasExemplar() { * @return The exemplar. */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getExemplar() { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance() : exemplar_; + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar() { + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance() : exemplar_; + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; } public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 3; @@ -1608,10 +1608,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -1658,44 +1658,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1703,26 +1703,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1735,7 +1735,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1756,21 +1756,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.CounterOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -1808,17 +1808,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1826,14 +1826,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1857,16 +1857,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -1978,9 +1978,9 @@ public Builder clearValue() { return this; } - private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar exemplar_; + private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar exemplar_; private com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder> exemplarBuilder_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> exemplarBuilder_; /** * optional .io.prometheus.client.Exemplar exemplar = 2; * @return Whether the exemplar field is set. @@ -1992,9 +1992,9 @@ public boolean hasExemplar() { * optional .io.prometheus.client.Exemplar exemplar = 2; * @return The exemplar. */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getExemplar() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar() { if (exemplarBuilder_ == null) { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance() : exemplar_; + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; } else { return exemplarBuilder_.getMessage(); } @@ -2002,7 +2002,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar value) { + public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) { if (exemplarBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -2019,7 +2019,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com * optional .io.prometheus.client.Exemplar exemplar = 2; */ public Builder setExemplar( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder builderForValue) { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder builderForValue) { if (exemplarBuilder_ == null) { exemplar_ = builderForValue.build(); } else { @@ -2032,11 +2032,11 @@ public Builder setExemplar( /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar value) { + public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) { if (exemplarBuilder_ == null) { if (((bitField0_ & 0x00000002) != 0) && exemplar_ != null && - exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance()) { + exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance()) { getExemplarBuilder().mergeFrom(value); } else { exemplar_ = value; @@ -2066,7 +2066,7 @@ public Builder clearExemplar() { /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder getExemplarBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder getExemplarBuilder() { bitField0_ |= 0x00000002; onChanged(); return getExemplarFieldBuilder().getBuilder(); @@ -2074,23 +2074,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { if (exemplarBuilder_ != null) { return exemplarBuilder_.getMessageOrBuilder(); } else { return exemplar_ == null ? - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance() : exemplar_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; } } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ private com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder> + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> getExemplarFieldBuilder() { if (exemplarBuilder_ == null) { exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder>( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder>( getExemplar(), getParentForChildren(), isClean()); @@ -2224,12 +2224,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -2265,7 +2265,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -2309,8 +2309,8 @@ public static final class Quantile extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 28, - /* patch= */ 3, + /* minor= */ 29, + /* patch= */ 1, /* suffix= */ "", Quantile.class.getName()); } @@ -2323,15 +2323,15 @@ private Quantile() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder.class); } private int bitField0_; @@ -2420,10 +2420,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile) obj; if (hasQuantile() != other.hasQuantile()) return false; if (hasQuantile()) { @@ -2463,44 +2463,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2508,26 +2508,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2540,7 +2540,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -2561,21 +2561,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.QuantileOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.newBuilder() private Builder() { } @@ -2597,17 +2597,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -2615,14 +2615,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -2638,16 +2638,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.getDefaultInstance()) return this; if (other.hasQuantile()) { setQuantile(other.getQuantile()); } @@ -2791,12 +2791,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -2832,7 +2832,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -2867,12 +2867,12 @@ public interface SummaryOrBuilder extends /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - java.util.List + java.util.List getQuantileList(); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile getQuantile(int index); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getQuantile(int index); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @@ -2880,12 +2880,12 @@ public interface SummaryOrBuilder extends /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - java.util.List + java.util.List getQuantileOrBuilderList(); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.QuantileOrBuilder getQuantileOrBuilder( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index); /** @@ -2915,8 +2915,8 @@ public static final class Summary extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 28, - /* patch= */ 3, + /* minor= */ 29, + /* patch= */ 1, /* suffix= */ "", Summary.class.getName()); } @@ -2930,15 +2930,15 @@ private Summary() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder.class); } private int bitField0_; @@ -2982,19 +2982,19 @@ public double getSampleSum() { public static final int QUANTILE_FIELD_NUMBER = 3; @SuppressWarnings("serial") - private java.util.List quantile_; + private java.util.List quantile_; /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public java.util.List getQuantileList() { + public java.util.List getQuantileList() { return quantile_; } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public java.util.List + public java.util.List getQuantileOrBuilderList() { return quantile_; } @@ -3009,14 +3009,14 @@ public int getQuantileCount() { * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile getQuantile(int index) { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getQuantile(int index) { return quantile_.get(index); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.QuantileOrBuilder getQuantileOrBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index) { return quantile_.get(index); } @@ -3108,10 +3108,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary) obj; if (hasSampleCount() != other.hasSampleCount()) return false; if (hasSampleCount()) { @@ -3165,44 +3165,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3210,26 +3210,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3242,7 +3242,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -3263,21 +3263,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.SummaryOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -3318,17 +3318,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -3336,15 +3336,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary(this); buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary result) { + private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary result) { if (quantileBuilder_ == null) { if (((bitField0_ & 0x00000004) != 0)) { quantile_ = java.util.Collections.unmodifiableList(quantile_); @@ -3356,7 +3356,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats. } } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -3378,16 +3378,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance()) return this; if (other.hasSampleCount()) { setSampleCount(other.getSampleCount()); } @@ -3460,9 +3460,9 @@ public Builder mergeFrom( break; } // case 17 case 26: { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile m = + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile m = input.readMessage( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.parser(), + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.parser(), extensionRegistry); if (quantileBuilder_ == null) { ensureQuantileIsMutable(); @@ -3576,22 +3576,22 @@ public Builder clearSampleSum() { return this; } - private java.util.List quantile_ = + private java.util.List quantile_ = java.util.Collections.emptyList(); private void ensureQuantileIsMutable() { if (!((bitField0_ & 0x00000004) != 0)) { - quantile_ = new java.util.ArrayList(quantile_); + quantile_ = new java.util.ArrayList(quantile_); bitField0_ |= 0x00000004; } } private com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.QuantileOrBuilder> quantileBuilder_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder> quantileBuilder_; /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List getQuantileList() { + public java.util.List getQuantileList() { if (quantileBuilder_ == null) { return java.util.Collections.unmodifiableList(quantile_); } else { @@ -3611,7 +3611,7 @@ public int getQuantileCount() { /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile getQuantile(int index) { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getQuantile(int index) { if (quantileBuilder_ == null) { return quantile_.get(index); } else { @@ -3622,7 +3622,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder setQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile value) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3639,7 +3639,7 @@ public Builder setQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder setQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder builderForValue) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.set(index, builderForValue.build()); @@ -3652,7 +3652,7 @@ public Builder setQuantile( /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile value) { + public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3669,7 +3669,7 @@ public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile value) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3686,7 +3686,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder builderForValue) { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.add(builderForValue.build()); @@ -3700,7 +3700,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder builderForValue) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.add(index, builderForValue.build()); @@ -3714,7 +3714,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addAllQuantile( - java.lang.Iterable values) { + java.lang.Iterable values) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( @@ -3754,14 +3754,14 @@ public Builder removeQuantile(int index) { /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder getQuantileBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder getQuantileBuilder( int index) { return getQuantileFieldBuilder().getBuilder(index); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.QuantileOrBuilder getQuantileOrBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index) { if (quantileBuilder_ == null) { return quantile_.get(index); } else { @@ -3771,7 +3771,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List + public java.util.List getQuantileOrBuilderList() { if (quantileBuilder_ != null) { return quantileBuilder_.getMessageOrBuilderList(); @@ -3782,31 +3782,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder addQuantileBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder addQuantileBuilder() { return getQuantileFieldBuilder().addBuilder( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.getDefaultInstance()); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.getDefaultInstance()); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder addQuantileBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder addQuantileBuilder( int index) { return getQuantileFieldBuilder().addBuilder( - index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.getDefaultInstance()); + index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.getDefaultInstance()); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List + public java.util.List getQuantileBuilderList() { return getQuantileFieldBuilder().getBuilderList(); } private com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.QuantileOrBuilder> + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder> getQuantileFieldBuilder() { if (quantileBuilder_ == null) { quantileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.QuantileOrBuilder>( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder>( quantile_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), @@ -3941,12 +3941,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -3982,7 +3982,7 @@ public com.google.protobuf.Parser

    getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -4015,8 +4015,8 @@ public static final class Untyped extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 28, - /* patch= */ 3, + /* minor= */ 29, + /* patch= */ 1, /* suffix= */ "", Untyped.class.getName()); } @@ -4029,15 +4029,15 @@ private Untyped() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder.class); } private int bitField0_; @@ -4100,10 +4100,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -4132,44 +4132,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -4177,26 +4177,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -4209,7 +4209,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -4230,21 +4230,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.UntypedOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.newBuilder() private Builder() { } @@ -4265,17 +4265,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -4283,14 +4283,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -4302,16 +4302,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -4407,12 +4407,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -4448,7 +4448,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -4506,7 +4506,7 @@ public interface HistogramOrBuilder extends * * repeated .io.prometheus.client.Bucket bucket = 3; */ - java.util.List + java.util.List getBucketList(); /** *
    @@ -4515,7 +4515,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket getBucket(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getBucket(int index);
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -4531,7 +4531,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketOrBuilderList();
         /**
          * 
    @@ -4540,7 +4540,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index);
     
         /**
    @@ -4649,7 +4649,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanList();
         /**
          * 
    @@ -4658,7 +4658,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan getNegativeSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getNegativeSpan(int index);
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -4674,7 +4674,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanOrBuilderList();
         /**
          * 
    @@ -4683,7 +4683,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index);
     
         /**
    @@ -4760,7 +4760,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanList();
         /**
          * 
    @@ -4772,7 +4772,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan getPositiveSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getPositiveSpan(int index);
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -4794,7 +4794,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanOrBuilderList();
         /**
          * 
    @@ -4806,7 +4806,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index);
     
         /**
    @@ -4880,7 +4880,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsList();
         /**
          * 
    @@ -4889,7 +4889,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getExemplars(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplars(int index);
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -4905,7 +4905,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsOrBuilderList();
         /**
          * 
    @@ -4914,7 +4914,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index);
       }
       /**
    @@ -4929,8 +4929,8 @@ public static final class Histogram extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 28,
    -        /* patch= */ 3,
    +        /* minor= */ 29,
    +        /* patch= */ 1,
             /* suffix= */ "",
             Histogram.class.getName());
         }
    @@ -4951,15 +4951,15 @@ private Histogram() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder.class);
         }
     
         private int bitField0_;
    @@ -5030,7 +5030,7 @@ public double getSampleSum() {
     
         public static final int BUCKET_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List bucket_;
    +    private java.util.List bucket_;
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -5039,7 +5039,7 @@ public double getSampleSum() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List getBucketList() {
    +    public java.util.List getBucketList() {
           return bucket_;
         }
         /**
    @@ -5050,7 +5050,7 @@ public java.util.Listrepeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getBucketOrBuilderList() {
           return bucket_;
         }
    @@ -5073,7 +5073,7 @@ public int getBucketCount() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket getBucket(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getBucket(int index) {
           return bucket_.get(index);
         }
         /**
    @@ -5084,7 +5084,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index) {
           return bucket_.get(index);
         }
    @@ -5233,7 +5233,7 @@ public double getZeroCountFloat() {
     
         public static final int NEGATIVE_SPAN_FIELD_NUMBER = 9;
         @SuppressWarnings("serial")
    -    private java.util.List negativeSpan_;
    +    private java.util.List negativeSpan_;
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -5242,7 +5242,7 @@ public double getZeroCountFloat() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List getNegativeSpanList() {
    +    public java.util.List getNegativeSpanList() {
           return negativeSpan_;
         }
         /**
    @@ -5253,7 +5253,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getNegativeSpanOrBuilderList() {
           return negativeSpan_;
         }
    @@ -5276,7 +5276,7 @@ public int getNegativeSpanCount() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan getNegativeSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getNegativeSpan(int index) {
           return negativeSpan_.get(index);
         }
         /**
    @@ -5287,7 +5287,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index) {
           return negativeSpan_.get(index);
         }
    @@ -5382,7 +5382,7 @@ public double getNegativeCount(int index) {
     
         public static final int POSITIVE_SPAN_FIELD_NUMBER = 12;
         @SuppressWarnings("serial")
    -    private java.util.List positiveSpan_;
    +    private java.util.List positiveSpan_;
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5394,7 +5394,7 @@ public double getNegativeCount(int index) {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List getPositiveSpanList() {
    +    public java.util.List getPositiveSpanList() {
           return positiveSpan_;
         }
         /**
    @@ -5408,7 +5408,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getPositiveSpanOrBuilderList() {
           return positiveSpan_;
         }
    @@ -5437,7 +5437,7 @@ public int getPositiveSpanCount() {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan getPositiveSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getPositiveSpan(int index) {
           return positiveSpan_.get(index);
         }
         /**
    @@ -5451,7 +5451,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index) {
           return positiveSpan_.get(index);
         }
    @@ -5546,7 +5546,7 @@ public double getPositiveCount(int index) {
     
         public static final int EXEMPLARS_FIELD_NUMBER = 16;
         @SuppressWarnings("serial")
    -    private java.util.List exemplars_;
    +    private java.util.List exemplars_;
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -5555,7 +5555,7 @@ public double getPositiveCount(int index) {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List getExemplarsList() {
    +    public java.util.List getExemplarsList() {
           return exemplars_;
         }
         /**
    @@ -5566,7 +5566,7 @@ public java.util.Listrepeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getExemplarsOrBuilderList() {
           return exemplars_;
         }
    @@ -5589,7 +5589,7 @@ public int getExemplarsCount() {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getExemplars(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplars(int index) {
           return exemplars_.get(index);
         }
         /**
    @@ -5600,7 +5600,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index) {
           return exemplars_.get(index);
         }
    @@ -5764,10 +5764,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -5915,44 +5915,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5960,26 +5960,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5992,7 +5992,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -6013,21 +6013,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.HistogramOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -6101,17 +6101,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -6119,15 +6119,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram result) {
             if (bucketBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 bucket_ = java.util.Collections.unmodifiableList(bucket_);
    @@ -6166,7 +6166,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -6224,16 +6224,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -6443,9 +6443,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.parser(),
                             extensionRegistry);
                     if (bucketBuilder_ == null) {
                       ensureBucketIsMutable();
    @@ -6481,9 +6481,9 @@ public Builder mergeFrom(
                     break;
                   } // case 65
                   case 74: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (negativeSpanBuilder_ == null) {
                       ensureNegativeSpanIsMutable();
    @@ -6527,9 +6527,9 @@ public Builder mergeFrom(
                     break;
                   } // case 90
                   case 98: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (positiveSpanBuilder_ == null) {
                       ensurePositiveSpanIsMutable();
    @@ -6580,9 +6580,9 @@ public Builder mergeFrom(
                     break;
                   } // case 122
                   case 130: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.parser(),
                             extensionRegistry);
                     if (exemplarsBuilder_ == null) {
                       ensureExemplarsIsMutable();
    @@ -6745,17 +6745,17 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List bucket_ =
    +      private java.util.List bucket_ =
             java.util.Collections.emptyList();
           private void ensureBucketIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          bucket_ = new java.util.ArrayList(bucket_);
    +          bucket_ = new java.util.ArrayList(bucket_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketOrBuilder> bucketBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder> bucketBuilder_;
     
           /**
            * 
    @@ -6764,7 +6764,7 @@ private void ensureBucketIsMutable() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List getBucketList() {
    +      public java.util.List getBucketList() {
             if (bucketBuilder_ == null) {
               return java.util.Collections.unmodifiableList(bucket_);
             } else {
    @@ -6792,7 +6792,7 @@ public int getBucketCount() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket getBucket(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getBucket(int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);
             } else {
    @@ -6807,7 +6807,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6828,7 +6828,7 @@ public Builder setBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.set(index, builderForValue.build());
    @@ -6845,7 +6845,7 @@ public Builder setBucket(
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket value) {
    +      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6866,7 +6866,7 @@ public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6887,7 +6887,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(builderForValue.build());
    @@ -6905,7 +6905,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(index, builderForValue.build());
    @@ -6923,7 +6923,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addAllBucket(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -6975,7 +6975,7 @@ public Builder removeBucket(int index) {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder getBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder getBucketBuilder(
               int index) {
             return getBucketFieldBuilder().getBuilder(index);
           }
    @@ -6986,7 +6986,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketOrBuilder getBucketOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder getBucketOrBuilder(
               int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);  } else {
    @@ -7000,7 +7000,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketOrBuilderList() {
             if (bucketBuilder_ != null) {
               return bucketBuilder_.getMessageOrBuilderList();
    @@ -7015,9 +7015,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder addBucketBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder addBucketBuilder() {
             return getBucketFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7026,10 +7026,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder addBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder addBucketBuilder(
               int index) {
             return getBucketFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7038,16 +7038,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketBuilderList() {
             return getBucketFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder> 
               getBucketFieldBuilder() {
             if (bucketBuilder_ == null) {
               bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder>(
                       bucket_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -7418,17 +7418,17 @@ public Builder clearZeroCountFloat() {
             return this;
           }
     
    -      private java.util.List negativeSpan_ =
    +      private java.util.List negativeSpan_ =
             java.util.Collections.emptyList();
           private void ensureNegativeSpanIsMutable() {
             if (!((bitField0_ & 0x00000200) != 0)) {
    -          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
    +          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
               bitField0_ |= 0x00000200;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
     
           /**
            * 
    @@ -7437,7 +7437,7 @@ private void ensureNegativeSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List getNegativeSpanList() {
    +      public java.util.List getNegativeSpanList() {
             if (negativeSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(negativeSpan_);
             } else {
    @@ -7465,7 +7465,7 @@ public int getNegativeSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan getNegativeSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getNegativeSpan(int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);
             } else {
    @@ -7480,7 +7480,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7501,7 +7501,7 @@ public Builder setNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.set(index, builderForValue.build());
    @@ -7518,7 +7518,7 @@ public Builder setNegativeSpan(
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan value) {
    +      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7539,7 +7539,7 @@ public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7560,7 +7560,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(builderForValue.build());
    @@ -7578,7 +7578,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(index, builderForValue.build());
    @@ -7596,7 +7596,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addAllNegativeSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -7648,7 +7648,7 @@ public Builder removeNegativeSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
               int index) {
             return getNegativeSpanFieldBuilder().getBuilder(index);
           }
    @@ -7659,7 +7659,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
               int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);  } else {
    @@ -7673,7 +7673,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanOrBuilderList() {
             if (negativeSpanBuilder_ != null) {
               return negativeSpanBuilder_.getMessageOrBuilderList();
    @@ -7688,9 +7688,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
             return getNegativeSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7699,10 +7699,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
               int index) {
             return getNegativeSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7711,16 +7711,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanBuilderList() {
             return getNegativeSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder> 
               getNegativeSpanFieldBuilder() {
             if (negativeSpanBuilder_ == null) {
               negativeSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder>(
                       negativeSpan_,
                       ((bitField0_ & 0x00000200) != 0),
                       getParentForChildren(),
    @@ -7974,17 +7974,17 @@ public Builder clearNegativeCount() {
             return this;
           }
     
    -      private java.util.List positiveSpan_ =
    +      private java.util.List positiveSpan_ =
             java.util.Collections.emptyList();
           private void ensurePositiveSpanIsMutable() {
             if (!((bitField0_ & 0x00001000) != 0)) {
    -          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
    +          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
               bitField0_ |= 0x00001000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
     
           /**
            * 
    @@ -7996,7 +7996,7 @@ private void ensurePositiveSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List getPositiveSpanList() {
    +      public java.util.List getPositiveSpanList() {
             if (positiveSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(positiveSpan_);
             } else {
    @@ -8030,7 +8030,7 @@ public int getPositiveSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan getPositiveSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getPositiveSpan(int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);
             } else {
    @@ -8048,7 +8048,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8072,7 +8072,7 @@ public Builder setPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.set(index, builderForValue.build());
    @@ -8092,7 +8092,7 @@ public Builder setPositiveSpan(
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan value) {
    +      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8116,7 +8116,7 @@ public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8140,7 +8140,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(builderForValue.build());
    @@ -8161,7 +8161,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(index, builderForValue.build());
    @@ -8182,7 +8182,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addAllPositiveSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8243,7 +8243,7 @@ public Builder removePositiveSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
               int index) {
             return getPositiveSpanFieldBuilder().getBuilder(index);
           }
    @@ -8257,7 +8257,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
               int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);  } else {
    @@ -8274,7 +8274,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanOrBuilderList() {
             if (positiveSpanBuilder_ != null) {
               return positiveSpanBuilder_.getMessageOrBuilderList();
    @@ -8292,9 +8292,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
             return getPositiveSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8306,10 +8306,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
               int index) {
             return getPositiveSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8321,16 +8321,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanBuilderList() {
             return getPositiveSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder> 
               getPositiveSpanFieldBuilder() {
             if (positiveSpanBuilder_ == null) {
               positiveSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder>(
                       positiveSpan_,
                       ((bitField0_ & 0x00001000) != 0),
                       getParentForChildren(),
    @@ -8584,17 +8584,17 @@ public Builder clearPositiveCount() {
             return this;
           }
     
    -      private java.util.List exemplars_ =
    +      private java.util.List exemplars_ =
             java.util.Collections.emptyList();
           private void ensureExemplarsIsMutable() {
             if (!((bitField0_ & 0x00008000) != 0)) {
    -          exemplars_ = new java.util.ArrayList(exemplars_);
    +          exemplars_ = new java.util.ArrayList(exemplars_);
               bitField0_ |= 0x00008000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
     
           /**
            * 
    @@ -8603,7 +8603,7 @@ private void ensureExemplarsIsMutable() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List getExemplarsList() {
    +      public java.util.List getExemplarsList() {
             if (exemplarsBuilder_ == null) {
               return java.util.Collections.unmodifiableList(exemplars_);
             } else {
    @@ -8631,7 +8631,7 @@ public int getExemplarsCount() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getExemplars(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplars(int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);
             } else {
    @@ -8646,7 +8646,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8667,7 +8667,7 @@ public Builder setExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.set(index, builderForValue.build());
    @@ -8684,7 +8684,7 @@ public Builder setExemplars(
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar value) {
    +      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8705,7 +8705,7 @@ public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.co
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8726,7 +8726,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(builderForValue.build());
    @@ -8744,7 +8744,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(index, builderForValue.build());
    @@ -8762,7 +8762,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addAllExemplars(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8814,7 +8814,7 @@ public Builder removeExemplars(int index) {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder getExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder getExemplarsBuilder(
               int index) {
             return getExemplarsFieldBuilder().getBuilder(index);
           }
    @@ -8825,7 +8825,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
               int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);  } else {
    @@ -8839,7 +8839,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsOrBuilderList() {
             if (exemplarsBuilder_ != null) {
               return exemplarsBuilder_.getMessageOrBuilderList();
    @@ -8854,9 +8854,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder addExemplarsBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder addExemplarsBuilder() {
             return getExemplarsFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8865,10 +8865,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder addExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder addExemplarsBuilder(
               int index) {
             return getExemplarsFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8877,16 +8877,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsBuilderList() {
             return getExemplarsFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> 
               getExemplarsFieldBuilder() {
             if (exemplarsBuilder_ == null) {
               exemplarsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder>(
                       exemplars_,
                       ((bitField0_ & 0x00008000) != 0),
                       getParentForChildren(),
    @@ -8900,12 +8900,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -8941,7 +8941,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9017,11 +9017,11 @@ public interface BucketOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
       }
       /**
        * 
    @@ -9040,8 +9040,8 @@ public static final class Bucket extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 28,
    -        /* patch= */ 3,
    +        /* minor= */ 29,
    +        /* patch= */ 1,
             /* suffix= */ "",
             Bucket.class.getName());
         }
    @@ -9054,15 +9054,15 @@ private Bucket() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder.class);
         }
     
         private int bitField0_;
    @@ -9148,7 +9148,7 @@ public double getUpperBound() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return Whether the exemplar field is set.
    @@ -9162,15 +9162,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -9234,10 +9234,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket) obj;
     
           if (hasCumulativeCount() != other.hasCumulativeCount()) return false;
           if (hasCumulativeCount()) {
    @@ -9296,44 +9296,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9341,26 +9341,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9373,7 +9373,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -9399,21 +9399,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -9447,17 +9447,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -9465,14 +9465,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -9498,16 +9498,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.getDefaultInstance()) return this;
             if (other.hasCumulativeCount()) {
               setCumulativeCount(other.getCumulativeCount());
             }
    @@ -9753,9 +9753,9 @@ public Builder clearUpperBound() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar exemplar_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return Whether the exemplar field is set.
    @@ -9767,9 +9767,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -9777,7 +9777,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -9794,7 +9794,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -9807,11 +9807,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -9841,7 +9841,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getExemplarFieldBuilder().getBuilder();
    @@ -9849,23 +9849,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> 
               getExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
               exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -9878,12 +9878,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9919,7 +9919,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Bucket getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9988,8 +9988,8 @@ public static final class BucketSpan extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 28,
    -        /* patch= */ 3,
    +        /* minor= */ 29,
    +        /* patch= */ 1,
             /* suffix= */ "",
             BucketSpan.class.getName());
         }
    @@ -10002,15 +10002,15 @@ private BucketSpan() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder.class);
         }
     
         private int bitField0_;
    @@ -10115,10 +10115,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan) obj;
     
           if (hasOffset() != other.hasOffset()) return false;
           if (hasOffset()) {
    @@ -10154,44 +10154,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10199,26 +10199,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10231,7 +10231,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10261,21 +10261,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.BucketSpan)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpanOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.newBuilder()
           private Builder() {
     
           }
    @@ -10297,17 +10297,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -10315,14 +10315,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -10338,16 +10338,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance()) return this;
             if (other.hasOffset()) {
               setOffset(other.getOffset());
             }
    @@ -10523,12 +10523,12 @@ public Builder clearLength() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.BucketSpan)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10564,7 +10564,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.BucketSpan getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10577,12 +10577,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -10590,12 +10590,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -10648,8 +10648,8 @@ public static final class Exemplar extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 28,
    -        /* patch= */ 3,
    +        /* minor= */ 29,
    +        /* patch= */ 1,
             /* suffix= */ "",
             Exemplar.class.getName());
         }
    @@ -10663,33 +10663,33 @@ private Exemplar() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -10704,14 +10704,14 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
    @@ -10827,10 +10827,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -10874,44 +10874,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10919,26 +10919,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10951,7 +10951,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10972,21 +10972,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Exemplar)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.ExemplarOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -11026,17 +11026,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -11044,15 +11044,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -11064,7 +11064,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -11082,16 +11082,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -11151,9 +11151,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -11192,22 +11192,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -11227,7 +11227,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -11238,7 +11238,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11255,7 +11255,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -11268,7 +11268,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11285,7 +11285,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11302,7 +11302,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -11316,7 +11316,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -11330,7 +11330,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -11370,14 +11370,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return getLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -11387,7 +11387,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -11398,31 +11398,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder addLabelBuilder() {
             return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return getLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder> 
               getLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -11633,12 +11633,12 @@ public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Exemplar)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11674,7 +11674,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Exemplar getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11687,12 +11687,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -11700,12 +11700,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -11717,11 +11717,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return The gauge.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge getGauge();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getGauge();
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.GaugeOrBuilder getGaugeOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder getGaugeOrBuilder();
     
         /**
          * optional .io.prometheus.client.Counter counter = 3;
    @@ -11732,11 +11732,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          * optional .io.prometheus.client.Counter counter = 3;
          * @return The counter.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter getCounter();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getCounter();
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.CounterOrBuilder getCounterOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder getCounterOrBuilder();
     
         /**
          * optional .io.prometheus.client.Summary summary = 4;
    @@ -11747,11 +11747,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          * optional .io.prometheus.client.Summary summary = 4;
          * @return The summary.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary getSummary();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getSummary();
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.SummaryOrBuilder getSummaryOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder getSummaryOrBuilder();
     
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
    @@ -11762,11 +11762,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return The untyped.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped getUntyped();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getUntyped();
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.UntypedOrBuilder getUntypedOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder getUntypedOrBuilder();
     
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
    @@ -11777,11 +11777,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Met
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return The histogram.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram getHistogram();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getHistogram();
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.HistogramOrBuilder getHistogramOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder getHistogramOrBuilder();
     
         /**
          * optional int64 timestamp_ms = 6;
    @@ -11806,8 +11806,8 @@ public static final class Metric extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 28,
    -        /* patch= */ 3,
    +        /* minor= */ 29,
    +        /* patch= */ 1,
             /* suffix= */ "",
             Metric.class.getName());
         }
    @@ -11821,33 +11821,33 @@ private Metric() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -11862,20 +11862,20 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
     
         public static final int GAUGE_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge gauge_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge gauge_;
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return Whether the gauge field is set.
    @@ -11889,19 +11889,19 @@ public boolean hasGauge() {
          * @return The gauge.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge getGauge() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getGauge() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
     
         public static final int COUNTER_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter counter_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter counter_;
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          * @return Whether the counter field is set.
    @@ -11915,19 +11915,19 @@ public boolean hasCounter() {
          * @return The counter.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter getCounter() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getCounter() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance() : counter_;
         }
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.CounterOrBuilder getCounterOrBuilder() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance() : counter_;
         }
     
         public static final int SUMMARY_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary summary_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary summary_;
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          * @return Whether the summary field is set.
    @@ -11941,19 +11941,19 @@ public boolean hasSummary() {
          * @return The summary.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary getSummary() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getSummary() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance() : summary_;
         }
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance() : summary_;
         }
     
         public static final int UNTYPED_FIELD_NUMBER = 5;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped untyped_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped untyped_;
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return Whether the untyped field is set.
    @@ -11967,19 +11967,19 @@ public boolean hasUntyped() {
          * @return The untyped.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped getUntyped() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getUntyped() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
     
         public static final int HISTOGRAM_FIELD_NUMBER = 7;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram histogram_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram histogram_;
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return Whether the histogram field is set.
    @@ -11993,15 +11993,15 @@ public boolean hasHistogram() {
          * @return The histogram.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram getHistogram() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getHistogram() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
     
         public static final int TIMESTAMP_MS_FIELD_NUMBER = 6;
    @@ -12105,10 +12105,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -12187,44 +12187,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12232,26 +12232,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12264,7 +12264,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -12285,21 +12285,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -12363,17 +12363,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -12381,15 +12381,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -12401,7 +12401,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -12443,16 +12443,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -12524,9 +12524,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -12593,22 +12593,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -12628,7 +12628,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -12639,7 +12639,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12656,7 +12656,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -12669,7 +12669,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12686,7 +12686,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12703,7 +12703,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -12717,7 +12717,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -12731,7 +12731,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -12771,14 +12771,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return getLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -12788,7 +12788,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -12799,31 +12799,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder addLabelBuilder() {
             return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return getLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder> 
               getLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -12833,9 +12833,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return labelBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge gauge_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge gauge_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.GaugeOrBuilder> gaugeBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder> gaugeBuilder_;
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return Whether the gauge field is set.
    @@ -12847,9 +12847,9 @@ public boolean hasGauge() {
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return The gauge.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge getGauge() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getGauge() {
             if (gaugeBuilder_ == null) {
    -          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance() : gauge_;
             } else {
               return gaugeBuilder_.getMessage();
             }
    @@ -12857,7 +12857,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge value) {
    +      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12874,7 +12874,7 @@ public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_go
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           public Builder setGauge(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder builderForValue) {
             if (gaugeBuilder_ == null) {
               gauge_ = builderForValue.build();
             } else {
    @@ -12887,11 +12887,11 @@ public Builder setGauge(
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge value) {
    +      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 gauge_ != null &&
    -            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.getDefaultInstance()) {
    +            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance()) {
                 getGaugeBuilder().mergeFrom(value);
               } else {
                 gauge_ = value;
    @@ -12921,7 +12921,7 @@ public Builder clearGauge() {
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.Builder getGaugeBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder getGaugeBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return getGaugeFieldBuilder().getBuilder();
    @@ -12929,23 +12929,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
             if (gaugeBuilder_ != null) {
               return gaugeBuilder_.getMessageOrBuilder();
             } else {
               return gauge_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance() : gauge_;
             }
           }
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.GaugeOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder> 
               getGaugeFieldBuilder() {
             if (gaugeBuilder_ == null) {
               gaugeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.GaugeOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder>(
                       getGauge(),
                       getParentForChildren(),
                       isClean());
    @@ -12954,9 +12954,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return gaugeBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter counter_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter counter_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.CounterOrBuilder> counterBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder> counterBuilder_;
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            * @return Whether the counter field is set.
    @@ -12968,9 +12968,9 @@ public boolean hasCounter() {
            * optional .io.prometheus.client.Counter counter = 3;
            * @return The counter.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter getCounter() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getCounter() {
             if (counterBuilder_ == null) {
    -          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.getDefaultInstance() : counter_;
    +          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance() : counter_;
             } else {
               return counterBuilder_.getMessage();
             }
    @@ -12978,7 +12978,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter value) {
    +      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12995,7 +12995,7 @@ public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Counter counter = 3;
            */
           public Builder setCounter(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder builderForValue) {
             if (counterBuilder_ == null) {
               counter_ = builderForValue.build();
             } else {
    @@ -13008,11 +13008,11 @@ public Builder setCounter(
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter value) {
    +      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 counter_ != null &&
    -            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.getDefaultInstance()) {
    +            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance()) {
                 getCounterBuilder().mergeFrom(value);
               } else {
                 counter_ = value;
    @@ -13042,7 +13042,7 @@ public Builder clearCounter() {
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.Builder getCounterBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder getCounterBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return getCounterFieldBuilder().getBuilder();
    @@ -13050,23 +13050,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder getCounterOrBuilder() {
             if (counterBuilder_ != null) {
               return counterBuilder_.getMessageOrBuilder();
             } else {
               return counter_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.getDefaultInstance() : counter_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance() : counter_;
             }
           }
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.CounterOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder> 
               getCounterFieldBuilder() {
             if (counterBuilder_ == null) {
               counterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.CounterOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder>(
                       getCounter(),
                       getParentForChildren(),
                       isClean());
    @@ -13075,9 +13075,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return counterBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary summary_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary summary_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.SummaryOrBuilder> summaryBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder> summaryBuilder_;
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            * @return Whether the summary field is set.
    @@ -13089,9 +13089,9 @@ public boolean hasSummary() {
            * optional .io.prometheus.client.Summary summary = 4;
            * @return The summary.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary getSummary() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getSummary() {
             if (summaryBuilder_ == null) {
    -          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.getDefaultInstance() : summary_;
    +          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance() : summary_;
             } else {
               return summaryBuilder_.getMessage();
             }
    @@ -13099,7 +13099,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary value) {
    +      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13116,7 +13116,7 @@ public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Summary summary = 4;
            */
           public Builder setSummary(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder builderForValue) {
             if (summaryBuilder_ == null) {
               summary_ = builderForValue.build();
             } else {
    @@ -13129,11 +13129,11 @@ public Builder setSummary(
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary value) {
    +      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 summary_ != null &&
    -            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.getDefaultInstance()) {
    +            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance()) {
                 getSummaryBuilder().mergeFrom(value);
               } else {
                 summary_ = value;
    @@ -13163,7 +13163,7 @@ public Builder clearSummary() {
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.Builder getSummaryBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder getSummaryBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getSummaryFieldBuilder().getBuilder();
    @@ -13171,23 +13171,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
             if (summaryBuilder_ != null) {
               return summaryBuilder_.getMessageOrBuilder();
             } else {
               return summary_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.getDefaultInstance() : summary_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance() : summary_;
             }
           }
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.SummaryOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder> 
               getSummaryFieldBuilder() {
             if (summaryBuilder_ == null) {
               summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.SummaryOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder>(
                       getSummary(),
                       getParentForChildren(),
                       isClean());
    @@ -13196,9 +13196,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return summaryBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped untyped_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped untyped_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.UntypedOrBuilder> untypedBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder> untypedBuilder_;
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return Whether the untyped field is set.
    @@ -13210,9 +13210,9 @@ public boolean hasUntyped() {
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return The untyped.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped getUntyped() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getUntyped() {
             if (untypedBuilder_ == null) {
    -          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance() : untyped_;
             } else {
               return untypedBuilder_.getMessage();
             }
    @@ -13220,7 +13220,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped value) {
    +      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13237,7 +13237,7 @@ public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           public Builder setUntyped(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder builderForValue) {
             if (untypedBuilder_ == null) {
               untyped_ = builderForValue.build();
             } else {
    @@ -13250,11 +13250,11 @@ public Builder setUntyped(
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped value) {
    +      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 untyped_ != null &&
    -            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.getDefaultInstance()) {
    +            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance()) {
                 getUntypedBuilder().mergeFrom(value);
               } else {
                 untyped_ = value;
    @@ -13284,7 +13284,7 @@ public Builder clearUntyped() {
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.Builder getUntypedBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder getUntypedBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
             return getUntypedFieldBuilder().getBuilder();
    @@ -13292,23 +13292,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
             if (untypedBuilder_ != null) {
               return untypedBuilder_.getMessageOrBuilder();
             } else {
               return untyped_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance() : untyped_;
             }
           }
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.UntypedOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder> 
               getUntypedFieldBuilder() {
             if (untypedBuilder_ == null) {
               untypedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.UntypedOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder>(
                       getUntyped(),
                       getParentForChildren(),
                       isClean());
    @@ -13317,9 +13317,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return untypedBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram histogram_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram histogram_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.HistogramOrBuilder> histogramBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder> histogramBuilder_;
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return Whether the histogram field is set.
    @@ -13331,9 +13331,9 @@ public boolean hasHistogram() {
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return The histogram.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram getHistogram() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getHistogram() {
             if (histogramBuilder_ == null) {
    -          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance() : histogram_;
             } else {
               return histogramBuilder_.getMessage();
             }
    @@ -13341,7 +13341,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram value) {
    +      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13358,7 +13358,7 @@ public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.co
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           public Builder setHistogram(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder builderForValue) {
             if (histogramBuilder_ == null) {
               histogram_ = builderForValue.build();
             } else {
    @@ -13371,11 +13371,11 @@ public Builder setHistogram(
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram value) {
    +      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (((bitField0_ & 0x00000020) != 0) &&
                 histogram_ != null &&
    -            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.getDefaultInstance()) {
    +            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance()) {
                 getHistogramBuilder().mergeFrom(value);
               } else {
                 histogram_ = value;
    @@ -13405,7 +13405,7 @@ public Builder clearHistogram() {
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.Builder getHistogramBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder getHistogramBuilder() {
             bitField0_ |= 0x00000020;
             onChanged();
             return getHistogramFieldBuilder().getBuilder();
    @@ -13413,23 +13413,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
             if (histogramBuilder_ != null) {
               return histogramBuilder_.getMessageOrBuilder();
             } else {
               return histogram_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance() : histogram_;
             }
           }
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.HistogramOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder> 
               getHistogramFieldBuilder() {
             if (histogramBuilder_ == null) {
               histogramBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.HistogramOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder>(
                       getHistogram(),
                       getParentForChildren(),
                       isClean());
    @@ -13482,12 +13482,12 @@ public Builder clearTimestampMs() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13523,7 +13523,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13576,17 +13576,17 @@ public interface MetricFamilyOrBuilder extends
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType getType();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType getType();
     
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric getMetric(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getMetric(int index);
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    @@ -13594,12 +13594,12 @@ public interface MetricFamilyOrBuilder extends
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricOrBuilderList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index);
     
         /**
    @@ -13631,8 +13631,8 @@ public static final class MetricFamily extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 28,
    -        /* patch= */ 3,
    +        /* minor= */ 29,
    +        /* patch= */ 1,
             /* suffix= */ "",
             MetricFamily.class.getName());
         }
    @@ -13650,15 +13650,15 @@ private MetricFamily() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.Builder.class);
         }
     
         private int bitField0_;
    @@ -13773,26 +13773,26 @@ public java.lang.String getHelp() {
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType getType() {
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType.forNumber(type_);
    -      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType.COUNTER : result;
    +    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType getType() {
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType.forNumber(type_);
    +      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType.COUNTER : result;
         }
     
         public static final int METRIC_FIELD_NUMBER = 4;
         @SuppressWarnings("serial")
    -    private java.util.List metric_;
    +    private java.util.List metric_;
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List getMetricList() {
    +    public java.util.List getMetricList() {
           return metric_;
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getMetricOrBuilderList() {
           return metric_;
         }
    @@ -13807,14 +13807,14 @@ public int getMetricCount() {
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric getMetric(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getMetric(int index) {
           return metric_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index) {
           return metric_.get(index);
         }
    @@ -13933,10 +13933,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -13995,44 +13995,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14040,26 +14040,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14072,7 +14072,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -14093,21 +14093,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamilyOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamilyOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.newBuilder()
           private Builder() {
     
           }
    @@ -14138,17 +14138,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -14156,15 +14156,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily result) {
             if (metricBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 metric_ = java.util.Collections.unmodifiableList(metric_);
    @@ -14176,7 +14176,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -14200,16 +14200,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -14292,8 +14292,8 @@ public Builder mergeFrom(
                   } // case 18
                   case 24: {
                     int tmpRaw = input.readEnum();
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType tmpValue =
    -                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType.forNumber(tmpRaw);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType tmpValue =
    +                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType.forNumber(tmpRaw);
                     if (tmpValue == null) {
                       mergeUnknownVarintField(3, tmpRaw);
                     } else {
    @@ -14303,9 +14303,9 @@ public Builder mergeFrom(
                     break;
                   } // case 24
                   case 34: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.parser(),
                             extensionRegistry);
                     if (metricBuilder_ == null) {
                       ensureMetricIsMutable();
    @@ -14510,16 +14510,16 @@ public Builder setHelpBytes(
            * @return The type.
            */
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType getType() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType.forNumber(type_);
    -        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType.COUNTER : result;
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType getType() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType.forNumber(type_);
    +        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType.COUNTER : result;
           }
           /**
            * optional .io.prometheus.client.MetricType type = 3;
            * @param value The type to set.
            * @return This builder for chaining.
            */
    -      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricType value) {
    +      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType value) {
             if (value == null) {
               throw new NullPointerException();
             }
    @@ -14539,22 +14539,22 @@ public Builder clearType() {
             return this;
           }
     
    -      private java.util.List metric_ =
    +      private java.util.List metric_ =
             java.util.Collections.emptyList();
           private void ensureMetricIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          metric_ = new java.util.ArrayList(metric_);
    +          metric_ = new java.util.ArrayList(metric_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricOrBuilder> metricBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder> metricBuilder_;
     
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List getMetricList() {
    +      public java.util.List getMetricList() {
             if (metricBuilder_ == null) {
               return java.util.Collections.unmodifiableList(metric_);
             } else {
    @@ -14574,7 +14574,7 @@ public int getMetricCount() {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric getMetric(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getMetric(int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);
             } else {
    @@ -14585,7 +14585,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14602,7 +14602,7 @@ public Builder setMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.set(index, builderForValue.build());
    @@ -14615,7 +14615,7 @@ public Builder setMetric(
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric value) {
    +      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14632,7 +14632,7 @@ public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14649,7 +14649,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(builderForValue.build());
    @@ -14663,7 +14663,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(index, builderForValue.build());
    @@ -14677,7 +14677,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addAllMetric(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -14717,14 +14717,14 @@ public Builder removeMetric(int index) {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder getMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder getMetricBuilder(
               int index) {
             return getMetricFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricOrBuilder getMetricOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder getMetricOrBuilder(
               int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);  } else {
    @@ -14734,7 +14734,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricOrBuilderList() {
             if (metricBuilder_ != null) {
               return metricBuilder_.getMessageOrBuilderList();
    @@ -14745,31 +14745,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder addMetricBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder addMetricBuilder() {
             return getMetricFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder addMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder addMetricBuilder(
               int index) {
             return getMetricFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricBuilderList() {
             return getMetricFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder> 
               getMetricFieldBuilder() {
             if (metricBuilder_ == null) {
               metricBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder>(
                       metric_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -14863,12 +14863,12 @@ public Builder setUnitBytes(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -14904,7 +14904,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics.MetricFamily getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -15029,7 +15029,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           "\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004\022\023\n\017GAUGE_H" +
           "ISTOGRAM\020\005B\212\001\nLio.prometheus.metrics.exp" +
           "ositionformats.generated.com_google_prot" +
    -      "obuf_4_28_3Z:github.com/prometheus/clien" +
    +      "obuf_4_29_1Z:github.com/prometheus/clien" +
           "t_model/go;io_prometheus_client"
         };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    index a52a83adf..ab86e8bc1 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    @@ -4,7 +4,7 @@
     
     import com.google.protobuf.TextFormat;
     import io.prometheus.metrics.expositionformats.ExpositionFormatWriter;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot;
    diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    index 1d98925e3..de0791599 100644
    --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    @@ -2,7 +2,7 @@
     
     import static org.assertj.core.api.Assertions.assertThat;
     
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_3.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
    
    From a9b136c51bf9c00a8b206e61f6183b7eb1159672 Mon Sep 17 00:00:00 2001
    From: Doug Hoard 
    Date: Thu, 12 Dec 2024 00:22:13 -0500
    Subject: [PATCH 241/870] Updated README.md badges (#1229)
    
    Signed-off-by: dhoard 
    ---
     README.md | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/README.md b/README.md
    index 0cf4f3b80..f03a3e2a6 100644
    --- a/README.md
    +++ b/README.md
    @@ -1,6 +1,6 @@
     # Prometheus Java Metrics Library
     
    -[![Build Status](https://circleci.com/gh/prometheus/client_java.svg?style=svg)](https://circleci.com/gh/prometheus/client_java)
    +[![Build](https://github.com/prometheus/client_java/actions/workflows/build.yml/badge.svg)](https://github.com/prometheus/client_java/actions/workflows/build.yml) java 8+ Apache 2.0
     
     # Documentation
     
    
    From 85f78007e6ad8221de5e303b50b65ac3c8a0c5fa Mon Sep 17 00:00:00 2001
    From: Gregor Zeitlinger 
    Date: Thu, 12 Dec 2024 13:48:16 +0100
    Subject: [PATCH 242/870] update docs on new releases (#1227)
    
    Signed-off-by: Gregor Zeitlinger 
    ---
     .github/workflows/github-pages.yaml | 2 ++
     .github/workflows/release.yml       | 2 +-
     2 files changed, 3 insertions(+), 1 deletion(-)
    
    diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml
    index 87daffd26..46fe56c96 100644
    --- a/.github/workflows/github-pages.yaml
    +++ b/.github/workflows/github-pages.yaml
    @@ -5,6 +5,8 @@ on:
       push:
         branches:
           - main
    +    tags:
    +      - "v*.*.*" # updates the version in the docs
     
       # Allows you to run this workflow manually from the Actions tab
       workflow_dispatch:
    diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
    index 57c7a6f53..bf63247f3 100644
    --- a/.github/workflows/release.yml
    +++ b/.github/workflows/release.yml
    @@ -42,7 +42,7 @@ jobs:
               gpg-passphrase: MAVEN_GPG_PASSPHRASE
     
           - name: Publish to Apache Maven Central
    -        run: mvn deploy -P release
    +        run: mvn deploy -P release -Dmaven.test.skip=true
             env:
               MAVEN_USERNAME: ${{ secrets.SONATYPE_MAVEN_REPOSITORY_USERNAME }}
               MAVEN_CENTRAL_TOKEN: ${{ secrets.SONATYPE_MAVEN_REPOSITORY_PASSWORD }}
    
    From 8eea9a9562d2229fc2257118f5d2cf417225d09b Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Thu, 12 Dec 2024 13:48:43 +0100
    Subject: [PATCH 243/870] Bump org.apache.tomcat.embed:tomcat-embed-core from
     11.0.1 to 11.0.2 (#1224)
    
    * Bump org.apache.tomcat.embed:tomcat-embed-core from 11.0.1 to 11.0.2
    
    Bumps org.apache.tomcat.embed:tomcat-embed-core from 11.0.1 to 11.0.2.
    
    ---
    updated-dependencies:
    - dependency-name: org.apache.tomcat.embed:tomcat-embed-core
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    
    * tomcat fixed headers
    
    Signed-off-by: Gregor Zeitlinger 
    
    ---------
    
    Signed-off-by: dependabot[bot] 
    Signed-off-by: Gregor Zeitlinger 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     .../example-greeting-service/pom.xml                   |  2 +-
     .../example-hello-world-app/pom.xml                    |  2 +-
     examples/example-exporter-servlet-tomcat/pom.xml       |  2 +-
     .../it-exporter-servlet-tomcat-sample/pom.xml          |  2 +-
     .../metrics/it/exporter/test/ExporterIT.java           | 10 +---------
     .../prometheus/metrics/it/exporter/test/TomcatIT.java  |  7 -------
     6 files changed, 5 insertions(+), 20 deletions(-)
    
    diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    index 9aab1d452..86f08018c 100644
    --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml
    @@ -38,7 +38,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            11.0.1
    +            11.0.2
             
         
     
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    index 40efc62f1..0b0122cdb 100644
    --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml
    @@ -38,7 +38,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            11.0.1
    +            11.0.2
             
         
     
    diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml
    index 355f8e830..39b505f30 100644
    --- a/examples/example-exporter-servlet-tomcat/pom.xml
    +++ b/examples/example-exporter-servlet-tomcat/pom.xml
    @@ -38,7 +38,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            11.0.1
    +            11.0.2
             
         
     
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    index 78a94b724..2af2a5928 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml
    @@ -33,7 +33,7 @@
             
                 org.apache.tomcat.embed
                 tomcat-embed-core
    -            11.0.1
    +            11.0.2
             
         
     
    diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java
    index 38ebf8f31..199bc3387 100644
    --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java
    +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java
    @@ -142,10 +142,6 @@ public void testErrorHandling() throws IOException {
         assertThat(response.stringBody()).contains("Simulating an error.");
       }
     
    -  protected boolean headReturnsContentLength() {
    -    return true;
    -  }
    -
       @Test
       public void testHeadRequest() throws IOException {
         start();
    @@ -154,11 +150,7 @@ public void testHeadRequest() throws IOException {
         assertThat(size).isGreaterThan(0);
         Response headResponse = scrape("HEAD", "");
         assertThat(headResponse.status).isEqualTo(200);
    -    if (headReturnsContentLength()) {
    -      assertThat(headResponse.getHeader("Content-Length")).isEqualTo(Integer.toString(size));
    -    } else {
    -      assertThat(headResponse.getHeader("Content-Length")).isNull();
    -    }
    +    assertThat(headResponse.getHeader("Content-Length")).isEqualTo(Integer.toString(size));
         assertThat(headResponse.body).isEmpty();
       }
     
    diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java
    index 731e7fa3a..ea5e6b69d 100644
    --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java
    +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/TomcatIT.java
    @@ -7,11 +7,4 @@ class TomcatIT extends ExporterIT {
       public TomcatIT() throws IOException, URISyntaxException {
         super("exporter-servlet-tomcat-sample");
       }
    -
    -  @Override
    -  protected boolean headReturnsContentLength() {
    -    // not any more since
    -    // https://tomcat.apache.org/tomcat-11.0-doc/changelog.html#Tomcat_11.0.0-M3_(markt)
    -    return false;
    -  }
     }
    
    From 3d216b8357f9161f1ced0e4bb4d9e1712ff8e88c Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Thu, 12 Dec 2024 08:41:42 -0500
    Subject: [PATCH 244/870] Bump jetty-server.version from 12.0.15 to 12.0.16
     (#1230)
    
    Bumps `jetty-server.version` from 12.0.15 to 12.0.16.
    
    Updates `org.eclipse.jetty:jetty-server` from 12.0.15 to 12.0.16
    
    Updates `org.eclipse.jetty.ee10:jetty-ee10-servlet` from 12.0.15 to 12.0.16
    
    ---
    updated-dependencies:
    - dependency-name: org.eclipse.jetty:jetty-server
      dependency-type: direct:production
      update-type: version-update:semver-patch
    - dependency-name: org.eclipse.jetty.ee10:jetty-ee10-servlet
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml        | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    index 4c4670d2f..fed800096 100644
    --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml
    @@ -15,7 +15,7 @@
             Jetty Sample for the Exporter Integration Test
         
         
    -        12.0.15
    +        12.0.16
             17
         
     
    
    From 5359ba32ffd6de588fb37ed6ab11a5c3e44efeca Mon Sep 17 00:00:00 2001
    From: Kinshuk Bairagi 
    Date: Fri, 13 Dec 2024 15:27:47 +0530
    Subject: [PATCH 245/870] Add support for dw-metrics 4.x (#1228)
    
    * Add support for dw-metrics 4.x
    
    Signed-off-by: Kinshuk Bairagi 
    
    * Update DropwizardExportsTest.java
    
    Signed-off-by: Kinshuk Bairagi 
    
    * cleanup
    
    Signed-off-by: Gregor Zeitlinger 
    
    ---------
    
    Signed-off-by: Kinshuk Bairagi 
    Signed-off-by: Gregor Zeitlinger 
    Co-authored-by: Gregor Zeitlinger 
    ---
     pom.xml                                       |   1 +
     .../pom.xml                                   |  79 +++++
     .../dropwizard/DropwizardExports.java         | 274 ++++++++++++++++
     .../dropwizard/DropwizardExportsTest.java     | 302 ++++++++++++++++++
     .../version-rules.xml                         |   6 +
     5 files changed, 662 insertions(+)
     create mode 100644 prometheus-metrics-instrumentation-dropwizard/pom.xml
     create mode 100644 prometheus-metrics-instrumentation-dropwizard/src/main/java/io/prometheus/metrics/instrumentation/dropwizard/DropwizardExports.java
     create mode 100644 prometheus-metrics-instrumentation-dropwizard/src/test/java/io/prometheus/metrics/instrumentation/dropwizard/DropwizardExportsTest.java
     create mode 100644 prometheus-metrics-instrumentation-dropwizard/version-rules.xml
    
    diff --git a/pom.xml b/pom.xml
    index 212fe042d..2f9aa6dff 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -77,6 +77,7 @@
             prometheus-metrics-instrumentation-caffeine
             prometheus-metrics-instrumentation-jvm
             prometheus-metrics-instrumentation-dropwizard5
    +        prometheus-metrics-instrumentation-dropwizard
             prometheus-metrics-instrumentation-guava
             prometheus-metrics-simpleclient-bridge
         
    diff --git a/prometheus-metrics-instrumentation-dropwizard/pom.xml b/prometheus-metrics-instrumentation-dropwizard/pom.xml
    new file mode 100644
    index 000000000..d6f6a62ae
    --- /dev/null
    +++ b/prometheus-metrics-instrumentation-dropwizard/pom.xml
    @@ -0,0 +1,79 @@
    +
    +
    +    4.0.0
    +
    +    
    +        io.prometheus
    +        client_java
    +        10.0.0-SNAPSHOT
    +    
    +
    +    prometheus-metrics-instrumentation-dropwizard
    +    bundle
    +
    +    Prometheus Metrics Instrumentation - Dropwizard 4.x
    +    
    +        Instrumentation library for Dropwizard metrics 4.x
    +    
    +
    +    
    +        io.prometheus.metrics.instrumentation.dropwizard
    +    
    +
    +    
    +        
    +            The Apache Software License, Version 2.0
    +            http://www.apache.org/licenses/LICENSE-2.0.txt
    +            repo
    +        
    +    
    +    
    +        
    +            kingster
    +            Kinshuk Bairagi
    +            hi@kinsh.uk
    +        
    +
    +    
    +
    +    
    +        
    +            io.prometheus
    +            prometheus-metrics-core
    +            ${project.version}
    +        
    +        
    +            io.dropwizard.metrics
    +            metrics-core
    +            4.2.0
    +            provided
    +        
    +
    +        
    +            io.prometheus
    +            prometheus-metrics-exporter-httpserver
    +            ${project.version}
    +            test
    +        
    +        
    +            io.prometheus
    +            prometheus-metrics-exposition-textformats
    +            ${project.version}
    +            test
    +        
    +        
    +            io.prometheus
    +            prometheus-metrics-instrumentation-dropwizard5
    +            ${project.version}
    +            compile
    +            
    +                
    +                    io.dropwizard.metrics5
    +                    metrics-core
    +                
    +            
    +        
    +
    +    
    +
    +
    diff --git a/prometheus-metrics-instrumentation-dropwizard/src/main/java/io/prometheus/metrics/instrumentation/dropwizard/DropwizardExports.java b/prometheus-metrics-instrumentation-dropwizard/src/main/java/io/prometheus/metrics/instrumentation/dropwizard/DropwizardExports.java
    new file mode 100644
    index 000000000..dff657683
    --- /dev/null
    +++ b/prometheus-metrics-instrumentation-dropwizard/src/main/java/io/prometheus/metrics/instrumentation/dropwizard/DropwizardExports.java
    @@ -0,0 +1,274 @@
    +package io.prometheus.metrics.instrumentation.dropwizard;
    +
    +import com.codahale.metrics.Counter;
    +import com.codahale.metrics.Gauge;
    +import com.codahale.metrics.Histogram;
    +import com.codahale.metrics.Meter;
    +import com.codahale.metrics.Metric;
    +import com.codahale.metrics.MetricFilter;
    +import com.codahale.metrics.MetricRegistry;
    +import com.codahale.metrics.Snapshot;
    +import com.codahale.metrics.Timer;
    +import io.prometheus.metrics.instrumentation.dropwizard5.labels.CustomLabelMapper;
    +import io.prometheus.metrics.model.registry.MultiCollector;
    +import io.prometheus.metrics.model.registry.PrometheusRegistry;
    +import io.prometheus.metrics.model.snapshots.CounterSnapshot;
    +import io.prometheus.metrics.model.snapshots.GaugeSnapshot;
    +import io.prometheus.metrics.model.snapshots.MetricMetadata;
    +import io.prometheus.metrics.model.snapshots.MetricSnapshot;
    +import io.prometheus.metrics.model.snapshots.MetricSnapshots;
    +import io.prometheus.metrics.model.snapshots.PrometheusNaming;
    +import io.prometheus.metrics.model.snapshots.Quantiles;
    +import io.prometheus.metrics.model.snapshots.SummarySnapshot;
    +import java.util.Collections;
    +import java.util.Optional;
    +import java.util.concurrent.TimeUnit;
    +import java.util.logging.Level;
    +import java.util.logging.Logger;
    +
    +/** Collect Dropwizard metrics from a MetricRegistry. */
    +public class DropwizardExports implements MultiCollector {
    +  private static final Logger logger = Logger.getLogger(DropwizardExports.class.getName());
    +  private final MetricRegistry registry;
    +  private final MetricFilter metricFilter;
    +  private final Optional labelMapper;
    +
    +  /**
    +   * Creates a new DropwizardExports and {@link MetricFilter#ALL}.
    +   *
    +   * @param registry a metric registry to export in prometheus.
    +   */
    +  public DropwizardExports(MetricRegistry registry) {
    +    super();
    +    this.registry = registry;
    +    this.metricFilter = MetricFilter.ALL;
    +    this.labelMapper = Optional.empty();
    +  }
    +
    +  /**
    +   * Creates a new DropwizardExports with a custom {@link MetricFilter}.
    +   *
    +   * @param registry a metric registry to export in prometheus.
    +   * @param metricFilter a custom metric filter.
    +   */
    +  public DropwizardExports(MetricRegistry registry, MetricFilter metricFilter) {
    +    this.registry = registry;
    +    this.metricFilter = metricFilter;
    +    this.labelMapper = Optional.empty();
    +  }
    +
    +  /**
    +   * @param registry a metric registry to export in prometheus.
    +   * @param metricFilter a custom metric filter.
    +   * @param labelMapper a labelMapper to use to map labels.
    +   */
    +  public DropwizardExports(
    +      MetricRegistry registry, MetricFilter metricFilter, CustomLabelMapper labelMapper) {
    +    this.registry = registry;
    +    this.metricFilter = metricFilter;
    +    this.labelMapper = Optional.ofNullable(labelMapper);
    +  }
    +
    +  private static String getHelpMessage(String metricName, Metric metric) {
    +    return String.format(
    +        "Generated from Dropwizard metric import (metric=%s, type=%s)",
    +        metricName, metric.getClass().getName());
    +  }
    +
    +  private MetricMetadata getMetricMetaData(String metricName, Metric metric) {
    +    String name = labelMapper.isPresent() ? labelMapper.get().getName(metricName) : metricName;
    +    return new MetricMetadata(
    +        PrometheusNaming.sanitizeMetricName(name), getHelpMessage(metricName, metric));
    +  }
    +
    +  /**
    +   * Export counter as Prometheus Gauge.
    +   */
    +  MetricSnapshot fromCounter(String dropwizardName, Counter counter) {
    +    MetricMetadata metadata = getMetricMetaData(dropwizardName, counter);
    +    CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder =
    +        CounterSnapshot.CounterDataPointSnapshot.builder()
    +            .value(Long.valueOf(counter.getCount()).doubleValue());
    +    labelMapper.ifPresent(
    +        mapper ->
    +            dataPointBuilder.labels(
    +                mapper.getLabels(
    +                    dropwizardName, Collections.emptyList(), Collections.emptyList())));
    +    return new CounterSnapshot(metadata, Collections.singletonList(dataPointBuilder.build()));
    +  }
    +
    +  /** Export gauge as a prometheus gauge. */
    +  MetricSnapshot fromGauge(String dropwizardName, Gauge gauge) {
    +    Object obj = gauge.getValue();
    +    double value;
    +    if (obj instanceof Number) {
    +      value = ((Number) obj).doubleValue();
    +    } else if (obj instanceof Boolean) {
    +      value = ((Boolean) obj) ? 1 : 0;
    +    } else {
    +      logger.log(
    +          Level.FINE,
    +          String.format(
    +              "Invalid type for Gauge %s: %s",
    +              PrometheusNaming.sanitizeMetricName(dropwizardName),
    +              obj == null ? "null" : obj.getClass().getName()));
    +      return null;
    +    }
    +    MetricMetadata metadata = getMetricMetaData(dropwizardName, gauge);
    +    GaugeSnapshot.GaugeDataPointSnapshot.Builder dataPointBuilder =
    +        GaugeSnapshot.GaugeDataPointSnapshot.builder().value(value);
    +    labelMapper.ifPresent(
    +        mapper ->
    +            dataPointBuilder.labels(
    +                mapper.getLabels(
    +                    dropwizardName, Collections.emptyList(), Collections.emptyList())));
    +    return new GaugeSnapshot(metadata, Collections.singletonList(dataPointBuilder.build()));
    +  }
    +
    +  /**
    +   * Export a histogram snapshot as a prometheus SUMMARY.
    +   *
    +   * @param dropwizardName metric name.
    +   * @param snapshot the histogram snapshot.
    +   * @param count the total sample count for this snapshot.
    +   * @param factor a factor to apply to histogram values.
    +   */
    +  MetricSnapshot fromSnapshotAndCount(
    +      String dropwizardName, Snapshot snapshot, long count, double factor, String helpMessage) {
    +    Quantiles quantiles =
    +        Quantiles.builder()
    +            .quantile(0.5, snapshot.getMedian() * factor)
    +            .quantile(0.75, snapshot.get75thPercentile() * factor)
    +            .quantile(0.95, snapshot.get95thPercentile() * factor)
    +            .quantile(0.98, snapshot.get98thPercentile() * factor)
    +            .quantile(0.99, snapshot.get99thPercentile() * factor)
    +            .quantile(0.999, snapshot.get999thPercentile() * factor)
    +            .build();
    +
    +    MetricMetadata metadata =
    +        new MetricMetadata(PrometheusNaming.sanitizeMetricName(dropwizardName), helpMessage);
    +    SummarySnapshot.SummaryDataPointSnapshot.Builder dataPointBuilder =
    +        SummarySnapshot.SummaryDataPointSnapshot.builder().quantiles(quantiles).count(count);
    +    labelMapper.ifPresent(
    +        mapper ->
    +            dataPointBuilder.labels(
    +                mapper.getLabels(
    +                    dropwizardName, Collections.emptyList(), Collections.emptyList())));
    +    return new SummarySnapshot(metadata, Collections.singletonList(dataPointBuilder.build()));
    +  }
    +
    +  /** Convert histogram snapshot. */
    +  MetricSnapshot fromHistogram(String dropwizardName, Histogram histogram) {
    +    return fromSnapshotAndCount(
    +        dropwizardName,
    +        histogram.getSnapshot(),
    +        histogram.getCount(),
    +        1.0,
    +        getHelpMessage(dropwizardName, histogram));
    +  }
    +
    +  /** Export Dropwizard Timer as a histogram. Use TIME_UNIT as time unit. */
    +  MetricSnapshot fromTimer(String dropwizardName, Timer timer) {
    +    return fromSnapshotAndCount(
    +        dropwizardName,
    +        timer.getSnapshot(),
    +        timer.getCount(),
    +        1.0D / TimeUnit.SECONDS.toNanos(1L),
    +        getHelpMessage(dropwizardName, timer));
    +  }
    +
    +  /** Export a Meter as a prometheus COUNTER. */
    +  MetricSnapshot fromMeter(String dropwizardName, Meter meter) {
    +    MetricMetadata metadata = getMetricMetaData(dropwizardName + "_total", meter);
    +    CounterSnapshot.CounterDataPointSnapshot.Builder dataPointBuilder =
    +        CounterSnapshot.CounterDataPointSnapshot.builder().value(meter.getCount());
    +    labelMapper.ifPresent(
    +        mapper ->
    +            dataPointBuilder.labels(
    +                mapper.getLabels(
    +                    dropwizardName, Collections.emptyList(), Collections.emptyList())));
    +    return new CounterSnapshot(metadata, Collections.singletonList(dataPointBuilder.build()));
    +  }
    +
    +  @Override
    +  public MetricSnapshots collect() {
    +    MetricSnapshots.Builder metricSnapshots = MetricSnapshots.builder();
    +
    +    registry
    +        .getGauges(metricFilter)
    +        .forEach(
    +            (name, gauge) -> {
    +              MetricSnapshot snapshot = fromGauge(name, gauge);
    +              if (snapshot != null) {
    +                metricSnapshots.metricSnapshot(snapshot);
    +              }
    +            });
    +
    +    registry
    +        .getCounters(metricFilter)
    +        .forEach((name, counter) -> metricSnapshots.metricSnapshot(fromCounter(name, counter)));
    +    registry
    +        .getHistograms(metricFilter)
    +        .forEach(
    +            (name, histogram) -> metricSnapshots.metricSnapshot(fromHistogram(name, histogram)));
    +    registry
    +        .getTimers(metricFilter)
    +        .forEach((name, timer) -> metricSnapshots.metricSnapshot(fromTimer(name, timer)));
    +    registry
    +        .getMeters(metricFilter)
    +        .forEach((name, meter) -> metricSnapshots.metricSnapshot(fromMeter(name, meter)));
    +
    +    return metricSnapshots.build();
    +  }
    +
    +  public static Builder builder() {
    +    return new Builder();
    +  }
    +
    +  // Builder class for DropwizardExports
    +  public static class Builder {
    +    private MetricRegistry registry;
    +    private MetricFilter metricFilter;
    +    private CustomLabelMapper labelMapper;
    +
    +    private Builder() {
    +      this.metricFilter = MetricFilter.ALL;
    +    }
    +
    +    public Builder dropwizardRegistry(MetricRegistry registry) {
    +      this.registry = registry;
    +      return this;
    +    }
    +
    +    public Builder metricFilter(MetricFilter metricFilter) {
    +      this.metricFilter = metricFilter;
    +      return this;
    +    }
    +
    +    public Builder customLabelMapper(CustomLabelMapper labelMapper) {
    +      this.labelMapper = labelMapper;
    +      return this;
    +    }
    +
    +    DropwizardExports build() {
    +      if (registry == null) {
    +        throw new IllegalArgumentException("MetricRegistry must be set");
    +      }
    +      if (labelMapper == null) {
    +        return new DropwizardExports(registry, metricFilter);
    +      } else {
    +        return new DropwizardExports(registry, metricFilter, labelMapper);
    +      }
    +    }
    +
    +    public void register() {
    +      register(PrometheusRegistry.defaultRegistry);
    +    }
    +
    +    public void register(PrometheusRegistry registry) {
    +      DropwizardExports dropwizardExports = build();
    +      registry.register(dropwizardExports);
    +    }
    +  }
    +}
    diff --git a/prometheus-metrics-instrumentation-dropwizard/src/test/java/io/prometheus/metrics/instrumentation/dropwizard/DropwizardExportsTest.java b/prometheus-metrics-instrumentation-dropwizard/src/test/java/io/prometheus/metrics/instrumentation/dropwizard/DropwizardExportsTest.java
    new file mode 100644
    index 000000000..ff658ad41
    --- /dev/null
    +++ b/prometheus-metrics-instrumentation-dropwizard/src/test/java/io/prometheus/metrics/instrumentation/dropwizard/DropwizardExportsTest.java
    @@ -0,0 +1,302 @@
    +package io.prometheus.metrics.instrumentation.dropwizard;
    +
    +import static org.assertj.core.api.Assertions.assertThat;
    +import static org.assertj.core.api.Assertions.assertThatCode;
    +import static org.assertj.core.api.Assertions.assertThatThrownBy;
    +
    +import com.codahale.metrics.*;
    +import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
    +import io.prometheus.metrics.model.registry.PrometheusRegistry;
    +import io.prometheus.metrics.model.snapshots.SummarySnapshot;
    +import java.io.ByteArrayOutputStream;
    +import java.io.IOException;
    +import java.nio.charset.StandardCharsets;
    +import java.util.concurrent.TimeUnit;
    +import org.junit.jupiter.api.BeforeEach;
    +import org.junit.jupiter.api.Test;
    +
    +class DropwizardExportsTest {
    +
    +  private final PrometheusRegistry registry = new PrometheusRegistry();
    +  private MetricRegistry metricRegistry;
    +
    +  @BeforeEach
    +  public void setUp() {
    +    metricRegistry = new MetricRegistry();
    +    DropwizardExports.builder()
    +        .dropwizardRegistry(metricRegistry)
    +        .metricFilter(MetricFilter.ALL)
    +        .register(registry);
    +  }
    +
    +  @Test
    +  public void testBuilderThrowsErrorOnNullRegistry() {
    +    assertThatThrownBy(
    +            () -> DropwizardExports.builder().dropwizardRegistry(null).register(registry))
    +        .isInstanceOf(IllegalArgumentException.class);
    +  }
    +
    +  @Test
    +  public void testBuilderCreatesOkay() {
    +    assertThatCode(
    +            () -> DropwizardExports.builder().dropwizardRegistry(metricRegistry).register(registry))
    +        .doesNotThrowAnyException();
    +  }
    +
    +  @Test
    +  public void testCounter() {
    +    metricRegistry.counter("foo.bar").inc(1);
    +    String expected =
    +        """
    +        # TYPE foo_bar counter
    +        # HELP foo_bar Generated from Dropwizard metric import (metric=foo.bar, type=com.codahale.metrics.Counter)
    +        foo_bar_total 1.0
    +        # EOF
    +        """;
    +
    +    assertThat(convertToOpenMetricsFormat()).isEqualTo(expected);
    +  }
    +
    +  @Test
    +  public void testGauge() {
    +    // don't convert to lambda, as we need to test the type
    +    Gauge integerGauge =
    +        new Gauge() {
    +          @Override
    +          public Integer getValue() {
    +            return 1234;
    +          }
    +        };
    +    Gauge doubleGauge =
    +        new Gauge() {
    +          @Override
    +          public Double getValue() {
    +            return 1.234D;
    +          }
    +        };
    +    Gauge longGauge =
    +        new Gauge() {
    +          @Override
    +          public Long getValue() {
    +            return 1234L;
    +          }
    +        };
    +    Gauge floatGauge =
    +        new Gauge() {
    +          @Override
    +          public Float getValue() {
    +            return 0.1234F;
    +          }
    +        };
    +    Gauge booleanGauge =
    +        new Gauge() {
    +          @Override
    +          public Boolean getValue() {
    +            return true;
    +          }
    +        };
    +
    +    metricRegistry.register("double.gauge", doubleGauge);
    +    metricRegistry.register("long.gauge", longGauge);
    +    metricRegistry.register("integer.gauge", integerGauge);
    +    metricRegistry.register("float.gauge", floatGauge);
    +    metricRegistry.register("boolean.gauge", booleanGauge);
    +
    +    String expected =
    +        """
    +        # TYPE boolean_gauge gauge
    +        # HELP boolean_gauge Generated from Dropwizard metric import (metric=boolean.gauge, type=io.prometheus.metrics.instrumentation.dropwizard.DropwizardExportsTest$5)
    +        boolean_gauge 1.0
    +        # TYPE double_gauge gauge
    +        # HELP double_gauge Generated from Dropwizard metric import (metric=double.gauge, type=io.prometheus.metrics.instrumentation.dropwizard.DropwizardExportsTest$2)
    +        double_gauge 1.234
    +        # TYPE float_gauge gauge
    +        # HELP float_gauge Generated from Dropwizard metric import (metric=float.gauge, type=io.prometheus.metrics.instrumentation.dropwizard.DropwizardExportsTest$4)
    +        float_gauge 0.1234000027179718
    +        # TYPE integer_gauge gauge
    +        # HELP integer_gauge Generated from Dropwizard metric import (metric=integer.gauge, type=io.prometheus.metrics.instrumentation.dropwizard.DropwizardExportsTest$1)
    +        integer_gauge 1234.0
    +        # TYPE long_gauge gauge
    +        # HELP long_gauge Generated from Dropwizard metric import (metric=long.gauge, type=io.prometheus.metrics.instrumentation.dropwizard.DropwizardExportsTest$3)
    +        long_gauge 1234.0
    +        # EOF
    +        """;
    +
    +    assertThat(convertToOpenMetricsFormat()).isEqualTo(expected);
    +  }
    +
    +  @Test
    +  public void testInvalidGaugeType() {
    +    Gauge invalidGauge = () -> "foobar";
    +
    +    metricRegistry.register("invalid_gauge", invalidGauge);
    +
    +    String expected = "# EOF\n";
    +    assertThat(convertToOpenMetricsFormat()).isEqualTo(expected);
    +  }
    +
    +  @Test
    +  public void testGaugeReturningNullValue() {
    +    Gauge invalidGauge = () -> null;
    +    metricRegistry.register("invalid_gauge", invalidGauge);
    +    String expected = "# EOF\n";
    +    assertThat(convertToOpenMetricsFormat()).isEqualTo(expected);
    +  }
    +
    +  @Test
    +  public void testHistogram() {
    +    // just test the standard mapper
    +    final MetricRegistry metricRegistry = new MetricRegistry();
    +    PrometheusRegistry pmRegistry = new PrometheusRegistry();
    +    DropwizardExports.builder().dropwizardRegistry(metricRegistry).register(pmRegistry);
    +
    +    Histogram hist = metricRegistry.histogram("hist");
    +    int i = 0;
    +    while (i < 100) {
    +      hist.update(i);
    +      i += 1;
    +    }
    +
    +    // The result should look like this
    +    String expected1 =
    +        """
    +        # TYPE hist summary
    +        # HELP hist Generated from Dropwizard metric import (metric=hist, type=com.codahale.metrics.Histogram)
    +        hist{quantile="0.5"} 49.0
    +        hist{quantile="0.75"} 74.0
    +        hist{quantile="0.95"} 94.0
    +        hist{quantile="0.98"} 97.0
    +        hist{quantile="0.99"} 98.0
    +        hist{quantile="0.999"} 99.0
    +        hist_count 100
    +        # EOF
    +        """;
    +
    +    // However, Dropwizard uses a random reservoir sampling algorithm, so the values could as well
    +    // be off-by-one
    +    String expected2 =
    +        """
    +        # TYPE hist summary
    +        # HELP hist Generated from Dropwizard metric import (metric=hist, type=com.codahale.metrics.Histogram)
    +        hist{quantile="0.5"} 50.0
    +        hist{quantile="0.75"} 75.0
    +        hist{quantile="0.95"} 95.0
    +        hist{quantile="0.98"} 98.0
    +        hist{quantile="0.99"} 99.0
    +        hist{quantile="0.999"} 99.0
    +        hist_count 100
    +        # EOF
    +        """;
    +
    +    // The following asserts the values matches either of the expected value.
    +    String textFormat = convertToOpenMetricsFormat(pmRegistry);
    +    assertThat(textFormat)
    +        .satisfiesAnyOf(
    +            text -> assertThat(text).isEqualTo(expected1),
    +            text -> assertThat(text).isEqualTo(expected2));
    +  }
    +
    +  @Test
    +  public void testMeter() {
    +    Meter meter = metricRegistry.meter("meter");
    +    meter.mark();
    +    meter.mark();
    +
    +    String expected =
    +        """
    +        # TYPE meter counter
    +        # HELP meter Generated from Dropwizard metric import (metric=meter_total, type=com.codahale.metrics.Meter)
    +        meter_total 2.0
    +        # EOF
    +        """;
    +    assertThat(convertToOpenMetricsFormat()).isEqualTo(expected);
    +  }
    +
    +  @Test
    +  public void testTimer() throws InterruptedException {
    +    final MetricRegistry metricRegistry = new MetricRegistry();
    +    DropwizardExports exports = new DropwizardExports(metricRegistry);
    +    Timer t = metricRegistry.timer("timer");
    +    Timer.Context time = t.time();
    +    Thread.sleep(100L);
    +    long timeSpentNanos = time.stop();
    +    double timeSpentMillis = TimeUnit.NANOSECONDS.toMillis(timeSpentNanos);
    +
    +    assertThat(exports.collect().stream().flatMap(i1 -> i1.getDataPoints().stream()).findFirst())
    +        .containsInstanceOf(SummarySnapshot.SummaryDataPointSnapshot.class)
    +        .hasValueSatisfying(
    +            snapshot -> {
    +              var dataPointSnapshot = (SummarySnapshot.SummaryDataPointSnapshot) snapshot;
    +              // We slept for 1Ms so we ensure that all timers are above 1ms:
    +              assertThat(dataPointSnapshot.getQuantiles().size()).isGreaterThan(1);
    +              dataPointSnapshot
    +                  .getQuantiles()
    +                  .forEach(i -> assertThat(i.getValue()).isGreaterThan(timeSpentMillis / 1000d));
    +              assertThat(dataPointSnapshot.getCount()).isOne();
    +            });
    +  }
    +
    +  @Test
    +  public void testThatMetricHelpUsesOriginalDropwizardName() {
    +    metricRegistry.timer("my.application.namedTimer1");
    +    metricRegistry.counter("my.application.namedCounter1");
    +    metricRegistry.meter("my.application.namedMeter1");
    +    metricRegistry.histogram("my.application.namedHistogram1");
    +    metricRegistry.register("my.application.namedGauge1", new ExampleDoubleGauge());
    +
    +    String expected =
    +        """
    +        # TYPE my_application_namedCounter1 counter
    +        # HELP my_application_namedCounter1 Generated from Dropwizard metric import (metric=my.application.namedCounter1, type=com.codahale.metrics.Counter)
    +        my_application_namedCounter1_total 0.0
    +        # TYPE my_application_namedGauge1 gauge
    +        # HELP my_application_namedGauge1 Generated from Dropwizard metric import (metric=my.application.namedGauge1, type=io.prometheus.metrics.instrumentation.dropwizard.DropwizardExportsTest$ExampleDoubleGauge)
    +        my_application_namedGauge1 0.0
    +        # TYPE my_application_namedHistogram1 summary
    +        # HELP my_application_namedHistogram1 Generated from Dropwizard metric import (metric=my.application.namedHistogram1, type=com.codahale.metrics.Histogram)
    +        my_application_namedHistogram1{quantile="0.5"} 0.0
    +        my_application_namedHistogram1{quantile="0.75"} 0.0
    +        my_application_namedHistogram1{quantile="0.95"} 0.0
    +        my_application_namedHistogram1{quantile="0.98"} 0.0
    +        my_application_namedHistogram1{quantile="0.99"} 0.0
    +        my_application_namedHistogram1{quantile="0.999"} 0.0
    +        my_application_namedHistogram1_count 0
    +        # TYPE my_application_namedMeter1 counter
    +        # HELP my_application_namedMeter1 Generated from Dropwizard metric import (metric=my.application.namedMeter1_total, type=com.codahale.metrics.Meter)
    +        my_application_namedMeter1_total 0.0
    +        # TYPE my_application_namedTimer1 summary
    +        # HELP my_application_namedTimer1 Generated from Dropwizard metric import (metric=my.application.namedTimer1, type=com.codahale.metrics.Timer)
    +        my_application_namedTimer1{quantile="0.5"} 0.0
    +        my_application_namedTimer1{quantile="0.75"} 0.0
    +        my_application_namedTimer1{quantile="0.95"} 0.0
    +        my_application_namedTimer1{quantile="0.98"} 0.0
    +        my_application_namedTimer1{quantile="0.99"} 0.0
    +        my_application_namedTimer1{quantile="0.999"} 0.0
    +        my_application_namedTimer1_count 0
    +        # EOF
    +        """;
    +    assertThat(convertToOpenMetricsFormat()).isEqualTo(expected);
    +  }
    +
    +  private static class ExampleDoubleGauge implements Gauge {
    +    @Override
    +    public Double getValue() {
    +      return 0.0;
    +    }
    +  }
    +
    +  private String convertToOpenMetricsFormat(PrometheusRegistry _registry) {
    +    ByteArrayOutputStream out = new ByteArrayOutputStream();
    +    OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true);
    +    try {
    +      writer.write(out, _registry.scrape());
    +      return out.toString(StandardCharsets.UTF_8);
    +    } catch (IOException e) {
    +      throw new RuntimeException(e);
    +    }
    +  }
    +
    +  private String convertToOpenMetricsFormat() {
    +    return convertToOpenMetricsFormat(registry);
    +  }
    +}
    diff --git a/prometheus-metrics-instrumentation-dropwizard/version-rules.xml b/prometheus-metrics-instrumentation-dropwizard/version-rules.xml
    new file mode 100644
    index 000000000..5c6d39593
    --- /dev/null
    +++ b/prometheus-metrics-instrumentation-dropwizard/version-rules.xml
    @@ -0,0 +1,6 @@
    +
    +    
    +    
    +
    
    From d93618b28fbeaedf86dbebc1f09bda34e85b7f5e Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Fri, 13 Dec 2024 15:28:24 +0100
    Subject: [PATCH 246/870] Bump io.dropwizard.metrics:metrics-core from 4.2.0 to
     4.2.29 (#1231)
    
    Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.0 to 4.2.29.
    - [Release notes](https://github.com/dropwizard/metrics/releases)
    - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.0...v4.2.29)
    
    ---
    updated-dependencies:
    - dependency-name: io.dropwizard.metrics:metrics-core
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     prometheus-metrics-instrumentation-dropwizard/pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/prometheus-metrics-instrumentation-dropwizard/pom.xml b/prometheus-metrics-instrumentation-dropwizard/pom.xml
    index d6f6a62ae..e17b11e96 100644
    --- a/prometheus-metrics-instrumentation-dropwizard/pom.xml
    +++ b/prometheus-metrics-instrumentation-dropwizard/pom.xml
    @@ -45,7 +45,7 @@
             
                 io.dropwizard.metrics
                 metrics-core
    -            4.2.0
    +            4.2.29
                 provided
             
     
    
    From e5a0e74acde0abcd98914c41a7593755a7c754c9 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Mon, 16 Dec 2024 08:49:53 -0500
    Subject: [PATCH 247/870] Bump junit-jupiter.version from 5.11.3 to 5.11.4
     (#1233)
    
    Bumps `junit-jupiter.version` from 5.11.3 to 5.11.4.
    
    Updates `org.junit.jupiter:junit-jupiter-engine` from 5.11.3 to 5.11.4
    - [Release notes](https://github.com/junit-team/junit5/releases)
    - [Commits](https://github.com/junit-team/junit5/compare/r5.11.3...r5.11.4)
    
    Updates `org.junit.jupiter:junit-jupiter-params` from 5.11.3 to 5.11.4
    - [Release notes](https://github.com/junit-team/junit5/releases)
    - [Commits](https://github.com/junit-team/junit5/compare/r5.11.3...r5.11.4)
    
    ---
    updated-dependencies:
    - dependency-name: org.junit.jupiter:junit-jupiter-engine
      dependency-type: direct:development
      update-type: version-update:semver-patch
    - dependency-name: org.junit.jupiter:junit-jupiter-params
      dependency-type: direct:development
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 2f9aa6dff..3d96195bb 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -17,7 +17,7 @@
         
             UTF-8
             --module-name-need-to-be-overriden--
    -        5.11.3
    +        5.11.4
             2.10.0-alpha
             8
             0.70
    
    From 21af74ee3d1ac22b97b40cdc4f28bffb76c62eb7 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Tue, 17 Dec 2024 14:46:49 +0100
    Subject: [PATCH 248/870] Bump com.google.guava:guava from 33.3.1-jre to
     33.4.0-jre (#1234)
    
    Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.3.1-jre to 33.4.0-jre.
    - [Release notes](https://github.com/google/guava/releases)
    - [Commits](https://github.com/google/guava/commits)
    
    ---
    updated-dependencies:
    - dependency-name: com.google.guava:guava
      dependency-type: direct:development
      update-type: version-update:semver-minor
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 3d96195bb..a0afdf4dd 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -87,7 +87,7 @@
                 
                     com.google.guava
                     guava
    -                33.3.1-jre
    +                33.4.0-jre
                 
             
         
    
    From efd138d429d3cefa956f7c76ec40ed09e4ae58eb Mon Sep 17 00:00:00 2001
    From: Gregor Zeitlinger 
    Date: Wed, 18 Dec 2024 12:57:04 +0100
    Subject: [PATCH 249/870] update oats (#1236)
    
    Signed-off-by: Gregor Zeitlinger 
    ---
     .github/workflows/acceptance-tests.yml                         | 2 +-
     .../example-exporter-opentelemetry/oats-tests/agent/oats.yaml  | 1 -
     .../example-exporter-opentelemetry/oats-tests/http/oats.yaml   | 1 -
     scripts/run-acceptance-tests.sh                                | 3 +--
     4 files changed, 2 insertions(+), 5 deletions(-)
    
    diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml
    index e6a64579e..857bc5b01 100644
    --- a/.github/workflows/acceptance-tests.yml
    +++ b/.github/workflows/acceptance-tests.yml
    @@ -15,7 +15,7 @@ jobs:
             uses: actions/checkout@v4
             with:
               repository: grafana/oats
    -          ref: 7cd5ca42fff009fd67ea986d42c79134ac99ae48
    +          ref: v0.1.0
               path: oats
           - name: Set up JDK
             uses: actions/setup-java@v4
    diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml b/examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml
    index 08e4d8d3f..acd85ab11 100644
    --- a/examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml
    +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml
    @@ -1,6 +1,5 @@
     # OATS is an acceptance testing framework for OpenTelemetry - https://github.com/grafana/oats/tree/main/yaml
     docker-compose:
    -  generator: docker-lgtm
       files:
         - ./docker-compose.yml
     expected:
    diff --git a/examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml b/examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml
    index a3af9ffc2..accca127d 100644
    --- a/examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml
    +++ b/examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml
    @@ -1,6 +1,5 @@
     # OATS is an acceptance testing framework for OpenTelemetry - https://github.com/grafana/oats/tree/main/yaml
     docker-compose:
    -  generator: docker-lgtm
       files:
         - ./docker-compose.yml
     expected:
    diff --git a/scripts/run-acceptance-tests.sh b/scripts/run-acceptance-tests.sh
    index 151783f77..f72b98573 100755
    --- a/scripts/run-acceptance-tests.sh
    +++ b/scripts/run-acceptance-tests.sh
    @@ -4,7 +4,6 @@ set -euo pipefail
     
     cd oats/yaml
     go install github.com/onsi/ginkgo/v2/ginkgo
    -export TESTCASE_SKIP_BUILD=true
     export TESTCASE_TIMEOUT=5m
     export TESTCASE_BASE_PATH=../../examples
    -ginkgo -r # is parallel causing problems? -p
    +ginkgo
    
    From f2329a7b1292458c9243bca3c6860db6e69b5090 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Thu, 19 Dec 2024 15:42:19 +0100
    Subject: [PATCH 250/870] Bump
     org.springframework.boot:spring-boot-starter-parent (#1238)
    
    Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.0 to 3.4.1.
    - [Release notes](https://github.com/spring-projects/spring-boot/releases)
    - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.0...v3.4.1)
    
    ---
    updated-dependencies:
    - dependency-name: org.springframework.boot:spring-boot-starter-parent
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml
    index fc5fc6083..2121c27c0 100644
    --- a/integration-tests/it-spring-boot-smoke-test/pom.xml
    +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml
    @@ -7,7 +7,7 @@
         
             org.springframework.boot
             spring-boot-starter-parent
    -        3.4.0
    +        3.4.1
              
         
     
    
    From 5139324e58e8f297fd44b0c3023bfecdc4e2e61f Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Thu, 19 Dec 2024 18:43:55 +0100
    Subject: [PATCH 251/870] Bump com.google.protobuf:protobuf-java from 4.29.1 to
     4.29.2 (#1237)
    
    * Bump com.google.protobuf:protobuf-java from 4.29.1 to 4.29.2
    
    Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.29.1 to 4.29.2.
    - [Release notes](https://github.com/protocolbuffers/protobuf/releases)
    - [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
    - [Commits](https://github.com/protocolbuffers/protobuf/commits)
    
    ---
    updated-dependencies:
    - dependency-name: com.google.protobuf:protobuf-java
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    
    * update protobuf
    
    Signed-off-by: Gregor Zeitlinger 
    
    ---------
    
    Signed-off-by: dependabot[bot] 
    Signed-off-by: Gregor Zeitlinger 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     .github/workflows/acceptance-tests.yml        |    2 +-
     .tool-versions                                |    2 +-
     .../client/it/common/ExporterTest.java        |    2 +-
     .../metrics/it/exporter/test/ExporterIT.java  |    2 +-
     .../it/springboot/ApplicationTest.java        |    2 +-
     .../metrics/core/metrics/CounterTest.java     |    2 +-
     .../metrics/core/metrics/HistogramTest.java   |    2 +-
     .../metrics/core/metrics/InfoTest.java        |    2 +-
     prometheus-metrics-exposition-formats/pom.xml |    2 +-
     .../Metrics.java                              | 1810 ++++++++---------
     .../PrometheusProtobufWriterImpl.java         |    2 +-
     .../ExpositionFormatsTest.java                |    2 +-
     12 files changed, 916 insertions(+), 916 deletions(-)
     rename prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/{com_google_protobuf_4_29_1 => com_google_protobuf_4_29_2}/Metrics.java (89%)
    
    diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml
    index 857bc5b01..3baa62489 100644
    --- a/.github/workflows/acceptance-tests.yml
    +++ b/.github/workflows/acceptance-tests.yml
    @@ -37,5 +37,5 @@ jobs:
             uses: actions/upload-artifact@v4
             if: failure()
             with:
    -          name: docker-compose.log
    +          name: OATS logs
               path: oats/yaml/build/**/*.log
    diff --git a/.tool-versions b/.tool-versions
    index a0b8f5ad4..477916d84 100644
    --- a/.tool-versions
    +++ b/.tool-versions
    @@ -1,2 +1,2 @@
     java temurin-17.0.13+11
    -protoc 29.1
    +protoc 29.2
    diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java
    index 7f8d84715..97d133e8c 100644
    --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java
    +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java
    @@ -4,7 +4,7 @@
     import static org.assertj.core.api.Assertions.assertThat;
     import static org.assertj.core.api.Assertions.fail;
     
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
     import java.io.ByteArrayInputStream;
     import java.io.IOException;
     import java.io.InputStream;
    diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java
    index 199bc3387..60bd7ab59 100644
    --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java
    +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java
    @@ -5,7 +5,7 @@
     
     import com.google.common.io.Resources;
     import io.prometheus.client.it.common.ExporterTest;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
     import java.io.IOException;
     import java.net.URISyntaxException;
     import java.net.URLEncoder;
    diff --git a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java
    index f986b6a24..7abf16e9d 100644
    --- a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java
    +++ b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java
    @@ -3,7 +3,7 @@
     import static org.assertj.core.api.Assertions.assertThat;
     
     import io.prometheus.client.it.common.ExporterTest;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
     import java.io.IOException;
     import java.net.URL;
     import java.util.List;
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java
    index 6ab4e74ca..7f6dd20f6 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java
    @@ -6,7 +6,7 @@
     import static org.assertj.core.data.Offset.offset;
     
     import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java
    index fbd89ea15..69453ea13 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java
    @@ -8,7 +8,7 @@
     import io.prometheus.metrics.core.datapoints.DistributionDataPoint;
     import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil;
     import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket;
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java
    index 54f9b6032..e4878eb42 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java
    @@ -4,7 +4,7 @@
     import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
     
     import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.Labels;
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index 7a063dc35..0c2a686a8 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -19,7 +19,7 @@
     
         
             io.prometheus.metrics.expositionformats
    -        4.29.1
    +        4.29.2
         
     
         
    diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_1/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_2/Metrics.java
    similarity index 89%
    rename from prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_1/Metrics.java
    rename to prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_2/Metrics.java
    index 85e9cbb23..2e7f28311 100644
    --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_1/Metrics.java
    +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_2/Metrics.java
    @@ -2,9 +2,9 @@
     // Generated by the protocol buffer compiler.  DO NOT EDIT!
     // NO CHECKED-IN PROTOBUF GENCODE
     // source: src/main/protobuf/metrics.proto
    -// Protobuf Java Version: 4.29.1
    +// Protobuf Java Version: 4.29.2
     
    -package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1;
    +package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2;
     
     public final class Metrics {
       private Metrics() {}
    @@ -13,7 +13,7 @@ private Metrics() {}
           com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
           /* major= */ 4,
           /* minor= */ 29,
    -      /* patch= */ 1,
    +      /* patch= */ 2,
           /* suffix= */ "",
           Metrics.class.getName());
       }
    @@ -86,7 +86,7 @@ public enum MetricType
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             MetricType.class.getName());
         }
    @@ -192,7 +192,7 @@ public MetricType findValueByNumber(int number) {
         }
         public static final com.google.protobuf.Descriptors.EnumDescriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.getDescriptor().getEnumTypes().get(0);
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.getDescriptor().getEnumTypes().get(0);
         }
     
         private static final MetricType[] VALUES = values();
    @@ -266,7 +266,7 @@ public static final class LabelPair extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             LabelPair.class.getName());
         }
    @@ -281,15 +281,15 @@ private LabelPair() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder.class);
         }
     
         private int bitField0_;
    @@ -436,10 +436,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -475,44 +475,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -520,26 +520,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -552,7 +552,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -573,21 +573,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.newBuilder()
           private Builder() {
     
           }
    @@ -609,17 +609,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -627,14 +627,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -650,16 +650,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -887,12 +887,12 @@ public Builder setValueBytes(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -928,7 +928,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -962,7 +962,7 @@ public static final class Gauge extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Gauge.class.getName());
         }
    @@ -975,15 +975,15 @@ private Gauge() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder.class);
         }
     
         private int bitField0_;
    @@ -1046,10 +1046,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -1078,44 +1078,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -1123,26 +1123,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -1155,7 +1155,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -1176,21 +1176,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.newBuilder()
           private Builder() {
     
           }
    @@ -1211,17 +1211,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -1229,14 +1229,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -1248,16 +1248,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -1353,12 +1353,12 @@ public Builder clearValue() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -1394,7 +1394,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -1424,11 +1424,11 @@ public interface CounterOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
     
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 3;
    @@ -1458,7 +1458,7 @@ public static final class Counter extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Counter.class.getName());
         }
    @@ -1471,15 +1471,15 @@ private Counter() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder.class);
         }
     
         private int bitField0_;
    @@ -1503,7 +1503,7 @@ public double getValue() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          * @return Whether the exemplar field is set.
    @@ -1517,15 +1517,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 3;
    @@ -1608,10 +1608,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -1658,44 +1658,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -1703,26 +1703,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -1735,7 +1735,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -1756,21 +1756,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -1808,17 +1808,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -1826,14 +1826,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -1857,16 +1857,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -1978,9 +1978,9 @@ public Builder clearValue() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar exemplar_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            * @return Whether the exemplar field is set.
    @@ -1992,9 +1992,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -2002,7 +2002,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -2019,7 +2019,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -2032,11 +2032,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -2066,7 +2066,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return getExemplarFieldBuilder().getBuilder();
    @@ -2074,23 +2074,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> 
               getExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
               exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -2224,12 +2224,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2265,7 +2265,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2310,7 +2310,7 @@ public static final class Quantile extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Quantile.class.getName());
         }
    @@ -2323,15 +2323,15 @@ private Quantile() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder.class);
         }
     
         private int bitField0_;
    @@ -2420,10 +2420,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile) obj;
     
           if (hasQuantile() != other.hasQuantile()) return false;
           if (hasQuantile()) {
    @@ -2463,44 +2463,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -2508,26 +2508,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -2540,7 +2540,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -2561,21 +2561,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.newBuilder()
           private Builder() {
     
           }
    @@ -2597,17 +2597,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -2615,14 +2615,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -2638,16 +2638,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.getDefaultInstance()) return this;
             if (other.hasQuantile()) {
               setQuantile(other.getQuantile());
             }
    @@ -2791,12 +2791,12 @@ public Builder clearValue() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2832,7 +2832,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2867,12 +2867,12 @@ public interface SummaryOrBuilder extends
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getQuantileList();
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getQuantile(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getQuantile(int index);
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    @@ -2880,12 +2880,12 @@ public interface SummaryOrBuilder extends
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getQuantileOrBuilderList();
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder getQuantileOrBuilder(
             int index);
     
         /**
    @@ -2916,7 +2916,7 @@ public static final class Summary extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Summary.class.getName());
         }
    @@ -2930,15 +2930,15 @@ private Summary() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder.class);
         }
     
         private int bitField0_;
    @@ -2982,19 +2982,19 @@ public double getSampleSum() {
     
         public static final int QUANTILE_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List quantile_;
    +    private java.util.List quantile_;
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public java.util.List getQuantileList() {
    +    public java.util.List getQuantileList() {
           return quantile_;
         }
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getQuantileOrBuilderList() {
           return quantile_;
         }
    @@ -3009,14 +3009,14 @@ public int getQuantileCount() {
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getQuantile(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getQuantile(int index) {
           return quantile_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder getQuantileOrBuilder(
             int index) {
           return quantile_.get(index);
         }
    @@ -3108,10 +3108,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -3165,44 +3165,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -3210,26 +3210,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -3242,7 +3242,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -3263,21 +3263,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -3318,17 +3318,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -3336,15 +3336,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary result) {
             if (quantileBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0)) {
                 quantile_ = java.util.Collections.unmodifiableList(quantile_);
    @@ -3356,7 +3356,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -3378,16 +3378,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -3460,9 +3460,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.parser(),
                             extensionRegistry);
                     if (quantileBuilder_ == null) {
                       ensureQuantileIsMutable();
    @@ -3576,22 +3576,22 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List quantile_ =
    +      private java.util.List quantile_ =
             java.util.Collections.emptyList();
           private void ensureQuantileIsMutable() {
             if (!((bitField0_ & 0x00000004) != 0)) {
    -          quantile_ = new java.util.ArrayList(quantile_);
    +          quantile_ = new java.util.ArrayList(quantile_);
               bitField0_ |= 0x00000004;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder> quantileBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder> quantileBuilder_;
     
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List getQuantileList() {
    +      public java.util.List getQuantileList() {
             if (quantileBuilder_ == null) {
               return java.util.Collections.unmodifiableList(quantile_);
             } else {
    @@ -3611,7 +3611,7 @@ public int getQuantileCount() {
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile getQuantile(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getQuantile(int index) {
             if (quantileBuilder_ == null) {
               return quantile_.get(index);
             } else {
    @@ -3622,7 +3622,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder setQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3639,7 +3639,7 @@ public Builder setQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder setQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.set(index, builderForValue.build());
    @@ -3652,7 +3652,7 @@ public Builder setQuantile(
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile value) {
    +      public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3669,7 +3669,7 @@ public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3686,7 +3686,7 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.add(builderForValue.build());
    @@ -3700,7 +3700,7 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.add(index, builderForValue.build());
    @@ -3714,7 +3714,7 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addAllQuantile(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -3754,14 +3754,14 @@ public Builder removeQuantile(int index) {
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder getQuantileBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder getQuantileBuilder(
               int index) {
             return getQuantileFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder getQuantileOrBuilder(
               int index) {
             if (quantileBuilder_ == null) {
               return quantile_.get(index);  } else {
    @@ -3771,7 +3771,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getQuantileOrBuilderList() {
             if (quantileBuilder_ != null) {
               return quantileBuilder_.getMessageOrBuilderList();
    @@ -3782,31 +3782,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder addQuantileBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder addQuantileBuilder() {
             return getQuantileFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder addQuantileBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder addQuantileBuilder(
               int index) {
             return getQuantileFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getQuantileBuilderList() {
             return getQuantileFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder> 
               getQuantileFieldBuilder() {
             if (quantileBuilder_ == null) {
               quantileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.QuantileOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder>(
                       quantile_,
                       ((bitField0_ & 0x00000004) != 0),
                       getParentForChildren(),
    @@ -3941,12 +3941,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -3982,7 +3982,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -4016,7 +4016,7 @@ public static final class Untyped extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Untyped.class.getName());
         }
    @@ -4029,15 +4029,15 @@ private Untyped() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder.class);
         }
     
         private int bitField0_;
    @@ -4100,10 +4100,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -4132,44 +4132,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -4177,26 +4177,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -4209,7 +4209,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -4230,21 +4230,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.newBuilder()
           private Builder() {
     
           }
    @@ -4265,17 +4265,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -4283,14 +4283,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -4302,16 +4302,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -4407,12 +4407,12 @@ public Builder clearValue() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -4448,7 +4448,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -4506,7 +4506,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketList();
         /**
          * 
    @@ -4515,7 +4515,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getBucket(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getBucket(int index);
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -4531,7 +4531,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketOrBuilderList();
         /**
          * 
    @@ -4540,7 +4540,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index);
     
         /**
    @@ -4649,7 +4649,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanList();
         /**
          * 
    @@ -4658,7 +4658,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getNegativeSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getNegativeSpan(int index);
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -4674,7 +4674,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanOrBuilderList();
         /**
          * 
    @@ -4683,7 +4683,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index);
     
         /**
    @@ -4760,7 +4760,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanList();
         /**
          * 
    @@ -4772,7 +4772,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getPositiveSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getPositiveSpan(int index);
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -4794,7 +4794,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanOrBuilderList();
         /**
          * 
    @@ -4806,7 +4806,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index);
     
         /**
    @@ -4880,7 +4880,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsList();
         /**
          * 
    @@ -4889,7 +4889,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplars(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplars(int index);
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -4905,7 +4905,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsOrBuilderList();
         /**
          * 
    @@ -4914,7 +4914,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index);
       }
       /**
    @@ -4930,7 +4930,7 @@ public static final class Histogram extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Histogram.class.getName());
         }
    @@ -4951,15 +4951,15 @@ private Histogram() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder.class);
         }
     
         private int bitField0_;
    @@ -5030,7 +5030,7 @@ public double getSampleSum() {
     
         public static final int BUCKET_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List bucket_;
    +    private java.util.List bucket_;
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -5039,7 +5039,7 @@ public double getSampleSum() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List getBucketList() {
    +    public java.util.List getBucketList() {
           return bucket_;
         }
         /**
    @@ -5050,7 +5050,7 @@ public java.util.Listrepeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getBucketOrBuilderList() {
           return bucket_;
         }
    @@ -5073,7 +5073,7 @@ public int getBucketCount() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getBucket(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getBucket(int index) {
           return bucket_.get(index);
         }
         /**
    @@ -5084,7 +5084,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index) {
           return bucket_.get(index);
         }
    @@ -5233,7 +5233,7 @@ public double getZeroCountFloat() {
     
         public static final int NEGATIVE_SPAN_FIELD_NUMBER = 9;
         @SuppressWarnings("serial")
    -    private java.util.List negativeSpan_;
    +    private java.util.List negativeSpan_;
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -5242,7 +5242,7 @@ public double getZeroCountFloat() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List getNegativeSpanList() {
    +    public java.util.List getNegativeSpanList() {
           return negativeSpan_;
         }
         /**
    @@ -5253,7 +5253,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getNegativeSpanOrBuilderList() {
           return negativeSpan_;
         }
    @@ -5276,7 +5276,7 @@ public int getNegativeSpanCount() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getNegativeSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getNegativeSpan(int index) {
           return negativeSpan_.get(index);
         }
         /**
    @@ -5287,7 +5287,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index) {
           return negativeSpan_.get(index);
         }
    @@ -5382,7 +5382,7 @@ public double getNegativeCount(int index) {
     
         public static final int POSITIVE_SPAN_FIELD_NUMBER = 12;
         @SuppressWarnings("serial")
    -    private java.util.List positiveSpan_;
    +    private java.util.List positiveSpan_;
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5394,7 +5394,7 @@ public double getNegativeCount(int index) {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List getPositiveSpanList() {
    +    public java.util.List getPositiveSpanList() {
           return positiveSpan_;
         }
         /**
    @@ -5408,7 +5408,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getPositiveSpanOrBuilderList() {
           return positiveSpan_;
         }
    @@ -5437,7 +5437,7 @@ public int getPositiveSpanCount() {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getPositiveSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getPositiveSpan(int index) {
           return positiveSpan_.get(index);
         }
         /**
    @@ -5451,7 +5451,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index) {
           return positiveSpan_.get(index);
         }
    @@ -5546,7 +5546,7 @@ public double getPositiveCount(int index) {
     
         public static final int EXEMPLARS_FIELD_NUMBER = 16;
         @SuppressWarnings("serial")
    -    private java.util.List exemplars_;
    +    private java.util.List exemplars_;
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -5555,7 +5555,7 @@ public double getPositiveCount(int index) {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List getExemplarsList() {
    +    public java.util.List getExemplarsList() {
           return exemplars_;
         }
         /**
    @@ -5566,7 +5566,7 @@ public java.util.Listrepeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getExemplarsOrBuilderList() {
           return exemplars_;
         }
    @@ -5589,7 +5589,7 @@ public int getExemplarsCount() {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplars(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplars(int index) {
           return exemplars_.get(index);
         }
         /**
    @@ -5600,7 +5600,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index) {
           return exemplars_.get(index);
         }
    @@ -5764,10 +5764,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -5915,44 +5915,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5960,26 +5960,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5992,7 +5992,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -6013,21 +6013,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -6101,17 +6101,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -6119,15 +6119,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram result) {
             if (bucketBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 bucket_ = java.util.Collections.unmodifiableList(bucket_);
    @@ -6166,7 +6166,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -6224,16 +6224,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -6443,9 +6443,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.parser(),
                             extensionRegistry);
                     if (bucketBuilder_ == null) {
                       ensureBucketIsMutable();
    @@ -6481,9 +6481,9 @@ public Builder mergeFrom(
                     break;
                   } // case 65
                   case 74: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (negativeSpanBuilder_ == null) {
                       ensureNegativeSpanIsMutable();
    @@ -6527,9 +6527,9 @@ public Builder mergeFrom(
                     break;
                   } // case 90
                   case 98: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (positiveSpanBuilder_ == null) {
                       ensurePositiveSpanIsMutable();
    @@ -6580,9 +6580,9 @@ public Builder mergeFrom(
                     break;
                   } // case 122
                   case 130: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.parser(),
                             extensionRegistry);
                     if (exemplarsBuilder_ == null) {
                       ensureExemplarsIsMutable();
    @@ -6745,17 +6745,17 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List bucket_ =
    +      private java.util.List bucket_ =
             java.util.Collections.emptyList();
           private void ensureBucketIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          bucket_ = new java.util.ArrayList(bucket_);
    +          bucket_ = new java.util.ArrayList(bucket_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder> bucketBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder> bucketBuilder_;
     
           /**
            * 
    @@ -6764,7 +6764,7 @@ private void ensureBucketIsMutable() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List getBucketList() {
    +      public java.util.List getBucketList() {
             if (bucketBuilder_ == null) {
               return java.util.Collections.unmodifiableList(bucket_);
             } else {
    @@ -6792,7 +6792,7 @@ public int getBucketCount() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getBucket(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getBucket(int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);
             } else {
    @@ -6807,7 +6807,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6828,7 +6828,7 @@ public Builder setBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.set(index, builderForValue.build());
    @@ -6845,7 +6845,7 @@ public Builder setBucket(
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket value) {
    +      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6866,7 +6866,7 @@ public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6887,7 +6887,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(builderForValue.build());
    @@ -6905,7 +6905,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(index, builderForValue.build());
    @@ -6923,7 +6923,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addAllBucket(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -6975,7 +6975,7 @@ public Builder removeBucket(int index) {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder getBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder getBucketBuilder(
               int index) {
             return getBucketFieldBuilder().getBuilder(index);
           }
    @@ -6986,7 +6986,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder getBucketOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder getBucketOrBuilder(
               int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);  } else {
    @@ -7000,7 +7000,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketOrBuilderList() {
             if (bucketBuilder_ != null) {
               return bucketBuilder_.getMessageOrBuilderList();
    @@ -7015,9 +7015,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder addBucketBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder addBucketBuilder() {
             return getBucketFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7026,10 +7026,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder addBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder addBucketBuilder(
               int index) {
             return getBucketFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7038,16 +7038,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketBuilderList() {
             return getBucketFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder> 
               getBucketFieldBuilder() {
             if (bucketBuilder_ == null) {
               bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder>(
                       bucket_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -7418,17 +7418,17 @@ public Builder clearZeroCountFloat() {
             return this;
           }
     
    -      private java.util.List negativeSpan_ =
    +      private java.util.List negativeSpan_ =
             java.util.Collections.emptyList();
           private void ensureNegativeSpanIsMutable() {
             if (!((bitField0_ & 0x00000200) != 0)) {
    -          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
    +          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
               bitField0_ |= 0x00000200;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
     
           /**
            * 
    @@ -7437,7 +7437,7 @@ private void ensureNegativeSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List getNegativeSpanList() {
    +      public java.util.List getNegativeSpanList() {
             if (negativeSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(negativeSpan_);
             } else {
    @@ -7465,7 +7465,7 @@ public int getNegativeSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getNegativeSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getNegativeSpan(int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);
             } else {
    @@ -7480,7 +7480,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7501,7 +7501,7 @@ public Builder setNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.set(index, builderForValue.build());
    @@ -7518,7 +7518,7 @@ public Builder setNegativeSpan(
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
    +      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7539,7 +7539,7 @@ public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7560,7 +7560,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(builderForValue.build());
    @@ -7578,7 +7578,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(index, builderForValue.build());
    @@ -7596,7 +7596,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addAllNegativeSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -7648,7 +7648,7 @@ public Builder removeNegativeSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
               int index) {
             return getNegativeSpanFieldBuilder().getBuilder(index);
           }
    @@ -7659,7 +7659,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
               int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);  } else {
    @@ -7673,7 +7673,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanOrBuilderList() {
             if (negativeSpanBuilder_ != null) {
               return negativeSpanBuilder_.getMessageOrBuilderList();
    @@ -7688,9 +7688,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
             return getNegativeSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7699,10 +7699,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
               int index) {
             return getNegativeSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7711,16 +7711,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanBuilderList() {
             return getNegativeSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder> 
               getNegativeSpanFieldBuilder() {
             if (negativeSpanBuilder_ == null) {
               negativeSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder>(
                       negativeSpan_,
                       ((bitField0_ & 0x00000200) != 0),
                       getParentForChildren(),
    @@ -7974,17 +7974,17 @@ public Builder clearNegativeCount() {
             return this;
           }
     
    -      private java.util.List positiveSpan_ =
    +      private java.util.List positiveSpan_ =
             java.util.Collections.emptyList();
           private void ensurePositiveSpanIsMutable() {
             if (!((bitField0_ & 0x00001000) != 0)) {
    -          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
    +          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
               bitField0_ |= 0x00001000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
     
           /**
            * 
    @@ -7996,7 +7996,7 @@ private void ensurePositiveSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List getPositiveSpanList() {
    +      public java.util.List getPositiveSpanList() {
             if (positiveSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(positiveSpan_);
             } else {
    @@ -8030,7 +8030,7 @@ public int getPositiveSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getPositiveSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getPositiveSpan(int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);
             } else {
    @@ -8048,7 +8048,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8072,7 +8072,7 @@ public Builder setPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.set(index, builderForValue.build());
    @@ -8092,7 +8092,7 @@ public Builder setPositiveSpan(
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
    +      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8116,7 +8116,7 @@ public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8140,7 +8140,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(builderForValue.build());
    @@ -8161,7 +8161,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(index, builderForValue.build());
    @@ -8182,7 +8182,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addAllPositiveSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8243,7 +8243,7 @@ public Builder removePositiveSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
               int index) {
             return getPositiveSpanFieldBuilder().getBuilder(index);
           }
    @@ -8257,7 +8257,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
               int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);  } else {
    @@ -8274,7 +8274,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanOrBuilderList() {
             if (positiveSpanBuilder_ != null) {
               return positiveSpanBuilder_.getMessageOrBuilderList();
    @@ -8292,9 +8292,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
             return getPositiveSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8306,10 +8306,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
               int index) {
             return getPositiveSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8321,16 +8321,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanBuilderList() {
             return getPositiveSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder> 
               getPositiveSpanFieldBuilder() {
             if (positiveSpanBuilder_ == null) {
               positiveSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder>(
                       positiveSpan_,
                       ((bitField0_ & 0x00001000) != 0),
                       getParentForChildren(),
    @@ -8584,17 +8584,17 @@ public Builder clearPositiveCount() {
             return this;
           }
     
    -      private java.util.List exemplars_ =
    +      private java.util.List exemplars_ =
             java.util.Collections.emptyList();
           private void ensureExemplarsIsMutable() {
             if (!((bitField0_ & 0x00008000) != 0)) {
    -          exemplars_ = new java.util.ArrayList(exemplars_);
    +          exemplars_ = new java.util.ArrayList(exemplars_);
               bitField0_ |= 0x00008000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
     
           /**
            * 
    @@ -8603,7 +8603,7 @@ private void ensureExemplarsIsMutable() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List getExemplarsList() {
    +      public java.util.List getExemplarsList() {
             if (exemplarsBuilder_ == null) {
               return java.util.Collections.unmodifiableList(exemplars_);
             } else {
    @@ -8631,7 +8631,7 @@ public int getExemplarsCount() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplars(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplars(int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);
             } else {
    @@ -8646,7 +8646,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8667,7 +8667,7 @@ public Builder setExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.set(index, builderForValue.build());
    @@ -8684,7 +8684,7 @@ public Builder setExemplars(
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
    +      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8705,7 +8705,7 @@ public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.co
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8726,7 +8726,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(builderForValue.build());
    @@ -8744,7 +8744,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(index, builderForValue.build());
    @@ -8762,7 +8762,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addAllExemplars(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8814,7 +8814,7 @@ public Builder removeExemplars(int index) {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder getExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder getExemplarsBuilder(
               int index) {
             return getExemplarsFieldBuilder().getBuilder(index);
           }
    @@ -8825,7 +8825,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
               int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);  } else {
    @@ -8839,7 +8839,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsOrBuilderList() {
             if (exemplarsBuilder_ != null) {
               return exemplarsBuilder_.getMessageOrBuilderList();
    @@ -8854,9 +8854,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder addExemplarsBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder addExemplarsBuilder() {
             return getExemplarsFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8865,10 +8865,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder addExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder addExemplarsBuilder(
               int index) {
             return getExemplarsFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8877,16 +8877,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsBuilderList() {
             return getExemplarsFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> 
               getExemplarsFieldBuilder() {
             if (exemplarsBuilder_ == null) {
               exemplarsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder>(
                       exemplars_,
                       ((bitField0_ & 0x00008000) != 0),
                       getParentForChildren(),
    @@ -8900,12 +8900,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -8941,7 +8941,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9017,11 +9017,11 @@ public interface BucketOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
       }
       /**
        * 
    @@ -9041,7 +9041,7 @@ public static final class Bucket extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Bucket.class.getName());
         }
    @@ -9054,15 +9054,15 @@ private Bucket() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder.class);
         }
     
         private int bitField0_;
    @@ -9148,7 +9148,7 @@ public double getUpperBound() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return Whether the exemplar field is set.
    @@ -9162,15 +9162,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -9234,10 +9234,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket) obj;
     
           if (hasCumulativeCount() != other.hasCumulativeCount()) return false;
           if (hasCumulativeCount()) {
    @@ -9296,44 +9296,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9341,26 +9341,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9373,7 +9373,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -9399,21 +9399,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -9447,17 +9447,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -9465,14 +9465,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -9498,16 +9498,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.getDefaultInstance()) return this;
             if (other.hasCumulativeCount()) {
               setCumulativeCount(other.getCumulativeCount());
             }
    @@ -9753,9 +9753,9 @@ public Builder clearUpperBound() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar exemplar_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return Whether the exemplar field is set.
    @@ -9767,9 +9767,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -9777,7 +9777,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -9794,7 +9794,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -9807,11 +9807,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -9841,7 +9841,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getExemplarFieldBuilder().getBuilder();
    @@ -9849,23 +9849,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> 
               getExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
               exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -9878,12 +9878,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9919,7 +9919,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Bucket getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9989,7 +9989,7 @@ public static final class BucketSpan extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             BucketSpan.class.getName());
         }
    @@ -10002,15 +10002,15 @@ private BucketSpan() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder.class);
         }
     
         private int bitField0_;
    @@ -10115,10 +10115,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan) obj;
     
           if (hasOffset() != other.hasOffset()) return false;
           if (hasOffset()) {
    @@ -10154,44 +10154,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10199,26 +10199,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10231,7 +10231,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10261,21 +10261,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.BucketSpan)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpanOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.newBuilder()
           private Builder() {
     
           }
    @@ -10297,17 +10297,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -10315,14 +10315,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -10338,16 +10338,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance()) return this;
             if (other.hasOffset()) {
               setOffset(other.getOffset());
             }
    @@ -10523,12 +10523,12 @@ public Builder clearLength() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.BucketSpan)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10564,7 +10564,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.BucketSpan getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10577,12 +10577,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -10590,12 +10590,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -10649,7 +10649,7 @@ public static final class Exemplar extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Exemplar.class.getName());
         }
    @@ -10663,33 +10663,33 @@ private Exemplar() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -10704,14 +10704,14 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
    @@ -10827,10 +10827,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -10874,44 +10874,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10919,26 +10919,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10951,7 +10951,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10972,21 +10972,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Exemplar)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.ExemplarOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -11026,17 +11026,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -11044,15 +11044,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -11064,7 +11064,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -11082,16 +11082,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -11151,9 +11151,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -11192,22 +11192,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -11227,7 +11227,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -11238,7 +11238,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11255,7 +11255,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -11268,7 +11268,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11285,7 +11285,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11302,7 +11302,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -11316,7 +11316,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -11330,7 +11330,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -11370,14 +11370,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return getLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -11387,7 +11387,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -11398,31 +11398,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder addLabelBuilder() {
             return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return getLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder> 
               getLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -11633,12 +11633,12 @@ public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Exemplar)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11674,7 +11674,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Exemplar getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11687,12 +11687,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -11700,12 +11700,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -11717,11 +11717,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return The gauge.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getGauge();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getGauge();
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder getGaugeOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder getGaugeOrBuilder();
     
         /**
          * optional .io.prometheus.client.Counter counter = 3;
    @@ -11732,11 +11732,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          * optional .io.prometheus.client.Counter counter = 3;
          * @return The counter.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getCounter();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getCounter();
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder getCounterOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder getCounterOrBuilder();
     
         /**
          * optional .io.prometheus.client.Summary summary = 4;
    @@ -11747,11 +11747,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          * optional .io.prometheus.client.Summary summary = 4;
          * @return The summary.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getSummary();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getSummary();
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder getSummaryOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder getSummaryOrBuilder();
     
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
    @@ -11762,11 +11762,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return The untyped.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getUntyped();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getUntyped();
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder getUntypedOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder getUntypedOrBuilder();
     
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
    @@ -11777,11 +11777,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Met
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return The histogram.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getHistogram();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getHistogram();
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder getHistogramOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder getHistogramOrBuilder();
     
         /**
          * optional int64 timestamp_ms = 6;
    @@ -11807,7 +11807,7 @@ public static final class Metric extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Metric.class.getName());
         }
    @@ -11821,33 +11821,33 @@ private Metric() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -11862,20 +11862,20 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
     
         public static final int GAUGE_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge gauge_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge gauge_;
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return Whether the gauge field is set.
    @@ -11889,19 +11889,19 @@ public boolean hasGauge() {
          * @return The gauge.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getGauge() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getGauge() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
     
         public static final int COUNTER_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter counter_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter counter_;
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          * @return Whether the counter field is set.
    @@ -11915,19 +11915,19 @@ public boolean hasCounter() {
          * @return The counter.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getCounter() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getCounter() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance() : counter_;
         }
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder getCounterOrBuilder() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance() : counter_;
         }
     
         public static final int SUMMARY_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary summary_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary summary_;
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          * @return Whether the summary field is set.
    @@ -11941,19 +11941,19 @@ public boolean hasSummary() {
          * @return The summary.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getSummary() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getSummary() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance() : summary_;
         }
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance() : summary_;
         }
     
         public static final int UNTYPED_FIELD_NUMBER = 5;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped untyped_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped untyped_;
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return Whether the untyped field is set.
    @@ -11967,19 +11967,19 @@ public boolean hasUntyped() {
          * @return The untyped.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getUntyped() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getUntyped() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
     
         public static final int HISTOGRAM_FIELD_NUMBER = 7;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram histogram_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram histogram_;
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return Whether the histogram field is set.
    @@ -11993,15 +11993,15 @@ public boolean hasHistogram() {
          * @return The histogram.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getHistogram() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getHistogram() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
     
         public static final int TIMESTAMP_MS_FIELD_NUMBER = 6;
    @@ -12105,10 +12105,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -12187,44 +12187,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12232,26 +12232,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12264,7 +12264,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -12285,21 +12285,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -12363,17 +12363,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -12381,15 +12381,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -12401,7 +12401,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -12443,16 +12443,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -12524,9 +12524,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -12593,22 +12593,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -12628,7 +12628,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -12639,7 +12639,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12656,7 +12656,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -12669,7 +12669,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12686,7 +12686,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12703,7 +12703,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -12717,7 +12717,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -12731,7 +12731,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -12771,14 +12771,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return getLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -12788,7 +12788,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -12799,31 +12799,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder addLabelBuilder() {
             return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return getLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder> 
               getLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -12833,9 +12833,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return labelBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge gauge_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge gauge_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder> gaugeBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder> gaugeBuilder_;
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return Whether the gauge field is set.
    @@ -12847,9 +12847,9 @@ public boolean hasGauge() {
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return The gauge.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge getGauge() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getGauge() {
             if (gaugeBuilder_ == null) {
    -          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance() : gauge_;
    +          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance() : gauge_;
             } else {
               return gaugeBuilder_.getMessage();
             }
    @@ -12857,7 +12857,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge value) {
    +      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12874,7 +12874,7 @@ public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_go
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           public Builder setGauge(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder builderForValue) {
             if (gaugeBuilder_ == null) {
               gauge_ = builderForValue.build();
             } else {
    @@ -12887,11 +12887,11 @@ public Builder setGauge(
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge value) {
    +      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 gauge_ != null &&
    -            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance()) {
    +            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance()) {
                 getGaugeBuilder().mergeFrom(value);
               } else {
                 gauge_ = value;
    @@ -12921,7 +12921,7 @@ public Builder clearGauge() {
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder getGaugeBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder getGaugeBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return getGaugeFieldBuilder().getBuilder();
    @@ -12929,23 +12929,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
             if (gaugeBuilder_ != null) {
               return gaugeBuilder_.getMessageOrBuilder();
             } else {
               return gauge_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.getDefaultInstance() : gauge_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance() : gauge_;
             }
           }
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder> 
               getGaugeFieldBuilder() {
             if (gaugeBuilder_ == null) {
               gaugeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.GaugeOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder>(
                       getGauge(),
                       getParentForChildren(),
                       isClean());
    @@ -12954,9 +12954,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return gaugeBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter counter_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter counter_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder> counterBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder> counterBuilder_;
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            * @return Whether the counter field is set.
    @@ -12968,9 +12968,9 @@ public boolean hasCounter() {
            * optional .io.prometheus.client.Counter counter = 3;
            * @return The counter.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter getCounter() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getCounter() {
             if (counterBuilder_ == null) {
    -          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance() : counter_;
    +          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance() : counter_;
             } else {
               return counterBuilder_.getMessage();
             }
    @@ -12978,7 +12978,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter value) {
    +      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12995,7 +12995,7 @@ public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Counter counter = 3;
            */
           public Builder setCounter(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder builderForValue) {
             if (counterBuilder_ == null) {
               counter_ = builderForValue.build();
             } else {
    @@ -13008,11 +13008,11 @@ public Builder setCounter(
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter value) {
    +      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 counter_ != null &&
    -            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance()) {
    +            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance()) {
                 getCounterBuilder().mergeFrom(value);
               } else {
                 counter_ = value;
    @@ -13042,7 +13042,7 @@ public Builder clearCounter() {
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder getCounterBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder getCounterBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return getCounterFieldBuilder().getBuilder();
    @@ -13050,23 +13050,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder getCounterOrBuilder() {
             if (counterBuilder_ != null) {
               return counterBuilder_.getMessageOrBuilder();
             } else {
               return counter_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.getDefaultInstance() : counter_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance() : counter_;
             }
           }
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder> 
               getCounterFieldBuilder() {
             if (counterBuilder_ == null) {
               counterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.CounterOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder>(
                       getCounter(),
                       getParentForChildren(),
                       isClean());
    @@ -13075,9 +13075,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return counterBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary summary_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary summary_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder> summaryBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder> summaryBuilder_;
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            * @return Whether the summary field is set.
    @@ -13089,9 +13089,9 @@ public boolean hasSummary() {
            * optional .io.prometheus.client.Summary summary = 4;
            * @return The summary.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary getSummary() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getSummary() {
             if (summaryBuilder_ == null) {
    -          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance() : summary_;
    +          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance() : summary_;
             } else {
               return summaryBuilder_.getMessage();
             }
    @@ -13099,7 +13099,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary value) {
    +      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13116,7 +13116,7 @@ public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Summary summary = 4;
            */
           public Builder setSummary(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder builderForValue) {
             if (summaryBuilder_ == null) {
               summary_ = builderForValue.build();
             } else {
    @@ -13129,11 +13129,11 @@ public Builder setSummary(
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary value) {
    +      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 summary_ != null &&
    -            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance()) {
    +            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance()) {
                 getSummaryBuilder().mergeFrom(value);
               } else {
                 summary_ = value;
    @@ -13163,7 +13163,7 @@ public Builder clearSummary() {
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder getSummaryBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder getSummaryBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getSummaryFieldBuilder().getBuilder();
    @@ -13171,23 +13171,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
             if (summaryBuilder_ != null) {
               return summaryBuilder_.getMessageOrBuilder();
             } else {
               return summary_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.getDefaultInstance() : summary_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance() : summary_;
             }
           }
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder> 
               getSummaryFieldBuilder() {
             if (summaryBuilder_ == null) {
               summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.SummaryOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder>(
                       getSummary(),
                       getParentForChildren(),
                       isClean());
    @@ -13196,9 +13196,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return summaryBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped untyped_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped untyped_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder> untypedBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder> untypedBuilder_;
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return Whether the untyped field is set.
    @@ -13210,9 +13210,9 @@ public boolean hasUntyped() {
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return The untyped.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped getUntyped() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getUntyped() {
             if (untypedBuilder_ == null) {
    -          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance() : untyped_;
    +          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance() : untyped_;
             } else {
               return untypedBuilder_.getMessage();
             }
    @@ -13220,7 +13220,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped value) {
    +      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13237,7 +13237,7 @@ public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           public Builder setUntyped(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder builderForValue) {
             if (untypedBuilder_ == null) {
               untyped_ = builderForValue.build();
             } else {
    @@ -13250,11 +13250,11 @@ public Builder setUntyped(
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped value) {
    +      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 untyped_ != null &&
    -            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance()) {
    +            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance()) {
                 getUntypedBuilder().mergeFrom(value);
               } else {
                 untyped_ = value;
    @@ -13284,7 +13284,7 @@ public Builder clearUntyped() {
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder getUntypedBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder getUntypedBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
             return getUntypedFieldBuilder().getBuilder();
    @@ -13292,23 +13292,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
             if (untypedBuilder_ != null) {
               return untypedBuilder_.getMessageOrBuilder();
             } else {
               return untyped_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.getDefaultInstance() : untyped_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance() : untyped_;
             }
           }
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder> 
               getUntypedFieldBuilder() {
             if (untypedBuilder_ == null) {
               untypedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.UntypedOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder>(
                       getUntyped(),
                       getParentForChildren(),
                       isClean());
    @@ -13317,9 +13317,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return untypedBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram histogram_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram histogram_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder> histogramBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder> histogramBuilder_;
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return Whether the histogram field is set.
    @@ -13331,9 +13331,9 @@ public boolean hasHistogram() {
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return The histogram.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram getHistogram() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getHistogram() {
             if (histogramBuilder_ == null) {
    -          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance() : histogram_;
    +          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance() : histogram_;
             } else {
               return histogramBuilder_.getMessage();
             }
    @@ -13341,7 +13341,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram value) {
    +      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13358,7 +13358,7 @@ public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.co
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           public Builder setHistogram(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder builderForValue) {
             if (histogramBuilder_ == null) {
               histogram_ = builderForValue.build();
             } else {
    @@ -13371,11 +13371,11 @@ public Builder setHistogram(
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram value) {
    +      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (((bitField0_ & 0x00000020) != 0) &&
                 histogram_ != null &&
    -            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance()) {
    +            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance()) {
                 getHistogramBuilder().mergeFrom(value);
               } else {
                 histogram_ = value;
    @@ -13405,7 +13405,7 @@ public Builder clearHistogram() {
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder getHistogramBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder getHistogramBuilder() {
             bitField0_ |= 0x00000020;
             onChanged();
             return getHistogramFieldBuilder().getBuilder();
    @@ -13413,23 +13413,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
             if (histogramBuilder_ != null) {
               return histogramBuilder_.getMessageOrBuilder();
             } else {
               return histogram_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.getDefaultInstance() : histogram_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance() : histogram_;
             }
           }
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder> 
               getHistogramFieldBuilder() {
             if (histogramBuilder_ == null) {
               histogramBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.HistogramOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder>(
                       getHistogram(),
                       getParentForChildren(),
                       isClean());
    @@ -13482,12 +13482,12 @@ public Builder clearTimestampMs() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13523,7 +13523,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13576,17 +13576,17 @@ public interface MetricFamilyOrBuilder extends
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType getType();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType getType();
     
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getMetric(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getMetric(int index);
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    @@ -13594,12 +13594,12 @@ public interface MetricFamilyOrBuilder extends
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricOrBuilderList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index);
     
         /**
    @@ -13632,7 +13632,7 @@ public static final class MetricFamily extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             MetricFamily.class.getName());
         }
    @@ -13650,15 +13650,15 @@ private MetricFamily() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.Builder.class);
         }
     
         private int bitField0_;
    @@ -13773,26 +13773,26 @@ public java.lang.String getHelp() {
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType getType() {
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType.forNumber(type_);
    -      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType.COUNTER : result;
    +    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType getType() {
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType.forNumber(type_);
    +      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType.COUNTER : result;
         }
     
         public static final int METRIC_FIELD_NUMBER = 4;
         @SuppressWarnings("serial")
    -    private java.util.List metric_;
    +    private java.util.List metric_;
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List getMetricList() {
    +    public java.util.List getMetricList() {
           return metric_;
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getMetricOrBuilderList() {
           return metric_;
         }
    @@ -13807,14 +13807,14 @@ public int getMetricCount() {
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getMetric(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getMetric(int index) {
           return metric_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index) {
           return metric_.get(index);
         }
    @@ -13933,10 +13933,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -13995,44 +13995,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14040,26 +14040,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14072,7 +14072,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -14093,21 +14093,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamilyOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamilyOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.newBuilder()
           private Builder() {
     
           }
    @@ -14138,17 +14138,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -14156,15 +14156,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily result) {
             if (metricBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 metric_ = java.util.Collections.unmodifiableList(metric_);
    @@ -14176,7 +14176,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -14200,16 +14200,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -14292,8 +14292,8 @@ public Builder mergeFrom(
                   } // case 18
                   case 24: {
                     int tmpRaw = input.readEnum();
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType tmpValue =
    -                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType.forNumber(tmpRaw);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType tmpValue =
    +                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType.forNumber(tmpRaw);
                     if (tmpValue == null) {
                       mergeUnknownVarintField(3, tmpRaw);
                     } else {
    @@ -14303,9 +14303,9 @@ public Builder mergeFrom(
                     break;
                   } // case 24
                   case 34: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.parser(),
                             extensionRegistry);
                     if (metricBuilder_ == null) {
                       ensureMetricIsMutable();
    @@ -14510,16 +14510,16 @@ public Builder setHelpBytes(
            * @return The type.
            */
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType getType() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType.forNumber(type_);
    -        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType.COUNTER : result;
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType getType() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType.forNumber(type_);
    +        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType.COUNTER : result;
           }
           /**
            * optional .io.prometheus.client.MetricType type = 3;
            * @param value The type to set.
            * @return This builder for chaining.
            */
    -      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricType value) {
    +      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType value) {
             if (value == null) {
               throw new NullPointerException();
             }
    @@ -14539,22 +14539,22 @@ public Builder clearType() {
             return this;
           }
     
    -      private java.util.List metric_ =
    +      private java.util.List metric_ =
             java.util.Collections.emptyList();
           private void ensureMetricIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          metric_ = new java.util.ArrayList(metric_);
    +          metric_ = new java.util.ArrayList(metric_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder> metricBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder> metricBuilder_;
     
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List getMetricList() {
    +      public java.util.List getMetricList() {
             if (metricBuilder_ == null) {
               return java.util.Collections.unmodifiableList(metric_);
             } else {
    @@ -14574,7 +14574,7 @@ public int getMetricCount() {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric getMetric(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getMetric(int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);
             } else {
    @@ -14585,7 +14585,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14602,7 +14602,7 @@ public Builder setMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.set(index, builderForValue.build());
    @@ -14615,7 +14615,7 @@ public Builder setMetric(
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric value) {
    +      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14632,7 +14632,7 @@ public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14649,7 +14649,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(builderForValue.build());
    @@ -14663,7 +14663,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(index, builderForValue.build());
    @@ -14677,7 +14677,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addAllMetric(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -14717,14 +14717,14 @@ public Builder removeMetric(int index) {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder getMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder getMetricBuilder(
               int index) {
             return getMetricFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder getMetricOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder getMetricOrBuilder(
               int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);  } else {
    @@ -14734,7 +14734,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricOrBuilderList() {
             if (metricBuilder_ != null) {
               return metricBuilder_.getMessageOrBuilderList();
    @@ -14745,31 +14745,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder addMetricBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder addMetricBuilder() {
             return getMetricFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder addMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder addMetricBuilder(
               int index) {
             return getMetricFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricBuilderList() {
             return getMetricFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder> 
               getMetricFieldBuilder() {
             if (metricBuilder_ == null) {
               metricBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder>(
                       metric_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -14863,12 +14863,12 @@ public Builder setUnitBytes(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -14904,7 +14904,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics.MetricFamily getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -15029,7 +15029,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           "\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004\022\023\n\017GAUGE_H" +
           "ISTOGRAM\020\005B\212\001\nLio.prometheus.metrics.exp" +
           "ositionformats.generated.com_google_prot" +
    -      "obuf_4_29_1Z:github.com/prometheus/clien" +
    +      "obuf_4_29_2Z:github.com/prometheus/clien" +
           "t_model/go;io_prometheus_client"
         };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    index ab86e8bc1..4993cdb87 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    @@ -4,7 +4,7 @@
     
     import com.google.protobuf.TextFormat;
     import io.prometheus.metrics.expositionformats.ExpositionFormatWriter;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot;
    diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    index de0791599..e85c36738 100644
    --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    @@ -2,7 +2,7 @@
     
     import static org.assertj.core.api.Assertions.assertThat;
     
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_1.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
    
    From acce049e04a96a5e904b8ea8e860935c9264eed5 Mon Sep 17 00:00:00 2001
    From: Gregor Zeitlinger 
    Date: Fri, 20 Dec 2024 12:27:12 +0100
    Subject: [PATCH 252/870] rename files to avoid dependabot security warnings
     (#1239)
    
    Signed-off-by: Gregor Zeitlinger 
    ---
     .github/dependabot.yml                                          | 2 +-
     .../integration_tests/it_common/{pom.xml => pom.xml.bak}        | 0
     .../it_exemplars_otel_agent/{pom.xml => pom.xml.bak}            | 0
     .../it_exemplars_otel_sdk/{pom.xml => pom.xml.bak}              | 0
     .../integration_tests/it_java_versions/{pom.xml => pom.xml.bak} | 0
     .../integration_tests/it_log4j2/{pom.xml => pom.xml.bak}        | 0
     .../integration_tests/it_pushgateway/{pom.xml => pom.xml.bak}   | 0
     .../it_servlet_jakarta_exporter_webxml/{pom.xml => pom.xml.bak} | 0
     simpleclient-archive/integration_tests/{pom.xml => pom.xml.bak} | 0
     .../simpleclient_graphite_bridge/{pom.xml => pom.xml.bak}       | 0
     .../simpleclient_hibernate/{pom.xml => pom.xml.bak}             | 0
     .../simpleclient_httpserver/{pom.xml => pom.xml.bak}            | 0
     .../simpleclient_jetty/{pom.xml => pom.xml.bak}                 | 0
     .../simpleclient_jetty_jdk8/{pom.xml => pom.xml.bak}            | 0
     .../simpleclient_log4j/{pom.xml => pom.xml.bak}                 | 0
     .../simpleclient_log4j2/{pom.xml => pom.xml.bak}                | 0
     .../simpleclient_logback/{pom.xml => pom.xml.bak}               | 0
     .../simpleclient_servlet/{pom.xml => pom.xml.bak}               | 0
     .../simpleclient_servlet_common/{pom.xml => pom.xml.bak}        | 0
     .../simpleclient_servlet_jakarta/{pom.xml => pom.xml.bak}       | 0
     .../simpleclient_spring_web/{pom.xml => pom.xml.bak}            | 0
     .../simpleclient_vertx/{pom.xml => pom.xml.bak}                 | 0
     .../simpleclient_vertx4/{pom.xml => pom.xml.bak}                | 0
     23 files changed, 1 insertion(+), 1 deletion(-)
     rename simpleclient-archive/integration_tests/it_common/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/integration_tests/it_exemplars_otel_agent/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/integration_tests/it_exemplars_otel_sdk/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/integration_tests/it_java_versions/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/integration_tests/it_log4j2/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/integration_tests/it_pushgateway/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/integration_tests/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_graphite_bridge/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_hibernate/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_httpserver/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_jetty/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_jetty_jdk8/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_log4j/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_log4j2/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_logback/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_servlet/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_servlet_common/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_servlet_jakarta/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_spring_web/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_vertx/{pom.xml => pom.xml.bak} (100%)
     rename simpleclient-archive/simpleclient_vertx4/{pom.xml => pom.xml.bak} (100%)
    
    diff --git a/.github/dependabot.yml b/.github/dependabot.yml
    index 27283d4ae..505013ce1 100644
    --- a/.github/dependabot.yml
    +++ b/.github/dependabot.yml
    @@ -8,7 +8,7 @@ updates:
         # excluding simpleclient_archive from the update is not possible, only includes are supported
         # when we use includes, we run into https://github.com/dependabot/dependabot-core/issues/10415 -
         # even if we limit to 1 PR at a time
    -    # therefore we just ignore the simpleclient_archive update for now
    +    # therefore we just rename pom.xml in simpleclient_archive for now
         # if this becomes a problem, we can move to renovate
         directory: "/"
         schedule:
    diff --git a/simpleclient-archive/integration_tests/it_common/pom.xml b/simpleclient-archive/integration_tests/it_common/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/integration_tests/it_common/pom.xml
    rename to simpleclient-archive/integration_tests/it_common/pom.xml.bak
    diff --git a/simpleclient-archive/integration_tests/it_exemplars_otel_agent/pom.xml b/simpleclient-archive/integration_tests/it_exemplars_otel_agent/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/integration_tests/it_exemplars_otel_agent/pom.xml
    rename to simpleclient-archive/integration_tests/it_exemplars_otel_agent/pom.xml.bak
    diff --git a/simpleclient-archive/integration_tests/it_exemplars_otel_sdk/pom.xml b/simpleclient-archive/integration_tests/it_exemplars_otel_sdk/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/integration_tests/it_exemplars_otel_sdk/pom.xml
    rename to simpleclient-archive/integration_tests/it_exemplars_otel_sdk/pom.xml.bak
    diff --git a/simpleclient-archive/integration_tests/it_java_versions/pom.xml b/simpleclient-archive/integration_tests/it_java_versions/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/integration_tests/it_java_versions/pom.xml
    rename to simpleclient-archive/integration_tests/it_java_versions/pom.xml.bak
    diff --git a/simpleclient-archive/integration_tests/it_log4j2/pom.xml b/simpleclient-archive/integration_tests/it_log4j2/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/integration_tests/it_log4j2/pom.xml
    rename to simpleclient-archive/integration_tests/it_log4j2/pom.xml.bak
    diff --git a/simpleclient-archive/integration_tests/it_pushgateway/pom.xml b/simpleclient-archive/integration_tests/it_pushgateway/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/integration_tests/it_pushgateway/pom.xml
    rename to simpleclient-archive/integration_tests/it_pushgateway/pom.xml.bak
    diff --git a/simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml b/simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml
    rename to simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml.bak
    diff --git a/simpleclient-archive/integration_tests/pom.xml b/simpleclient-archive/integration_tests/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/integration_tests/pom.xml
    rename to simpleclient-archive/integration_tests/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_graphite_bridge/pom.xml b/simpleclient-archive/simpleclient_graphite_bridge/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_graphite_bridge/pom.xml
    rename to simpleclient-archive/simpleclient_graphite_bridge/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_hibernate/pom.xml b/simpleclient-archive/simpleclient_hibernate/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_hibernate/pom.xml
    rename to simpleclient-archive/simpleclient_hibernate/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_httpserver/pom.xml b/simpleclient-archive/simpleclient_httpserver/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_httpserver/pom.xml
    rename to simpleclient-archive/simpleclient_httpserver/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_jetty/pom.xml b/simpleclient-archive/simpleclient_jetty/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_jetty/pom.xml
    rename to simpleclient-archive/simpleclient_jetty/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_jetty_jdk8/pom.xml b/simpleclient-archive/simpleclient_jetty_jdk8/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_jetty_jdk8/pom.xml
    rename to simpleclient-archive/simpleclient_jetty_jdk8/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_log4j/pom.xml b/simpleclient-archive/simpleclient_log4j/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_log4j/pom.xml
    rename to simpleclient-archive/simpleclient_log4j/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_log4j2/pom.xml b/simpleclient-archive/simpleclient_log4j2/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_log4j2/pom.xml
    rename to simpleclient-archive/simpleclient_log4j2/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_logback/pom.xml b/simpleclient-archive/simpleclient_logback/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_logback/pom.xml
    rename to simpleclient-archive/simpleclient_logback/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_servlet/pom.xml b/simpleclient-archive/simpleclient_servlet/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_servlet/pom.xml
    rename to simpleclient-archive/simpleclient_servlet/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_servlet_common/pom.xml b/simpleclient-archive/simpleclient_servlet_common/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_servlet_common/pom.xml
    rename to simpleclient-archive/simpleclient_servlet_common/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_servlet_jakarta/pom.xml b/simpleclient-archive/simpleclient_servlet_jakarta/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_servlet_jakarta/pom.xml
    rename to simpleclient-archive/simpleclient_servlet_jakarta/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_spring_web/pom.xml b/simpleclient-archive/simpleclient_spring_web/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_spring_web/pom.xml
    rename to simpleclient-archive/simpleclient_spring_web/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_vertx/pom.xml b/simpleclient-archive/simpleclient_vertx/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_vertx/pom.xml
    rename to simpleclient-archive/simpleclient_vertx/pom.xml.bak
    diff --git a/simpleclient-archive/simpleclient_vertx4/pom.xml b/simpleclient-archive/simpleclient_vertx4/pom.xml.bak
    similarity index 100%
    rename from simpleclient-archive/simpleclient_vertx4/pom.xml
    rename to simpleclient-archive/simpleclient_vertx4/pom.xml.bak
    
    From aa8cf5f7771cdacd1b8600ebe620b9f83363964d Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Fri, 20 Dec 2024 07:02:48 -0500
    Subject: [PATCH 253/870] Bump org.assertj:assertj-core from 3.26.3 to 3.27.0
     (#1240)
    
    Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.26.3 to 3.27.0.
    - [Release notes](https://github.com/assertj/assertj/releases)
    - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.26.3...assertj-build-3.27.0)
    
    ---
    updated-dependencies:
    - dependency-name: org.assertj:assertj-core
      dependency-type: direct:development
      update-type: version-update:semver-minor
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index a0afdf4dd..748de4341 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -122,7 +122,7 @@
             
                 org.assertj
                 assertj-core
    -            3.26.3
    +            3.27.0
                 test
             
             
    
    From 3fdf1e5f055b4f6274a995e68411c3e1d05aa7d3 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Fri, 27 Dec 2024 00:07:28 -0500
    Subject: [PATCH 254/870] Bump
     io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha
     (#1243)
    
    Bumps [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://github.com/open-telemetry/opentelemetry-java-instrumentation) from 2.10.0-alpha to 2.11.0-alpha.
    - [Release notes](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases)
    - [Changelog](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/open-telemetry/opentelemetry-java-instrumentation/commits)
    
    ---
    updated-dependencies:
    - dependency-name: io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha
      dependency-type: direct:production
      update-type: version-update:semver-minor
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 748de4341..81bc9a2a5 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -18,7 +18,7 @@
             UTF-8
             --module-name-need-to-be-overriden--
             5.11.4
    -        2.10.0-alpha
    +        2.11.0-alpha
             8
             0.70
             false
    
    From 436560419d6f3f7f2b930b5ab7d3636e3797383b Mon Sep 17 00:00:00 2001
    From: Stephan Schroevers 
    Date: Fri, 27 Dec 2024 06:18:47 +0100
    Subject: [PATCH 255/870] Fix flaky `SlidingWindowTest` (#1242)
    
    Fixes issue #956.
    
    Signed-off-by: Stephan Schroevers 
    ---
     .../metrics/core/metrics/SlidingWindow.java      | 16 ++++++++++++++--
     .../metrics/core/metrics/SlidingWindowTest.java  |  8 ++++++--
     2 files changed, 20 insertions(+), 4 deletions(-)
    
    diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java
    index c9586e179..5360e3349 100644
    --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java
    +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java
    @@ -26,7 +26,7 @@ public class SlidingWindow {
       private int currentBucket;
       private long lastRotateTimestampMillis;
       private final long durationBetweenRotatesMillis;
    -  LongSupplier currentTimeMillis = System::currentTimeMillis; // to be replaced in unit tests
    +  private final LongSupplier currentTimeMillis;
     
       /**
        * Example: If the {@code maxAgeSeconds} is 60 and {@code ageBuckets} is 3, then 3 instances of
    @@ -39,13 +39,24 @@ public class SlidingWindow {
        * @param maxAgeSeconds after this amount of time an instance of T gets evicted.
        * @param ageBuckets number of age buckets.
        */
    -  @SuppressWarnings("unchecked")
       public SlidingWindow(
           Class clazz,
           Supplier constructor,
           ObjDoubleConsumer observeFunction,
           long maxAgeSeconds,
           int ageBuckets) {
    +    this(clazz, constructor, observeFunction, maxAgeSeconds, ageBuckets, System::currentTimeMillis);
    +  }
    +
    +  // VisibleForTesting
    +  @SuppressWarnings("unchecked")
    +  SlidingWindow(
    +      Class clazz,
    +      Supplier constructor,
    +      ObjDoubleConsumer observeFunction,
    +      long maxAgeSeconds,
    +      int ageBuckets,
    +      LongSupplier currentTimeMillis) {
         this.constructor = constructor;
         this.observeFunction = observeFunction;
         this.ringBuffer = (T[]) Array.newInstance(clazz, ageBuckets);
    @@ -55,6 +66,7 @@ public SlidingWindow(
         this.currentBucket = 0;
         this.lastRotateTimestampMillis = currentTimeMillis.getAsLong();
         this.durationBetweenRotatesMillis = TimeUnit.SECONDS.toMillis(maxAgeSeconds) / ageBuckets;
    +    this.currentTimeMillis = currentTimeMillis;
       }
     
       /** Get the currently active instance of {@code T}. */
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java
    index 334724a81..d85e5637c 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java
    @@ -48,8 +48,12 @@ public void setUp() {
         currentTimeMillis.set(startTime);
         ringBuffer =
             new SlidingWindow<>(
    -            Observer.class, Observer::new, Observer::observe, maxAgeSeconds, ageBuckets);
    -    ringBuffer.currentTimeMillis = currentTimeMillis::get;
    +            Observer.class,
    +            Observer::new,
    +            Observer::observe,
    +            maxAgeSeconds,
    +            ageBuckets,
    +            currentTimeMillis::get);
       }
     
       @Test
    
    From dd014fa74e99f8f9993f6c519396eb77df801ae1 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Thu, 2 Jan 2025 09:18:16 -0500
    Subject: [PATCH 256/870] Bump org.assertj:assertj-core from 3.27.0 to 3.27.1
     (#1244)
    
    Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.0 to 3.27.1.
    - [Release notes](https://github.com/assertj/assertj/releases)
    - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.0...assertj-build-3.27.1)
    
    ---
    updated-dependencies:
    - dependency-name: org.assertj:assertj-core
      dependency-type: direct:development
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 81bc9a2a5..ce0593ef4 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -122,7 +122,7 @@
             
                 org.assertj
                 assertj-core
    -            3.27.0
    +            3.27.1
                 test
             
             
    
    From 5ee7af372df3fe1b68372adf8424f497cf8d46e3 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Fri, 3 Jan 2025 09:03:15 -0500
    Subject: [PATCH 257/870] Bump org.mockito:mockito-core from 5.14.2 to 5.15.2
     (#1245)
    
    Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.14.2 to 5.15.2.
    - [Release notes](https://github.com/mockito/mockito/releases)
    - [Commits](https://github.com/mockito/mockito/compare/v5.14.2...v5.15.2)
    
    ---
    updated-dependencies:
    - dependency-name: org.mockito:mockito-core
      dependency-type: direct:development
      update-type: version-update:semver-minor
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index ce0593ef4..ab261658a 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -116,7 +116,7 @@
             
                 org.mockito
                 mockito-core
    -            5.14.2
    +            5.15.2
                 test
             
             
    
    From 9043b47dd8c7dfa2af5fb1d28b988ec85b896333 Mon Sep 17 00:00:00 2001
    From: Michal Domagala 
    Date: Mon, 6 Jan 2025 09:21:31 +0100
    Subject: [PATCH 258/870] Use buffered writer (#1241)
    
    Without buffered reader, every single output character through given stack goes to "StreamEncoder public void write(int c)" and single element char array is created.
    It makes pressure to GC and CPU
    BufferedReader reduce the pressure
    
    write:130, StreamEncoder (sun.nio.cs)
    write:201, OutputStreamWriter (java.io)
    writeMetadata:338, PrometheusTextFormatWriter (io.prometheus.metrics.expositionformats)
    writeGauge:129, PrometheusTextFormatWriter (io.prometheus.metrics.expositionformats)
    write:68, PrometheusTextFormatWriter (io.prometheus.metrics.expositionformats)
    write:48, PrometheusOutputFormat$1 (org.springframework.boot.actuate.metrics.export.prometheus)
    scrape:87, PrometheusScrapeEndpoint (org.springframework.boot.actuate.metrics.export.prometheus)
    
    StreamEncoder public void write(int c) throws IOException {
      char[] cbuf = new char[1];
      cbuf[0] = (char) c;
    
    Signed-off-by: Michal Domagala 
    Co-authored-by: Michal Domagala 
    ---
     .../PrometheusTextFormatWriter.java           | 38 ++++++++-----------
     .../expositionformats/TextFormatUtil.java     | 12 ++----
     2 files changed, 20 insertions(+), 30 deletions(-)
    
    diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java
    index eb07abc73..8602b0ba5 100644
    --- a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java
    +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java
    @@ -20,6 +20,7 @@
     import io.prometheus.metrics.model.snapshots.StateSetSnapshot;
     import io.prometheus.metrics.model.snapshots.SummarySnapshot;
     import io.prometheus.metrics.model.snapshots.UnknownSnapshot;
    +import java.io.BufferedWriter;
     import java.io.IOException;
     import java.io.OutputStream;
     import java.io.OutputStreamWriter;
    @@ -59,7 +60,7 @@ public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOEx
         // See https://prometheus.io/docs/instrumenting/exposition_formats/
         // "unknown", "gauge", "counter", "stateset", "info", "histogram", "gaugehistogram", and
         // "summary".
    -    OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
    +    Writer writer = new BufferedWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8));
         for (MetricSnapshot snapshot : metricSnapshots) {
           if (snapshot.getDataPoints().size() > 0) {
             if (snapshot instanceof CounterSnapshot) {
    @@ -95,7 +96,7 @@ public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOEx
         writer.flush();
       }
     
    -  public void writeCreated(OutputStreamWriter writer, MetricSnapshot snapshot) throws IOException {
    +  public void writeCreated(Writer writer, MetricSnapshot snapshot) throws IOException {
         boolean metadataWritten = false;
         MetricMetadata metadata = snapshot.getMetadata();
         for (DataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -111,8 +112,7 @@ public void writeCreated(OutputStreamWriter writer, MetricSnapshot snapshot) thr
         }
       }
     
    -  private void writeCounter(OutputStreamWriter writer, CounterSnapshot snapshot)
    -      throws IOException {
    +  private void writeCounter(Writer writer, CounterSnapshot snapshot) throws IOException {
         if (snapshot.getDataPoints().size() > 0) {
           MetricMetadata metadata = snapshot.getMetadata();
           writeMetadata(writer, "_total", "counter", metadata);
    @@ -124,7 +124,7 @@ private void writeCounter(OutputStreamWriter writer, CounterSnapshot snapshot)
         }
       }
     
    -  private void writeGauge(OutputStreamWriter writer, GaugeSnapshot snapshot) throws IOException {
    +  private void writeGauge(Writer writer, GaugeSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         writeMetadata(writer, "", "gauge", metadata);
         for (GaugeSnapshot.GaugeDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -134,8 +134,7 @@ private void writeGauge(OutputStreamWriter writer, GaugeSnapshot snapshot) throw
         }
       }
     
    -  private void writeHistogram(OutputStreamWriter writer, HistogramSnapshot snapshot)
    -      throws IOException {
    +  private void writeHistogram(Writer writer, HistogramSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         writeMetadata(writer, "", "histogram", metadata);
         for (HistogramSnapshot.HistogramDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -182,8 +181,7 @@ private ClassicHistogramBuckets getClassicBuckets(
       }
     
       private void writeGaugeCountSum(
    -      OutputStreamWriter writer, HistogramSnapshot snapshot, MetricMetadata metadata)
    -      throws IOException {
    +      Writer writer, HistogramSnapshot snapshot, MetricMetadata metadata) throws IOException {
         // Prometheus text format does not support gaugehistogram's _gcount and _gsum.
         // So we append _gcount and _gsum as gauge metrics.
         boolean metadataWritten = false;
    @@ -212,8 +210,7 @@ private void writeGaugeCountSum(
         }
       }
     
    -  private void writeSummary(OutputStreamWriter writer, SummarySnapshot snapshot)
    -      throws IOException {
    +  private void writeSummary(Writer writer, SummarySnapshot snapshot) throws IOException {
         boolean metadataWritten = false;
         MetricMetadata metadata = snapshot.getMetadata();
         for (SummarySnapshot.SummaryDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -248,7 +245,7 @@ private void writeSummary(OutputStreamWriter writer, SummarySnapshot snapshot)
         }
       }
     
    -  private void writeInfo(OutputStreamWriter writer, InfoSnapshot snapshot) throws IOException {
    +  private void writeInfo(Writer writer, InfoSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         writeMetadata(writer, "_info", "gauge", metadata);
         for (InfoSnapshot.InfoDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -258,8 +255,7 @@ private void writeInfo(OutputStreamWriter writer, InfoSnapshot snapshot) throws
         }
       }
     
    -  private void writeStateSet(OutputStreamWriter writer, StateSetSnapshot snapshot)
    -      throws IOException {
    +  private void writeStateSet(Writer writer, StateSetSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         writeMetadata(writer, "", "gauge", metadata);
         for (StateSetSnapshot.StateSetDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -292,8 +288,7 @@ private void writeStateSet(OutputStreamWriter writer, StateSetSnapshot snapshot)
         }
       }
     
    -  private void writeUnknown(OutputStreamWriter writer, UnknownSnapshot snapshot)
    -      throws IOException {
    +  private void writeUnknown(Writer writer, UnknownSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         writeMetadata(writer, "", "untyped", metadata);
         for (UnknownSnapshot.UnknownDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -303,13 +298,13 @@ private void writeUnknown(OutputStreamWriter writer, UnknownSnapshot snapshot)
         }
       }
     
    -  private void writeNameAndLabels(
    -      OutputStreamWriter writer, String name, String suffix, Labels labels) throws IOException {
    +  private void writeNameAndLabels(Writer writer, String name, String suffix, Labels labels)
    +      throws IOException {
         writeNameAndLabels(writer, name, suffix, labels, null, 0.0);
       }
     
       private void writeNameAndLabels(
    -      OutputStreamWriter writer,
    +      Writer writer,
           String name,
           String suffix,
           Labels labels,
    @@ -327,8 +322,7 @@ private void writeNameAndLabels(
       }
     
       private void writeMetadata(
    -      OutputStreamWriter writer, String suffix, String typeString, MetricMetadata metadata)
    -      throws IOException {
    +      Writer writer, String suffix, String typeString, MetricMetadata metadata) throws IOException {
         if (metadata.getHelp() != null && !metadata.getHelp().isEmpty()) {
           writer.write("# HELP ");
           writer.write(metadata.getPrometheusName());
    @@ -365,7 +359,7 @@ private void writeEscapedHelp(Writer writer, String s) throws IOException {
         }
       }
     
    -  private void writeScrapeTimestampAndNewline(OutputStreamWriter writer, DataPointSnapshot data)
    +  private void writeScrapeTimestampAndNewline(Writer writer, DataPointSnapshot data)
           throws IOException {
         if (data.hasScrapeTimestamp()) {
           writer.write(' ');
    diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java
    index 54daaaa3e..e48f545c5 100644
    --- a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java
    +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java
    @@ -2,16 +2,15 @@
     
     import io.prometheus.metrics.model.snapshots.Labels;
     import java.io.IOException;
    -import java.io.OutputStreamWriter;
     import java.io.Writer;
     
     public class TextFormatUtil {
     
    -  static void writeLong(OutputStreamWriter writer, long value) throws IOException {
    +  static void writeLong(Writer writer, long value) throws IOException {
         writer.append(Long.toString(value));
       }
     
    -  static void writeDouble(OutputStreamWriter writer, double d) throws IOException {
    +  static void writeDouble(Writer writer, double d) throws IOException {
         if (d == Double.POSITIVE_INFINITY) {
           writer.write("+Inf");
         } else if (d == Double.NEGATIVE_INFINITY) {
    @@ -22,7 +21,7 @@ static void writeDouble(OutputStreamWriter writer, double d) throws IOException
         }
       }
     
    -  static void writeTimestamp(OutputStreamWriter writer, long timestampMs) throws IOException {
    +  static void writeTimestamp(Writer writer, long timestampMs) throws IOException {
         writer.write(Long.toString(timestampMs / 1000L));
         writer.write(".");
         long ms = timestampMs % 1000;
    @@ -55,10 +54,7 @@ static void writeEscapedLabelValue(Writer writer, String s) throws IOException {
       }
     
       static void writeLabels(
    -      OutputStreamWriter writer,
    -      Labels labels,
    -      String additionalLabelName,
    -      double additionalLabelValue)
    +      Writer writer, Labels labels, String additionalLabelName, double additionalLabelValue)
           throws IOException {
         writer.write('{');
         for (int i = 0; i < labels.size(); i++) {
    
    From 0d3020b9d3b8079dc6cbd59e340b6e138d607553 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Mon, 6 Jan 2025 09:25:54 -0500
    Subject: [PATCH 259/870] Bump org.assertj:assertj-core from 3.27.1 to 3.27.2
     (#1247)
    
    Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.1 to 3.27.2.
    - [Release notes](https://github.com/assertj/assertj/releases)
    - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.1...assertj-build-3.27.2)
    
    ---
    updated-dependencies:
    - dependency-name: org.assertj:assertj-core
      dependency-type: direct:development
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index ab261658a..c84af0d57 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -122,7 +122,7 @@
             
                 org.assertj
                 assertj-core
    -            3.27.1
    +            3.27.2
                 test
             
             
    
    From 64f02eaf9f5702ba1ab5f97dcdbf2a886f0e537a Mon Sep 17 00:00:00 2001
    From: Doug Hoard 
    Date: Mon, 6 Jan 2025 12:01:02 -0500
    Subject: [PATCH 260/870] Use buffered writer (#1248)
    
    Signed-off-by: dhoard 
    ---
     .../OpenMetricsTextFormatWriter.java          | 40 +++++++++----------
     1 file changed, 18 insertions(+), 22 deletions(-)
    
    diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java
    index 06850a3d8..0e34934d7 100644
    --- a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java
    +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java
    @@ -23,9 +23,11 @@
     import io.prometheus.metrics.model.snapshots.StateSetSnapshot;
     import io.prometheus.metrics.model.snapshots.SummarySnapshot;
     import io.prometheus.metrics.model.snapshots.UnknownSnapshot;
    +import java.io.BufferedWriter;
     import java.io.IOException;
     import java.io.OutputStream;
     import java.io.OutputStreamWriter;
    +import java.io.Writer;
     import java.nio.charset.StandardCharsets;
     import java.util.List;
     
    @@ -65,7 +67,7 @@ public String getContentType() {
     
       @Override
       public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOException {
    -    OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
    +    Writer writer = new BufferedWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8));
         for (MetricSnapshot snapshot : metricSnapshots) {
           if (!snapshot.getDataPoints().isEmpty()) {
             if (snapshot instanceof CounterSnapshot) {
    @@ -89,8 +91,7 @@ public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOEx
         writer.flush();
       }
     
    -  private void writeCounter(OutputStreamWriter writer, CounterSnapshot snapshot)
    -      throws IOException {
    +  private void writeCounter(Writer writer, CounterSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         writeMetadata(writer, "counter", metadata);
         for (CounterSnapshot.CounterDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -101,7 +102,7 @@ private void writeCounter(OutputStreamWriter writer, CounterSnapshot snapshot)
         }
       }
     
    -  private void writeGauge(OutputStreamWriter writer, GaugeSnapshot snapshot) throws IOException {
    +  private void writeGauge(Writer writer, GaugeSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         writeMetadata(writer, "gauge", metadata);
         for (GaugeSnapshot.GaugeDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -115,8 +116,7 @@ private void writeGauge(OutputStreamWriter writer, GaugeSnapshot snapshot) throw
         }
       }
     
    -  private void writeHistogram(OutputStreamWriter writer, HistogramSnapshot snapshot)
    -      throws IOException {
    +  private void writeHistogram(Writer writer, HistogramSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         if (snapshot.isGaugeHistogram()) {
           writeMetadata(writer, "gaugehistogram", metadata);
    @@ -128,7 +128,7 @@ private void writeHistogram(OutputStreamWriter writer, HistogramSnapshot snapsho
       }
     
       private void writeClassicHistogramBuckets(
    -      OutputStreamWriter writer,
    +      Writer writer,
           MetricMetadata metadata,
           String countSuffix,
           String sumSuffix,
    @@ -174,8 +174,7 @@ private ClassicHistogramBuckets getClassicBuckets(
         }
       }
     
    -  private void writeSummary(OutputStreamWriter writer, SummarySnapshot snapshot)
    -      throws IOException {
    +  private void writeSummary(Writer writer, SummarySnapshot snapshot) throws IOException {
         boolean metadataWritten = false;
         MetricMetadata metadata = snapshot.getMetadata();
         for (SummarySnapshot.SummaryDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -215,7 +214,7 @@ private void writeSummary(OutputStreamWriter writer, SummarySnapshot snapshot)
         }
       }
     
    -  private void writeInfo(OutputStreamWriter writer, InfoSnapshot snapshot) throws IOException {
    +  private void writeInfo(Writer writer, InfoSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         writeMetadata(writer, "info", metadata);
         for (InfoSnapshot.InfoDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -225,8 +224,7 @@ private void writeInfo(OutputStreamWriter writer, InfoSnapshot snapshot) throws
         }
       }
     
    -  private void writeStateSet(OutputStreamWriter writer, StateSetSnapshot snapshot)
    -      throws IOException {
    +  private void writeStateSet(Writer writer, StateSetSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         writeMetadata(writer, "stateset", metadata);
         for (StateSetSnapshot.StateSetDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -259,8 +257,7 @@ private void writeStateSet(OutputStreamWriter writer, StateSetSnapshot snapshot)
         }
       }
     
    -  private void writeUnknown(OutputStreamWriter writer, UnknownSnapshot snapshot)
    -      throws IOException {
    +  private void writeUnknown(Writer writer, UnknownSnapshot snapshot) throws IOException {
         MetricMetadata metadata = snapshot.getMetadata();
         writeMetadata(writer, "unknown", metadata);
         for (UnknownSnapshot.UnknownDataPointSnapshot data : snapshot.getDataPoints()) {
    @@ -275,7 +272,7 @@ private void writeUnknown(OutputStreamWriter writer, UnknownSnapshot snapshot)
       }
     
       private void writeCountAndSum(
    -      OutputStreamWriter writer,
    +      Writer writer,
           MetricMetadata metadata,
           DistributionDataPointSnapshot data,
           String countSuffix,
    @@ -298,8 +295,7 @@ private void writeCountAndSum(
         }
       }
     
    -  private void writeCreated(
    -      OutputStreamWriter writer, MetricMetadata metadata, DataPointSnapshot data)
    +  private void writeCreated(Writer writer, MetricMetadata metadata, DataPointSnapshot data)
           throws IOException {
         if (createdTimestampsEnabled && data.hasCreatedTimestamp()) {
           writeNameAndLabels(writer, metadata.getPrometheusName(), "_created", data.getLabels());
    @@ -312,13 +308,13 @@ private void writeCreated(
         }
       }
     
    -  private void writeNameAndLabels(
    -      OutputStreamWriter writer, String name, String suffix, Labels labels) throws IOException {
    +  private void writeNameAndLabels(Writer writer, String name, String suffix, Labels labels)
    +      throws IOException {
         writeNameAndLabels(writer, name, suffix, labels, null, 0.0);
       }
     
       private void writeNameAndLabels(
    -      OutputStreamWriter writer,
    +      Writer writer,
           String name,
           String suffix,
           Labels labels,
    @@ -336,7 +332,7 @@ private void writeNameAndLabels(
       }
     
       private void writeScrapeTimestampAndExemplar(
    -      OutputStreamWriter writer, DataPointSnapshot data, Exemplar exemplar) throws IOException {
    +      Writer writer, DataPointSnapshot data, Exemplar exemplar) throws IOException {
         if (data.hasScrapeTimestamp()) {
           writer.write(' ');
           writeTimestamp(writer, data.getScrapeTimestampMillis());
    @@ -354,7 +350,7 @@ private void writeScrapeTimestampAndExemplar(
         writer.write('\n');
       }
     
    -  private void writeMetadata(OutputStreamWriter writer, String typeName, MetricMetadata metadata)
    +  private void writeMetadata(Writer writer, String typeName, MetricMetadata metadata)
           throws IOException {
         writer.write("# TYPE ");
         writer.write(metadata.getPrometheusName());
    
    From 3814e483630df62b0ba3a6dba5814d7e3bcfe5a8 Mon Sep 17 00:00:00 2001
    From: Gregor Zeitlinger 
    Date: Tue, 7 Jan 2025 08:16:46 +0100
    Subject: [PATCH 261/870] add dropwizard to bom (#1250)
    
    Signed-off-by: Gregor Zeitlinger 
    ---
     prometheus-metrics-bom/pom.xml | 5 +++++
     1 file changed, 5 insertions(+)
    
    diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml
    index d1299470b..496f2fc4f 100644
    --- a/prometheus-metrics-bom/pom.xml
    +++ b/prometheus-metrics-bom/pom.xml
    @@ -67,6 +67,11 @@
                     prometheus-metrics-exposition-formats
                     ${project.version}
                 
    +            
    +                io.prometheus
    +                prometheus-metrics-instrumentation-dropwizard
    +                ${project.version}
    +            
                 
                     io.prometheus
                     prometheus-metrics-instrumentation-dropwizard5
    
    From 9d04544358bc72ad8f38e582576a300663e4ea6a Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Tue, 7 Jan 2025 12:14:46 -0500
    Subject: [PATCH 262/870] Bump com.diffplug.spotless:spotless-maven-plugin from
     2.43.0 to 2.44.0 (#1252)
    
    * Bump com.diffplug.spotless:spotless-maven-plugin from 2.43.0 to 2.44.0
    
    Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.43.0 to 2.44.0.
    - [Release notes](https://github.com/diffplug/spotless/releases)
    - [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
    - [Commits](https://github.com/diffplug/spotless/compare/lib/2.43.0...lib/2.44.0)
    
    ---
    updated-dependencies:
    - dependency-name: com.diffplug.spotless:spotless-maven-plugin
      dependency-type: direct:production
      update-type: version-update:semver-minor
    ...
    
    Signed-off-by: dependabot[bot] 
    
    * format
    
    Signed-off-by: Gregor Zeitlinger 
    
    * format
    
    Signed-off-by: Gregor Zeitlinger 
    
    ---------
    
    Signed-off-by: dependabot[bot] 
    Signed-off-by: Gregor Zeitlinger 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     checkstyle.xml                                         |  2 --
     integration-tests/it-spring-boot-smoke-test/pom.xml    |  2 +-
     pom.xml                                                |  2 +-
     .../opentelemetry/otelmodel/PrometheusMetricData.java  | 10 +++++-----
     .../instrumentation/dropwizard5/DropwizardExports.java |  6 ++++--
     5 files changed, 11 insertions(+), 11 deletions(-)
    
    diff --git a/checkstyle.xml b/checkstyle.xml
    index ef205414d..fd483abfa 100644
    --- a/checkstyle.xml
    +++ b/checkstyle.xml
    @@ -255,7 +255,6 @@
           
         
    -    
         
         
         
    diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml
    index 2121c27c0..1a421949d 100644
    --- a/integration-tests/it-spring-boot-smoke-test/pom.xml
    +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml
    @@ -77,7 +77,7 @@
                 
                     com.diffplug.spotless
                     spotless-maven-plugin
    -                2.43.0
    +                2.44.0
                     
                         
                             
    diff --git a/pom.xml b/pom.xml
    index c84af0d57..8dc201039 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -223,7 +223,7 @@
                     
                         com.diffplug.spotless
                         spotless-maven-plugin
    -                    2.43.0
    +                    2.44.0
                     
                 
             
    diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java
    index baca70774..7bf4f5e27 100644
    --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java
    +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/PrometheusMetricData.java
    @@ -53,7 +53,7 @@ static String convertUnit(Unit unit) {
           return null;
         }
         switch (unit.toString()) {
    -        // Time
    +      // Time
           case "days":
             return "d";
           case "hours":
    @@ -68,7 +68,7 @@ static String convertUnit(Unit unit) {
             return "us";
           case "nanoseconds":
             return "ns";
    -        // Bytes
    +      // Bytes
           case "bytes":
             return "By";
           case "kibibytes":
    @@ -87,7 +87,7 @@ static String convertUnit(Unit unit) {
             return "GBy";
           case "terabytes":
             return "TBy";
    -        // SI
    +      // SI
           case "meters":
             return "m";
           case "volts":
    @@ -100,14 +100,14 @@ static String convertUnit(Unit unit) {
             return "W";
           case "grams":
             return "g";
    -        // Misc
    +      // Misc
           case "celsius":
             return "Cel";
           case "hertz":
             return "Hz";
           case "percent":
             return "%";
    -        // default
    +      // default
           default:
             return unit.toString();
         }
    diff --git a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java
    index bd3a163ac..c050871ce 100644
    --- a/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java
    +++ b/prometheus-metrics-instrumentation-dropwizard5/src/main/java/io/prometheus/metrics/instrumentation/dropwizard5/DropwizardExports.java
    @@ -24,6 +24,7 @@
     import java.util.Collections;
     import java.util.Map;
     import java.util.Optional;
    +import java.util.Set;
     import java.util.concurrent.TimeUnit;
     import java.util.logging.Level;
     import java.util.logging.Logger;
    @@ -196,8 +197,9 @@ MetricSnapshot fromMeter(String dropwizardName, Meter meter) {
       @Override
       public MetricSnapshots collect() {
         MetricSnapshots.Builder metricSnapshots = MetricSnapshots.builder();
    -    for (@SuppressWarnings("rawtypes")
    -    Map.Entry entry : registry.getGauges(metricFilter).entrySet()) {
    +    @SuppressWarnings("rawtypes")
    +    Set> entries = registry.getGauges(metricFilter).entrySet();
    +    for (@SuppressWarnings("rawtypes") Map.Entry entry : entries) {
           Optional.ofNullable(fromGauge(entry.getKey().getKey(), entry.getValue()))
               .ifPresent(metricSnapshots::metricSnapshot);
         }
    
    From 45f8def91887d38880ab82097a6e9beba9830678 Mon Sep 17 00:00:00 2001
    From: Doug Hoard 
    Date: Tue, 7 Jan 2025 12:58:33 -0500
    Subject: [PATCH 263/870] Updated com.diffplug.spotless:spotless-maven-plugin
     from 2.44.0 to 2.44.1 (#1253)
    
    Signed-off-by: dhoard 
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 8dc201039..7173c5394 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -223,7 +223,7 @@
                     
                         com.diffplug.spotless
                         spotless-maven-plugin
    -                    2.44.0
    +                    2.44.1
                     
                 
             
    
    From 7d091a7d538c35181eb12130dec9a0832ccf12ef Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 8 Jan 2025 15:01:52 +0100
    Subject: [PATCH 264/870] Bump com.diffplug.spotless:spotless-maven-plugin from
     2.44.0 to 2.44.1 (#1254)
    
    Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.44.0 to 2.44.1.
    - [Release notes](https://github.com/diffplug/spotless/releases)
    - [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
    - [Commits](https://github.com/diffplug/spotless/compare/lib/2.44.0...maven/2.44.1)
    
    ---
    updated-dependencies:
    - dependency-name: com.diffplug.spotless:spotless-maven-plugin
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml
    index 1a421949d..9596e716f 100644
    --- a/integration-tests/it-spring-boot-smoke-test/pom.xml
    +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml
    @@ -77,7 +77,7 @@
                 
                     com.diffplug.spotless
                     spotless-maven-plugin
    -                2.44.0
    +                2.44.1
                     
                         
                             
    
    From 5957a103a3309841f7c2fc0d352f2a426350ac62 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Fri, 10 Jan 2025 15:12:20 +0100
    Subject: [PATCH 265/870] Bump com.google.protobuf:protobuf-java from 4.29.2 to
     4.29.3 (#1256)
    
    * Bump com.google.protobuf:protobuf-java from 4.29.2 to 4.29.3
    
    Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.29.2 to 4.29.3.
    - [Release notes](https://github.com/protocolbuffers/protobuf/releases)
    - [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
    - [Commits](https://github.com/protocolbuffers/protobuf/commits)
    
    ---
    updated-dependencies:
    - dependency-name: com.google.protobuf:protobuf-java
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    
    * update protoc
    
    Signed-off-by: Gregor Zeitlinger 
    
    ---------
    
    Signed-off-by: dependabot[bot] 
    Signed-off-by: Gregor Zeitlinger 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gregor Zeitlinger 
    ---
     .tool-versions                                |    2 +-
     .../client/it/common/ExporterTest.java        |    2 +-
     .../metrics/it/exporter/test/ExporterIT.java  |    2 +-
     .../it/springboot/ApplicationTest.java        |    2 +-
     .../metrics/core/metrics/CounterTest.java     |    2 +-
     .../metrics/core/metrics/HistogramTest.java   |    2 +-
     .../metrics/core/metrics/InfoTest.java        |    2 +-
     prometheus-metrics-exposition-formats/pom.xml |    2 +-
     .../Metrics.java                              | 1810 ++++++++---------
     .../PrometheusProtobufWriterImpl.java         |    2 +-
     .../ExpositionFormatsTest.java                |    2 +-
     11 files changed, 915 insertions(+), 915 deletions(-)
     rename prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/{com_google_protobuf_4_29_2 => com_google_protobuf_4_29_3}/Metrics.java (89%)
    
    diff --git a/.tool-versions b/.tool-versions
    index 477916d84..58b0b2027 100644
    --- a/.tool-versions
    +++ b/.tool-versions
    @@ -1,2 +1,2 @@
     java temurin-17.0.13+11
    -protoc 29.2
    +protoc 29.3
    diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java
    index 97d133e8c..93b5b088a 100644
    --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java
    +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java
    @@ -4,7 +4,7 @@
     import static org.assertj.core.api.Assertions.assertThat;
     import static org.assertj.core.api.Assertions.fail;
     
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics;
     import java.io.ByteArrayInputStream;
     import java.io.IOException;
     import java.io.InputStream;
    diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java
    index 60bd7ab59..67a4eec16 100644
    --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java
    +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java
    @@ -5,7 +5,7 @@
     
     import com.google.common.io.Resources;
     import io.prometheus.client.it.common.ExporterTest;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics;
     import java.io.IOException;
     import java.net.URISyntaxException;
     import java.net.URLEncoder;
    diff --git a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java
    index 7abf16e9d..eac8232d8 100644
    --- a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java
    +++ b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java
    @@ -3,7 +3,7 @@
     import static org.assertj.core.api.Assertions.assertThat;
     
     import io.prometheus.client.it.common.ExporterTest;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics;
     import java.io.IOException;
     import java.net.URL;
     import java.util.List;
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java
    index 7f6dd20f6..d05311307 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java
    @@ -6,7 +6,7 @@
     import static org.assertj.core.data.Offset.offset;
     
     import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java
    index 69453ea13..514fd5b34 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java
    @@ -8,7 +8,7 @@
     import io.prometheus.metrics.core.datapoints.DistributionDataPoint;
     import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil;
     import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket;
    diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java
    index e4878eb42..f78372545 100644
    --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java
    +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java
    @@ -4,7 +4,7 @@
     import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
     
     import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.Labels;
    diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml
    index 0c2a686a8..83fb7e3c0 100644
    --- a/prometheus-metrics-exposition-formats/pom.xml
    +++ b/prometheus-metrics-exposition-formats/pom.xml
    @@ -19,7 +19,7 @@
     
         
             io.prometheus.metrics.expositionformats
    -        4.29.2
    +        4.29.3
         
     
         
    diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_2/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_3/Metrics.java
    similarity index 89%
    rename from prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_2/Metrics.java
    rename to prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_3/Metrics.java
    index 2e7f28311..c20c4a4ed 100644
    --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_2/Metrics.java
    +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_3/Metrics.java
    @@ -2,9 +2,9 @@
     // Generated by the protocol buffer compiler.  DO NOT EDIT!
     // NO CHECKED-IN PROTOBUF GENCODE
     // source: src/main/protobuf/metrics.proto
    -// Protobuf Java Version: 4.29.2
    +// Protobuf Java Version: 4.29.3
     
    -package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2;
    +package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3;
     
     public final class Metrics {
       private Metrics() {}
    @@ -13,7 +13,7 @@ private Metrics() {}
           com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
           /* major= */ 4,
           /* minor= */ 29,
    -      /* patch= */ 2,
    +      /* patch= */ 3,
           /* suffix= */ "",
           Metrics.class.getName());
       }
    @@ -86,7 +86,7 @@ public enum MetricType
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             MetricType.class.getName());
         }
    @@ -192,7 +192,7 @@ public MetricType findValueByNumber(int number) {
         }
         public static final com.google.protobuf.Descriptors.EnumDescriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.getDescriptor().getEnumTypes().get(0);
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.getDescriptor().getEnumTypes().get(0);
         }
     
         private static final MetricType[] VALUES = values();
    @@ -266,7 +266,7 @@ public static final class LabelPair extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             LabelPair.class.getName());
         }
    @@ -281,15 +281,15 @@ private LabelPair() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder.class);
         }
     
         private int bitField0_;
    @@ -436,10 +436,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -475,44 +475,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -520,26 +520,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -552,7 +552,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -573,21 +573,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.newBuilder()
           private Builder() {
     
           }
    @@ -609,17 +609,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -627,14 +627,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -650,16 +650,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -887,12 +887,12 @@ public Builder setValueBytes(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -928,7 +928,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -962,7 +962,7 @@ public static final class Gauge extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             Gauge.class.getName());
         }
    @@ -975,15 +975,15 @@ private Gauge() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder.class);
         }
     
         private int bitField0_;
    @@ -1046,10 +1046,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -1078,44 +1078,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -1123,26 +1123,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -1155,7 +1155,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -1176,21 +1176,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.newBuilder()
           private Builder() {
     
           }
    @@ -1211,17 +1211,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -1229,14 +1229,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -1248,16 +1248,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -1353,12 +1353,12 @@ public Builder clearValue() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -1394,7 +1394,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -1424,11 +1424,11 @@ public interface CounterOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
     
         /**
          * optional .google.protobuf.Timestamp created_timestamp = 3;
    @@ -1458,7 +1458,7 @@ public static final class Counter extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             Counter.class.getName());
         }
    @@ -1471,15 +1471,15 @@ private Counter() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder.class);
         }
     
         private int bitField0_;
    @@ -1503,7 +1503,7 @@ public double getValue() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          * @return Whether the exemplar field is set.
    @@ -1517,15 +1517,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 3;
    @@ -1608,10 +1608,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -1658,44 +1658,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -1703,26 +1703,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -1735,7 +1735,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -1756,21 +1756,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -1808,17 +1808,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -1826,14 +1826,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -1857,16 +1857,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -1978,9 +1978,9 @@ public Builder clearValue() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar exemplar_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            * @return Whether the exemplar field is set.
    @@ -1992,9 +1992,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -2002,7 +2002,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -2019,7 +2019,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -2032,11 +2032,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -2066,7 +2066,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return getExemplarFieldBuilder().getBuilder();
    @@ -2074,23 +2074,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 2;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> 
               getExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
               exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -2224,12 +2224,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2265,7 +2265,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2310,7 +2310,7 @@ public static final class Quantile extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             Quantile.class.getName());
         }
    @@ -2323,15 +2323,15 @@ private Quantile() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder.class);
         }
     
         private int bitField0_;
    @@ -2420,10 +2420,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile) obj;
     
           if (hasQuantile() != other.hasQuantile()) return false;
           if (hasQuantile()) {
    @@ -2463,44 +2463,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -2508,26 +2508,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -2540,7 +2540,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -2561,21 +2561,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.newBuilder()
           private Builder() {
     
           }
    @@ -2597,17 +2597,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -2615,14 +2615,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -2638,16 +2638,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.getDefaultInstance()) return this;
             if (other.hasQuantile()) {
               setQuantile(other.getQuantile());
             }
    @@ -2791,12 +2791,12 @@ public Builder clearValue() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2832,7 +2832,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -2867,12 +2867,12 @@ public interface SummaryOrBuilder extends
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getQuantileList();
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getQuantile(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getQuantile(int index);
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    @@ -2880,12 +2880,12 @@ public interface SummaryOrBuilder extends
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getQuantileOrBuilderList();
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder getQuantileOrBuilder(
             int index);
     
         /**
    @@ -2916,7 +2916,7 @@ public static final class Summary extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             Summary.class.getName());
         }
    @@ -2930,15 +2930,15 @@ private Summary() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder.class);
         }
     
         private int bitField0_;
    @@ -2982,19 +2982,19 @@ public double getSampleSum() {
     
         public static final int QUANTILE_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List quantile_;
    +    private java.util.List quantile_;
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public java.util.List getQuantileList() {
    +    public java.util.List getQuantileList() {
           return quantile_;
         }
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getQuantileOrBuilderList() {
           return quantile_;
         }
    @@ -3009,14 +3009,14 @@ public int getQuantileCount() {
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getQuantile(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getQuantile(int index) {
           return quantile_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Quantile quantile = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder getQuantileOrBuilder(
             int index) {
           return quantile_.get(index);
         }
    @@ -3108,10 +3108,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -3165,44 +3165,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -3210,26 +3210,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -3242,7 +3242,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -3263,21 +3263,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -3318,17 +3318,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -3336,15 +3336,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary result) {
             if (quantileBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0)) {
                 quantile_ = java.util.Collections.unmodifiableList(quantile_);
    @@ -3356,7 +3356,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -3378,16 +3378,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -3460,9 +3460,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.parser(),
                             extensionRegistry);
                     if (quantileBuilder_ == null) {
                       ensureQuantileIsMutable();
    @@ -3576,22 +3576,22 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List quantile_ =
    +      private java.util.List quantile_ =
             java.util.Collections.emptyList();
           private void ensureQuantileIsMutable() {
             if (!((bitField0_ & 0x00000004) != 0)) {
    -          quantile_ = new java.util.ArrayList(quantile_);
    +          quantile_ = new java.util.ArrayList(quantile_);
               bitField0_ |= 0x00000004;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder> quantileBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder> quantileBuilder_;
     
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List getQuantileList() {
    +      public java.util.List getQuantileList() {
             if (quantileBuilder_ == null) {
               return java.util.Collections.unmodifiableList(quantile_);
             } else {
    @@ -3611,7 +3611,7 @@ public int getQuantileCount() {
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile getQuantile(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getQuantile(int index) {
             if (quantileBuilder_ == null) {
               return quantile_.get(index);
             } else {
    @@ -3622,7 +3622,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder setQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3639,7 +3639,7 @@ public Builder setQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder setQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.set(index, builderForValue.build());
    @@ -3652,7 +3652,7 @@ public Builder setQuantile(
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile value) {
    +      public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3669,7 +3669,7 @@ public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile value) {
             if (quantileBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -3686,7 +3686,7 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.add(builderForValue.build());
    @@ -3700,7 +3700,7 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addQuantile(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder builderForValue) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               quantile_.add(index, builderForValue.build());
    @@ -3714,7 +3714,7 @@ public Builder addQuantile(
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
           public Builder addAllQuantile(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (quantileBuilder_ == null) {
               ensureQuantileIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -3754,14 +3754,14 @@ public Builder removeQuantile(int index) {
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder getQuantileBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder getQuantileBuilder(
               int index) {
             return getQuantileFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder getQuantileOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder getQuantileOrBuilder(
               int index) {
             if (quantileBuilder_ == null) {
               return quantile_.get(index);  } else {
    @@ -3771,7 +3771,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getQuantileOrBuilderList() {
             if (quantileBuilder_ != null) {
               return quantileBuilder_.getMessageOrBuilderList();
    @@ -3782,31 +3782,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder addQuantileBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder addQuantileBuilder() {
             return getQuantileFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder addQuantileBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder addQuantileBuilder(
               int index) {
             return getQuantileFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Quantile quantile = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getQuantileBuilderList() {
             return getQuantileFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder> 
               getQuantileFieldBuilder() {
             if (quantileBuilder_ == null) {
               quantileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.QuantileOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder>(
                       quantile_,
                       ((bitField0_ & 0x00000004) != 0),
                       getParentForChildren(),
    @@ -3941,12 +3941,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -3982,7 +3982,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -4016,7 +4016,7 @@ public static final class Untyped extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             Untyped.class.getName());
         }
    @@ -4029,15 +4029,15 @@ private Untyped() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder.class);
         }
     
         private int bitField0_;
    @@ -4100,10 +4100,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped) obj;
     
           if (hasValue() != other.hasValue()) return false;
           if (hasValue()) {
    @@ -4132,44 +4132,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -4177,26 +4177,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -4209,7 +4209,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -4230,21 +4230,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.newBuilder()
           private Builder() {
     
           }
    @@ -4265,17 +4265,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -4283,14 +4283,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -4302,16 +4302,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance()) return this;
             if (other.hasValue()) {
               setValue(other.getValue());
             }
    @@ -4407,12 +4407,12 @@ public Builder clearValue() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -4448,7 +4448,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -4506,7 +4506,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketList();
         /**
          * 
    @@ -4515,7 +4515,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getBucket(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getBucket(int index);
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -4531,7 +4531,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketOrBuilderList();
         /**
          * 
    @@ -4540,7 +4540,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index);
     
         /**
    @@ -4649,7 +4649,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanList();
         /**
          * 
    @@ -4658,7 +4658,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getNegativeSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getNegativeSpan(int index);
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -4674,7 +4674,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanOrBuilderList();
         /**
          * 
    @@ -4683,7 +4683,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index);
     
         /**
    @@ -4760,7 +4760,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanList();
         /**
          * 
    @@ -4772,7 +4772,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getPositiveSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getPositiveSpan(int index);
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -4794,7 +4794,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanOrBuilderList();
         /**
          * 
    @@ -4806,7 +4806,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index);
     
         /**
    @@ -4880,7 +4880,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsList();
         /**
          * 
    @@ -4889,7 +4889,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplars(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplars(int index);
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -4905,7 +4905,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsOrBuilderList();
         /**
          * 
    @@ -4914,7 +4914,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index);
       }
       /**
    @@ -4930,7 +4930,7 @@ public static final class Histogram extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             Histogram.class.getName());
         }
    @@ -4951,15 +4951,15 @@ private Histogram() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder.class);
         }
     
         private int bitField0_;
    @@ -5030,7 +5030,7 @@ public double getSampleSum() {
     
         public static final int BUCKET_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List bucket_;
    +    private java.util.List bucket_;
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -5039,7 +5039,7 @@ public double getSampleSum() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List getBucketList() {
    +    public java.util.List getBucketList() {
           return bucket_;
         }
         /**
    @@ -5050,7 +5050,7 @@ public java.util.Listrepeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getBucketOrBuilderList() {
           return bucket_;
         }
    @@ -5073,7 +5073,7 @@ public int getBucketCount() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getBucket(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getBucket(int index) {
           return bucket_.get(index);
         }
         /**
    @@ -5084,7 +5084,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index) {
           return bucket_.get(index);
         }
    @@ -5233,7 +5233,7 @@ public double getZeroCountFloat() {
     
         public static final int NEGATIVE_SPAN_FIELD_NUMBER = 9;
         @SuppressWarnings("serial")
    -    private java.util.List negativeSpan_;
    +    private java.util.List negativeSpan_;
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -5242,7 +5242,7 @@ public double getZeroCountFloat() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List getNegativeSpanList() {
    +    public java.util.List getNegativeSpanList() {
           return negativeSpan_;
         }
         /**
    @@ -5253,7 +5253,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getNegativeSpanOrBuilderList() {
           return negativeSpan_;
         }
    @@ -5276,7 +5276,7 @@ public int getNegativeSpanCount() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getNegativeSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getNegativeSpan(int index) {
           return negativeSpan_.get(index);
         }
         /**
    @@ -5287,7 +5287,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index) {
           return negativeSpan_.get(index);
         }
    @@ -5382,7 +5382,7 @@ public double getNegativeCount(int index) {
     
         public static final int POSITIVE_SPAN_FIELD_NUMBER = 12;
         @SuppressWarnings("serial")
    -    private java.util.List positiveSpan_;
    +    private java.util.List positiveSpan_;
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5394,7 +5394,7 @@ public double getNegativeCount(int index) {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List getPositiveSpanList() {
    +    public java.util.List getPositiveSpanList() {
           return positiveSpan_;
         }
         /**
    @@ -5408,7 +5408,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getPositiveSpanOrBuilderList() {
           return positiveSpan_;
         }
    @@ -5437,7 +5437,7 @@ public int getPositiveSpanCount() {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getPositiveSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getPositiveSpan(int index) {
           return positiveSpan_.get(index);
         }
         /**
    @@ -5451,7 +5451,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index) {
           return positiveSpan_.get(index);
         }
    @@ -5546,7 +5546,7 @@ public double getPositiveCount(int index) {
     
         public static final int EXEMPLARS_FIELD_NUMBER = 16;
         @SuppressWarnings("serial")
    -    private java.util.List exemplars_;
    +    private java.util.List exemplars_;
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -5555,7 +5555,7 @@ public double getPositiveCount(int index) {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List getExemplarsList() {
    +    public java.util.List getExemplarsList() {
           return exemplars_;
         }
         /**
    @@ -5566,7 +5566,7 @@ public java.util.Listrepeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getExemplarsOrBuilderList() {
           return exemplars_;
         }
    @@ -5589,7 +5589,7 @@ public int getExemplarsCount() {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplars(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplars(int index) {
           return exemplars_.get(index);
         }
         /**
    @@ -5600,7 +5600,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index) {
           return exemplars_.get(index);
         }
    @@ -5764,10 +5764,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -5915,44 +5915,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5960,26 +5960,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5992,7 +5992,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -6013,21 +6013,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -6101,17 +6101,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -6119,15 +6119,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram result) {
             if (bucketBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 bucket_ = java.util.Collections.unmodifiableList(bucket_);
    @@ -6166,7 +6166,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -6224,16 +6224,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -6443,9 +6443,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.parser(),
                             extensionRegistry);
                     if (bucketBuilder_ == null) {
                       ensureBucketIsMutable();
    @@ -6481,9 +6481,9 @@ public Builder mergeFrom(
                     break;
                   } // case 65
                   case 74: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (negativeSpanBuilder_ == null) {
                       ensureNegativeSpanIsMutable();
    @@ -6527,9 +6527,9 @@ public Builder mergeFrom(
                     break;
                   } // case 90
                   case 98: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (positiveSpanBuilder_ == null) {
                       ensurePositiveSpanIsMutable();
    @@ -6580,9 +6580,9 @@ public Builder mergeFrom(
                     break;
                   } // case 122
                   case 130: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.parser(),
                             extensionRegistry);
                     if (exemplarsBuilder_ == null) {
                       ensureExemplarsIsMutable();
    @@ -6745,17 +6745,17 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List bucket_ =
    +      private java.util.List bucket_ =
             java.util.Collections.emptyList();
           private void ensureBucketIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          bucket_ = new java.util.ArrayList(bucket_);
    +          bucket_ = new java.util.ArrayList(bucket_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder> bucketBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder> bucketBuilder_;
     
           /**
            * 
    @@ -6764,7 +6764,7 @@ private void ensureBucketIsMutable() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List getBucketList() {
    +      public java.util.List getBucketList() {
             if (bucketBuilder_ == null) {
               return java.util.Collections.unmodifiableList(bucket_);
             } else {
    @@ -6792,7 +6792,7 @@ public int getBucketCount() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getBucket(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getBucket(int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);
             } else {
    @@ -6807,7 +6807,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6828,7 +6828,7 @@ public Builder setBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.set(index, builderForValue.build());
    @@ -6845,7 +6845,7 @@ public Builder setBucket(
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket value) {
    +      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6866,7 +6866,7 @@ public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6887,7 +6887,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(builderForValue.build());
    @@ -6905,7 +6905,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(index, builderForValue.build());
    @@ -6923,7 +6923,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addAllBucket(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -6975,7 +6975,7 @@ public Builder removeBucket(int index) {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder getBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder getBucketBuilder(
               int index) {
             return getBucketFieldBuilder().getBuilder(index);
           }
    @@ -6986,7 +6986,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder getBucketOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder getBucketOrBuilder(
               int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);  } else {
    @@ -7000,7 +7000,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketOrBuilderList() {
             if (bucketBuilder_ != null) {
               return bucketBuilder_.getMessageOrBuilderList();
    @@ -7015,9 +7015,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder addBucketBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder addBucketBuilder() {
             return getBucketFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7026,10 +7026,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder addBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder addBucketBuilder(
               int index) {
             return getBucketFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7038,16 +7038,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketBuilderList() {
             return getBucketFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder> 
               getBucketFieldBuilder() {
             if (bucketBuilder_ == null) {
               bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder>(
                       bucket_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -7418,17 +7418,17 @@ public Builder clearZeroCountFloat() {
             return this;
           }
     
    -      private java.util.List negativeSpan_ =
    +      private java.util.List negativeSpan_ =
             java.util.Collections.emptyList();
           private void ensureNegativeSpanIsMutable() {
             if (!((bitField0_ & 0x00000200) != 0)) {
    -          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
    +          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
               bitField0_ |= 0x00000200;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
     
           /**
            * 
    @@ -7437,7 +7437,7 @@ private void ensureNegativeSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List getNegativeSpanList() {
    +      public java.util.List getNegativeSpanList() {
             if (negativeSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(negativeSpan_);
             } else {
    @@ -7465,7 +7465,7 @@ public int getNegativeSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getNegativeSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getNegativeSpan(int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);
             } else {
    @@ -7480,7 +7480,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7501,7 +7501,7 @@ public Builder setNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.set(index, builderForValue.build());
    @@ -7518,7 +7518,7 @@ public Builder setNegativeSpan(
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
    +      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7539,7 +7539,7 @@ public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7560,7 +7560,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(builderForValue.build());
    @@ -7578,7 +7578,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(index, builderForValue.build());
    @@ -7596,7 +7596,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addAllNegativeSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -7648,7 +7648,7 @@ public Builder removeNegativeSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
               int index) {
             return getNegativeSpanFieldBuilder().getBuilder(index);
           }
    @@ -7659,7 +7659,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
               int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);  } else {
    @@ -7673,7 +7673,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanOrBuilderList() {
             if (negativeSpanBuilder_ != null) {
               return negativeSpanBuilder_.getMessageOrBuilderList();
    @@ -7688,9 +7688,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
             return getNegativeSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7699,10 +7699,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
               int index) {
             return getNegativeSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7711,16 +7711,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanBuilderList() {
             return getNegativeSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder> 
               getNegativeSpanFieldBuilder() {
             if (negativeSpanBuilder_ == null) {
               negativeSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder>(
                       negativeSpan_,
                       ((bitField0_ & 0x00000200) != 0),
                       getParentForChildren(),
    @@ -7974,17 +7974,17 @@ public Builder clearNegativeCount() {
             return this;
           }
     
    -      private java.util.List positiveSpan_ =
    +      private java.util.List positiveSpan_ =
             java.util.Collections.emptyList();
           private void ensurePositiveSpanIsMutable() {
             if (!((bitField0_ & 0x00001000) != 0)) {
    -          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
    +          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
               bitField0_ |= 0x00001000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
     
           /**
            * 
    @@ -7996,7 +7996,7 @@ private void ensurePositiveSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List getPositiveSpanList() {
    +      public java.util.List getPositiveSpanList() {
             if (positiveSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(positiveSpan_);
             } else {
    @@ -8030,7 +8030,7 @@ public int getPositiveSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getPositiveSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getPositiveSpan(int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);
             } else {
    @@ -8048,7 +8048,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8072,7 +8072,7 @@ public Builder setPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.set(index, builderForValue.build());
    @@ -8092,7 +8092,7 @@ public Builder setPositiveSpan(
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
    +      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8116,7 +8116,7 @@ public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8140,7 +8140,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(builderForValue.build());
    @@ -8161,7 +8161,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(index, builderForValue.build());
    @@ -8182,7 +8182,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addAllPositiveSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8243,7 +8243,7 @@ public Builder removePositiveSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
               int index) {
             return getPositiveSpanFieldBuilder().getBuilder(index);
           }
    @@ -8257,7 +8257,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
               int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);  } else {
    @@ -8274,7 +8274,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanOrBuilderList() {
             if (positiveSpanBuilder_ != null) {
               return positiveSpanBuilder_.getMessageOrBuilderList();
    @@ -8292,9 +8292,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
             return getPositiveSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8306,10 +8306,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
               int index) {
             return getPositiveSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8321,16 +8321,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanBuilderList() {
             return getPositiveSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder> 
               getPositiveSpanFieldBuilder() {
             if (positiveSpanBuilder_ == null) {
               positiveSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder>(
                       positiveSpan_,
                       ((bitField0_ & 0x00001000) != 0),
                       getParentForChildren(),
    @@ -8584,17 +8584,17 @@ public Builder clearPositiveCount() {
             return this;
           }
     
    -      private java.util.List exemplars_ =
    +      private java.util.List exemplars_ =
             java.util.Collections.emptyList();
           private void ensureExemplarsIsMutable() {
             if (!((bitField0_ & 0x00008000) != 0)) {
    -          exemplars_ = new java.util.ArrayList(exemplars_);
    +          exemplars_ = new java.util.ArrayList(exemplars_);
               bitField0_ |= 0x00008000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
     
           /**
            * 
    @@ -8603,7 +8603,7 @@ private void ensureExemplarsIsMutable() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List getExemplarsList() {
    +      public java.util.List getExemplarsList() {
             if (exemplarsBuilder_ == null) {
               return java.util.Collections.unmodifiableList(exemplars_);
             } else {
    @@ -8631,7 +8631,7 @@ public int getExemplarsCount() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplars(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplars(int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);
             } else {
    @@ -8646,7 +8646,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8667,7 +8667,7 @@ public Builder setExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.set(index, builderForValue.build());
    @@ -8684,7 +8684,7 @@ public Builder setExemplars(
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
    +      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8705,7 +8705,7 @@ public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.co
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8726,7 +8726,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(builderForValue.build());
    @@ -8744,7 +8744,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(index, builderForValue.build());
    @@ -8762,7 +8762,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addAllExemplars(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8814,7 +8814,7 @@ public Builder removeExemplars(int index) {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder getExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder getExemplarsBuilder(
               int index) {
             return getExemplarsFieldBuilder().getBuilder(index);
           }
    @@ -8825,7 +8825,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
               int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);  } else {
    @@ -8839,7 +8839,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsOrBuilderList() {
             if (exemplarsBuilder_ != null) {
               return exemplarsBuilder_.getMessageOrBuilderList();
    @@ -8854,9 +8854,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder addExemplarsBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder addExemplarsBuilder() {
             return getExemplarsFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8865,10 +8865,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder addExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder addExemplarsBuilder(
               int index) {
             return getExemplarsFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8877,16 +8877,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsBuilderList() {
             return getExemplarsFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> 
               getExemplarsFieldBuilder() {
             if (exemplarsBuilder_ == null) {
               exemplarsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder>(
                       exemplars_,
                       ((bitField0_ & 0x00008000) != 0),
                       getParentForChildren(),
    @@ -8900,12 +8900,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -8941,7 +8941,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9017,11 +9017,11 @@ public interface BucketOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
       }
       /**
        * 
    @@ -9041,7 +9041,7 @@ public static final class Bucket extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             Bucket.class.getName());
         }
    @@ -9054,15 +9054,15 @@ private Bucket() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder.class);
         }
     
         private int bitField0_;
    @@ -9148,7 +9148,7 @@ public double getUpperBound() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return Whether the exemplar field is set.
    @@ -9162,15 +9162,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -9234,10 +9234,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket) obj;
     
           if (hasCumulativeCount() != other.hasCumulativeCount()) return false;
           if (hasCumulativeCount()) {
    @@ -9296,44 +9296,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9341,26 +9341,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9373,7 +9373,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -9399,21 +9399,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -9447,17 +9447,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -9465,14 +9465,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -9498,16 +9498,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.getDefaultInstance()) return this;
             if (other.hasCumulativeCount()) {
               setCumulativeCount(other.getCumulativeCount());
             }
    @@ -9753,9 +9753,9 @@ public Builder clearUpperBound() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar exemplar_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return Whether the exemplar field is set.
    @@ -9767,9 +9767,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -9777,7 +9777,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -9794,7 +9794,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -9807,11 +9807,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -9841,7 +9841,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getExemplarFieldBuilder().getBuilder();
    @@ -9849,23 +9849,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> 
               getExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
               exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -9878,12 +9878,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9919,7 +9919,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Bucket getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9989,7 +9989,7 @@ public static final class BucketSpan extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             BucketSpan.class.getName());
         }
    @@ -10002,15 +10002,15 @@ private BucketSpan() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder.class);
         }
     
         private int bitField0_;
    @@ -10115,10 +10115,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan) obj;
     
           if (hasOffset() != other.hasOffset()) return false;
           if (hasOffset()) {
    @@ -10154,44 +10154,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10199,26 +10199,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10231,7 +10231,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10261,21 +10261,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.BucketSpan)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpanOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.newBuilder()
           private Builder() {
     
           }
    @@ -10297,17 +10297,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -10315,14 +10315,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -10338,16 +10338,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance()) return this;
             if (other.hasOffset()) {
               setOffset(other.getOffset());
             }
    @@ -10523,12 +10523,12 @@ public Builder clearLength() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.BucketSpan)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10564,7 +10564,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.BucketSpan getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10577,12 +10577,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -10590,12 +10590,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -10649,7 +10649,7 @@ public static final class Exemplar extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             Exemplar.class.getName());
         }
    @@ -10663,33 +10663,33 @@ private Exemplar() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -10704,14 +10704,14 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
    @@ -10827,10 +10827,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -10874,44 +10874,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10919,26 +10919,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10951,7 +10951,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10972,21 +10972,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Exemplar)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.ExemplarOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -11026,17 +11026,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -11044,15 +11044,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -11064,7 +11064,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -11082,16 +11082,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -11151,9 +11151,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -11192,22 +11192,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -11227,7 +11227,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -11238,7 +11238,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11255,7 +11255,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -11268,7 +11268,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11285,7 +11285,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11302,7 +11302,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -11316,7 +11316,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -11330,7 +11330,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -11370,14 +11370,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return getLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -11387,7 +11387,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -11398,31 +11398,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder addLabelBuilder() {
             return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return getLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder> 
               getLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -11633,12 +11633,12 @@ public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Exemplar)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11674,7 +11674,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Exemplar getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11687,12 +11687,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -11700,12 +11700,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -11717,11 +11717,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return The gauge.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getGauge();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getGauge();
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder getGaugeOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder getGaugeOrBuilder();
     
         /**
          * optional .io.prometheus.client.Counter counter = 3;
    @@ -11732,11 +11732,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          * optional .io.prometheus.client.Counter counter = 3;
          * @return The counter.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getCounter();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getCounter();
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder getCounterOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder getCounterOrBuilder();
     
         /**
          * optional .io.prometheus.client.Summary summary = 4;
    @@ -11747,11 +11747,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          * optional .io.prometheus.client.Summary summary = 4;
          * @return The summary.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getSummary();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getSummary();
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder getSummaryOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder getSummaryOrBuilder();
     
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
    @@ -11762,11 +11762,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return The untyped.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getUntyped();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getUntyped();
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder getUntypedOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder getUntypedOrBuilder();
     
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
    @@ -11777,11 +11777,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Met
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return The histogram.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getHistogram();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getHistogram();
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder getHistogramOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder getHistogramOrBuilder();
     
         /**
          * optional int64 timestamp_ms = 6;
    @@ -11807,7 +11807,7 @@ public static final class Metric extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             Metric.class.getName());
         }
    @@ -11821,33 +11821,33 @@ private Metric() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -11862,20 +11862,20 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
     
         public static final int GAUGE_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge gauge_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge gauge_;
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return Whether the gauge field is set.
    @@ -11889,19 +11889,19 @@ public boolean hasGauge() {
          * @return The gauge.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getGauge() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getGauge() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
     
         public static final int COUNTER_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter counter_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter counter_;
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          * @return Whether the counter field is set.
    @@ -11915,19 +11915,19 @@ public boolean hasCounter() {
          * @return The counter.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getCounter() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getCounter() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance() : counter_;
         }
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder getCounterOrBuilder() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance() : counter_;
         }
     
         public static final int SUMMARY_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary summary_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary summary_;
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          * @return Whether the summary field is set.
    @@ -11941,19 +11941,19 @@ public boolean hasSummary() {
          * @return The summary.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getSummary() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getSummary() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance() : summary_;
         }
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance() : summary_;
         }
     
         public static final int UNTYPED_FIELD_NUMBER = 5;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped untyped_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped untyped_;
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return Whether the untyped field is set.
    @@ -11967,19 +11967,19 @@ public boolean hasUntyped() {
          * @return The untyped.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getUntyped() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getUntyped() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
     
         public static final int HISTOGRAM_FIELD_NUMBER = 7;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram histogram_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram histogram_;
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return Whether the histogram field is set.
    @@ -11993,15 +11993,15 @@ public boolean hasHistogram() {
          * @return The histogram.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getHistogram() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getHistogram() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
     
         public static final int TIMESTAMP_MS_FIELD_NUMBER = 6;
    @@ -12105,10 +12105,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -12187,44 +12187,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12232,26 +12232,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12264,7 +12264,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -12285,21 +12285,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -12363,17 +12363,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -12381,15 +12381,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -12401,7 +12401,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -12443,16 +12443,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -12524,9 +12524,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -12593,22 +12593,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -12628,7 +12628,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -12639,7 +12639,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12656,7 +12656,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -12669,7 +12669,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12686,7 +12686,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12703,7 +12703,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -12717,7 +12717,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -12731,7 +12731,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -12771,14 +12771,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return getLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -12788,7 +12788,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -12799,31 +12799,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder addLabelBuilder() {
             return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return getLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder> 
               getLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -12833,9 +12833,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return labelBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge gauge_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge gauge_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder> gaugeBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder> gaugeBuilder_;
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return Whether the gauge field is set.
    @@ -12847,9 +12847,9 @@ public boolean hasGauge() {
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return The gauge.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge getGauge() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getGauge() {
             if (gaugeBuilder_ == null) {
    -          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance() : gauge_;
    +          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance() : gauge_;
             } else {
               return gaugeBuilder_.getMessage();
             }
    @@ -12857,7 +12857,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge value) {
    +      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12874,7 +12874,7 @@ public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_go
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           public Builder setGauge(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder builderForValue) {
             if (gaugeBuilder_ == null) {
               gauge_ = builderForValue.build();
             } else {
    @@ -12887,11 +12887,11 @@ public Builder setGauge(
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge value) {
    +      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 gauge_ != null &&
    -            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance()) {
    +            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance()) {
                 getGaugeBuilder().mergeFrom(value);
               } else {
                 gauge_ = value;
    @@ -12921,7 +12921,7 @@ public Builder clearGauge() {
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder getGaugeBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder getGaugeBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return getGaugeFieldBuilder().getBuilder();
    @@ -12929,23 +12929,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
             if (gaugeBuilder_ != null) {
               return gaugeBuilder_.getMessageOrBuilder();
             } else {
               return gauge_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.getDefaultInstance() : gauge_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance() : gauge_;
             }
           }
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder> 
               getGaugeFieldBuilder() {
             if (gaugeBuilder_ == null) {
               gaugeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.GaugeOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder>(
                       getGauge(),
                       getParentForChildren(),
                       isClean());
    @@ -12954,9 +12954,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return gaugeBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter counter_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter counter_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder> counterBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder> counterBuilder_;
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            * @return Whether the counter field is set.
    @@ -12968,9 +12968,9 @@ public boolean hasCounter() {
            * optional .io.prometheus.client.Counter counter = 3;
            * @return The counter.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter getCounter() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getCounter() {
             if (counterBuilder_ == null) {
    -          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance() : counter_;
    +          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance() : counter_;
             } else {
               return counterBuilder_.getMessage();
             }
    @@ -12978,7 +12978,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter value) {
    +      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12995,7 +12995,7 @@ public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Counter counter = 3;
            */
           public Builder setCounter(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder builderForValue) {
             if (counterBuilder_ == null) {
               counter_ = builderForValue.build();
             } else {
    @@ -13008,11 +13008,11 @@ public Builder setCounter(
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter value) {
    +      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 counter_ != null &&
    -            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance()) {
    +            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance()) {
                 getCounterBuilder().mergeFrom(value);
               } else {
                 counter_ = value;
    @@ -13042,7 +13042,7 @@ public Builder clearCounter() {
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder getCounterBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder getCounterBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return getCounterFieldBuilder().getBuilder();
    @@ -13050,23 +13050,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder getCounterOrBuilder() {
             if (counterBuilder_ != null) {
               return counterBuilder_.getMessageOrBuilder();
             } else {
               return counter_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.getDefaultInstance() : counter_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance() : counter_;
             }
           }
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder> 
               getCounterFieldBuilder() {
             if (counterBuilder_ == null) {
               counterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.CounterOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder>(
                       getCounter(),
                       getParentForChildren(),
                       isClean());
    @@ -13075,9 +13075,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return counterBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary summary_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary summary_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder> summaryBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder> summaryBuilder_;
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            * @return Whether the summary field is set.
    @@ -13089,9 +13089,9 @@ public boolean hasSummary() {
            * optional .io.prometheus.client.Summary summary = 4;
            * @return The summary.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary getSummary() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getSummary() {
             if (summaryBuilder_ == null) {
    -          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance() : summary_;
    +          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance() : summary_;
             } else {
               return summaryBuilder_.getMessage();
             }
    @@ -13099,7 +13099,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary value) {
    +      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13116,7 +13116,7 @@ public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Summary summary = 4;
            */
           public Builder setSummary(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder builderForValue) {
             if (summaryBuilder_ == null) {
               summary_ = builderForValue.build();
             } else {
    @@ -13129,11 +13129,11 @@ public Builder setSummary(
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary value) {
    +      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 summary_ != null &&
    -            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance()) {
    +            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance()) {
                 getSummaryBuilder().mergeFrom(value);
               } else {
                 summary_ = value;
    @@ -13163,7 +13163,7 @@ public Builder clearSummary() {
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder getSummaryBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder getSummaryBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return getSummaryFieldBuilder().getBuilder();
    @@ -13171,23 +13171,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
             if (summaryBuilder_ != null) {
               return summaryBuilder_.getMessageOrBuilder();
             } else {
               return summary_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.getDefaultInstance() : summary_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance() : summary_;
             }
           }
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder> 
               getSummaryFieldBuilder() {
             if (summaryBuilder_ == null) {
               summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.SummaryOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder>(
                       getSummary(),
                       getParentForChildren(),
                       isClean());
    @@ -13196,9 +13196,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return summaryBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped untyped_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped untyped_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder> untypedBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder> untypedBuilder_;
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return Whether the untyped field is set.
    @@ -13210,9 +13210,9 @@ public boolean hasUntyped() {
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return The untyped.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped getUntyped() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getUntyped() {
             if (untypedBuilder_ == null) {
    -          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance() : untyped_;
    +          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance() : untyped_;
             } else {
               return untypedBuilder_.getMessage();
             }
    @@ -13220,7 +13220,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped value) {
    +      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13237,7 +13237,7 @@ public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           public Builder setUntyped(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder builderForValue) {
             if (untypedBuilder_ == null) {
               untyped_ = builderForValue.build();
             } else {
    @@ -13250,11 +13250,11 @@ public Builder setUntyped(
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped value) {
    +      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 untyped_ != null &&
    -            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance()) {
    +            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance()) {
                 getUntypedBuilder().mergeFrom(value);
               } else {
                 untyped_ = value;
    @@ -13284,7 +13284,7 @@ public Builder clearUntyped() {
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder getUntypedBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder getUntypedBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
             return getUntypedFieldBuilder().getBuilder();
    @@ -13292,23 +13292,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
             if (untypedBuilder_ != null) {
               return untypedBuilder_.getMessageOrBuilder();
             } else {
               return untyped_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.getDefaultInstance() : untyped_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance() : untyped_;
             }
           }
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder> 
               getUntypedFieldBuilder() {
             if (untypedBuilder_ == null) {
               untypedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.UntypedOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder>(
                       getUntyped(),
                       getParentForChildren(),
                       isClean());
    @@ -13317,9 +13317,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return untypedBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram histogram_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram histogram_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder> histogramBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder> histogramBuilder_;
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return Whether the histogram field is set.
    @@ -13331,9 +13331,9 @@ public boolean hasHistogram() {
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return The histogram.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram getHistogram() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getHistogram() {
             if (histogramBuilder_ == null) {
    -          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance() : histogram_;
    +          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance() : histogram_;
             } else {
               return histogramBuilder_.getMessage();
             }
    @@ -13341,7 +13341,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram value) {
    +      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13358,7 +13358,7 @@ public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.co
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           public Builder setHistogram(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder builderForValue) {
             if (histogramBuilder_ == null) {
               histogram_ = builderForValue.build();
             } else {
    @@ -13371,11 +13371,11 @@ public Builder setHistogram(
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram value) {
    +      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (((bitField0_ & 0x00000020) != 0) &&
                 histogram_ != null &&
    -            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance()) {
    +            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance()) {
                 getHistogramBuilder().mergeFrom(value);
               } else {
                 histogram_ = value;
    @@ -13405,7 +13405,7 @@ public Builder clearHistogram() {
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder getHistogramBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder getHistogramBuilder() {
             bitField0_ |= 0x00000020;
             onChanged();
             return getHistogramFieldBuilder().getBuilder();
    @@ -13413,23 +13413,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
             if (histogramBuilder_ != null) {
               return histogramBuilder_.getMessageOrBuilder();
             } else {
               return histogram_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.getDefaultInstance() : histogram_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance() : histogram_;
             }
           }
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder> 
               getHistogramFieldBuilder() {
             if (histogramBuilder_ == null) {
               histogramBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.HistogramOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder>(
                       getHistogram(),
                       getParentForChildren(),
                       isClean());
    @@ -13482,12 +13482,12 @@ public Builder clearTimestampMs() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13523,7 +13523,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13576,17 +13576,17 @@ public interface MetricFamilyOrBuilder extends
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType getType();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType getType();
     
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getMetric(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getMetric(int index);
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    @@ -13594,12 +13594,12 @@ public interface MetricFamilyOrBuilder extends
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricOrBuilderList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index);
     
         /**
    @@ -13632,7 +13632,7 @@ public static final class MetricFamily extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 29,
    -        /* patch= */ 2,
    +        /* patch= */ 3,
             /* suffix= */ "",
             MetricFamily.class.getName());
         }
    @@ -13650,15 +13650,15 @@ private MetricFamily() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.Builder.class);
         }
     
         private int bitField0_;
    @@ -13773,26 +13773,26 @@ public java.lang.String getHelp() {
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType getType() {
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType.forNumber(type_);
    -      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType.COUNTER : result;
    +    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType getType() {
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType.forNumber(type_);
    +      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType.COUNTER : result;
         }
     
         public static final int METRIC_FIELD_NUMBER = 4;
         @SuppressWarnings("serial")
    -    private java.util.List metric_;
    +    private java.util.List metric_;
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List getMetricList() {
    +    public java.util.List getMetricList() {
           return metric_;
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getMetricOrBuilderList() {
           return metric_;
         }
    @@ -13807,14 +13807,14 @@ public int getMetricCount() {
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getMetric(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getMetric(int index) {
           return metric_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index) {
           return metric_.get(index);
         }
    @@ -13933,10 +13933,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -13995,44 +13995,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14040,26 +14040,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14072,7 +14072,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -14093,21 +14093,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamilyOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamilyOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.newBuilder()
           private Builder() {
     
           }
    @@ -14138,17 +14138,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -14156,15 +14156,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily result) {
             if (metricBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 metric_ = java.util.Collections.unmodifiableList(metric_);
    @@ -14176,7 +14176,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -14200,16 +14200,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -14292,8 +14292,8 @@ public Builder mergeFrom(
                   } // case 18
                   case 24: {
                     int tmpRaw = input.readEnum();
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType tmpValue =
    -                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType.forNumber(tmpRaw);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType tmpValue =
    +                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType.forNumber(tmpRaw);
                     if (tmpValue == null) {
                       mergeUnknownVarintField(3, tmpRaw);
                     } else {
    @@ -14303,9 +14303,9 @@ public Builder mergeFrom(
                     break;
                   } // case 24
                   case 34: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.parser(),
                             extensionRegistry);
                     if (metricBuilder_ == null) {
                       ensureMetricIsMutable();
    @@ -14510,16 +14510,16 @@ public Builder setHelpBytes(
            * @return The type.
            */
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType getType() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType.forNumber(type_);
    -        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType.COUNTER : result;
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType getType() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType.forNumber(type_);
    +        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType.COUNTER : result;
           }
           /**
            * optional .io.prometheus.client.MetricType type = 3;
            * @param value The type to set.
            * @return This builder for chaining.
            */
    -      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricType value) {
    +      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType value) {
             if (value == null) {
               throw new NullPointerException();
             }
    @@ -14539,22 +14539,22 @@ public Builder clearType() {
             return this;
           }
     
    -      private java.util.List metric_ =
    +      private java.util.List metric_ =
             java.util.Collections.emptyList();
           private void ensureMetricIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          metric_ = new java.util.ArrayList(metric_);
    +          metric_ = new java.util.ArrayList(metric_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder> metricBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder> metricBuilder_;
     
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List getMetricList() {
    +      public java.util.List getMetricList() {
             if (metricBuilder_ == null) {
               return java.util.Collections.unmodifiableList(metric_);
             } else {
    @@ -14574,7 +14574,7 @@ public int getMetricCount() {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric getMetric(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getMetric(int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);
             } else {
    @@ -14585,7 +14585,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14602,7 +14602,7 @@ public Builder setMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.set(index, builderForValue.build());
    @@ -14615,7 +14615,7 @@ public Builder setMetric(
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric value) {
    +      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14632,7 +14632,7 @@ public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14649,7 +14649,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(builderForValue.build());
    @@ -14663,7 +14663,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(index, builderForValue.build());
    @@ -14677,7 +14677,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addAllMetric(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -14717,14 +14717,14 @@ public Builder removeMetric(int index) {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder getMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder getMetricBuilder(
               int index) {
             return getMetricFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder getMetricOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder getMetricOrBuilder(
               int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);  } else {
    @@ -14734,7 +14734,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricOrBuilderList() {
             if (metricBuilder_ != null) {
               return metricBuilder_.getMessageOrBuilderList();
    @@ -14745,31 +14745,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder addMetricBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder addMetricBuilder() {
             return getMetricFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder addMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder addMetricBuilder(
               int index) {
             return getMetricFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricBuilderList() {
             return getMetricFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder> 
               getMetricFieldBuilder() {
             if (metricBuilder_ == null) {
               metricBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder>(
                       metric_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -14863,12 +14863,12 @@ public Builder setUnitBytes(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -14904,7 +14904,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics.MetricFamily getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -15029,7 +15029,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           "\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004\022\023\n\017GAUGE_H" +
           "ISTOGRAM\020\005B\212\001\nLio.prometheus.metrics.exp" +
           "ositionformats.generated.com_google_prot" +
    -      "obuf_4_29_2Z:github.com/prometheus/clien" +
    +      "obuf_4_29_3Z:github.com/prometheus/clien" +
           "t_model/go;io_prometheus_client"
         };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    index 4993cdb87..608a13caa 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    @@ -4,7 +4,7 @@
     
     import com.google.protobuf.TextFormat;
     import io.prometheus.metrics.expositionformats.ExpositionFormatWriter;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot;
    diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    index e85c36738..4c4ae3059 100644
    --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java
    @@ -2,7 +2,7 @@
     
     import static org.assertj.core.api.Assertions.assertThat;
     
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_2.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
    
    From 244a30b505ab7723789cf98c813a66cb447028c6 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Mon, 13 Jan 2025 08:48:37 -0500
    Subject: [PATCH 266/870] Bump
     org.sonatype.central:central-publishing-maven-plugin (#1257)
    
    Bumps [org.sonatype.central:central-publishing-maven-plugin](https://github.com/sonatype/central-publishing-maven-plugin) from 0.6.0 to 0.7.0.
    - [Commits](https://github.com/sonatype/central-publishing-maven-plugin/commits)
    
    ---
    updated-dependencies:
    - dependency-name: org.sonatype.central:central-publishing-maven-plugin
      dependency-type: direct:production
      update-type: version-update:semver-minor
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 7173c5394..4fd41c1ed 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -507,7 +507,7 @@
                         
                             org.sonatype.central
                             central-publishing-maven-plugin
    -                        0.6.0
    +                        0.7.0
                             true
                             
                                 ossrh
    
    From a20c2a16cafb94ad0d9aa7a20337e82df87e013d Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 15 Jan 2025 14:49:36 +0100
    Subject: [PATCH 267/870] Bump io.dropwizard.metrics:metrics-core from 4.2.29
     to 4.2.30 (#1259)
    
    Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.29 to 4.2.30.
    - [Release notes](https://github.com/dropwizard/metrics/releases)
    - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.29...v4.2.30)
    
    ---
    updated-dependencies:
    - dependency-name: io.dropwizard.metrics:metrics-core
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     prometheus-metrics-instrumentation-dropwizard/pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/prometheus-metrics-instrumentation-dropwizard/pom.xml b/prometheus-metrics-instrumentation-dropwizard/pom.xml
    index e17b11e96..54c5c7ce2 100644
    --- a/prometheus-metrics-instrumentation-dropwizard/pom.xml
    +++ b/prometheus-metrics-instrumentation-dropwizard/pom.xml
    @@ -45,7 +45,7 @@
             
                 io.dropwizard.metrics
                 metrics-core
    -            4.2.29
    +            4.2.30
                 provided
             
     
    
    From e0b96b3fb2b27a1a47c62212fb1f27a8d2acad6e Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Wed, 15 Jan 2025 14:49:50 +0100
    Subject: [PATCH 268/870] Bump com.diffplug.spotless:spotless-maven-plugin from
     2.44.1 to 2.44.2 (#1258)
    
    Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.44.1 to 2.44.2.
    - [Release notes](https://github.com/diffplug/spotless/releases)
    - [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
    - [Commits](https://github.com/diffplug/spotless/compare/maven/2.44.1...maven/2.44.2)
    
    ---
    updated-dependencies:
    - dependency-name: com.diffplug.spotless:spotless-maven-plugin
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +-
     pom.xml                                             | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml
    index 9596e716f..3469e621f 100644
    --- a/integration-tests/it-spring-boot-smoke-test/pom.xml
    +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml
    @@ -77,7 +77,7 @@
                 
                     com.diffplug.spotless
                     spotless-maven-plugin
    -                2.44.1
    +                2.44.2
                     
                         
                             
    diff --git a/pom.xml b/pom.xml
    index 4fd41c1ed..9165bd430 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -223,7 +223,7 @@
                     
                         com.diffplug.spotless
                         spotless-maven-plugin
    -                    2.44.1
    +                    2.44.2
                     
                 
             
    
    From 93bcef9c4c0aa6839b47238cdf3ae7e56637befb Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Fri, 17 Jan 2025 15:08:12 +0100
    Subject: [PATCH 269/870] Bump
     io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha
     (#1260)
    
    Bumps [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://github.com/open-telemetry/opentelemetry-java-instrumentation) from 2.11.0-alpha to 2.12.0-alpha.
    - [Release notes](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases)
    - [Changelog](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/open-telemetry/opentelemetry-java-instrumentation/commits)
    
    ---
    updated-dependencies:
    - dependency-name: io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha
      dependency-type: direct:production
      update-type: version-update:semver-minor
    ...
    
    Signed-off-by: dependabot[bot] 
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    ---
     pom.xml | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/pom.xml b/pom.xml
    index 9165bd430..b9fb611d1 100644
    --- a/pom.xml
    +++ b/pom.xml
    @@ -18,7 +18,7 @@
             UTF-8
             --module-name-need-to-be-overriden--
             5.11.4
    -        2.11.0-alpha
    +        2.12.0-alpha
             8
             0.70
             false
    
    From e05ca38dff91f9497b232837cfc97b84cd03ebc7 Mon Sep 17 00:00:00 2001
    From: Doug Hoard 
    Date: Fri, 17 Jan 2025 17:32:32 -0500
    Subject: [PATCH 270/870] Removed trailing whitespace (#1261)
    
    Signed-off-by: dhoard 
    ---
     RELEASING.md                                       | 2 +-
     docs/README.md                                     | 2 +-
     docs/content/getting-started/multi-target.md       | 4 ++--
     docs/content/getting-started/quickstart.md         | 4 ++--
     examples/example-exporter-servlet-tomcat/README.md | 2 +-
     5 files changed, 7 insertions(+), 7 deletions(-)
    
    diff --git a/RELEASING.md b/RELEASING.md
    index a58656474..eadbb8a76 100644
    --- a/RELEASING.md
    +++ b/RELEASING.md
    @@ -1,4 +1,4 @@
    -## Create a Release 
    +## Create a Release
     
     1. Go to https://github.com/prometheus/client_java/releases/new
     2. Click on "Choose a tag", enter the tag name (e.g. `v0.1.0`), and click "Create a new tag".
    diff --git a/docs/README.md b/docs/README.md
    index 2868196d5..294c9a622 100644
    --- a/docs/README.md
    +++ b/docs/README.md
    @@ -31,7 +31,7 @@ rm -r ./docs/static/api
     mv ./target/site/apidocs ./docs/static/api
     ```
     
    -Github pages are in the `/client_java/` folder, so we link to `/client_java/api` rather than `/api`. 
    +Github pages are in the `/client_java/` folder, so we link to `/client_java/api` rather than `/api`.
     To make JavaDoc work locally, create a link:
     
     ```
    diff --git a/docs/content/getting-started/multi-target.md b/docs/content/getting-started/multi-target.md
    index 6a1c0412c..93e37d9af 100644
    --- a/docs/content/getting-started/multi-target.md
    +++ b/docs/content/getting-started/multi-target.md
    @@ -103,7 +103,7 @@ Sample Prometheus scrape_config
           - source_labels: [__param_target]
             target_label: instance
           - target_label: __address__
    -        replacement: localhost:9401 
    +        replacement: localhost:9401
         static_configs:
           - targets: ["target1", "target2"]
     ```
    @@ -111,4 +111,4 @@ It's up to the specific MultiCollector implementation how to interpret the _targ
     It might be an explicit real target (i.e. via host name/ip address) or as an alias in some internal configuration.
     The latter is more suitable when the MultiCollector implementation is a proxy (see https://github.com/prometheus/snmp_exporter)
     In this case, invoking real target might require extra parameters (e.g. credentials) that might be complex to manage in Prometheus configuration
    -(not considering the case where the proxy might become an "open relay")
    \ No newline at end of file
    +(not considering the case where the proxy might become an "open relay")
    diff --git a/docs/content/getting-started/quickstart.md b/docs/content/getting-started/quickstart.md
    index 59acd0701..27b7c13f5 100644
    --- a/docs/content/getting-started/quickstart.md
    +++ b/docs/content/getting-started/quickstart.md
    @@ -47,9 +47,9 @@ There are alternative exporters as well, for example if you are using a Servlet
     
     {{< hint type=note >}}
     
    -If you do not use the protobuf exposition format, you can 
    +If you do not use the protobuf exposition format, you can
     [exclude](../../exporters/formats#exclude-protobuf-exposition-format)
    -it from the dependencies. 
    +it from the dependencies.
     
     {{< /hint >}}
     
    diff --git a/examples/example-exporter-servlet-tomcat/README.md b/examples/example-exporter-servlet-tomcat/README.md
    index 8d50c0c80..e67f9f56c 100644
    --- a/examples/example-exporter-servlet-tomcat/README.md
    +++ b/examples/example-exporter-servlet-tomcat/README.md
    @@ -64,7 +64,7 @@ The exporter servlet supports a `debug` URL parameter to quickly view other form
        ```shell
        ./prometheus --enable-feature=native-histograms --enable-feature=exemplar-storage
        ```
    -   
    +
     Verify that the `tomcat-servlet-example` target is up on [http://localhost:9090/targets](http://localhost:9090/targets).
     
     Prometheus is now scraping metrics in Protobuf format. If you type the name `request_duration_seconds` you will see a non-human-readable representation of the histogram including the native buckets:
    
    From ec06ab96ed207e565268ae66f825ab2590fdcefb Mon Sep 17 00:00:00 2001
    From: Jean Hominal 
    Date: Mon, 20 Jan 2025 12:55:17 +0100
    Subject: [PATCH 271/870] Caffeine instrumentation: add weighted size metric
     (#1251)
    
    * Change caffeine_cache_eviction_weight from Gauge to Counter
    
    Signed-off-by: Jean Hominal 
    
    * Add caffeine_cache_weighted_size gauge metric to caffeine-instrumentation
    
    Signed-off-by: Jean Hominal 
    
    * Add Builder pattern for caffeine CacheMetricsCollector
    
    Signed-off-by: Jean Hominal 
    
    * Add option collectEvictionWeightAsCounter to collect caffeine_cache_eviction_weight as an incremental counter
    
    Signed-off-by: Jean Hominal 
    
    * Add option collectWeightedSize to enable collection of caffeine_cache_weighted_size
    
    Signed-off-by: Jean Hominal 
    
    ---------
    
    Signed-off-by: Jean Hominal 
    ---
     .../caffeine/CacheMetricsCollector.java       | 102 ++++++++++-
     .../caffeine/CacheMetricsCollectorTest.java   | 162 ++++++++++++++++--
     2 files changed, 247 insertions(+), 17 deletions(-)
    
    diff --git a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java
    index c5c9fef3c..a1b8782a3 100644
    --- a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java
    +++ b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java
    @@ -3,6 +3,7 @@
     import com.github.benmanes.caffeine.cache.AsyncCache;
     import com.github.benmanes.caffeine.cache.Cache;
     import com.github.benmanes.caffeine.cache.LoadingCache;
    +import com.github.benmanes.caffeine.cache.Policy;
     import com.github.benmanes.caffeine.cache.stats.CacheStats;
     import io.prometheus.metrics.model.registry.MultiCollector;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
    @@ -14,8 +15,10 @@
     import java.util.Collections;
     import java.util.List;
     import java.util.Map;
    +import java.util.Optional;
     import java.util.concurrent.ConcurrentHashMap;
     import java.util.concurrent.ConcurrentMap;
    +import java.util.stream.Collectors;
     
     /**
      * Collect metrics from Caffeine's com.github.benmanes.caffeine.cache.Cache.
    @@ -25,7 +28,7 @@
      * 
    {@code
      * // Note that `recordStats()` is required to gather non-zero statistics
      * Cache cache = Caffeine.newBuilder().recordStats().build();
    - * CacheMetricsCollector cacheMetrics = new CacheMetricsCollector();
    + * CacheMetricsCollector cacheMetrics = CacheMetricsCollector.builder().build();
      * PrometheusRegistry.defaultRegistry.register(cacheMetrics);
      * cacheMetrics.addCache("mycache", cache);
      *
    @@ -63,6 +66,7 @@ public class CacheMetricsCollector implements MultiCollector {
       private static final String METRIC_NAME_CACHE_LOAD_FAILURE = "caffeine_cache_load_failure";
       private static final String METRIC_NAME_CACHE_LOADS = "caffeine_cache_loads";
       private static final String METRIC_NAME_CACHE_ESTIMATED_SIZE = "caffeine_cache_estimated_size";
    +  private static final String METRIC_NAME_CACHE_WEIGHTED_SIZE = "caffeine_cache_weighted_size";
       private static final String METRIC_NAME_CACHE_LOAD_DURATION_SECONDS =
           "caffeine_cache_load_duration_seconds";
     
    @@ -77,9 +81,38 @@ public class CacheMetricsCollector implements MultiCollector {
                   METRIC_NAME_CACHE_LOAD_FAILURE,
                   METRIC_NAME_CACHE_LOADS,
                   METRIC_NAME_CACHE_ESTIMATED_SIZE,
    +              METRIC_NAME_CACHE_WEIGHTED_SIZE,
                   METRIC_NAME_CACHE_LOAD_DURATION_SECONDS));
     
       protected final ConcurrentMap> children = new ConcurrentHashMap<>();
    +  private final boolean collectEvictionWeightAsCounter;
    +  private final boolean collectWeightedSize;
    +
    +  /**
    +   * Instantiates a {@link CacheMetricsCollector}, with the legacy parameters.
    +   *
    +   * 

    The use of this constructor is discouraged, in favor of a Builder pattern {@link #builder()} + * + *

    Note that the {@link #builder()} API has different default values than this deprecated + * constructor. + */ + @Deprecated + public CacheMetricsCollector() { + this(false, false); + } + + /** + * Instantiate a {@link CacheMetricsCollector} + * + * @param collectEvictionWeightAsCounter If true, {@code caffeine_cache_eviction_weight} will be + * observed as an incrementing counter instead of a gauge. + * @param collectWeightedSize If true, {@code caffeine_cache_weighted_size} will be observed. + */ + protected CacheMetricsCollector( + boolean collectEvictionWeightAsCounter, boolean collectWeightedSize) { + this.collectEvictionWeightAsCounter = collectEvictionWeightAsCounter; + this.collectWeightedSize = collectWeightedSize; + } /** * Add or replace the cache with the given name. @@ -146,10 +179,14 @@ public MetricSnapshots collect() { .name(METRIC_NAME_CACHE_EVICTION) .help("Cache eviction totals, doesn't include manually removed entries"); - final GaugeSnapshot.Builder cacheEvictionWeight = + final CounterSnapshot.Builder cacheEvictionWeight = + CounterSnapshot.builder() + .name(METRIC_NAME_CACHE_EVICTION_WEIGHT) + .help("Weight of evicted cache entries, doesn't include manually removed entries"); + final GaugeSnapshot.Builder cacheEvictionWeightLegacyGauge = GaugeSnapshot.builder() .name(METRIC_NAME_CACHE_EVICTION_WEIGHT) - .help("Cache eviction weight"); + .help("Weight of evicted cache entries, doesn't include manually removed entries"); final CounterSnapshot.Builder cacheLoadFailure = CounterSnapshot.builder().name(METRIC_NAME_CACHE_LOAD_FAILURE).help("Cache load failures"); @@ -162,6 +199,11 @@ public MetricSnapshots collect() { final GaugeSnapshot.Builder cacheSize = GaugeSnapshot.builder().name(METRIC_NAME_CACHE_ESTIMATED_SIZE).help("Estimated cache size"); + final GaugeSnapshot.Builder cacheWeightedSize = + GaugeSnapshot.builder() + .name(METRIC_NAME_CACHE_WEIGHTED_SIZE) + .help("Approximate accumulated weight of cache entries"); + final SummarySnapshot.Builder cacheLoadSummary = SummarySnapshot.builder() .name(METRIC_NAME_CACHE_LOAD_DURATION_SECONDS) @@ -175,6 +217,11 @@ public MetricSnapshots collect() { try { cacheEvictionWeight.dataPoint( + CounterSnapshot.CounterDataPointSnapshot.builder() + .labels(labels) + .value(stats.evictionWeight()) + .build()); + cacheEvictionWeightLegacyGauge.dataPoint( GaugeSnapshot.GaugeDataPointSnapshot.builder() .labels(labels) .value(stats.evictionWeight()) @@ -183,6 +230,17 @@ public MetricSnapshots collect() { // EvictionWeight metric is unavailable, newer version of Caffeine is needed. } + if (collectWeightedSize) { + final Optional> eviction = c.getValue().policy().eviction(); + if (eviction.isPresent() && eviction.get().weightedSize().isPresent()) { + cacheWeightedSize.dataPoint( + GaugeSnapshot.GaugeDataPointSnapshot.builder() + .labels(labels) + .value(eviction.get().weightedSize().getAsLong()) + .build()); + } + } + cacheHitTotal.dataPoint( CounterSnapshot.CounterDataPointSnapshot.builder() .labels(labels) @@ -235,12 +293,19 @@ public MetricSnapshots collect() { } } + if (collectWeightedSize) { + metricSnapshotsBuilder.metricSnapshot(cacheWeightedSize.build()); + } + return metricSnapshotsBuilder .metricSnapshot(cacheHitTotal.build()) .metricSnapshot(cacheMissTotal.build()) .metricSnapshot(cacheRequestsTotal.build()) .metricSnapshot(cacheEvictionTotal.build()) - .metricSnapshot(cacheEvictionWeight.build()) + .metricSnapshot( + collectEvictionWeightAsCounter + ? cacheEvictionWeight.build() + : cacheEvictionWeightLegacyGauge.build()) .metricSnapshot(cacheLoadFailure.build()) .metricSnapshot(cacheLoadTotal.build()) .metricSnapshot(cacheSize.build()) @@ -250,6 +315,35 @@ public MetricSnapshots collect() { @Override public List getPrometheusNames() { + if (!collectWeightedSize) { + return ALL_METRIC_NAMES.stream() + .filter(s -> !METRIC_NAME_CACHE_WEIGHTED_SIZE.equals(s)) + .collect(Collectors.toList()); + } return ALL_METRIC_NAMES; } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + + private boolean collectEvictionWeightAsCounter = true; + private boolean collectWeightedSize = true; + + public Builder collectEvictionWeightAsCounter(boolean collectEvictionWeightAsCounter) { + this.collectEvictionWeightAsCounter = collectEvictionWeightAsCounter; + return this; + } + + public Builder collectWeightedSize(boolean collectWeightedSize) { + this.collectWeightedSize = collectWeightedSize; + return this; + } + + public CacheMetricsCollector build() { + return new CacheMetricsCollector(collectEvictionWeightAsCounter, collectWeightedSize); + } + } } diff --git a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java index 4ffb1d794..ac5ec9e2a 100644 --- a/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java +++ b/prometheus-metrics-instrumentation-caffeine/src/test/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollectorTest.java @@ -13,6 +13,7 @@ import io.prometheus.metrics.model.registry.PrometheusRegistry; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.DataPointSnapshot; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot; import io.prometheus.metrics.model.snapshots.Labels; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import io.prometheus.metrics.model.snapshots.SummarySnapshot; @@ -22,17 +23,112 @@ import java.nio.charset.StandardCharsets; import java.util.List; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; @SuppressWarnings("CheckReturnValue") class CacheMetricsCollectorTest { + // This enum was added to simplify test parametrization on argument options. + public enum Options { + LEGACY(false, false), + COLLECT_EVICTION_WEIGHT_AS_COUNTER(true, false), + COLLECT_WEIGHTED_SIZE(false, true), + BUILDER_DEFAULT(true, true); + + private final boolean collectEvictionWeightAsCounter; + private final boolean collectWeightedSize; + + Options(boolean collectEvictionWeightAsCounter, boolean collectWeightedSize) { + this.collectEvictionWeightAsCounter = collectEvictionWeightAsCounter; + this.collectWeightedSize = collectWeightedSize; + } + } - @Test - public void cacheExposesMetricsForHitMissAndEviction() { + @ParameterizedTest + @EnumSource + public void cacheExposesMetricsForHitMissAndEviction(Options options) { // Run cleanup in same thread, to remove async behavior with evictions final Cache cache = Caffeine.newBuilder().maximumSize(2).recordStats().executor(Runnable::run).build(); - final CacheMetricsCollector collector = new CacheMetricsCollector(); + final CacheMetricsCollector collector = + CacheMetricsCollector.builder() + .collectEvictionWeightAsCounter(options.collectEvictionWeightAsCounter) + .collectWeightedSize(options.collectWeightedSize) + .build(); + collector.addCache("users", cache); + + final PrometheusRegistry registry = new PrometheusRegistry(); + registry.register(collector); + + cache.getIfPresent("user1"); + cache.getIfPresent("user1"); + cache.put("user1", "First User"); + cache.getIfPresent("user1"); + + // Add to cache to trigger eviction. + cache.put("user2", "Second User"); + cache.put("user3", "Third User"); + cache.put("user4", "Fourth User"); + + assertCounterMetric(registry, "caffeine_cache_hit", "users", 1.0); + assertCounterMetric(registry, "caffeine_cache_miss", "users", 2.0); + assertCounterMetric(registry, "caffeine_cache_requests", "users", 3.0); + assertCounterMetric(registry, "caffeine_cache_eviction", "users", 2.0); + String openMetricEvictionWeightExpectedText; + if (options.collectEvictionWeightAsCounter) { + assertCounterMetric(registry, "caffeine_cache_eviction_weight", "users", 2.0); + openMetricEvictionWeightExpectedText = + "# TYPE caffeine_cache_eviction_weight counter\n" + + "# HELP caffeine_cache_eviction_weight Weight of evicted cache entries, doesn't include manually removed entries\n" + + "caffeine_cache_eviction_weight_total{cache=\"users\"} 2.0\n"; + } else { + assertGaugeMetric(registry, "caffeine_cache_eviction_weight", "users", 2.0); + openMetricEvictionWeightExpectedText = + "# TYPE caffeine_cache_eviction_weight gauge\n" + + "# HELP caffeine_cache_eviction_weight Weight of evicted cache entries, doesn't include manually removed entries\n" + + "caffeine_cache_eviction_weight{cache=\"users\"} 2.0\n"; + } + + final String expected = + "# TYPE caffeine_cache_estimated_size gauge\n" + + "# HELP caffeine_cache_estimated_size Estimated cache size\n" + + "caffeine_cache_estimated_size{cache=\"users\"} 2.0\n" + + "# TYPE caffeine_cache_eviction counter\n" + + "# HELP caffeine_cache_eviction Cache eviction totals, doesn't include manually removed entries\n" + + "caffeine_cache_eviction_total{cache=\"users\"} 2.0\n" + + openMetricEvictionWeightExpectedText + + "# TYPE caffeine_cache_hit counter\n" + + "# HELP caffeine_cache_hit Cache hit totals\n" + + "caffeine_cache_hit_total{cache=\"users\"} 1.0\n" + + "# TYPE caffeine_cache_miss counter\n" + + "# HELP caffeine_cache_miss Cache miss totals\n" + + "caffeine_cache_miss_total{cache=\"users\"} 2.0\n" + + "# TYPE caffeine_cache_requests counter\n" + + "# HELP caffeine_cache_requests Cache request totals, hits + misses\n" + + "caffeine_cache_requests_total{cache=\"users\"} 3.0\n" + + "# EOF\n"; + + assertThat(convertToOpenMetricsFormat(registry)).isEqualTo(expected); + } + + @ParameterizedTest + @EnumSource + public void weightedCacheExposesMetricsForHitMissAndEvictionWeightedSize(Options options) { + // Run cleanup in same thread, to remove async behavior with evictions + final Cache cache = + Caffeine.newBuilder() + .weigher((String k, String v) -> k.length() + v.length()) + .maximumWeight(35) + .recordStats() + .executor(Runnable::run) + .build(); + + final CacheMetricsCollector collector = + CacheMetricsCollector.builder() + .collectEvictionWeightAsCounter(options.collectEvictionWeightAsCounter) + .collectWeightedSize(options.collectWeightedSize) + .build(); collector.addCache("users", cache); final PrometheusRegistry registry = new PrometheusRegistry(); @@ -52,6 +148,29 @@ public void cacheExposesMetricsForHitMissAndEviction() { assertCounterMetric(registry, "caffeine_cache_miss", "users", 2.0); assertCounterMetric(registry, "caffeine_cache_requests", "users", 3.0); assertCounterMetric(registry, "caffeine_cache_eviction", "users", 2.0); + String openMetricEvictionWeightExpectedText; + if (options.collectEvictionWeightAsCounter) { + assertCounterMetric(registry, "caffeine_cache_eviction_weight", "users", 31.0); + openMetricEvictionWeightExpectedText = + "# TYPE caffeine_cache_eviction_weight counter\n" + + "# HELP caffeine_cache_eviction_weight Weight of evicted cache entries, doesn't include manually removed entries\n" + + "caffeine_cache_eviction_weight_total{cache=\"users\"} 31.0\n"; + } else { + assertGaugeMetric(registry, "caffeine_cache_eviction_weight", "users", 31.0); + openMetricEvictionWeightExpectedText = + "# TYPE caffeine_cache_eviction_weight gauge\n" + + "# HELP caffeine_cache_eviction_weight Weight of evicted cache entries, doesn't include manually removed entries\n" + + "caffeine_cache_eviction_weight{cache=\"users\"} 31.0\n"; + } + String openMetricWeightedSizeExpectedText; + if (options.collectWeightedSize) { + openMetricWeightedSizeExpectedText = + "# TYPE caffeine_cache_weighted_size gauge\n" + + "# HELP caffeine_cache_weighted_size Approximate accumulated weight of cache entries\n" + + "caffeine_cache_weighted_size{cache=\"users\"} 31.0\n"; + } else { + openMetricWeightedSizeExpectedText = ""; + } final String expected = "# TYPE caffeine_cache_estimated_size gauge\n" @@ -60,9 +179,7 @@ public void cacheExposesMetricsForHitMissAndEviction() { + "# TYPE caffeine_cache_eviction counter\n" + "# HELP caffeine_cache_eviction Cache eviction totals, doesn't include manually removed entries\n" + "caffeine_cache_eviction_total{cache=\"users\"} 2.0\n" - + "# TYPE caffeine_cache_eviction_weight gauge\n" - + "# HELP caffeine_cache_eviction_weight Cache eviction weight\n" - + "caffeine_cache_eviction_weight{cache=\"users\"} 2.0\n" + + openMetricEvictionWeightExpectedText + "# TYPE caffeine_cache_hit counter\n" + "# HELP caffeine_cache_hit Cache hit totals\n" + "caffeine_cache_hit_total{cache=\"users\"} 1.0\n" @@ -72,6 +189,7 @@ public void cacheExposesMetricsForHitMissAndEviction() { + "# TYPE caffeine_cache_requests counter\n" + "# HELP caffeine_cache_requests Cache request totals, hits + misses\n" + "caffeine_cache_requests_total{cache=\"users\"} 3.0\n" + + openMetricWeightedSizeExpectedText + "# EOF\n"; assertThat(convertToOpenMetricsFormat(registry)).isEqualTo(expected); @@ -87,7 +205,7 @@ public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { .thenReturn("Third User"); final LoadingCache cache = Caffeine.newBuilder().recordStats().build(loader); - final CacheMetricsCollector collector = new CacheMetricsCollector(); + final CacheMetricsCollector collector = CacheMetricsCollector.builder().build(); collector.addCache("loadingusers", cache); @@ -117,9 +235,14 @@ public void loadingCacheExposesMetricsForLoadsAndExceptions() throws Exception { assertThat(loadDuration.getSum()).isGreaterThan(0); } - @Test - public void getPrometheusNamesHasSameSizeAsMetricSizeWhenScraping() { - final CacheMetricsCollector collector = new CacheMetricsCollector(); + @ParameterizedTest + @EnumSource + public void getPrometheusNamesHasSameSizeAsMetricSizeWhenScraping(Options options) { + final CacheMetricsCollector collector = + CacheMetricsCollector.builder() + .collectEvictionWeightAsCounter(options.collectEvictionWeightAsCounter) + .collectWeightedSize(options.collectWeightedSize) + .build(); final PrometheusRegistry registry = new PrometheusRegistry(); registry.register(collector); @@ -130,9 +253,14 @@ public void getPrometheusNamesHasSameSizeAsMetricSizeWhenScraping() { assertThat(prometheusNames).hasSize(metricSnapshots.size()); } - @Test - public void collectedMetricNamesAreKnownPrometheusNames() { - final CacheMetricsCollector collector = new CacheMetricsCollector(); + @ParameterizedTest + @EnumSource + public void collectedMetricNamesAreKnownPrometheusNames(Options options) { + final CacheMetricsCollector collector = + CacheMetricsCollector.builder() + .collectEvictionWeightAsCounter(options.collectEvictionWeightAsCounter) + .collectWeightedSize(options.collectWeightedSize) + .build(); final PrometheusRegistry registry = new PrometheusRegistry(); registry.register(collector); @@ -153,6 +281,14 @@ private void assertCounterMetric( assertThat(dataPointSnapshot.getValue()).isEqualTo(value); } + private void assertGaugeMetric( + PrometheusRegistry registry, String name, String cacheName, double value) { + final GaugeSnapshot.GaugeDataPointSnapshot dataPointSnapshot = + (GaugeSnapshot.GaugeDataPointSnapshot) getDataPointSnapshot(registry, name, cacheName); + + assertThat(dataPointSnapshot.getValue()).isEqualTo(value); + } + private DataPointSnapshot getDataPointSnapshot( PrometheusRegistry registry, String name, String cacheName) { final Labels labels = Labels.of(new String[] {"cache"}, new String[] {cacheName}); From 403a9891f259d7f8fb733463465d61dfc52523cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 09:05:39 -0500 Subject: [PATCH 272/870] Bump org.assertj:assertj-core from 3.27.2 to 3.27.3 (#1263) Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.2 to 3.27.3. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.2...assertj-build-3.27.3) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b9fb611d1..d85f3883c 100644 --- a/pom.xml +++ b/pom.xml @@ -122,7 +122,7 @@ org.assertj assertj-core - 3.27.2 + 3.27.3 test From 0ee705c68762190c4d3df6ae7b73ec2d25b08c67 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 09:05:57 -0500 Subject: [PATCH 273/870] Bump com.github.ben-manes.caffeine:caffeine from 3.1.8 to 3.2.0 (#1264) Bumps [com.github.ben-manes.caffeine:caffeine](https://github.com/ben-manes/caffeine) from 3.1.8 to 3.2.0. - [Release notes](https://github.com/ben-manes/caffeine/releases) - [Commits](https://github.com/ben-manes/caffeine/compare/v3.1.8...v3.2.0) --- updated-dependencies: - dependency-name: com.github.ben-manes.caffeine:caffeine dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- prometheus-metrics-instrumentation-caffeine/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-instrumentation-caffeine/pom.xml b/prometheus-metrics-instrumentation-caffeine/pom.xml index 0de05d99c..dd471254a 100644 --- a/prometheus-metrics-instrumentation-caffeine/pom.xml +++ b/prometheus-metrics-instrumentation-caffeine/pom.xml @@ -37,7 +37,7 @@ com.github.ben-manes.caffeine caffeine - 3.1.8 + 3.2.0 provided From f7681a4a93312b3092016261ad364750210f34b7 Mon Sep 17 00:00:00 2001 From: Jean Hominal Date: Tue, 21 Jan 2025 10:50:47 +0100 Subject: [PATCH 274/870] Add documentation pages for Caffeine and Guava cache instrumentation libraries (#1262) * Add documentation pages for Caffeine and Guava cache instrumentation libraries Signed-off-by: Jean Hominal * Update caffeine.md to take in account modifications from #1251 Signed-off-by: Jean Hominal --------- Signed-off-by: Jean Hominal --- docs/content/instrumentation/caffeine.md | 126 +++++++++++++++++++++++ docs/content/instrumentation/guava.md | 85 +++++++++++++++ 2 files changed, 211 insertions(+) create mode 100644 docs/content/instrumentation/caffeine.md create mode 100644 docs/content/instrumentation/guava.md diff --git a/docs/content/instrumentation/caffeine.md b/docs/content/instrumentation/caffeine.md new file mode 100644 index 000000000..dde7e561a --- /dev/null +++ b/docs/content/instrumentation/caffeine.md @@ -0,0 +1,126 @@ +--- +title: Caffeine Cache +weight: 1 +--- + +The Caffeine instrumentation module, added in version 1.3.2, translates observability data +provided by caffeine `Cache` objects into prometheus metrics. + +{{< tabs "uniqueid" >}} +{{< tab "Gradle" >}} +``` +implementation 'io.prometheus:prometheus-metrics-instrumentation-caffeine:1.3.2' +``` +{{< /tab >}} +{{< tab "Maven" >}} +```xml + + io.prometheus + prometheus-metrics-instrumentation-caffeine + 1.3.2 + +``` +{{< /tab >}} +{{< /tabs >}} + +In order to collect metrics: + + * A single `CacheMetricsCollector` instance must be registered with the registry; + * Multiple `CacheMetricsCollector` instances cannot be registered with the same registry; + * The `Cache` object must be instantiated with the `recordStats()` option, and then added to the + `CacheMetricsCollector` instance with a unique name, which will be used as the value of the + `cache` label on the exported metrics; + * If the `recordStats` option is not set, most metrics will only return zero values; + +```java +var cache = Caffeine.newBuilder().recordStats().build(); +var cacheMetrics = CacheMetricsCollector.builder().build(); +PrometheusRegistry.defaultRegistry.register(cacheMetrics); +cacheMetrics.addCache("mycache", cache); +``` + +{{< hint type=note >}} + +In version 1.3.5 and older of the caffeine instrumentation library, `CacheMetricsCollector.builder` +does not exist, i.e. a constructor call `new CacheMetricsCollector()` is the only option. + +{{< /hint >}} + +All example metrics on this page will use the `mycache` label value. + +Generic Cache Metrics +--------------------- + +For all cache instances, the following metrics will be available: + +``` +# TYPE caffeine_cache_hit counter +# HELP caffeine_cache_hit Cache hit totals +caffeine_cache_hit_total{cache="mycache"} 10.0 +# TYPE caffeine_cache_miss counter +# HELP caffeine_cache_miss Cache miss totals +caffeine_cache_miss_total{cache="mycache"} 3.0 +# TYPE caffeine_cache_requests counter +# HELP caffeine_cache_requests Cache request totals, hits + misses +caffeine_cache_requests_total{cache="mycache"} 13.0 +# TYPE caffeine_cache_eviction counter +# HELP caffeine_cache_eviction Cache eviction totals, doesn't include manually removed entries +caffeine_cache_eviction_total{cache="mycache"} 1.0 +# TYPE caffeine_cache_estimated_size +# HELP caffeine_cache_estimated_size Estimated cache size +caffeine_cache_estimated_size{cache="mycache"} 5.0 +``` + +Loading Cache Metrics +--------------------- + +If the cache is an instance of `LoadingCache`, i.e. it is built with a `loader` function that is +managed by the cache library, then metrics for observing load time and load failures become +available: + +``` +# TYPE caffeine_cache_load_failure counter +# HELP caffeine_cache_load_failure Cache load failures +caffeine_cache_load_failure_total{cache="mycache"} 10.0 +# TYPE caffeine_cache_loads counter +# HELP caffeine_cache_loads Cache loads: both success and failures +caffeine_cache_loads_total{cache="mycache"} 3.0 +# TYPE caffeine_cache_load_duration_seconds summary +# HELP caffeine_cache_load_duration_seconds Cache load duration: both success and failures +caffeine_cache_load_duration_seconds_count{cache="mycache"} 7.0 +caffeine_cache_load_duration_seconds_sum{cache="mycache"} 0.0034 +``` + +Weighted Cache Metrics +---------------------- + +Two metrics exist for observability specifically of caches that define a `weigher`: + +``` +# TYPE caffeine_cache_eviction_weight counter +# HELP caffeine_cache_eviction_weight Weight of evicted cache entries, doesn't include manually removed entries +caffeine_cache_eviction_weight_total{cache="mycache"} 5.0 +# TYPE caffeine_cache_weighted_size gauge +# HELP caffeine_cache_weighted_size Approximate accumulated weight of cache entries +caffeine_cache_weighted_size{cache="mycache"} 30.0 +``` + +{{< hint type=note >}} + +`caffeine_cache_weighted_size` is available only if the cache instance defines a `maximumWeight`. + +{{< /hint >}} + +Up to version 1.3.5 and older, the weighted metrics had a different behavior: + + * `caffeine_cache_weighted_size` was not implemented; + * `caffeine_cache_eviction_weight` was exposed as a `gauge`; + +It is possible to restore the behavior of version 1.3.5 and older, by either: + + * Using the deprecated `new CacheMetricsCollector()` constructor; + * Using the flags provided on the `CacheMetricsCollector.Builder` object to opt-out of each of the + elements of the post-1.3.5 behavior: + * `builder.collectWeightedSize(false)` will disable collection of `caffeine_cache_weighted_size`; + * `builder.collectEvictionWeightAsCounter(false)` will expose `caffeine_cache_eviction_weight` as + a `gauge` metric; diff --git a/docs/content/instrumentation/guava.md b/docs/content/instrumentation/guava.md new file mode 100644 index 000000000..33cadae97 --- /dev/null +++ b/docs/content/instrumentation/guava.md @@ -0,0 +1,85 @@ +--- +title: Guava Cache +weight: 1 +--- + +The Guava instrumentation module, added in version 1.3.2, translates observability data +provided by Guava `Cache` objects into prometheus metrics. + +{{< tabs "uniqueid" >}} +{{< tab "Gradle" >}} +``` +implementation 'io.prometheus:prometheus-metrics-instrumentation-guava:1.3.2' +``` +{{< /tab >}} +{{< tab "Maven" >}} +```xml + + io.prometheus + prometheus-metrics-instrumentation-guava + 1.3.2 + +``` +{{< /tab >}} +{{< /tabs >}} + +In order to collect metrics: + +* A single `CacheMetricsCollector` instance must be registered with the registry; + * Multiple `CacheMetricsCollector` instances cannot be registered with the same registry; +* The `Cache` object must be instantiated with the `recordStats()` option, and then added to the + `CacheMetricsCollector` instance with a unique name, which will be used as the value of the + `cache` label on the exported metrics; + * If the `recordStats` option is not set, most metrics will only return zero values; + +```java +var cache = CacheBuilder.newBuilder().recordStats().build(); +var cacheMetrics = new CacheMetricsCollector(); +PrometheusRegistry.defaultRegistry.register(cacheMetrics); +cacheMetrics.addCache("mycache", cache); +``` + +All example metrics on this page will use the `mycache` label value. + +Generic Cache Metrics +--------------------- + +For all cache instances, the following metrics will be available: + +``` +# TYPE guava_cache_hit counter +# HELP guava_cache_hit Cache hit totals +guava_cache_hit_total{cache="mycache"} 10.0 +# TYPE guava_cache_miss counter +# HELP guava_cache_miss Cache miss totals +guava_cache_miss_total{cache="mycache"} 3.0 +# TYPE guava_cache_requests counter +# HELP guava_cache_requests Cache request totals +guava_cache_requests_total{cache="mycache"} 13.0 +# TYPE guava_cache_eviction counter +# HELP guava_cache_eviction Cache eviction totals, doesn't include manually removed entries +guava_cache_eviction_total{cache="mycache"} 1.0 +# TYPE guava_cache_size +# HELP guava_cache_size Cache size +guava_cache_size{cache="mycache"} 5.0 +``` + +Loading Cache Metrics +--------------------- + +If the cache is an instance of `LoadingCache`, i.e. it is built with a `loader` function that is +managed by the cache library, then metrics for observing load time and load failures become +available: + +``` +# TYPE guava_cache_load_failure counter +# HELP guava_cache_load_failure Cache load failures +guava_cache_load_failure_total{cache="mycache"} 10.0 +# TYPE guava_cache_loads counter +# HELP guava_cache_loads Cache loads: both success and failures +guava_cache_loads_total{cache="mycache"} 3.0 +# TYPE guava_cache_load_duration_seconds summary +# HELP guava_cache_load_duration_seconds Cache load duration: both success and failures +guava_cache_load_duration_seconds_count{cache="mycache"} 7.0 +guava_cache_load_duration_seconds_sum{cache="mycache"} 0.0034 +``` From 31c7b6b80e68004c9fc1f985def46fa3f3be3f69 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 15:18:10 +0100 Subject: [PATCH 275/870] Bump org.springframework.boot:spring-boot-starter-parent from 3.4.1 to 3.4.2 (#1267) Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.1 to 3.4.2.

    Release notes

    Sourced from org.springframework.boot:spring-boot-starter-parent's releases.

    v3.4.2

    :lady_beetle: Bug Fixes

    • Property metadata for "logging.structured.json.customizer" has incorrect type #43916
    • GraylogExtendedLogFormatProperties throws NullPointerException when only 'logging.structured.gelf.host' is specified #43863
    • Structured logging properties have no effect in a native image #43862
    • Docker Compose support for ClickHouse does not allow an empty password when ALLOW_EMPTY_PASSWORD=yes #43790
    • docker compose ps now fails due to unknown --orphans flag with 2.23 or earlier #43717
    • Build info timestamp is truncated to seconds #43617
    • FileWatcher used for SSL reload does not support symlinks #43604
    • BindableRuntimeHintsRegistrar should handle TypeNotPresentException #43600
    • CapturedOutput is empty when using Log4J2 StatusLogger #43578
    • Spring Boot 3.4 is not compatible with Gson 2.10 #43442
    • NoClassDefFoundError when using JUnit to test a Gradle 7.6.x app that depends on spring-boot-actuator-autoconfigure but not on org.junit.platform:junit-platform-launcher #43340

    :notebook_with_decorative_cover: Documentation

    • Document that the @ConfigurationProperties annotation processor cannot generate description and defaultValue metadata for external types #43929
    • Fix description of management.metrics.graphql.autotime.enabled #43905
    • Document 'base64:' prefix support #43835
    • Document handling of @Fallback beans in ConditionalOnSingleCandidate's javadoc #43826
    • Javadoc of DataSourceBuilder does not reference all supported types #43732
    • Update OpenTelemetry section in Supported Monitoring Systems to refer to OTLP instead #43729
    • Consistently document the minimum supported versions of Gradle #43725
    • Document that system libraries are a reason to customize the builder and switch away from builder-jammy-java-tiny #43716
    • Links to the Javadoc of Jakarta Messaging are invalid #43662
    • Paragraph HTML tags are rendered as-is in Maven Plugin reference documentation #43623
    • Javadoc link for jakarta.xml.bind is invalid #43607
    • Documentation still has references to 'layertools' #43605
    • Javadoc of ConstructorBinding should not use markdown formatting #43599
    • Managed Dependency Coordinates lists Spock and OkHttp dependencies that are not managed #43584

    :hammer: Dependency Upgrades

    • Upgrade to ActiveMQ 6.1.5 #43791
    • Upgrade to Commons Codec 1.17.2 #43720
    • Upgrade to Couchbase Client 3.7.7 #43843
    • Upgrade to FreeMarker 2.3.34 #43721
    • Upgrade to Hibernate 6.6.5.Final #43910
    • Upgrade to HttpCore5 5.3.2 #43792
    • Upgrade to Infinispan 15.0.12.Final #43911
    • Upgrade to Jersey 3.1.10 #43793
    • Upgrade to jOOQ 3.19.18 #43844
    • Upgrade to Lettuce 6.4.2.RELEASE #43609
    • Upgrade to Logback 1.5.16 #43715
    • Upgrade to Micrometer 1.14.3 #43745
    • Upgrade to Micrometer Tracing 1.4.2 #43746
    • Upgrade to Netty 4.1.117.Final #43845
    • Upgrade to Postgresql 42.7.5 #43846
    • Upgrade to Pulsar 3.3.4 #43912

    ... (truncated)

    Commits
    • f775945 Release v3.4.2
    • 068b960 Merge branch '3.3.x' into 3.4.x
    • 34c8353 Next development version (v3.3.9-SNAPSHOT)
    • f184e98 Merge branch '3.3.x' into 3.4.x
    • 390963f Document when defaultValue and description cannot be extracted
    • ef82719 Fix memory comparison in ProcessInfoTests
    • 1e35a0b Correct the type of logging.structured.json.customizer
    • 24e40e8 Upgrade to Spring Pulsar 1.2.2
    • 30dd62a Merge branch '3.3.x' into 3.4.x
    • a3eaafb Upgrade to Spring Pulsar 1.1.8
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.springframework.boot:spring-boot-starter-parent&package-manager=maven&previous-version=3.4.1&new-version=3.4.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 3469e621f..d7e39b25f 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -7,7 +7,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.1 + 3.4.2 From 07e66ec0bc93f6f9cf178a51ef0cd391b7ee10ca Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 30 Jan 2025 14:09:53 +0100 Subject: [PATCH 276/870] bom should not include guava - it was only for internal code reuse (#1269) fixes https://github.com/prometheus/client_java/issues/1268 Signed-off-by: Gregor Zeitlinger --- pom.xml | 12 ++---------- prometheus-metrics-instrumentation-guava/pom.xml | 1 + 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index d85f3883c..43dba94e8 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,7 @@ UTF-8 --module-name-need-to-be-overriden-- + 33.4.0-jre 5.11.4 2.12.0-alpha 8 @@ -82,16 +83,6 @@ prometheus-metrics-simpleclient-bridge - - - - com.google.guava - guava - 33.4.0-jre - - - - com.google.code.findbugs @@ -128,6 +119,7 @@ com.google.guava guava + ${guava.version} test diff --git a/prometheus-metrics-instrumentation-guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml index 08ea80411..06393868d 100644 --- a/prometheus-metrics-instrumentation-guava/pom.xml +++ b/prometheus-metrics-instrumentation-guava/pom.xml @@ -37,6 +37,7 @@ com.google.guava guava + ${guava.version} provided From 49985ddf6b91d48323baa86b531d86eaa2cab4f2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:58:17 +0100 Subject: [PATCH 277/870] Bump org.wiremock:wiremock from 3.10.0 to 3.11.0 (#1270) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.10.0 to 3.11.0.
    Release notes

    Sourced from org.wiremock:wiremock's releases.

    3.11.0

    🚀 New Features

    🐞 Bug fixes

    📦 Dependency updates

    ✍ Other changes

    Commits
    • dd8e739 Fixed test broken by suppression of HTTPS upgrade by the Apache HTTP Client
    • a7d9ac8 Bumped minor version
    • bd17065 Merge pull request #2918 from ianprime0509/xml-default-instance
    • 63a3a12 Update after-pattern.yaml to fix typo (#2949)
    • 437e3ec Disable problematic protocol update for httpclient 5.4 (#2951)
    • c3f3319 Bump jetty 12 version to 12.0.16 (#2947)
    • 9ccb1c8 improve performance of EqualToXmlPattern. (#2944)
    • f913265 Make EqualToXmlPattern namespace aware by default. (#2945)
    • 6217b77 Merge pull request #2943 from Ashish-CodeJourney/master
    • afe7de8 Merge pull request #1 from Ashish-CodeJourney/Ashish-CodeJourney-patch-1
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.wiremock:wiremock&package-manager=maven&previous-version=3.10.0&new-version=3.11.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 5145d1504..8a5a71988 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -73,7 +73,7 @@ org.wiremock wiremock - 3.10.0 + 3.11.0 test From 5e93f4b2af0321061865bad1f39f531f3d19bd0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 09:12:34 -0500 Subject: [PATCH 278/870] Bump org.wiremock:wiremock from 3.11.0 to 3.12.0 (#1272) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.11.0 to 3.12.0.
    Release notes

    Sourced from org.wiremock:wiremock's releases.

    3.12.0

    🚀 New Features

    📦 Dependency updates

    ✍ Other changes

    Commits
    • f208518 bump minor version to 3.12.0
    • ec2e9fa Merge pull request #2962 from wiremock/dependabot/gradle/net.minidev-json-sma...
    • 81a2d8c Bump net.minidev:json-smart from 2.5.1 to 2.5.2
    • ea72722 Support optional removal of null-valued attributes in jsonMerge helper (#2957)
    • 5c220de feat: add namespace parameter to equalToXml. (#2954)
    • c31c9b2 Merge pull request #2950 from wiremock/dependabot/gradle/me.champeau.jmh-0.7.3
    • 658d13f Bump me.champeau.jmh from 0.7.2 to 0.7.3
    • 1859573 Merge pull request #2955 from wiremock/drop-spotless-version
    • d0caac8 Drop to the version of spotless where we didn't have any issues
    • 32a0c00 Merge pull request #2952 from wiremock/dependabot/gradle/org.apache.httpcompo...
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.wiremock:wiremock&package-manager=maven&previous-version=3.11.0&new-version=3.12.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 8a5a71988..fb1561478 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -73,7 +73,7 @@ org.wiremock wiremock - 3.11.0 + 3.12.0 test From 104b3ee0c5a874b3cb7c82039e6e94f619215520 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 17:43:20 +0100 Subject: [PATCH 279/870] Bump io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha from 2.12.0-alpha to 2.13.0-alpha (#1275) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://github.com/open-telemetry/opentelemetry-java-instrumentation) from 2.12.0-alpha to 2.13.0-alpha.
    Release notes

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's releases.

    Version 2.12.0

    This release targets the OpenTelemetry SDK 1.46.0.

    Note that many artifacts have the -alpha suffix attached to their version number, reflecting that they are still alpha quality and will continue to have breaking changes. Please see the VERSIONING.md for more details.

    Migration notes

    • Some Java agent instrumentation suppression keys have been renamed to match their module names: - elasticsearch-rest-6.0 --> elasticsearch-rest-6.4 - internal-application-logging --> internal-application-logger - javalin-5 -> javalin-5.0 - pulsar-2.8.0 -> pulsar-2.8
    • In preparation for stabilizing HTTP library instrumentation soon: - setCaptured*Headers(List) methods in *TelemetryBuilder classes were changed to setCaptured*Headers(Collection) (#12901) - setKnownMethods(Set) methods in *TelemetryBuilder classes were changed to setKnownMethods(Collection) (#12902)

    📈 Enhancements

    • Support ExtendedTextMapGetter in gRPC instrumentation (#13011)
    • Add database client metrics in DynamoDB instrumentation (#13033)
    • Propagate context into async http client CompletableFuture callbacks (#13041)
    • Exclude spring routing data source from Spring Starter instrumentation (#13054)
    • Instrument jdbc batch queries (#12797)

    🛠️ Bug fixes

    • Fix incorrect dubbo trace caused by using rpcContext.isProviderSide() (#12930)
    • Fix ClickHouse query failing with syntax error (#13020)
    • Fix instrumentation module not loading silently when duplicate helper classnames are detected (#13005)
    • Fix compatibility problem due to DubboHeadersGetter#keys in Dubbo 2.7.6 and 2.7.7 (#12982)
    • Fix appender install for async Logback appenders (#13047)

    🙇 Thank you

    This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:

    @​AlbumenJ @​annettejanewilson @​ataraxis @​cleverchuk @​FlorianBruckner @​jamesmoessis @​jaydeluca @​jeanbisutti @​johnbley @​JonasKunz @​laurit @​markAtAthena @​rghugikar @​shalk @​steverao @​SylvainJuge @​trask @​xiepuhuan @​zeitlinger

    Changelog

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's changelog.

    Changelog

    Unreleased

    Version 2.13.0 (2025-02-17)

    Migration notes

    • io.opentelemetry.instrumentation.api.incubator.semconv.util.SpanNames has been deprecated, replaced by the stable io.opentelemetry.instrumentation.api.semconv.util.SpanNames
    • In preparation for stabilizing HTTP library instrumentation, the classes and methods that were deprecated in the prior two releases have now been removed (#13135, #13150)
    • Deprecated Dubbo instrumentation method was removed (#13076)

    🌟 New javaagent instrumentation

    • jdk.httpserver instrumentation (#13243)

    🌟 New library instrumentation

    • jdk.httpserver instrumentation (#13243)

    📈 Enhancements

    • Add database client metrics to Lettuce instrumentation (#13032)
    • Stabilize io.opentelemetry.instrumentation.api.semconv.util.SpanNames (#12487)
    • Implement ExtendedTextMapGetter in http server instrumentations (#13053)
    • Implement ExtendedTextMapGetter in kafka-clients instrumentation (#13068)
    • Scrub system property secrets from process resource attribute values (#13225)
    • Add database client metrics to AWS SDK 2.x DynamoDB instrumentation (#13283)
    • Add runtime metrics to Spring boot starter (#13173)

    🛠️ Bug fixes

    • Fix akka shutdown hanging (#13073)
    • Fix MalformedInputException on z/OS (#13042)

    ... (truncated)

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha&package-manager=maven&previous-version=2.12.0-alpha&new-version=2.13.0-alpha)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 43dba94e8..1ec1fb04b 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ --module-name-need-to-be-overriden-- 33.4.0-jre 5.11.4 - 2.12.0-alpha + 2.13.0-alpha 8 0.70 false From 60dc69d26e2acbc2235fb3e68efb472ae157cd7b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 17:43:44 +0100 Subject: [PATCH 280/870] Bump org.apache.tomcat.embed:tomcat-embed-core from 11.0.2 to 11.0.4 (#1274) Bumps org.apache.tomcat.embed:tomcat-embed-core from 11.0.2 to 11.0.4. [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.tomcat.embed:tomcat-embed-core&package-manager=maven&previous-version=11.0.2&new-version=11.0.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 86f08018c..2530297a8 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.2 + 11.0.4
    diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 0b0122cdb..7d0f49aff 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.2 + 11.0.4 diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 39b505f30..3632748fb 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.2 + 11.0.4 diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 2af2a5928..f320764a1 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -33,7 +33,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.2 + 11.0.4 From 39a83b96556ee48a5a7271b43be46cbafa80aeca Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 18 Feb 2025 12:21:59 +0100 Subject: [PATCH 281/870] increase coverage (#1276) Signed-off-by: Gregor Zeitlinger --- prometheus-metrics-exposition-formats/pom.xml | 8 +++++ .../ProtobufExpositionFormatsTest.java | 19 ++++++++++ .../pom.xml | 17 +++++++++ .../ExpositionFormatWriterTest.java | 21 +++++++++++ .../ExpositionFormatsTest.java | 10 +----- .../PrometheusProtobufWriterTest.java | 36 +++++++++++++++++++ 6 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java create mode 100644 prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriterTest.java rename {prometheus-metrics-exposition-formats => prometheus-metrics-exposition-textformats}/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java (99%) create mode 100644 prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriterTest.java diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 83fb7e3c0..90e118072 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -33,6 +33,14 @@ protobuf-java ${protobuf-java.version} + + + io.prometheus + prometheus-metrics-exposition-textformats + ${project.version} + test + test-jar + diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java new file mode 100644 index 000000000..edb28ab67 --- /dev/null +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java @@ -0,0 +1,19 @@ +package io.prometheus.metrics.expositionformats; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics; +import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; +import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; +import io.prometheus.metrics.model.snapshots.MetricSnapshot; + +class ProtobufExpositionFormatsTest extends ExpositionFormatsTest { + + @Override + protected void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { + PrometheusProtobufWriterImpl writer = new PrometheusProtobufWriterImpl(); + Metrics.MetricFamily protobufData = writer.convert(snapshot); + String actual = ProtobufUtil.shortDebugString(protobufData); + assertThat(actual).isEqualTo(expected); + } +} diff --git a/prometheus-metrics-exposition-textformats/pom.xml b/prometheus-metrics-exposition-textformats/pom.xml index 6a38dd67b..13ab9e5e7 100644 --- a/prometheus-metrics-exposition-textformats/pom.xml +++ b/prometheus-metrics-exposition-textformats/pom.xml @@ -19,6 +19,7 @@ io.prometheus.writer.text + 0.50 @@ -33,4 +34,20 @@ ${project.version} + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + diff --git a/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriterTest.java b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriterTest.java new file mode 100644 index 000000000..7fae4a2fb --- /dev/null +++ b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriterTest.java @@ -0,0 +1,21 @@ +package io.prometheus.metrics.expositionformats; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import org.junit.jupiter.api.Test; + +class ExpositionFormatWriterTest { + + private final ExpositionFormatWriter writer = new OpenMetricsTextFormatWriter(false, false); + + @Test + void toDebugString() { + assertThat(writer.toDebugString(new MetricSnapshots())).isEqualTo("# EOF\n"); + } + + @Test + void isAvailable() { + assertThat(writer.isAvailable()).isTrue(); + } +} diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java similarity index 99% rename from prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java rename to prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index 4c4ae3059..46f8faac9 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -2,9 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics; -import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; -import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; @@ -2659,10 +2656,5 @@ private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot assertThat(out).hasToString(expected); } - private void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) { - PrometheusProtobufWriterImpl writer = new PrometheusProtobufWriterImpl(); - Metrics.MetricFamily protobufData = writer.convert(snapshot); - String actual = ProtobufUtil.shortDebugString(protobufData); - assertThat(actual).isEqualTo(expected); - } + protected void assertPrometheusProtobuf(String expected, MetricSnapshot snapshot) {} } diff --git a/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriterTest.java b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriterTest.java new file mode 100644 index 000000000..814154325 --- /dev/null +++ b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriterTest.java @@ -0,0 +1,36 @@ +package io.prometheus.metrics.expositionformats; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; + +import org.junit.jupiter.api.Test; + +class PrometheusProtobufWriterTest { + + private final PrometheusProtobufWriter writer = new PrometheusProtobufWriter(); + + @Test + void accepts() { + assertThat(writer.accepts(null)).isFalse(); + } + + @Test + void getContentType() { + assertThat(writer.getContentType()) + .isEqualTo( + "application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; " + + "encoding=delimited"); + } + + @Test + void write() { + assertThatCode(() -> writer.write(null, null)) + .isInstanceOf(UnsupportedOperationException.class); + } + + @Test + void toDebugString() { + assertThatCode(() -> writer.toDebugString(null)) + .isInstanceOf(UnsupportedOperationException.class); + } +} From 7016bf7c5749e806ef91a918fdb294d394b83a16 Mon Sep 17 00:00:00 2001 From: Philippe Marschall Date: Tue, 18 Feb 2025 14:56:32 +0100 Subject: [PATCH 282/870] Use bulk string writes for text formats (#1273) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Further optimize `TextFormatUtil#writeEscapedLabelValue`. We're seeing `TextFormatUtil#writeEscapedLabelValue` show up in our production traces due to the single `char` writes to `OutputStreamWriter`. We're using `OpenMetricsTextFormatWriter`. #1241 and #1248 should take care of most of these issues but there still remains some optimization potential left. `BufferedWriter#write(int)` has some minimal overhead in terms of locking. If we assume that rarely any characters need to be escaped and instead optimize to write as large of a part of the String as possible in one method call. Before --------- ``` Benchmark Mode Cnt Score Error Units TextFormatUtilBenchmark.openMetricsWriteToByteArray thrpt 25 438485.372 ± 4270.355 ops/s TextFormatUtilBenchmark.openMetricsWriteToNull thrpt 25 440105.281 ± 2891.572 ops/s TextFormatUtilBenchmark.prometheusWriteToByteArray thrpt 25 467213.001 ± 878.780 ops/s TextFormatUtilBenchmark.prometheusWriteToNull thrpt 25 472931.759 ± 976.028 ops/s ``` After ------- ``` Benchmark Mode Cnt Score Error Units TextFormatUtilBenchmark.openMetricsWriteToByteArray thrpt 25 462852.243 ± 5071.696 ops/s TextFormatUtilBenchmark.openMetricsWriteToNull thrpt 25 469910.681 ± 1670.430 ops/s TextFormatUtilBenchmark.prometheusWriteToByteArray thrpt 25 482362.506 ± 2051.684 ops/s TextFormatUtilBenchmark.prometheusWriteToNull thrpt 25 487707.557 ± 3344.881 ops/s ``` About a 5% to 6% gain for `OpenMetricsTextFormatWriter` and around 3% for `PrometheusTextFormatWriter`. Note that this benchmark is actually for `OpenMetricsTextFormatWriter` and `PrometheusTextFormatWriter` since `TextFormatUtil` is not public and can therefore not be benchmarked directly. The relative gains in `#writeEscapedLabelValue` are higher because the benchmark runs the full text format writers. I also added a test for `TextFormatUtil#writeEscapedLabelValue` since the code is now more complicated. --------- Signed-off-by: Philippe Marschall Co-authored-by: Doug Hoard --- benchmarks/pom.xml | 15 +-- .../benchmarks/TextFormatUtilBenchmark.java | 122 ++++++++++++++++++ .../expositionformats/TextFormatUtil.java | 46 ++++++- .../expositionformats/TextFormatUtilTest.java | 24 ++++ 4 files changed, 189 insertions(+), 18 deletions(-) create mode 100644 benchmarks/src/main/java/io/prometheus/metrics/benchmarks/TextFormatUtilBenchmark.java create mode 100644 prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/TextFormatUtilTest.java diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index de53b2edd..98d084787 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -42,20 +42,13 @@ ${jmh.version} - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} - - io.prometheus - prometheus-metrics-core + prometheus-metrics-exposition-textformats ${project.version} diff --git a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/TextFormatUtilBenchmark.java b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/TextFormatUtilBenchmark.java new file mode 100644 index 000000000..03dcd0d07 --- /dev/null +++ b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/TextFormatUtilBenchmark.java @@ -0,0 +1,122 @@ +package io.prometheus.metrics.benchmarks; + +import io.prometheus.metrics.expositionformats.ExpositionFormatWriter; +import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; +import io.prometheus.metrics.expositionformats.PrometheusTextFormatWriter; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot; +import io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot; +import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.model.snapshots.MetricSnapshot; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import io.prometheus.metrics.model.snapshots.SummarySnapshot; +import io.prometheus.metrics.model.snapshots.SummarySnapshot.SummaryDataPointSnapshot; +import io.prometheus.metrics.model.snapshots.Unit; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; + +public class TextFormatUtilBenchmark { + + private static final MetricSnapshots SNAPSHOTS; + + static { + MetricSnapshot gaugeSnapshot = + GaugeSnapshot.builder() + .name("gauge_snapshot_name") + .dataPoint( + GaugeDataPointSnapshot.builder() + .labels(Labels.of("name", "value")) + .scrapeTimestampMillis(1000L) + .value(123.45d) + .build()) + .build(); + + MetricSnapshot summaryDataPointSnapshot = + SummarySnapshot.builder() + .name("summary_snapshot_name_bytes") + .dataPoint( + SummaryDataPointSnapshot.builder() + .count(5) + .labels(Labels.of("name", "value")) + .sum(123456d) + .build()) + .unit(Unit.BYTES) + .build(); + + SNAPSHOTS = MetricSnapshots.of(gaugeSnapshot, summaryDataPointSnapshot); + } + + private static final ExpositionFormatWriter OPEN_METRICS_TEXT_FORMAT_WRITER = + new OpenMetricsTextFormatWriter(false, false); + private static final ExpositionFormatWriter PROMETHEUS_TEXT_FORMAT_WRITER = + new PrometheusTextFormatWriter(false); + + @State(Scope.Benchmark) + public static class WriterState { + + final ByteArrayOutputStream byteArrayOutputStream; + + public WriterState() { + this.byteArrayOutputStream = new ByteArrayOutputStream(); + } + } + + @Benchmark + public OutputStream openMetricsWriteToByteArray(WriterState writerState) throws IOException { + // avoid growing the array + ByteArrayOutputStream byteArrayOutputStream = writerState.byteArrayOutputStream; + byteArrayOutputStream.reset(); + OPEN_METRICS_TEXT_FORMAT_WRITER.write(byteArrayOutputStream, SNAPSHOTS); + return byteArrayOutputStream; + } + + @Benchmark + public OutputStream openMetricsWriteToNull() throws IOException { + OutputStream nullOutputStream = NullOutputStream.INSTANCE; + OPEN_METRICS_TEXT_FORMAT_WRITER.write(nullOutputStream, SNAPSHOTS); + return nullOutputStream; + } + + @Benchmark + public OutputStream prometheusWriteToByteArray(WriterState writerState) throws IOException { + // avoid growing the array + ByteArrayOutputStream byteArrayOutputStream = writerState.byteArrayOutputStream; + byteArrayOutputStream.reset(); + PROMETHEUS_TEXT_FORMAT_WRITER.write(byteArrayOutputStream, SNAPSHOTS); + return byteArrayOutputStream; + } + + @Benchmark + public OutputStream prometheusWriteToNull() throws IOException { + OutputStream nullOutputStream = NullOutputStream.INSTANCE; + PROMETHEUS_TEXT_FORMAT_WRITER.write(nullOutputStream, SNAPSHOTS); + return nullOutputStream; + } + + static final class NullOutputStream extends OutputStream { + + static final OutputStream INSTANCE = new NullOutputStream(); + + private NullOutputStream() { + super(); + } + + @Override + public void write(int b) {} + + @Override + public void write(byte[] b) {} + + @Override + public void write(byte[] b, int off, int len) {} + + @Override + public void flush() {} + + @Override + public void close() {} + } +} diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java index e48f545c5..dffa8ddef 100644 --- a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java @@ -35,21 +35,53 @@ static void writeTimestamp(Writer writer, long timestampMs) throws IOException { } static void writeEscapedLabelValue(Writer writer, String s) throws IOException { - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); + // optimize for the common case where no escaping is needed + int start = 0; + // #indexOf is a vectorized intrinsic + int backslashIndex = s.indexOf('\\', start); + int quoteIndex = s.indexOf('\"', start); + int newlineIndex = s.indexOf('\n', start); + + int allEscapesIndex = backslashIndex & quoteIndex & newlineIndex; + while (allEscapesIndex != -1) { + int escapeStart = Integer.MAX_VALUE; + if (backslashIndex != -1) { + escapeStart = backslashIndex; + } + if (quoteIndex != -1) { + escapeStart = Math.min(escapeStart, quoteIndex); + } + if (newlineIndex != -1) { + escapeStart = Math.min(escapeStart, newlineIndex); + } + + // bulk write up to the first character that needs to be escaped + if (escapeStart > start) { + writer.write(s, start, escapeStart - start); + } + char c = s.charAt(escapeStart); + start = escapeStart + 1; switch (c) { case '\\': - writer.append("\\\\"); + writer.write("\\\\"); + backslashIndex = s.indexOf('\\', start); break; case '\"': - writer.append("\\\""); + writer.write("\\\""); + quoteIndex = s.indexOf('\"', start); break; case '\n': - writer.append("\\n"); + writer.write("\\n"); + newlineIndex = s.indexOf('\n', start); break; - default: - writer.append(c); } + + allEscapesIndex = backslashIndex & quoteIndex & newlineIndex; + } + // up until the end nothing needs to be escaped anymore + int remaining = s.length() - start; + if (remaining > 0) { + writer.write(s, start, remaining); } } diff --git a/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/TextFormatUtilTest.java b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/TextFormatUtilTest.java new file mode 100644 index 000000000..dece52abb --- /dev/null +++ b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/TextFormatUtilTest.java @@ -0,0 +1,24 @@ +package io.prometheus.metrics.expositionformats; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.io.StringWriter; +import org.junit.jupiter.api.Test; + +class TextFormatUtilTest { + + @Test + void writeEscapedLabelValue() throws IOException { + assertEquals("aa\\\\bb\\\"cc\\ndd\\nee\\\\ff\\\"gg", escape("aa\\bb\"cc\ndd\nee\\ff\"gg")); + assertEquals("\\\\", escape("\\")); + assertEquals("\\\\\\\\", escape("\\\\")); + assertEquals("text", escape("text")); + } + + private static String escape(String s) throws IOException { + StringWriter writer = new StringWriter(); + TextFormatUtil.writeEscapedLabelValue(writer, s); + return writer.toString(); + } +} From 96f5a4086d854f63ec454b2f86007057b634a706 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 19 Feb 2025 12:33:49 +0100 Subject: [PATCH 283/870] fix gh pages (#1278) Signed-off-by: Gregor Zeitlinger --- prometheus-metrics-exposition-formats/pom.xml | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 90e118072..9643998b2 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 @@ -34,15 +35,34 @@ ${protobuf-java.version} - - io.prometheus - prometheus-metrics-exposition-textformats - ${project.version} - test - test-jar - + + + + javadoc + + + release + + + default + + true + + + + + io.prometheus + prometheus-metrics-exposition-textformats + ${project.version} + test + test-jar + + + + + @@ -69,7 +89,9 @@ bsh-property - skip.protobuf.generation = !"true".equals(System.getenv("PROTO_GENERATION")); + skip.protobuf.generation = + !"true".equals(System.getenv("PROTO_GENERATION")); + skip.protobuf.generation From 629ec3ab9504ecf660bd8c67430d753e9b134833 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 10:19:03 +0100 Subject: [PATCH 284/870] Bump org.apache.maven.plugins:maven-clean-plugin from 3.4.0 to 3.4.1 (#1279) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.4.0 to 3.4.1.
    Release notes

    Sourced from org.apache.maven.plugins:maven-clean-plugin's releases.

    3.4.1

    🚀 New features and improvements

    📦 Dependency updates

    👻 Maintenance

    Commits
    • 8211bc5 [maven-release-plugin] prepare release maven-clean-plugin-3.4.1
    • 92305ba Update scm tag according to branch
    • 9db0e77 PR Automation only on close event
    • 7065077 [MNGSITE-529] Rename "Goals" to "Plugin Documentation"
    • c003151 release-drafter configuration
    • a70d2e4 Use global release-drafter configuration
    • 5e797fc Bump org.apache.maven.resolver:maven-resolver-api from 1.1.1 to 1.9.22
    • e514d80 Bump mavenVersion from 3.6.3 to 3.9.9 (#77)
    • 9dc0953 Bump org.codehaus.plexus:plexus-testing from 1.3.0 to 1.4.0
    • dcc3b09 Fix license/notice (#48)
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.maven.plugins:maven-clean-plugin&package-manager=maven&previous-version=3.4.0&new-version=3.4.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ec1fb04b..c288c0d80 100644 --- a/pom.xml +++ b/pom.xml @@ -167,7 +167,7 @@
    maven-clean-plugin - 3.4.0 + 3.4.1 maven-site-plugin From 98452800dba104d769519d279cb52de4171fcafb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 10:19:20 +0100 Subject: [PATCH 285/870] Bump io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha from 2.13.0-alpha to 2.13.1-alpha (#1280) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://github.com/open-telemetry/opentelemetry-java-instrumentation) from 2.13.0-alpha to 2.13.1-alpha.
    Release notes

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's releases.

    Version 2.13.0

    This release targets the OpenTelemetry SDK 1.47.0.

    Note that many artifacts have the -alpha suffix attached to their version number, reflecting that they are still alpha quality and will continue to have breaking changes. Please see the VERSIONING.md for more details.

    Migration notes

    • io.opentelemetry.instrumentation.api.incubator.semconv.util.SpanNames has been deprecated, replaced by the stable io.opentelemetry.instrumentation.api.semconv.util.SpanNames
    • In preparation for stabilizing HTTP library instrumentation, the classes and methods that were deprecated in the prior two releases have now been removed (#13135, #13150)
    • Deprecated Dubbo instrumentation method was removed (#13076)

    🌟 New javaagent instrumentation

    • jdk.httpserver instrumentation (#13243)

    🌟 New library instrumentation

    • jdk.httpserver instrumentation (#13243)

    📈 Enhancements

    • Add database client metrics to Lettuce instrumentation (#13032)
    • Stabilize io.opentelemetry.instrumentation.api.semconv.util.SpanNames (#12487)
    • Implement ExtendedTextMapGetter in http server instrumentations (#13053)
    • Implement ExtendedTextMapGetter in kafka-clients instrumentation (#13068)
    • Scrub system property secrets from process resource attribute values (#13225)
    • Add database client metrics to AWS SDK 2.x DynamoDB instrumentation (#13283)
    • Add runtime metrics to Spring boot starter (#13173)

    🛠️ Bug fixes

    • Fix akka shutdown hanging (#13073)
    • Fix MalformedInputException on z/OS (#13042)
    • Fix scope leak in aws sdk instrumentation (#13129)
    • Fix MapConverter does not get initialized when OTEL_SDK_DISABLED is set to true (#13224)
    • Fix logback appender on android (#13234)
    • Fix Ktor 3 CallLogging and StatusPages don't have Trace IDs (#13239)
    • Fix Micrometer-bridge breaking Spring Actuator metrics (#13083)

    🙇 Thank you

    This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:

    @​adrielp @​AlchemyDing @​bencehornak @​breedx-splk @​brunobat @​chalin @​e5l

    ... (truncated)

    Changelog

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's changelog.

    Changelog

    Unreleased

    Migration notes

    • The java.net.http.HttpClient instrumentation package io.opentelemetry.instrumentation.httpclient was deprecated in favor of the new package name io.opentelemetry.instrumentation.javahttpclient

    Version 2.13.1 (2025-02-18)

    🛠️ Bug fixes

    • Backport: Fix double instrumentation of Java runtime metrics (#13339)

    Version 2.13.0 (2025-02-17)

    Migration notes

    • io.opentelemetry.instrumentation.api.incubator.semconv.util.SpanNames has been deprecated, replaced by the stable io.opentelemetry.instrumentation.api.semconv.util.SpanNames
    • In preparation for stabilizing HTTP library instrumentation, the classes and methods that were deprecated in the prior two releases have now been removed (#13135, #13150)
    • Deprecated Dubbo instrumentation method was removed (#13076)

    🌟 New javaagent instrumentation

    • jdk.httpserver instrumentation (#13243)

    🌟 New library instrumentation

    • jdk.httpserver instrumentation (#13243)

    📈 Enhancements

    • Add database client metrics to Lettuce instrumentation (#13032)
    • Stabilize io.opentelemetry.instrumentation.api.semconv.util.SpanNames (#12487)
    • Implement ExtendedTextMapGetter in http server instrumentations (#13053)
    • Implement ExtendedTextMapGetter in kafka-clients instrumentation (#13068)

    ... (truncated)

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha&package-manager=maven&previous-version=2.13.0-alpha&new-version=2.13.1-alpha)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c288c0d80..4936f76bd 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ --module-name-need-to-be-overriden-- 33.4.0-jre 5.11.4 - 2.13.0-alpha + 2.13.1-alpha 8 0.70 false From a90cab5d7da3d44c9f54423384a1a802fb7170c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 14:49:36 +0100 Subject: [PATCH 286/870] Bump org.testcontainers:junit-jupiter from 1.20.4 to 1.20.5 (#1281) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.testcontainers:junit-jupiter](https://github.com/testcontainers/testcontainers-java) from 1.20.4 to 1.20.5.
    Release notes

    Sourced from org.testcontainers:junit-jupiter's releases.

    1.20.5

    What's Changed

    🚀 Features & Enhancements

    🐛 Bug Fixes

    📖 Documentation

    🧹 Housekeeping

    📦 Dependency updates

    Commits
    • 13b6365 Rename Picone implementation
    • c34ed90 Rename EventHubs and ServiceBus implementations
    • aad1ee5 Add more configuration for LLdapContainer
    • 85697fd Add method to return LDAP URL to LLdapContainer
    • 2ac4ed6 Add ldap module (#9987)
    • aa7ddc0 Fix reuse support for CouchbaseContainer (#9957)
    • 2fa7f65 Don't extend configuration compileOnly and testCompile from shaded (#9579)
    • 99981f8 Fix typos (#9783)
    • df40cd8 Fix SolrContainer start parameters for version >= 9.7.0 (#9926)
    • 6139e5e Fix clickhouse authentication (#9942)
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.testcontainers:junit-jupiter&package-manager=maven&previous-version=1.20.4&new-version=1.20.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 41adf0e40..ec3362cd8 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -56,7 +56,7 @@ org.testcontainers junit-jupiter - 1.20.4 + 1.20.5 test From 3419df41745e1ad816c0437da2a150f8739cb3a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 09:02:21 -0500 Subject: [PATCH 287/870] Bump org.awaitility:awaitility from 4.2.2 to 4.3.0 (#1286) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.awaitility:awaitility](https://github.com/awaitility/awaitility) from 4.2.2 to 4.3.0.
    Changelog

    Sourced from org.awaitility:awaitility's changelog.

    Changelog 4.3.0 (2025-02-21)

    • Support for kotlin.time.Duration in Kotlin DSL (thanks to Ivo Šmíd for PR)

    • Upgraded kotlin version in the awaitility-kotlin module to 2.1.10

    • Using a more descriptive error message when using VERY long wait conditions or poll durations (issue 290)

    • Added an overloaded method of untilAsserted(..) that takes a supplier and a consumer. Example lets say you have a class like this: public class MyClass { public String myFunction() { // Imagine stuff being executed in asynchrinously here and the result of this // operation is a string called "my value" return "my value" } }

      // Then in your test you can wait for the "myFunction" to be asserted by a "consumer" that uses // assertj to make sure that "myFunction" returns ""my value" await().untilAsserted(myClass::myFunction, value -> Assertions.assertThat(value).isEqualTo("my value"));

      This has also been implemented for all atomic, adder, and accumulator methods.

    Commits
    • e3ff879 [maven-release-plugin] prepare release awaitility-4.3.0
    • d116712 [ci skip] Preparing changelog for release
    • 4e186df Added kotlin source folder explicitly
    • e8d3ab7 Upgraded lots of plugin dependencies
    • a7a167a Added an overloaded method of untilAsserted(..) that takes a supplier and a c...
    • ef8f663 Make ConditionFactory safer to use in java 8
    • 5550079 Using a more descriptive error message when using VERY long wait conditions o...
    • 2a9814b Upgraded kotlin version in the awaitility-kotlin module to 2.1.10
    • 8f22c00 [ci skip] Updated changelog.txt to reflect latest changes
    • 6a35c24 #235 Support for kotlin.time.Duration in Kotlin DSL (#285)
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.awaitility:awaitility&package-manager=maven&previous-version=4.2.2&new-version=4.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index fb1561478..237ef4a91 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -85,7 +85,7 @@ org.awaitility awaitility - 4.2.2 + 4.3.0 test From c8d425b0f0a7b861daa31e6c6e74cd251f130af5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 09:02:35 -0500 Subject: [PATCH 288/870] Bump com.diffplug.spotless:spotless-maven-plugin from 2.44.2 to 2.44.3 (#1284) Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.44.2 to 2.44.3.
    Release notes

    Sourced from com.diffplug.spotless:spotless-maven-plugin's releases.

    Maven Plugin v2.44.3

    • Support for clang-format (#2406)
    • Adopt new version of maven-plugin-development from GradleX (#2395)
    Commits
    • 4dd0095 Published maven/2.44.3
    • 62eff17 Published lib/3.1.0
    • d88a76e feat: allow overriding JarSate classloader (to enable cli) (#2427)
    • 06c6ca8 chore: insert created PR#
    • 8ee1dfe chore: provide test to make sure overriding classloader works
    • 88d3c31 chore: update changelog for reflecting overridable classLoader in JarState
    • f519ed3 feat: allow overriding classLoader for jarstate
    • a410e9f adopt maven plugin development from gradle x (#2423 closes #2395)
    • fd5970c chore(deps): update plugin com.gradle.develocity to v3.19.2 (#2425)
    • cdb609e added changelog info in the right place
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.diffplug.spotless:spotless-maven-plugin&package-manager=maven&previous-version=2.44.2&new-version=2.44.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index d7e39b25f..973af1454 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -77,7 +77,7 @@ com.diffplug.spotless spotless-maven-plugin - 2.44.2 + 2.44.3 diff --git a/pom.xml b/pom.xml index 4936f76bd..2a832a72d 100644 --- a/pom.xml +++ b/pom.xml @@ -215,7 +215,7 @@ com.diffplug.spotless spotless-maven-plugin - 2.44.2 + 2.44.3
    From eaba6f89e7ecd5a3bccca326c407fd04afcf4ecd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 09:02:56 -0500 Subject: [PATCH 289/870] Bump org.apache.maven.plugins:maven-compiler-plugin from 3.13.0 to 3.14.0 (#1283) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.13.0 to 3.14.0.
    Release notes

    Sourced from org.apache.maven.plugins:maven-compiler-plugin's releases.

    3.14.0

    🚀 New features and improvements

    🐛 Bug Fixes

    📦 Dependency updates

    👻 Maintenance

    🔧 Build

    Commits
    • b5e7d9b [maven-release-plugin] prepare release maven-compiler-plugin-3.14.0
    • 9134f12 Enable GitHub Issues
    • 19b8b12 Update scm tag according to branch
    • 09dce4e [MCOMPILER-579] allow module-version configuration (#273)
    • f7c3c5f Bump org.codehaus.plexus:plexus-java from 1.2.0 to 1.4.0
    • 764a54b [MNGSITE-529] Rename "Goals" to "Plugin Documentation"
    • cfacbc1 PR Automation only on close event
    • 5c26bba Use JUnit version from parent
    • 5449407 [MCOMPILER-529] Update docs about version schema (Maven 3)
    • 01d5b88 Bump mavenVersion from 3.6.3 to 3.9.9 (#283)
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.maven.plugins:maven-compiler-plugin&package-manager=maven&previous-version=3.13.0&new-version=3.14.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2a832a72d..ff5449582 100644 --- a/pom.xml +++ b/pom.xml @@ -151,7 +151,7 @@ maven-compiler-plugin - 3.13.0 + 3.14.0 maven-surefire-plugin From d88f624f7c29f5b149c7a2ce83db0880059d7851 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:53:05 +0100 Subject: [PATCH 290/870] Bump org.springframework.boot:spring-boot-starter-parent from 3.4.2 to 3.4.3 (#1285) Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.2 to 3.4.3.
    Release notes

    Sourced from org.springframework.boot:spring-boot-starter-parent's releases.

    v3.4.3

    :star: New Features

    • Add TWENTY_FOUR to JavaVersion enum #44209

    :lady_beetle: Bug Fixes

    • Console output may be lost when using Log4j2 with something that replaces System.out #44380
    • Maven plugin does not consistently use ArgFile for classpath argument on Windows #44328
    • Reactive Jetty web server does not fail fast when configured to use a server name bundle which Jetty does not support #44319
    • When web server application context refresh fails, the original failure is lost if stopping or destroying the web server throws an exception #44317
    • View resolver for Thymeleaf should back off if spring-webmvc is not present #44296
    • WebServer is not destroyed when ReactiveWebServerApplicationContext refresh fails #44294
    • Non-default DataSource candidates are not considered in H2ConsoleAutoConfiguration #44293
    • Banner placeholder and defaults do not work during development #44255
    • Mustache templates return with ISO-8859-1 charset rather than UTF-8 in Content-Type response header #44193
    • Servlet EndpointRequest doesn't match web server namespace correctly #44188
    • java.lang.ClassCastException when using default management security with WebFlux and health probes enabled #44052
    • Logback configuration that relies on inner-classes does not work in a native image #44025
    • IllegalStateException: Unable to register SSL bundle after 3.3.8 or 3.4.2 #43989
    • Metrics and health do not include non-default candidate beans #43481

    :notebook_with_decorative_cover: Documentation

    • Document that auto-configuration classes should be identified using their binary names #44303
    • Correct typo in MVC security when explaining when UserDetailsService auto-configuration will back off #44301
    • Link to JarLauncher's javadoc #44170
    • When using observability annotations, recommend that care is taken to avoid double instrumentation #44145
    • Fix typo in Running Your Application #44035
    • Document Kubernetes preStop handler when using a Docker image without a shell #44022
    • Source snippet in Developing Your First Spring Boot Application section uses the root package #43983
    • Correct the location of MyApplication.java in "Developing Your First Spring Boot Application" #43975
    • Add links to Jackson Javadoc #43971
    • Warn that some Quartz database schema scripts must be modified before use #43958

    :hammer: Dependency Upgrades

    • Upgrade to Commons Pool2 2.12.1 #44173
    • Upgrade to Couchbase Client 3.7.8 #44269
    • Upgrade to Groovy 4.0.25 #44174
    • Upgrade to Hibernate 6.6.8.Final #44332
    • Upgrade to HttpClient5 5.4.2 #44176
    • Upgrade to HttpCore5 5.3.3 #44177
    • Upgrade to Infinispan 15.0.13.Final #44178
    • Upgrade to jOOQ 3.19.19 #44368
    • Upgrade to Json-smart 2.5.2 #44264
    • Upgrade to Maven Clean Plugin 3.4.1 #44349
    • Upgrade to Micrometer 1.14.4 #44115
    • Upgrade to Micrometer Tracing 1.4.3 #44116
    • Upgrade to Native Build Tools Plugin 0.10.5 #44179

    ... (truncated)

    Commits
    • 2f53c0a Release v3.4.3
    • f99171f Merge branch '3.3.x' into 3.4.x
    • 70e0744 Next development version (v3.3.10-SNAPSHOT)
    • 07d9db3 Merge pull request #44380 from nosan
    • 2295809 Register Log42J StatusListener
    • 575655c Upgrade Tomcat 11 smoke tests to Tomcat 11.0.4
    • c74397a Merge branch '3.3.x' into 3.4.x
    • c718461 Protect against NoSuchMethodException on setReadOnly
    • 7dc9bf2 Upgrade to Testcontainers Redis Module 2.2.4
    • 7d1fc06 Upgrade to Testcontainers 1.20.5
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.springframework.boot:spring-boot-starter-parent&package-manager=maven&previous-version=3.4.2&new-version=3.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 973af1454..2e0c4e072 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -7,7 +7,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.2 + 3.4.3 From ec99546c7b4e64426aa855804dba84b6dc44f530 Mon Sep 17 00:00:00 2001 From: Brian Zier Date: Mon, 24 Feb 2025 01:53:38 -0800 Subject: [PATCH 291/870] Fix documentation typo (#1282) `PromethesuRegistry` -> `PrometheusRegistry` Signed-off-by: Brian Zier --- docs/content/migration/simpleclient.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/migration/simpleclient.md b/docs/content/migration/simpleclient.md index 82937a64b..27606dbb6 100644 --- a/docs/content/migration/simpleclient.md +++ b/docs/content/migration/simpleclient.md @@ -13,7 +13,7 @@ Migration using the Simpleclient Bridge Good news: Users of version 0.16.0 and older do not need to refactor all their instrumentation code to get started with 1.0.0. -We provide a migration module for bridging the old simpleclient `CollectorRegistry` to the new `PromethesuRegistry`. +We provide a migration module for bridging the old simpleclient `CollectorRegistry` to the new `PrometheusRegistry`. To use the bridge, add the following dependency: From e29cfaa0e47ec7cf586ec1d3ad98f0cd0dc2bbfe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Feb 2025 09:09:16 -0500 Subject: [PATCH 292/870] Bump org.slf4j:slf4j-simple from 2.0.16 to 2.0.17 (#1288) Bumps org.slf4j:slf4j-simple from 2.0.16 to 2.0.17. [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.slf4j:slf4j-simple&package-manager=maven&previous-version=2.0.16&new-version=2.0.17)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ff5449582..30b886e39 100644 --- a/pom.xml +++ b/pom.xml @@ -125,7 +125,7 @@ org.slf4j slf4j-simple - 2.0.16 + 2.0.17 test From f343790303f78e7bb63bd6e4e3f3a6435332d89b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:24:44 +0100 Subject: [PATCH 293/870] Bump org.apache.maven.plugins:maven-project-info-reports-plugin from 3.8.0 to 3.9.0 (#1290) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.apache.maven.plugins:maven-project-info-reports-plugin](https://github.com/apache/maven-project-info-reports-plugin) from 3.8.0 to 3.9.0.
    Release notes

    Sourced from org.apache.maven.plugins:maven-project-info-reports-plugin's releases.

    3.9.0

    🚀 New features and improvements

    📦 Dependency updates

    👻 Maintenance

    Commits
    • f89321c [maven-release-plugin] prepare release maven-project-info-reports-plugin-3.9.0
    • 3f47dd0 Enable GitHub Issues
    • e51cef8 [MPIR-478] Allow to save avatars images for team report during project build
    • 3a991e2 Upgrade dependencies for ITs
    • df61a5a Add Release Drafter
    • d4ae6c6 Remove empty javadoc tags on private methods (#100)
    • cbe9f0c Add PR Automation and Stale actions
    • c80a10d [MNGSITE-529] Rename "Goals" to "Plugin Documentation"
    • b1b55bb [MPIR-476] Remove direct usage of localRepository as Mojo parameter
    • 03b9832 [MPIR-475] Drop usage of maven-artifact-transfer
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.maven.plugins:maven-project-info-reports-plugin&package-manager=maven&previous-version=3.8.0&new-version=3.9.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 30b886e39..7dfab2a27 100644 --- a/pom.xml +++ b/pom.xml @@ -394,7 +394,7 @@ maven-project-info-reports-plugin - 3.8.0 + 3.9.0 maven-javadoc-plugin From b6c263ff7e724a5f4de2628de6dde2ce682e6ea9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:24:53 +0100 Subject: [PATCH 294/870] Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.3 to 3.1.4 (#1291) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.3 to 3.1.4.
    Release notes

    Sourced from org.apache.maven.plugins:maven-deploy-plugin's releases.

    3.1.4

    🚀 New features and improvements

    📦 Dependency updates

    👻 Maintenance

    Commits
    • 538c67c [maven-release-plugin] prepare release maven-deploy-plugin-3.1.4
    • 6dd30b3 Enable GitHub Issues
    • 39f204c Bump resolverVersion from 1.9.18 to 1.9.22
    • 65c05b7 PR Automation only on close event
    • 69b6824 [MNGSITE-529] Rename "Goals" to "Plugin Documentation"
    • 66b357b Bump mavenVersion from 3.9.6 to 3.9.9
    • 386fcf9 Release drafter configuration and PR Automation
    • 2173944 Fix IT deploy-bom for Maven rc-2
    • 424f215 [maven-release-plugin] prepare for next development iteration
    • See full diff in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.maven.plugins:maven-deploy-plugin&package-manager=maven&previous-version=3.1.3&new-version=3.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7dfab2a27..4ade13fd5 100644 --- a/pom.xml +++ b/pom.xml @@ -163,7 +163,7 @@
    maven-deploy-plugin - 3.1.3 + 3.1.4 maven-clean-plugin From d97056ac4b9fe100cbb86dbd18a922d5aa0b0769 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:25:02 +0100 Subject: [PATCH 295/870] Bump io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha from 2.13.1-alpha to 2.13.2-alpha (#1289) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://github.com/open-telemetry/opentelemetry-java-instrumentation) from 2.13.1-alpha to 2.13.2-alpha.
    Release notes

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's releases.

    Version 2.13.1

    This is a patch release on the previous 2.13.0 release, fixing the issue(s) below.

    🛠️ Bug fixes

    • Backport: Fix double instrumentation of Java runtime metrics (#13339)
    Changelog

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's changelog.

    Changelog

    Unreleased

    Migration notes

    • The java.net.http.HttpClient instrumentation package io.opentelemetry.instrumentation.httpclient was deprecated in favor of the new package name io.opentelemetry.instrumentation.javahttpclient

    Version 2.13.2 (2025-02-27)

    🛠️ Bug fixes

    • Backport: Fix Spring boot starter dependency resolution failure with Gradle and Java 11 (#13402)

    Version 2.13.1 (2025-02-18)

    🛠️ Bug fixes

    • Backport: Fix double instrumentation of Java runtime metrics (#13339)

    Version 2.13.0 (2025-02-17)

    Migration notes

    • io.opentelemetry.instrumentation.api.incubator.semconv.util.SpanNames has been deprecated, replaced by the stable io.opentelemetry.instrumentation.api.semconv.util.SpanNames
    • In preparation for stabilizing HTTP library instrumentation, the classes and methods that were deprecated in the prior two releases have now been removed (#13135, #13150)
    • Deprecated Dubbo instrumentation method was removed (#13076)

    🌟 New javaagent instrumentation

    • jdk.httpserver instrumentation (#13243)

    🌟 New library instrumentation

    • jdk.httpserver instrumentation (#13243)

    📈 Enhancements

    • Add database client metrics to Lettuce instrumentation

    ... (truncated)

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha&package-manager=maven&previous-version=2.13.1-alpha&new-version=2.13.2-alpha)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4ade13fd5..bbed050ea 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ --module-name-need-to-be-overriden-- 33.4.0-jre 5.11.4 - 2.13.1-alpha + 2.13.2-alpha 8 0.70 false From 25fe4d7dc010aa9243a9878eced974a9ae8db783 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Feb 2025 09:54:43 +0000 Subject: [PATCH 296/870] Bump junit-jupiter.version from 5.11.4 to 5.12.0 (#1287) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps `junit-jupiter.version` from 5.11.4 to 5.12.0. Updates `org.junit.jupiter:junit-jupiter-engine` from 5.11.4 to 5.12.0
    Release notes

    Sourced from org.junit.jupiter:junit-jupiter-engine's releases.

    JUnit 5.12.0 = Platform 1.12.0 + Jupiter 5.12.0 + Vintage 5.12.0

    See Release Notes.

    New Contributors

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0

    JUnit 5.12.0-RC2 = Platform 1.12.0-RC2 + Jupiter 5.12.0-RC2 + Vintage 5.12.0-RC2

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.0-RC1...r5.12.0-RC2

    JUnit 5.12.0-RC1 = Platform 1.12.0-RC1 + Jupiter 5.12.0-RC1 + Vintage 5.12.0-RC1

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.0-M1...r5.12.0-RC1

    JUnit 5.12.0-M1 = Platform 1.12.0-M1 + Jupiter 5.12.0-M1 + Vintage 5.12.0-M1

    See Release Notes.

    New Contributors

    ... (truncated)

    Commits
    • 2750b04 Release 5.12.0
    • 9615490 Update log suppressions for tests
    • 0a8d65b Remove duplicated reference to SimpleArgumentConverter
    • cafbcdb Update open-test-reporting to 0.2.0
    • ed1773c Fix version references to be 1.x in Platform and 5.x in Jupiter
    • 1d2f982 Update open-test-reporting to 0.2.0-M3
    • 2b6bab5 Fix indentation
    • d1929bb Merge 5.12.0 release notes
    • 9b7a3c4 Back to snapshots for further development
    • a410c92 Release 5.12.0-RC2
    • Additional commits viewable in compare view

    Updates `org.junit.jupiter:junit-jupiter-params` from 5.11.4 to 5.12.0
    Release notes

    Sourced from org.junit.jupiter:junit-jupiter-params's releases.

    JUnit 5.12.0 = Platform 1.12.0 + Jupiter 5.12.0 + Vintage 5.12.0

    See Release Notes.

    New Contributors

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0

    JUnit 5.12.0-RC2 = Platform 1.12.0-RC2 + Jupiter 5.12.0-RC2 + Vintage 5.12.0-RC2

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.0-RC1...r5.12.0-RC2

    JUnit 5.12.0-RC1 = Platform 1.12.0-RC1 + Jupiter 5.12.0-RC1 + Vintage 5.12.0-RC1

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.0-M1...r5.12.0-RC1

    JUnit 5.12.0-M1 = Platform 1.12.0-M1 + Jupiter 5.12.0-M1 + Vintage 5.12.0-M1

    See Release Notes.

    New Contributors

    ... (truncated)

    Commits
    • 2750b04 Release 5.12.0
    • 9615490 Update log suppressions for tests
    • 0a8d65b Remove duplicated reference to SimpleArgumentConverter
    • cafbcdb Update open-test-reporting to 0.2.0
    • ed1773c Fix version references to be 1.x in Platform and 5.x in Jupiter
    • 1d2f982 Update open-test-reporting to 0.2.0-M3
    • 2b6bab5 Fix indentation
    • d1929bb Merge 5.12.0 release notes
    • 9b7a3c4 Back to snapshots for further development
    • a410c92 Release 5.12.0-RC2
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- pom.xml | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index bbed050ea..a3c97e2ed 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,6 @@ - pom 4.0.0 @@ -18,7 +19,7 @@ UTF-8 --module-name-need-to-be-overriden-- 33.4.0-jre - 5.11.4 + 5.12.0 2.13.2-alpha 8 0.70 @@ -94,7 +95,7 @@ org.junit.jupiter - junit-jupiter-engine + junit-jupiter ${junit-jupiter.version} test @@ -317,7 +318,8 @@ - org.springframework.boot:spring-boot-maven-plugin + + org.springframework.boot:spring-boot-maven-plugin @@ -428,6 +430,17 @@ benchmarks integration-tests + + + + org.junit + junit-bom + ${junit-jupiter.version} + pom + import + + + javadoc From 66a91af37dbaf52f0e7cac03fdaab0c8e4bbfcd4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Feb 2025 16:40:19 +0100 Subject: [PATCH 297/870] Bump org.apache.maven.plugins:maven-install-plugin from 3.1.3 to 3.1.4 (#1294) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin) from 3.1.3 to 3.1.4.
    Release notes

    Sourced from org.apache.maven.plugins:maven-install-plugin's releases.

    3.1.4

    🚀 New features and improvements

    📦 Dependency updates

    👻 Maintenance

    Commits
    • 29b220d [maven-release-plugin] prepare release maven-install-plugin-3.1.4
    • 0df7304 Enable GitHub Issues
    • 2fda8ce Bump resolverVersion from 1.9.18 to 1.9.22
    • 57b57dd [MNGSITE-529] Rename "Goals" to "Plugin Documentation"
    • 6894c0d PR Automation only on close event
    • d97234c Bump org.mockito:mockito-core from 4.8.1 to 4.11.0
    • f8aa35e Bump mavenVersion from 3.9.6 to 3.9.9
    • e2c6c78 Add release-drafter, PR automation
    • ef37684 Remove unused method
    • dcf39a0 [maven-release-plugin] prepare for next development iteration
    • See full diff in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.maven.plugins:maven-install-plugin&package-manager=maven&previous-version=3.1.3&new-version=3.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a3c97e2ed..90f4db6fb 100644 --- a/pom.xml +++ b/pom.xml @@ -144,7 +144,7 @@ maven-install-plugin - 3.1.3 + 3.1.4 maven-resources-plugin From c8ab7dd48132e0f09b8fd5ccafc8f536885a2669 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 11:06:15 +0100 Subject: [PATCH 298/870] Bump org.mockito:mockito-core from 5.15.2 to 5.16.0 (#1297) Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.15.2 to 5.16.0.
    Release notes

    Sourced from org.mockito:mockito-core's releases.

    v5.16.0

    Changelog generated by Shipkit Changelog Gradle Plugin

    5.16.0

    Commits
    • c81be5d Add support for including module-info in Mockito. (#3597)
    • d01ac9d Issue #3584 Improve Gradle Kotlin documentation to add agent
    • 83ee69b Bump com.gradle.develocity from 3.19 to 3.19.1 (#3579)
    • 289e971 Bump org.assertj:assertj-core from 3.27.2 to 3.27.3 (#3577)
    • 1ab8483 Bump com.diffplug.spotless:spotless-plugin-gradle from 7.0.1 to 7.0.2 (#3574)
    • fdb5df1 Bump com.diffplug.spotless:spotless-plugin-gradle from 6.25.0 to 7.0.1 (#3571)
    • e280630 Bump org.assertj:assertj-core from 3.27.1 to 3.27.2 (#3569)
    • 96c2095 Tweak documentation on mockito agent config for maven (#3568)
    • 1c3800d Add --info to diagnose release issues (#3567)
    • e9a4c77 Refine reflection when calling management factory (#3566)
    • See full diff in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.mockito:mockito-core&package-manager=maven&previous-version=5.15.2&new-version=5.16.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 90f4db6fb..3a17c9096 100644 --- a/pom.xml +++ b/pom.xml @@ -108,7 +108,7 @@ org.mockito mockito-core - 5.15.2 + 5.16.0 test From a5c3e3f0cefc984682df512934e6746d70af9a28 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 11:06:31 +0100 Subject: [PATCH 299/870] Bump io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha from 2.13.2-alpha to 2.13.3-alpha (#1296) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://github.com/open-telemetry/opentelemetry-java-instrumentation) from 2.13.2-alpha to 2.13.3-alpha.
    Release notes

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's releases.

    Version 2.13.2

    This is a patch release on the previous 2.13.1 release, fixing the issue(s) below.

    🛠️ Bug fixes

    • Backport: Fix Spring boot starter dependency resolution failure with Gradle and Java 11 (#13402)
    Changelog

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's changelog.

    Changelog

    Unreleased

    Migration notes

    • The java.net.http.HttpClient instrumentation package io.opentelemetry.instrumentation.httpclient was deprecated in favor of the new package name io.opentelemetry.instrumentation.javahttpclient

    Version 2.13.3 (2025-02-28)

    🛠️ Bug fixes

    • Backport: Fix failure to start when AWS Resource Provider is enabled (#13420)

    Version 2.13.2 (2025-02-27)

    🛠️ Bug fixes

    • Backport: Fix Spring boot starter dependency resolution failure with Gradle and Java 11 (#13402)

    Version 2.13.1 (2025-02-18)

    🛠️ Bug fixes

    • Backport: Fix double instrumentation of Java runtime metrics (#13339)

    Version 2.13.0 (2025-02-17)

    Migration notes

    • io.opentelemetry.instrumentation.api.incubator.semconv.util.SpanNames has been deprecated, replaced by the stable io.opentelemetry.instrumentation.api.semconv.util.SpanNames
    • In preparation for stabilizing HTTP library instrumentation, the classes and methods that were deprecated in the prior two releases have now been removed (#13135, #13150)
    • Deprecated Dubbo instrumentation method was removed (#13076)

    🌟 New javaagent instrumentation

    • jdk.httpserver instrumentation (#13243)

    🌟 New library instrumentation

    ... (truncated)

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha&package-manager=maven&previous-version=2.13.2-alpha&new-version=2.13.3-alpha)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3a17c9096..5f2029594 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ --module-name-need-to-be-overriden-- 33.4.0-jre 5.12.0 - 2.13.2-alpha + 2.13.3-alpha 8 0.70 false From 31bd1a5938af9cf6262b58e7358ad2808cc02199 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 09:24:28 +0100 Subject: [PATCH 300/870] Bump org.testcontainers:junit-jupiter from 1.20.5 to 1.20.6 (#1298) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.testcontainers:junit-jupiter](https://github.com/testcontainers/testcontainers-java) from 1.20.5 to 1.20.6.
    Release notes

    Sourced from org.testcontainers:junit-jupiter's releases.

    1.20.6

    What's Changed

    • Bump confluentinc/cp-kcat from 7.4.1 to 7.9.0 (#10000) @​julianladisch
    • Set sourceCompatibility and targetCompatibility to 1.8 in spock module
    Commits
    • cc1c13a Replace release by sourceCompatibility and targetCompatibility in spock
    • 93a2eda Update ubuntu version to 22.04
    • 576e65a Fix spock module to compile using Java 8
    • 6e104da Bump confluentinc/cp-kcat from 7.4.1 to 7.9.0 (#10000)
    • 5af66d7 [create-pull-request] automated change (#9996)
    • 6ed4821 [create-pull-request] automated change (#9995)
    • See full diff in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.testcontainers:junit-jupiter&package-manager=maven&previous-version=1.20.5&new-version=1.20.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index ec3362cd8..20d0f1f38 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -56,7 +56,7 @@ org.testcontainers junit-jupiter - 1.20.5 + 1.20.6 test From 100dec15aceec99e21026c5355117dbe2b32dec3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 09:24:38 +0100 Subject: [PATCH 301/870] Bump org.wiremock:wiremock from 3.12.0 to 3.12.1 (#1295) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.12.0 to 3.12.1.
    Release notes

    Sourced from org.wiremock:wiremock's releases.

    3.12.1

    🐞 Bug fixes

    📖 OpenAPI updates

    • Use camel-case format for the fileName property in the request-pattern schema (#2966) @​picimako

    👻 Maintenance

    📦 Dependency updates

    ✍ Other changes

    Commits
    • 8251033 Merge pull request #2982 from wiremock/bump-patch
    • f04e530 bump patch version to 3.12.1
    • e03e4d2 Merge pull request #2981 from wiremock/xml-perf-improvements
    • f76cb7f perf: Reinstate improvements on EqualToXmlPattern
    • ee67c13 refactor: Extract DelegateDocumentBuilderFactory & subtypes
    • 66c9b9e Merge pull request #2977 from wiremock/thread-local-xml
    • 08a1a75 Merge pull request #2979 from wiremock/update-actions-cache-version
    • 6052951 Update actions/cache@v1 to use v4
    • b45bf62 Merge pull request #2978 from wiremock/dependabot/gradle/com.fasterxml.jackso...
    • 063cdf4 Bump com.fasterxml.jackson:jackson-bom from 2.18.2 to 2.18.3
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.wiremock:wiremock&package-manager=maven&previous-version=3.12.0&new-version=3.12.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 237ef4a91..4bf7e4bf4 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -73,7 +73,7 @@ org.wiremock wiremock - 3.12.0 + 3.12.1 test From d3b533aa151a74495b5d240c5367bbc158e533a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 14:51:18 +0100 Subject: [PATCH 302/870] Bump com.google.protobuf:protobuf-java from 4.29.3 to 4.30.0 (#1299) Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.29.3 to 4.30.0.
    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.protobuf:protobuf-java&package-manager=maven&previous-version=4.29.3&new-version=4.30.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .tool-versions | 2 +- .../client/it/common/ExporterTest.java | 2 +- .../metrics/it/exporter/test/ExporterIT.java | 2 +- .../it/springboot/ApplicationTest.java | 2 +- .../metrics/core/metrics/CounterTest.java | 2 +- .../metrics/core/metrics/HistogramTest.java | 2 +- .../metrics/core/metrics/InfoTest.java | 2 +- .../generate-protobuf.sh | 1 + prometheus-metrics-exposition-formats/pom.xml | 2 +- .../Metrics.java | 2036 ++++++++--------- .../PrometheusProtobufWriterImpl.java | 2 +- .../ProtobufExpositionFormatsTest.java | 2 +- 12 files changed, 1029 insertions(+), 1028 deletions(-) rename prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/{com_google_protobuf_4_29_3 => com_google_protobuf_4_30_0}/Metrics.java (87%) diff --git a/.tool-versions b/.tool-versions index 58b0b2027..6e9434844 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ java temurin-17.0.13+11 -protoc 29.3 +protoc 30.0 diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java index 93b5b088a..88453fa56 100644 --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index 67a4eec16..d7645a575 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -5,7 +5,7 @@ import com.google.common.io.Resources; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; import java.io.IOException; import java.net.URISyntaxException; import java.net.URLEncoder; diff --git a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java index eac8232d8..64c843edb 100644 --- a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java +++ b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java @@ -3,7 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; import java.io.IOException; import java.net.URL; import java.util.List; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index d05311307..c04055fc4 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -6,7 +6,7 @@ import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.CounterSnapshot; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index 514fd5b34..47b059588 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -8,7 +8,7 @@ import io.prometheus.metrics.core.datapoints.DistributionDataPoint; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index f78372545..275041724 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.Labels; diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index db27d9457..30e83cfa3 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -38,6 +38,7 @@ if [[ $GENERATED_WITH != "$PROTOBUF_VERSION" ]]; then echo "Generated protobuf sources version $GENERATED_WITH does not match provided version $PROTOBUF_VERSION" echo "Please update the protoc version .tool-versions to the latest version of https://github.com/protocolbuffers/protobuf/releases" echo "Please use https://github.com/asdf-vm/asdf - this will use the version specified in .tool-versions" + echo "Generated protobuf sources are not up-to-date. Please run 'PROTO_GENERATION=true mvn clean install' and commit the changes." exit 1 fi diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 9643998b2..56b7c6c4d 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -20,7 +20,7 @@ io.prometheus.metrics.expositionformats - 4.29.3 + 4.30.0 diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_3/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_0/Metrics.java similarity index 87% rename from prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_3/Metrics.java rename to prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_0/Metrics.java index c20c4a4ed..523e8fa3a 100644 --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_29_3/Metrics.java +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_0/Metrics.java @@ -2,9 +2,9 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: src/main/protobuf/metrics.proto -// Protobuf Java Version: 4.29.3 +// Protobuf Java Version: 4.30.0 -package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3; +package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0; public final class Metrics { private Metrics() {} @@ -12,8 +12,8 @@ private Metrics() {} com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 29, - /* patch= */ 3, + /* minor= */ 30, + /* patch= */ 0, /* suffix= */ "", Metrics.class.getName()); } @@ -85,8 +85,8 @@ public enum MetricType com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 29, - /* patch= */ 3, + /* minor= */ 30, + /* patch= */ 0, /* suffix= */ "", MetricType.class.getName()); } @@ -192,7 +192,7 @@ public MetricType findValueByNumber(int number) { } public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.getDescriptor().getEnumTypes().get(0); + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.getDescriptor().getEnumTypes().get(0); } private static final MetricType[] VALUES = values(); @@ -265,8 +265,8 @@ public static final class LabelPair extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 29, - /* patch= */ 3, + /* minor= */ 30, + /* patch= */ 0, /* suffix= */ "", LabelPair.class.getName()); } @@ -281,15 +281,15 @@ private LabelPair() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder.class); } private int bitField0_; @@ -436,10 +436,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair) obj; if (hasName() != other.hasName()) return false; if (hasName()) { @@ -475,44 +475,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -520,26 +520,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -552,7 +552,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -573,21 +573,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.newBuilder() private Builder() { } @@ -609,17 +609,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -627,14 +627,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -650,16 +650,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance()) return this; if (other.hasName()) { name_ = other.name_; bitField0_ |= 0x00000001; @@ -887,12 +887,12 @@ public Builder setValueBytes( } // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -928,7 +928,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -961,8 +961,8 @@ public static final class Gauge extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 29, - /* patch= */ 3, + /* minor= */ 30, + /* patch= */ 0, /* suffix= */ "", Gauge.class.getName()); } @@ -975,15 +975,15 @@ private Gauge() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder.class); } private int bitField0_; @@ -1046,10 +1046,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -1078,44 +1078,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1123,26 +1123,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1155,7 +1155,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1176,21 +1176,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.newBuilder() private Builder() { } @@ -1211,17 +1211,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1229,14 +1229,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1248,16 +1248,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -1353,12 +1353,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -1394,7 +1394,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -1424,11 +1424,11 @@ public interface CounterOrBuilder extends * optional .io.prometheus.client.Exemplar exemplar = 2; * @return The exemplar. */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar(); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar(); /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder(); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder(); /** * optional .google.protobuf.Timestamp created_timestamp = 3; @@ -1457,8 +1457,8 @@ public static final class Counter extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 29, - /* patch= */ 3, + /* minor= */ 30, + /* patch= */ 0, /* suffix= */ "", Counter.class.getName()); } @@ -1471,15 +1471,15 @@ private Counter() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder.class); } private int bitField0_; @@ -1503,7 +1503,7 @@ public double getValue() { } public static final int EXEMPLAR_FIELD_NUMBER = 2; - private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar exemplar_; + private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar exemplar_; /** * optional .io.prometheus.client.Exemplar exemplar = 2; * @return Whether the exemplar field is set. @@ -1517,15 +1517,15 @@ public boolean hasExemplar() { * @return The exemplar. */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar() { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_; + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar() { + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_; + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; } public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 3; @@ -1608,10 +1608,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -1658,44 +1658,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1703,26 +1703,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1735,7 +1735,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1756,21 +1756,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -1783,8 +1783,8 @@ private Builder( private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessage .alwaysUseFieldBuilders) { - getExemplarFieldBuilder(); - getCreatedTimestampFieldBuilder(); + internalGetExemplarFieldBuilder(); + internalGetCreatedTimestampFieldBuilder(); } } @java.lang.Override @@ -1808,17 +1808,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1826,14 +1826,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1857,16 +1857,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -1909,14 +1909,14 @@ public Builder mergeFrom( } // case 9 case 18: { input.readMessage( - getExemplarFieldBuilder().getBuilder(), + internalGetExemplarFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; } // case 18 case 26: { input.readMessage( - getCreatedTimestampFieldBuilder().getBuilder(), + internalGetCreatedTimestampFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000004; break; @@ -1978,9 +1978,9 @@ public Builder clearValue() { return this; } - private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar exemplar_; + private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar exemplar_; private com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> exemplarBuilder_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> exemplarBuilder_; /** * optional .io.prometheus.client.Exemplar exemplar = 2; * @return Whether the exemplar field is set. @@ -1992,9 +1992,9 @@ public boolean hasExemplar() { * optional .io.prometheus.client.Exemplar exemplar = 2; * @return The exemplar. */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar() { if (exemplarBuilder_ == null) { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_; + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; } else { return exemplarBuilder_.getMessage(); } @@ -2002,7 +2002,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) { + public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) { if (exemplarBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -2019,7 +2019,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com * optional .io.prometheus.client.Exemplar exemplar = 2; */ public Builder setExemplar( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder builderForValue) { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder builderForValue) { if (exemplarBuilder_ == null) { exemplar_ = builderForValue.build(); } else { @@ -2032,11 +2032,11 @@ public Builder setExemplar( /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) { + public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) { if (exemplarBuilder_ == null) { if (((bitField0_ & 0x00000002) != 0) && exemplar_ != null && - exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance()) { + exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance()) { getExemplarBuilder().mergeFrom(value); } else { exemplar_ = value; @@ -2066,31 +2066,31 @@ public Builder clearExemplar() { /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder getExemplarBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder getExemplarBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getExemplarFieldBuilder().getBuilder(); + return internalGetExemplarFieldBuilder().getBuilder(); } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { if (exemplarBuilder_ != null) { return exemplarBuilder_.getMessageOrBuilder(); } else { return exemplar_ == null ? - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; } } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ private com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> - getExemplarFieldBuilder() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> + internalGetExemplarFieldBuilder() { if (exemplarBuilder_ == null) { exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder>( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder>( getExemplar(), getParentForChildren(), isClean()); @@ -2190,7 +2190,7 @@ public Builder clearCreatedTimestamp() { public com.google.protobuf.Timestamp.Builder getCreatedTimestampBuilder() { bitField0_ |= 0x00000004; onChanged(); - return getCreatedTimestampFieldBuilder().getBuilder(); + return internalGetCreatedTimestampFieldBuilder().getBuilder(); } /** * optional .google.protobuf.Timestamp created_timestamp = 3; @@ -2208,7 +2208,7 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { */ private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCreatedTimestampFieldBuilder() { + internalGetCreatedTimestampFieldBuilder() { if (createdTimestampBuilder_ == null) { createdTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -2224,12 +2224,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -2265,7 +2265,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -2309,8 +2309,8 @@ public static final class Quantile extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 29, - /* patch= */ 3, + /* minor= */ 30, + /* patch= */ 0, /* suffix= */ "", Quantile.class.getName()); } @@ -2323,15 +2323,15 @@ private Quantile() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder.class); } private int bitField0_; @@ -2420,10 +2420,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile) obj; if (hasQuantile() != other.hasQuantile()) return false; if (hasQuantile()) { @@ -2463,44 +2463,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2508,26 +2508,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2540,7 +2540,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -2561,21 +2561,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.newBuilder() private Builder() { } @@ -2597,17 +2597,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -2615,14 +2615,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -2638,16 +2638,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.getDefaultInstance()) return this; if (other.hasQuantile()) { setQuantile(other.getQuantile()); } @@ -2791,12 +2791,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -2832,7 +2832,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -2867,12 +2867,12 @@ public interface SummaryOrBuilder extends /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - java.util.List + java.util.List getQuantileList(); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getQuantile(int index); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getQuantile(int index); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @@ -2880,12 +2880,12 @@ public interface SummaryOrBuilder extends /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - java.util.List + java.util.List getQuantileOrBuilderList(); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder getQuantileOrBuilder( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index); /** @@ -2915,8 +2915,8 @@ public static final class Summary extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 29, - /* patch= */ 3, + /* minor= */ 30, + /* patch= */ 0, /* suffix= */ "", Summary.class.getName()); } @@ -2930,15 +2930,15 @@ private Summary() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder.class); } private int bitField0_; @@ -2982,19 +2982,19 @@ public double getSampleSum() { public static final int QUANTILE_FIELD_NUMBER = 3; @SuppressWarnings("serial") - private java.util.List quantile_; + private java.util.List quantile_; /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public java.util.List getQuantileList() { + public java.util.List getQuantileList() { return quantile_; } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public java.util.List + public java.util.List getQuantileOrBuilderList() { return quantile_; } @@ -3009,14 +3009,14 @@ public int getQuantileCount() { * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getQuantile(int index) { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getQuantile(int index) { return quantile_.get(index); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder getQuantileOrBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index) { return quantile_.get(index); } @@ -3108,10 +3108,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary) obj; if (hasSampleCount() != other.hasSampleCount()) return false; if (hasSampleCount()) { @@ -3165,44 +3165,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3210,26 +3210,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3242,7 +3242,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -3263,21 +3263,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -3290,8 +3290,8 @@ private Builder( private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessage .alwaysUseFieldBuilders) { - getQuantileFieldBuilder(); - getCreatedTimestampFieldBuilder(); + internalGetQuantileFieldBuilder(); + internalGetCreatedTimestampFieldBuilder(); } } @java.lang.Override @@ -3318,17 +3318,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -3336,15 +3336,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary(this); buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary result) { + private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary result) { if (quantileBuilder_ == null) { if (((bitField0_ & 0x00000004) != 0)) { quantile_ = java.util.Collections.unmodifiableList(quantile_); @@ -3356,7 +3356,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats. } } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -3378,16 +3378,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance()) return this; if (other.hasSampleCount()) { setSampleCount(other.getSampleCount()); } @@ -3414,7 +3414,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g bitField0_ = (bitField0_ & ~0x00000004); quantileBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getQuantileFieldBuilder() : null; + internalGetQuantileFieldBuilder() : null; } else { quantileBuilder_.addAllMessages(other.quantile_); } @@ -3460,9 +3460,9 @@ public Builder mergeFrom( break; } // case 17 case 26: { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile m = + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile m = input.readMessage( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.parser(), + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.parser(), extensionRegistry); if (quantileBuilder_ == null) { ensureQuantileIsMutable(); @@ -3474,7 +3474,7 @@ public Builder mergeFrom( } // case 26 case 34: { input.readMessage( - getCreatedTimestampFieldBuilder().getBuilder(), + internalGetCreatedTimestampFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000008; break; @@ -3576,22 +3576,22 @@ public Builder clearSampleSum() { return this; } - private java.util.List quantile_ = + private java.util.List quantile_ = java.util.Collections.emptyList(); private void ensureQuantileIsMutable() { if (!((bitField0_ & 0x00000004) != 0)) { - quantile_ = new java.util.ArrayList(quantile_); + quantile_ = new java.util.ArrayList(quantile_); bitField0_ |= 0x00000004; } } private com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder> quantileBuilder_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder> quantileBuilder_; /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List getQuantileList() { + public java.util.List getQuantileList() { if (quantileBuilder_ == null) { return java.util.Collections.unmodifiableList(quantile_); } else { @@ -3611,7 +3611,7 @@ public int getQuantileCount() { /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile getQuantile(int index) { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getQuantile(int index) { if (quantileBuilder_ == null) { return quantile_.get(index); } else { @@ -3622,7 +3622,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder setQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile value) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3639,7 +3639,7 @@ public Builder setQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder setQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder builderForValue) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.set(index, builderForValue.build()); @@ -3652,7 +3652,7 @@ public Builder setQuantile( /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile value) { + public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3669,7 +3669,7 @@ public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile value) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3686,7 +3686,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder builderForValue) { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.add(builderForValue.build()); @@ -3700,7 +3700,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder builderForValue) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.add(index, builderForValue.build()); @@ -3714,7 +3714,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addAllQuantile( - java.lang.Iterable values) { + java.lang.Iterable values) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( @@ -3754,14 +3754,14 @@ public Builder removeQuantile(int index) { /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder getQuantileBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder getQuantileBuilder( int index) { - return getQuantileFieldBuilder().getBuilder(index); + return internalGetQuantileFieldBuilder().getBuilder(index); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder getQuantileOrBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index) { if (quantileBuilder_ == null) { return quantile_.get(index); } else { @@ -3771,7 +3771,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List + public java.util.List getQuantileOrBuilderList() { if (quantileBuilder_ != null) { return quantileBuilder_.getMessageOrBuilderList(); @@ -3782,31 +3782,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder addQuantileBuilder() { - return getQuantileFieldBuilder().addBuilder( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.getDefaultInstance()); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder addQuantileBuilder() { + return internalGetQuantileFieldBuilder().addBuilder( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.getDefaultInstance()); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder addQuantileBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder addQuantileBuilder( int index) { - return getQuantileFieldBuilder().addBuilder( - index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.getDefaultInstance()); + return internalGetQuantileFieldBuilder().addBuilder( + index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.getDefaultInstance()); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List + public java.util.List getQuantileBuilderList() { - return getQuantileFieldBuilder().getBuilderList(); + return internalGetQuantileFieldBuilder().getBuilderList(); } private com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder> - getQuantileFieldBuilder() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder> + internalGetQuantileFieldBuilder() { if (quantileBuilder_ == null) { quantileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.QuantileOrBuilder>( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder>( quantile_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), @@ -3907,7 +3907,7 @@ public Builder clearCreatedTimestamp() { public com.google.protobuf.Timestamp.Builder getCreatedTimestampBuilder() { bitField0_ |= 0x00000008; onChanged(); - return getCreatedTimestampFieldBuilder().getBuilder(); + return internalGetCreatedTimestampFieldBuilder().getBuilder(); } /** * optional .google.protobuf.Timestamp created_timestamp = 4; @@ -3925,7 +3925,7 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { */ private com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> - getCreatedTimestampFieldBuilder() { + internalGetCreatedTimestampFieldBuilder() { if (createdTimestampBuilder_ == null) { createdTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( @@ -3941,12 +3941,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -3982,7 +3982,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -4015,8 +4015,8 @@ public static final class Untyped extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 29, - /* patch= */ 3, + /* minor= */ 30, + /* patch= */ 0, /* suffix= */ "", Untyped.class.getName()); } @@ -4029,15 +4029,15 @@ private Untyped() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder.class); } private int bitField0_; @@ -4100,10 +4100,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -4132,44 +4132,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -4177,26 +4177,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -4209,7 +4209,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -4230,21 +4230,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.newBuilder() private Builder() { } @@ -4265,17 +4265,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -4283,14 +4283,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -4302,16 +4302,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -4407,12 +4407,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -4448,7 +4448,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -4506,7 +4506,7 @@ public interface HistogramOrBuilder extends * * repeated .io.prometheus.client.Bucket bucket = 3; */ - java.util.List + java.util.List getBucketList(); /** *
    @@ -4515,7 +4515,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getBucket(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getBucket(int index);
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -4531,7 +4531,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketOrBuilderList();
         /**
          * 
    @@ -4540,7 +4540,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index);
     
         /**
    @@ -4649,7 +4649,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanList();
         /**
          * 
    @@ -4658,7 +4658,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getNegativeSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getNegativeSpan(int index);
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -4674,7 +4674,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanOrBuilderList();
         /**
          * 
    @@ -4683,7 +4683,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index);
     
         /**
    @@ -4760,7 +4760,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanList();
         /**
          * 
    @@ -4772,7 +4772,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getPositiveSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getPositiveSpan(int index);
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -4794,7 +4794,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanOrBuilderList();
         /**
          * 
    @@ -4806,7 +4806,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index);
     
         /**
    @@ -4880,7 +4880,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsList();
         /**
          * 
    @@ -4889,7 +4889,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplars(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplars(int index);
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -4905,7 +4905,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsOrBuilderList();
         /**
          * 
    @@ -4914,7 +4914,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index);
       }
       /**
    @@ -4929,8 +4929,8 @@ public static final class Histogram extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 29,
    -        /* patch= */ 3,
    +        /* minor= */ 30,
    +        /* patch= */ 0,
             /* suffix= */ "",
             Histogram.class.getName());
         }
    @@ -4951,15 +4951,15 @@ private Histogram() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder.class);
         }
     
         private int bitField0_;
    @@ -5030,7 +5030,7 @@ public double getSampleSum() {
     
         public static final int BUCKET_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List bucket_;
    +    private java.util.List bucket_;
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -5039,7 +5039,7 @@ public double getSampleSum() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List getBucketList() {
    +    public java.util.List getBucketList() {
           return bucket_;
         }
         /**
    @@ -5050,7 +5050,7 @@ public java.util.Listrepeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getBucketOrBuilderList() {
           return bucket_;
         }
    @@ -5073,7 +5073,7 @@ public int getBucketCount() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getBucket(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getBucket(int index) {
           return bucket_.get(index);
         }
         /**
    @@ -5084,7 +5084,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index) {
           return bucket_.get(index);
         }
    @@ -5233,7 +5233,7 @@ public double getZeroCountFloat() {
     
         public static final int NEGATIVE_SPAN_FIELD_NUMBER = 9;
         @SuppressWarnings("serial")
    -    private java.util.List negativeSpan_;
    +    private java.util.List negativeSpan_;
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -5242,7 +5242,7 @@ public double getZeroCountFloat() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List getNegativeSpanList() {
    +    public java.util.List getNegativeSpanList() {
           return negativeSpan_;
         }
         /**
    @@ -5253,7 +5253,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getNegativeSpanOrBuilderList() {
           return negativeSpan_;
         }
    @@ -5276,7 +5276,7 @@ public int getNegativeSpanCount() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getNegativeSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getNegativeSpan(int index) {
           return negativeSpan_.get(index);
         }
         /**
    @@ -5287,7 +5287,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index) {
           return negativeSpan_.get(index);
         }
    @@ -5382,7 +5382,7 @@ public double getNegativeCount(int index) {
     
         public static final int POSITIVE_SPAN_FIELD_NUMBER = 12;
         @SuppressWarnings("serial")
    -    private java.util.List positiveSpan_;
    +    private java.util.List positiveSpan_;
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5394,7 +5394,7 @@ public double getNegativeCount(int index) {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List getPositiveSpanList() {
    +    public java.util.List getPositiveSpanList() {
           return positiveSpan_;
         }
         /**
    @@ -5408,7 +5408,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getPositiveSpanOrBuilderList() {
           return positiveSpan_;
         }
    @@ -5437,7 +5437,7 @@ public int getPositiveSpanCount() {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getPositiveSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getPositiveSpan(int index) {
           return positiveSpan_.get(index);
         }
         /**
    @@ -5451,7 +5451,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index) {
           return positiveSpan_.get(index);
         }
    @@ -5546,7 +5546,7 @@ public double getPositiveCount(int index) {
     
         public static final int EXEMPLARS_FIELD_NUMBER = 16;
         @SuppressWarnings("serial")
    -    private java.util.List exemplars_;
    +    private java.util.List exemplars_;
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -5555,7 +5555,7 @@ public double getPositiveCount(int index) {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List getExemplarsList() {
    +    public java.util.List getExemplarsList() {
           return exemplars_;
         }
         /**
    @@ -5566,7 +5566,7 @@ public java.util.Listrepeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getExemplarsOrBuilderList() {
           return exemplars_;
         }
    @@ -5589,7 +5589,7 @@ public int getExemplarsCount() {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplars(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplars(int index) {
           return exemplars_.get(index);
         }
         /**
    @@ -5600,7 +5600,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index) {
           return exemplars_.get(index);
         }
    @@ -5764,10 +5764,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -5915,44 +5915,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5960,26 +5960,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5992,7 +5992,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -6013,21 +6013,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -6040,11 +6040,11 @@ private Builder(
           private void maybeForceBuilderInitialization() {
             if (com.google.protobuf.GeneratedMessage
                     .alwaysUseFieldBuilders) {
    -          getBucketFieldBuilder();
    -          getCreatedTimestampFieldBuilder();
    -          getNegativeSpanFieldBuilder();
    -          getPositiveSpanFieldBuilder();
    -          getExemplarsFieldBuilder();
    +          internalGetBucketFieldBuilder();
    +          internalGetCreatedTimestampFieldBuilder();
    +          internalGetNegativeSpanFieldBuilder();
    +          internalGetPositiveSpanFieldBuilder();
    +          internalGetExemplarsFieldBuilder();
             }
           }
           @java.lang.Override
    @@ -6101,17 +6101,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -6119,15 +6119,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram result) {
             if (bucketBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 bucket_ = java.util.Collections.unmodifiableList(bucket_);
    @@ -6166,7 +6166,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -6224,16 +6224,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -6263,7 +6263,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   bitField0_ = (bitField0_ & ~0x00000008);
                   bucketBuilder_ = 
                     com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
    -                   getBucketFieldBuilder() : null;
    +                   internalGetBucketFieldBuilder() : null;
                 } else {
                   bucketBuilder_.addAllMessages(other.bucket_);
                 }
    @@ -6304,7 +6304,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   bitField0_ = (bitField0_ & ~0x00000200);
                   negativeSpanBuilder_ = 
                     com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
    -                   getNegativeSpanFieldBuilder() : null;
    +                   internalGetNegativeSpanFieldBuilder() : null;
                 } else {
                   negativeSpanBuilder_.addAllMessages(other.negativeSpan_);
                 }
    @@ -6352,7 +6352,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   bitField0_ = (bitField0_ & ~0x00001000);
                   positiveSpanBuilder_ = 
                     com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
    -                   getPositiveSpanFieldBuilder() : null;
    +                   internalGetPositiveSpanFieldBuilder() : null;
                 } else {
                   positiveSpanBuilder_.addAllMessages(other.positiveSpan_);
                 }
    @@ -6400,7 +6400,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   bitField0_ = (bitField0_ & ~0x00008000);
                   exemplarsBuilder_ = 
                     com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
    -                   getExemplarsFieldBuilder() : null;
    +                   internalGetExemplarsFieldBuilder() : null;
                 } else {
                   exemplarsBuilder_.addAllMessages(other.exemplars_);
                 }
    @@ -6443,9 +6443,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.parser(),
                             extensionRegistry);
                     if (bucketBuilder_ == null) {
                       ensureBucketIsMutable();
    @@ -6481,9 +6481,9 @@ public Builder mergeFrom(
                     break;
                   } // case 65
                   case 74: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (negativeSpanBuilder_ == null) {
                       ensureNegativeSpanIsMutable();
    @@ -6527,9 +6527,9 @@ public Builder mergeFrom(
                     break;
                   } // case 90
                   case 98: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (positiveSpanBuilder_ == null) {
                       ensurePositiveSpanIsMutable();
    @@ -6574,15 +6574,15 @@ public Builder mergeFrom(
                   } // case 114
                   case 122: {
                     input.readMessage(
    -                    getCreatedTimestampFieldBuilder().getBuilder(),
    +                    internalGetCreatedTimestampFieldBuilder().getBuilder(),
                         extensionRegistry);
                     bitField0_ |= 0x00000010;
                     break;
                   } // case 122
                   case 130: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.parser(),
                             extensionRegistry);
                     if (exemplarsBuilder_ == null) {
                       ensureExemplarsIsMutable();
    @@ -6745,17 +6745,17 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List bucket_ =
    +      private java.util.List bucket_ =
             java.util.Collections.emptyList();
           private void ensureBucketIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          bucket_ = new java.util.ArrayList(bucket_);
    +          bucket_ = new java.util.ArrayList(bucket_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder> bucketBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder> bucketBuilder_;
     
           /**
            * 
    @@ -6764,7 +6764,7 @@ private void ensureBucketIsMutable() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List getBucketList() {
    +      public java.util.List getBucketList() {
             if (bucketBuilder_ == null) {
               return java.util.Collections.unmodifiableList(bucket_);
             } else {
    @@ -6792,7 +6792,7 @@ public int getBucketCount() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getBucket(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getBucket(int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);
             } else {
    @@ -6807,7 +6807,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6828,7 +6828,7 @@ public Builder setBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.set(index, builderForValue.build());
    @@ -6845,7 +6845,7 @@ public Builder setBucket(
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket value) {
    +      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6866,7 +6866,7 @@ public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6887,7 +6887,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(builderForValue.build());
    @@ -6905,7 +6905,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(index, builderForValue.build());
    @@ -6923,7 +6923,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addAllBucket(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -6975,9 +6975,9 @@ public Builder removeBucket(int index) {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder getBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder getBucketBuilder(
               int index) {
    -        return getBucketFieldBuilder().getBuilder(index);
    +        return internalGetBucketFieldBuilder().getBuilder(index);
           }
           /**
            * 
    @@ -6986,7 +6986,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder getBucketOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder getBucketOrBuilder(
               int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);  } else {
    @@ -7000,7 +7000,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketOrBuilderList() {
             if (bucketBuilder_ != null) {
               return bucketBuilder_.getMessageOrBuilderList();
    @@ -7015,9 +7015,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder addBucketBuilder() {
    -        return getBucketFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.getDefaultInstance());
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder addBucketBuilder() {
    +        return internalGetBucketFieldBuilder().addBuilder(
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7026,10 +7026,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder addBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder addBucketBuilder(
               int index) {
    -        return getBucketFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.getDefaultInstance());
    +        return internalGetBucketFieldBuilder().addBuilder(
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7038,16 +7038,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketBuilderList() {
    -        return getBucketFieldBuilder().getBuilderList();
    +        return internalGetBucketFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder> 
    -          getBucketFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder> 
    +          internalGetBucketFieldBuilder() {
             if (bucketBuilder_ == null) {
               bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder>(
                       bucket_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -7148,7 +7148,7 @@ public Builder clearCreatedTimestamp() {
           public com.google.protobuf.Timestamp.Builder getCreatedTimestampBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
    -        return getCreatedTimestampFieldBuilder().getBuilder();
    +        return internalGetCreatedTimestampFieldBuilder().getBuilder();
           }
           /**
            * optional .google.protobuf.Timestamp created_timestamp = 15;
    @@ -7166,7 +7166,7 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() {
            */
           private com.google.protobuf.SingleFieldBuilder<
               com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
    -          getCreatedTimestampFieldBuilder() {
    +          internalGetCreatedTimestampFieldBuilder() {
             if (createdTimestampBuilder_ == null) {
               createdTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                   com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
    @@ -7418,17 +7418,17 @@ public Builder clearZeroCountFloat() {
             return this;
           }
     
    -      private java.util.List negativeSpan_ =
    +      private java.util.List negativeSpan_ =
             java.util.Collections.emptyList();
           private void ensureNegativeSpanIsMutable() {
             if (!((bitField0_ & 0x00000200) != 0)) {
    -          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
    +          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
               bitField0_ |= 0x00000200;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
     
           /**
            * 
    @@ -7437,7 +7437,7 @@ private void ensureNegativeSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List getNegativeSpanList() {
    +      public java.util.List getNegativeSpanList() {
             if (negativeSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(negativeSpan_);
             } else {
    @@ -7465,7 +7465,7 @@ public int getNegativeSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getNegativeSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getNegativeSpan(int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);
             } else {
    @@ -7480,7 +7480,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7501,7 +7501,7 @@ public Builder setNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.set(index, builderForValue.build());
    @@ -7518,7 +7518,7 @@ public Builder setNegativeSpan(
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
    +      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7539,7 +7539,7 @@ public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7560,7 +7560,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(builderForValue.build());
    @@ -7578,7 +7578,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(index, builderForValue.build());
    @@ -7596,7 +7596,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addAllNegativeSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -7648,9 +7648,9 @@ public Builder removeNegativeSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
               int index) {
    -        return getNegativeSpanFieldBuilder().getBuilder(index);
    +        return internalGetNegativeSpanFieldBuilder().getBuilder(index);
           }
           /**
            * 
    @@ -7659,7 +7659,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
               int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);  } else {
    @@ -7673,7 +7673,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanOrBuilderList() {
             if (negativeSpanBuilder_ != null) {
               return negativeSpanBuilder_.getMessageOrBuilderList();
    @@ -7688,9 +7688,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
    -        return getNegativeSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance());
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
    +        return internalGetNegativeSpanFieldBuilder().addBuilder(
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7699,10 +7699,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
               int index) {
    -        return getNegativeSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance());
    +        return internalGetNegativeSpanFieldBuilder().addBuilder(
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7711,16 +7711,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanBuilderList() {
    -        return getNegativeSpanFieldBuilder().getBuilderList();
    +        return internalGetNegativeSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder> 
    -          getNegativeSpanFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder> 
    +          internalGetNegativeSpanFieldBuilder() {
             if (negativeSpanBuilder_ == null) {
               negativeSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder>(
                       negativeSpan_,
                       ((bitField0_ & 0x00000200) != 0),
                       getParentForChildren(),
    @@ -7974,17 +7974,17 @@ public Builder clearNegativeCount() {
             return this;
           }
     
    -      private java.util.List positiveSpan_ =
    +      private java.util.List positiveSpan_ =
             java.util.Collections.emptyList();
           private void ensurePositiveSpanIsMutable() {
             if (!((bitField0_ & 0x00001000) != 0)) {
    -          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
    +          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
               bitField0_ |= 0x00001000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
     
           /**
            * 
    @@ -7996,7 +7996,7 @@ private void ensurePositiveSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List getPositiveSpanList() {
    +      public java.util.List getPositiveSpanList() {
             if (positiveSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(positiveSpan_);
             } else {
    @@ -8030,7 +8030,7 @@ public int getPositiveSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getPositiveSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getPositiveSpan(int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);
             } else {
    @@ -8048,7 +8048,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8072,7 +8072,7 @@ public Builder setPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.set(index, builderForValue.build());
    @@ -8092,7 +8092,7 @@ public Builder setPositiveSpan(
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
    +      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8116,7 +8116,7 @@ public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8140,7 +8140,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(builderForValue.build());
    @@ -8161,7 +8161,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(index, builderForValue.build());
    @@ -8182,7 +8182,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addAllPositiveSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8243,9 +8243,9 @@ public Builder removePositiveSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
               int index) {
    -        return getPositiveSpanFieldBuilder().getBuilder(index);
    +        return internalGetPositiveSpanFieldBuilder().getBuilder(index);
           }
           /**
            * 
    @@ -8257,7 +8257,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
               int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);  } else {
    @@ -8274,7 +8274,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanOrBuilderList() {
             if (positiveSpanBuilder_ != null) {
               return positiveSpanBuilder_.getMessageOrBuilderList();
    @@ -8292,9 +8292,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
    -        return getPositiveSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance());
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
    +        return internalGetPositiveSpanFieldBuilder().addBuilder(
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8306,10 +8306,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
               int index) {
    -        return getPositiveSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance());
    +        return internalGetPositiveSpanFieldBuilder().addBuilder(
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8321,16 +8321,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanBuilderList() {
    -        return getPositiveSpanFieldBuilder().getBuilderList();
    +        return internalGetPositiveSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder> 
    -          getPositiveSpanFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder> 
    +          internalGetPositiveSpanFieldBuilder() {
             if (positiveSpanBuilder_ == null) {
               positiveSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder>(
                       positiveSpan_,
                       ((bitField0_ & 0x00001000) != 0),
                       getParentForChildren(),
    @@ -8584,17 +8584,17 @@ public Builder clearPositiveCount() {
             return this;
           }
     
    -      private java.util.List exemplars_ =
    +      private java.util.List exemplars_ =
             java.util.Collections.emptyList();
           private void ensureExemplarsIsMutable() {
             if (!((bitField0_ & 0x00008000) != 0)) {
    -          exemplars_ = new java.util.ArrayList(exemplars_);
    +          exemplars_ = new java.util.ArrayList(exemplars_);
               bitField0_ |= 0x00008000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
     
           /**
            * 
    @@ -8603,7 +8603,7 @@ private void ensureExemplarsIsMutable() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List getExemplarsList() {
    +      public java.util.List getExemplarsList() {
             if (exemplarsBuilder_ == null) {
               return java.util.Collections.unmodifiableList(exemplars_);
             } else {
    @@ -8631,7 +8631,7 @@ public int getExemplarsCount() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplars(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplars(int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);
             } else {
    @@ -8646,7 +8646,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8667,7 +8667,7 @@ public Builder setExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.set(index, builderForValue.build());
    @@ -8684,7 +8684,7 @@ public Builder setExemplars(
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
    +      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8705,7 +8705,7 @@ public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.co
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8726,7 +8726,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(builderForValue.build());
    @@ -8744,7 +8744,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(index, builderForValue.build());
    @@ -8762,7 +8762,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addAllExemplars(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8814,9 +8814,9 @@ public Builder removeExemplars(int index) {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder getExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder getExemplarsBuilder(
               int index) {
    -        return getExemplarsFieldBuilder().getBuilder(index);
    +        return internalGetExemplarsFieldBuilder().getBuilder(index);
           }
           /**
            * 
    @@ -8825,7 +8825,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
               int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);  } else {
    @@ -8839,7 +8839,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsOrBuilderList() {
             if (exemplarsBuilder_ != null) {
               return exemplarsBuilder_.getMessageOrBuilderList();
    @@ -8854,9 +8854,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder addExemplarsBuilder() {
    -        return getExemplarsFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance());
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder addExemplarsBuilder() {
    +        return internalGetExemplarsFieldBuilder().addBuilder(
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8865,10 +8865,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder addExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder addExemplarsBuilder(
               int index) {
    -        return getExemplarsFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance());
    +        return internalGetExemplarsFieldBuilder().addBuilder(
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8877,16 +8877,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsBuilderList() {
    -        return getExemplarsFieldBuilder().getBuilderList();
    +        return internalGetExemplarsFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> 
    -          getExemplarsFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> 
    +          internalGetExemplarsFieldBuilder() {
             if (exemplarsBuilder_ == null) {
               exemplarsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder>(
                       exemplars_,
                       ((bitField0_ & 0x00008000) != 0),
                       getParentForChildren(),
    @@ -8900,12 +8900,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -8941,7 +8941,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9017,11 +9017,11 @@ public interface BucketOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
       }
       /**
        * 
    @@ -9040,8 +9040,8 @@ public static final class Bucket extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 29,
    -        /* patch= */ 3,
    +        /* minor= */ 30,
    +        /* patch= */ 0,
             /* suffix= */ "",
             Bucket.class.getName());
         }
    @@ -9054,15 +9054,15 @@ private Bucket() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder.class);
         }
     
         private int bitField0_;
    @@ -9148,7 +9148,7 @@ public double getUpperBound() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return Whether the exemplar field is set.
    @@ -9162,15 +9162,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -9234,10 +9234,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket) obj;
     
           if (hasCumulativeCount() != other.hasCumulativeCount()) return false;
           if (hasCumulativeCount()) {
    @@ -9296,44 +9296,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9341,26 +9341,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9373,7 +9373,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -9399,21 +9399,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -9426,7 +9426,7 @@ private Builder(
           private void maybeForceBuilderInitialization() {
             if (com.google.protobuf.GeneratedMessage
                     .alwaysUseFieldBuilders) {
    -          getExemplarFieldBuilder();
    +          internalGetExemplarFieldBuilder();
             }
           }
           @java.lang.Override
    @@ -9447,17 +9447,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -9465,14 +9465,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -9498,16 +9498,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.getDefaultInstance()) return this;
             if (other.hasCumulativeCount()) {
               setCumulativeCount(other.getCumulativeCount());
             }
    @@ -9558,7 +9558,7 @@ public Builder mergeFrom(
                   } // case 17
                   case 26: {
                     input.readMessage(
    -                    getExemplarFieldBuilder().getBuilder(),
    +                    internalGetExemplarFieldBuilder().getBuilder(),
                         extensionRegistry);
                     bitField0_ |= 0x00000008;
                     break;
    @@ -9753,9 +9753,9 @@ public Builder clearUpperBound() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar exemplar_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return Whether the exemplar field is set.
    @@ -9767,9 +9767,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -9777,7 +9777,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -9794,7 +9794,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -9807,11 +9807,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -9841,31 +9841,31 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
    -        return getExemplarFieldBuilder().getBuilder();
    +        return internalGetExemplarFieldBuilder().getBuilder();
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder> 
    -          getExemplarFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> 
    +          internalGetExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
               exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -9878,12 +9878,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9919,7 +9919,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Bucket getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9988,8 +9988,8 @@ public static final class BucketSpan extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 29,
    -        /* patch= */ 3,
    +        /* minor= */ 30,
    +        /* patch= */ 0,
             /* suffix= */ "",
             BucketSpan.class.getName());
         }
    @@ -10002,15 +10002,15 @@ private BucketSpan() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder.class);
         }
     
         private int bitField0_;
    @@ -10115,10 +10115,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan) obj;
     
           if (hasOffset() != other.hasOffset()) return false;
           if (hasOffset()) {
    @@ -10154,44 +10154,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10199,26 +10199,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10231,7 +10231,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10261,21 +10261,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.BucketSpan)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpanOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.newBuilder()
           private Builder() {
     
           }
    @@ -10297,17 +10297,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -10315,14 +10315,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -10338,16 +10338,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance()) return this;
             if (other.hasOffset()) {
               setOffset(other.getOffset());
             }
    @@ -10523,12 +10523,12 @@ public Builder clearLength() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.BucketSpan)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10564,7 +10564,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.BucketSpan getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10577,12 +10577,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -10590,12 +10590,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -10648,8 +10648,8 @@ public static final class Exemplar extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 29,
    -        /* patch= */ 3,
    +        /* minor= */ 30,
    +        /* patch= */ 0,
             /* suffix= */ "",
             Exemplar.class.getName());
         }
    @@ -10663,33 +10663,33 @@ private Exemplar() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -10704,14 +10704,14 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
    @@ -10827,10 +10827,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -10874,44 +10874,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10919,26 +10919,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10951,7 +10951,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10972,21 +10972,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Exemplar)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.ExemplarOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -10999,8 +10999,8 @@ private Builder(
           private void maybeForceBuilderInitialization() {
             if (com.google.protobuf.GeneratedMessage
                     .alwaysUseFieldBuilders) {
    -          getLabelFieldBuilder();
    -          getTimestampFieldBuilder();
    +          internalGetLabelFieldBuilder();
    +          internalGetTimestampFieldBuilder();
             }
           }
           @java.lang.Override
    @@ -11026,17 +11026,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -11044,15 +11044,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -11064,7 +11064,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -11082,16 +11082,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -11112,7 +11112,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   bitField0_ = (bitField0_ & ~0x00000001);
                   labelBuilder_ = 
                     com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
    -                   getLabelFieldBuilder() : null;
    +                   internalGetLabelFieldBuilder() : null;
                 } else {
                   labelBuilder_.addAllMessages(other.label_);
                 }
    @@ -11151,9 +11151,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -11170,7 +11170,7 @@ public Builder mergeFrom(
                   } // case 17
                   case 26: {
                     input.readMessage(
    -                    getTimestampFieldBuilder().getBuilder(),
    +                    internalGetTimestampFieldBuilder().getBuilder(),
                         extensionRegistry);
                     bitField0_ |= 0x00000004;
                     break;
    @@ -11192,22 +11192,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -11227,7 +11227,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -11238,7 +11238,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11255,7 +11255,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -11268,7 +11268,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11285,7 +11285,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11302,7 +11302,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -11316,7 +11316,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -11330,7 +11330,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -11370,14 +11370,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
    -        return getLabelFieldBuilder().getBuilder(index);
    +        return internalGetLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -11387,7 +11387,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -11398,31 +11398,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder addLabelBuilder() {
    -        return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance());
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder addLabelBuilder() {
    +        return internalGetLabelFieldBuilder().addBuilder(
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
    -        return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance());
    +        return internalGetLabelFieldBuilder().addBuilder(
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
    -        return getLabelFieldBuilder().getBuilderList();
    +        return internalGetLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder> 
    -          getLabelFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder> 
    +          internalGetLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -11591,7 +11591,7 @@ public Builder clearTimestamp() {
           public com.google.protobuf.Timestamp.Builder getTimestampBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
    -        return getTimestampFieldBuilder().getBuilder();
    +        return internalGetTimestampFieldBuilder().getBuilder();
           }
           /**
            * 
    @@ -11617,7 +11617,7 @@ public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
            */
           private com.google.protobuf.SingleFieldBuilder<
               com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
    -          getTimestampFieldBuilder() {
    +          internalGetTimestampFieldBuilder() {
             if (timestampBuilder_ == null) {
               timestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                   com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
    @@ -11633,12 +11633,12 @@ public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Exemplar)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11674,7 +11674,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Exemplar getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11687,12 +11687,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -11700,12 +11700,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -11717,11 +11717,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return The gauge.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getGauge();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getGauge();
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder getGaugeOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder getGaugeOrBuilder();
     
         /**
          * optional .io.prometheus.client.Counter counter = 3;
    @@ -11732,11 +11732,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          * optional .io.prometheus.client.Counter counter = 3;
          * @return The counter.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getCounter();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getCounter();
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder getCounterOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder getCounterOrBuilder();
     
         /**
          * optional .io.prometheus.client.Summary summary = 4;
    @@ -11747,11 +11747,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          * optional .io.prometheus.client.Summary summary = 4;
          * @return The summary.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getSummary();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getSummary();
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder getSummaryOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder getSummaryOrBuilder();
     
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
    @@ -11762,11 +11762,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return The untyped.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getUntyped();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getUntyped();
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder getUntypedOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder getUntypedOrBuilder();
     
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
    @@ -11777,11 +11777,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Met
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return The histogram.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getHistogram();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getHistogram();
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder getHistogramOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder getHistogramOrBuilder();
     
         /**
          * optional int64 timestamp_ms = 6;
    @@ -11806,8 +11806,8 @@ public static final class Metric extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 29,
    -        /* patch= */ 3,
    +        /* minor= */ 30,
    +        /* patch= */ 0,
             /* suffix= */ "",
             Metric.class.getName());
         }
    @@ -11821,33 +11821,33 @@ private Metric() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -11862,20 +11862,20 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
     
         public static final int GAUGE_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge gauge_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge gauge_;
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return Whether the gauge field is set.
    @@ -11889,19 +11889,19 @@ public boolean hasGauge() {
          * @return The gauge.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getGauge() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getGauge() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
     
         public static final int COUNTER_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter counter_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter counter_;
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          * @return Whether the counter field is set.
    @@ -11915,19 +11915,19 @@ public boolean hasCounter() {
          * @return The counter.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getCounter() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getCounter() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance() : counter_;
         }
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder getCounterOrBuilder() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance() : counter_;
         }
     
         public static final int SUMMARY_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary summary_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary summary_;
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          * @return Whether the summary field is set.
    @@ -11941,19 +11941,19 @@ public boolean hasSummary() {
          * @return The summary.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getSummary() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getSummary() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance() : summary_;
         }
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance() : summary_;
         }
     
         public static final int UNTYPED_FIELD_NUMBER = 5;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped untyped_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped untyped_;
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return Whether the untyped field is set.
    @@ -11967,19 +11967,19 @@ public boolean hasUntyped() {
          * @return The untyped.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getUntyped() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getUntyped() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
     
         public static final int HISTOGRAM_FIELD_NUMBER = 7;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram histogram_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram histogram_;
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return Whether the histogram field is set.
    @@ -11993,15 +11993,15 @@ public boolean hasHistogram() {
          * @return The histogram.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getHistogram() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getHistogram() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
     
         public static final int TIMESTAMP_MS_FIELD_NUMBER = 6;
    @@ -12105,10 +12105,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -12187,44 +12187,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12232,26 +12232,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12264,7 +12264,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -12285,21 +12285,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -12312,12 +12312,12 @@ private Builder(
           private void maybeForceBuilderInitialization() {
             if (com.google.protobuf.GeneratedMessage
                     .alwaysUseFieldBuilders) {
    -          getLabelFieldBuilder();
    -          getGaugeFieldBuilder();
    -          getCounterFieldBuilder();
    -          getSummaryFieldBuilder();
    -          getUntypedFieldBuilder();
    -          getHistogramFieldBuilder();
    +          internalGetLabelFieldBuilder();
    +          internalGetGaugeFieldBuilder();
    +          internalGetCounterFieldBuilder();
    +          internalGetSummaryFieldBuilder();
    +          internalGetUntypedFieldBuilder();
    +          internalGetHistogramFieldBuilder();
             }
           }
           @java.lang.Override
    @@ -12363,17 +12363,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -12381,15 +12381,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -12401,7 +12401,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -12443,16 +12443,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -12473,7 +12473,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   bitField0_ = (bitField0_ & ~0x00000001);
                   labelBuilder_ = 
                     com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
    -                   getLabelFieldBuilder() : null;
    +                   internalGetLabelFieldBuilder() : null;
                 } else {
                   labelBuilder_.addAllMessages(other.label_);
                 }
    @@ -12524,9 +12524,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -12538,28 +12538,28 @@ public Builder mergeFrom(
                   } // case 10
                   case 18: {
                     input.readMessage(
    -                    getGaugeFieldBuilder().getBuilder(),
    +                    internalGetGaugeFieldBuilder().getBuilder(),
                         extensionRegistry);
                     bitField0_ |= 0x00000002;
                     break;
                   } // case 18
                   case 26: {
                     input.readMessage(
    -                    getCounterFieldBuilder().getBuilder(),
    +                    internalGetCounterFieldBuilder().getBuilder(),
                         extensionRegistry);
                     bitField0_ |= 0x00000004;
                     break;
                   } // case 26
                   case 34: {
                     input.readMessage(
    -                    getSummaryFieldBuilder().getBuilder(),
    +                    internalGetSummaryFieldBuilder().getBuilder(),
                         extensionRegistry);
                     bitField0_ |= 0x00000008;
                     break;
                   } // case 34
                   case 42: {
                     input.readMessage(
    -                    getUntypedFieldBuilder().getBuilder(),
    +                    internalGetUntypedFieldBuilder().getBuilder(),
                         extensionRegistry);
                     bitField0_ |= 0x00000010;
                     break;
    @@ -12571,7 +12571,7 @@ public Builder mergeFrom(
                   } // case 48
                   case 58: {
                     input.readMessage(
    -                    getHistogramFieldBuilder().getBuilder(),
    +                    internalGetHistogramFieldBuilder().getBuilder(),
                         extensionRegistry);
                     bitField0_ |= 0x00000020;
                     break;
    @@ -12593,22 +12593,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -12628,7 +12628,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -12639,7 +12639,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12656,7 +12656,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -12669,7 +12669,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12686,7 +12686,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12703,7 +12703,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -12717,7 +12717,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -12731,7 +12731,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -12771,14 +12771,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
    -        return getLabelFieldBuilder().getBuilder(index);
    +        return internalGetLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -12788,7 +12788,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -12799,31 +12799,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder addLabelBuilder() {
    -        return getLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance());
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder addLabelBuilder() {
    +        return internalGetLabelFieldBuilder().addBuilder(
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
    -        return getLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.getDefaultInstance());
    +        return internalGetLabelFieldBuilder().addBuilder(
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
    -        return getLabelFieldBuilder().getBuilderList();
    +        return internalGetLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder> 
    -          getLabelFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder> 
    +          internalGetLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -12833,9 +12833,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return labelBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge gauge_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge gauge_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder> gaugeBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder> gaugeBuilder_;
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return Whether the gauge field is set.
    @@ -12847,9 +12847,9 @@ public boolean hasGauge() {
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return The gauge.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge getGauge() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getGauge() {
             if (gaugeBuilder_ == null) {
    -          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance() : gauge_;
             } else {
               return gaugeBuilder_.getMessage();
             }
    @@ -12857,7 +12857,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge value) {
    +      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12874,7 +12874,7 @@ public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_go
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           public Builder setGauge(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder builderForValue) {
             if (gaugeBuilder_ == null) {
               gauge_ = builderForValue.build();
             } else {
    @@ -12887,11 +12887,11 @@ public Builder setGauge(
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge value) {
    +      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 gauge_ != null &&
    -            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance()) {
    +            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance()) {
                 getGaugeBuilder().mergeFrom(value);
               } else {
                 gauge_ = value;
    @@ -12921,31 +12921,31 @@ public Builder clearGauge() {
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder getGaugeBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder getGaugeBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
    -        return getGaugeFieldBuilder().getBuilder();
    +        return internalGetGaugeFieldBuilder().getBuilder();
           }
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
             if (gaugeBuilder_ != null) {
               return gaugeBuilder_.getMessageOrBuilder();
             } else {
               return gauge_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.getDefaultInstance() : gauge_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance() : gauge_;
             }
           }
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder> 
    -          getGaugeFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder> 
    +          internalGetGaugeFieldBuilder() {
             if (gaugeBuilder_ == null) {
               gaugeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.GaugeOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder>(
                       getGauge(),
                       getParentForChildren(),
                       isClean());
    @@ -12954,9 +12954,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return gaugeBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter counter_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter counter_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder> counterBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder> counterBuilder_;
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            * @return Whether the counter field is set.
    @@ -12968,9 +12968,9 @@ public boolean hasCounter() {
            * optional .io.prometheus.client.Counter counter = 3;
            * @return The counter.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter getCounter() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getCounter() {
             if (counterBuilder_ == null) {
    -          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance() : counter_;
    +          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance() : counter_;
             } else {
               return counterBuilder_.getMessage();
             }
    @@ -12978,7 +12978,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter value) {
    +      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12995,7 +12995,7 @@ public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Counter counter = 3;
            */
           public Builder setCounter(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder builderForValue) {
             if (counterBuilder_ == null) {
               counter_ = builderForValue.build();
             } else {
    @@ -13008,11 +13008,11 @@ public Builder setCounter(
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter value) {
    +      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 counter_ != null &&
    -            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance()) {
    +            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance()) {
                 getCounterBuilder().mergeFrom(value);
               } else {
                 counter_ = value;
    @@ -13042,31 +13042,31 @@ public Builder clearCounter() {
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder getCounterBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder getCounterBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
    -        return getCounterFieldBuilder().getBuilder();
    +        return internalGetCounterFieldBuilder().getBuilder();
           }
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder getCounterOrBuilder() {
             if (counterBuilder_ != null) {
               return counterBuilder_.getMessageOrBuilder();
             } else {
               return counter_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.getDefaultInstance() : counter_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance() : counter_;
             }
           }
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder> 
    -          getCounterFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder> 
    +          internalGetCounterFieldBuilder() {
             if (counterBuilder_ == null) {
               counterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.CounterOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder>(
                       getCounter(),
                       getParentForChildren(),
                       isClean());
    @@ -13075,9 +13075,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return counterBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary summary_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary summary_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder> summaryBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder> summaryBuilder_;
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            * @return Whether the summary field is set.
    @@ -13089,9 +13089,9 @@ public boolean hasSummary() {
            * optional .io.prometheus.client.Summary summary = 4;
            * @return The summary.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary getSummary() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getSummary() {
             if (summaryBuilder_ == null) {
    -          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance() : summary_;
    +          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance() : summary_;
             } else {
               return summaryBuilder_.getMessage();
             }
    @@ -13099,7 +13099,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary value) {
    +      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13116,7 +13116,7 @@ public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Summary summary = 4;
            */
           public Builder setSummary(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder builderForValue) {
             if (summaryBuilder_ == null) {
               summary_ = builderForValue.build();
             } else {
    @@ -13129,11 +13129,11 @@ public Builder setSummary(
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary value) {
    +      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 summary_ != null &&
    -            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance()) {
    +            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance()) {
                 getSummaryBuilder().mergeFrom(value);
               } else {
                 summary_ = value;
    @@ -13163,31 +13163,31 @@ public Builder clearSummary() {
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder getSummaryBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder getSummaryBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
    -        return getSummaryFieldBuilder().getBuilder();
    +        return internalGetSummaryFieldBuilder().getBuilder();
           }
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
             if (summaryBuilder_ != null) {
               return summaryBuilder_.getMessageOrBuilder();
             } else {
               return summary_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.getDefaultInstance() : summary_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance() : summary_;
             }
           }
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder> 
    -          getSummaryFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder> 
    +          internalGetSummaryFieldBuilder() {
             if (summaryBuilder_ == null) {
               summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.SummaryOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder>(
                       getSummary(),
                       getParentForChildren(),
                       isClean());
    @@ -13196,9 +13196,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return summaryBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped untyped_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped untyped_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder> untypedBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder> untypedBuilder_;
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return Whether the untyped field is set.
    @@ -13210,9 +13210,9 @@ public boolean hasUntyped() {
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return The untyped.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped getUntyped() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getUntyped() {
             if (untypedBuilder_ == null) {
    -          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance() : untyped_;
             } else {
               return untypedBuilder_.getMessage();
             }
    @@ -13220,7 +13220,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped value) {
    +      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13237,7 +13237,7 @@ public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           public Builder setUntyped(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder builderForValue) {
             if (untypedBuilder_ == null) {
               untyped_ = builderForValue.build();
             } else {
    @@ -13250,11 +13250,11 @@ public Builder setUntyped(
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped value) {
    +      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 untyped_ != null &&
    -            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance()) {
    +            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance()) {
                 getUntypedBuilder().mergeFrom(value);
               } else {
                 untyped_ = value;
    @@ -13284,31 +13284,31 @@ public Builder clearUntyped() {
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder getUntypedBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder getUntypedBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
    -        return getUntypedFieldBuilder().getBuilder();
    +        return internalGetUntypedFieldBuilder().getBuilder();
           }
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
             if (untypedBuilder_ != null) {
               return untypedBuilder_.getMessageOrBuilder();
             } else {
               return untyped_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.getDefaultInstance() : untyped_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance() : untyped_;
             }
           }
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder> 
    -          getUntypedFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder> 
    +          internalGetUntypedFieldBuilder() {
             if (untypedBuilder_ == null) {
               untypedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.UntypedOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder>(
                       getUntyped(),
                       getParentForChildren(),
                       isClean());
    @@ -13317,9 +13317,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
             return untypedBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram histogram_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram histogram_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder> histogramBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder> histogramBuilder_;
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return Whether the histogram field is set.
    @@ -13331,9 +13331,9 @@ public boolean hasHistogram() {
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return The histogram.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram getHistogram() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getHistogram() {
             if (histogramBuilder_ == null) {
    -          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance() : histogram_;
             } else {
               return histogramBuilder_.getMessage();
             }
    @@ -13341,7 +13341,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram value) {
    +      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13358,7 +13358,7 @@ public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.co
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           public Builder setHistogram(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder builderForValue) {
             if (histogramBuilder_ == null) {
               histogram_ = builderForValue.build();
             } else {
    @@ -13371,11 +13371,11 @@ public Builder setHistogram(
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram value) {
    +      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (((bitField0_ & 0x00000020) != 0) &&
                 histogram_ != null &&
    -            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance()) {
    +            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance()) {
                 getHistogramBuilder().mergeFrom(value);
               } else {
                 histogram_ = value;
    @@ -13405,31 +13405,31 @@ public Builder clearHistogram() {
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder getHistogramBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder getHistogramBuilder() {
             bitField0_ |= 0x00000020;
             onChanged();
    -        return getHistogramFieldBuilder().getBuilder();
    +        return internalGetHistogramFieldBuilder().getBuilder();
           }
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
             if (histogramBuilder_ != null) {
               return histogramBuilder_.getMessageOrBuilder();
             } else {
               return histogram_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.getDefaultInstance() : histogram_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance() : histogram_;
             }
           }
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder> 
    -          getHistogramFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder> 
    +          internalGetHistogramFieldBuilder() {
             if (histogramBuilder_ == null) {
               histogramBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.HistogramOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder>(
                       getHistogram(),
                       getParentForChildren(),
                       isClean());
    @@ -13482,12 +13482,12 @@ public Builder clearTimestampMs() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13523,7 +13523,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13576,17 +13576,17 @@ public interface MetricFamilyOrBuilder extends
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType getType();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType getType();
     
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getMetric(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getMetric(int index);
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    @@ -13594,12 +13594,12 @@ public interface MetricFamilyOrBuilder extends
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricOrBuilderList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index);
     
         /**
    @@ -13631,8 +13631,8 @@ public static final class MetricFamily extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 29,
    -        /* patch= */ 3,
    +        /* minor= */ 30,
    +        /* patch= */ 0,
             /* suffix= */ "",
             MetricFamily.class.getName());
         }
    @@ -13650,15 +13650,15 @@ private MetricFamily() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.Builder.class);
         }
     
         private int bitField0_;
    @@ -13773,26 +13773,26 @@ public java.lang.String getHelp() {
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType getType() {
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType.forNumber(type_);
    -      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType.COUNTER : result;
    +    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType getType() {
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType.forNumber(type_);
    +      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType.COUNTER : result;
         }
     
         public static final int METRIC_FIELD_NUMBER = 4;
         @SuppressWarnings("serial")
    -    private java.util.List metric_;
    +    private java.util.List metric_;
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List getMetricList() {
    +    public java.util.List getMetricList() {
           return metric_;
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getMetricOrBuilderList() {
           return metric_;
         }
    @@ -13807,14 +13807,14 @@ public int getMetricCount() {
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getMetric(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getMetric(int index) {
           return metric_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index) {
           return metric_.get(index);
         }
    @@ -13933,10 +13933,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -13995,44 +13995,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14040,26 +14040,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14072,7 +14072,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -14093,21 +14093,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamilyOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamilyOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.newBuilder()
           private Builder() {
     
           }
    @@ -14138,17 +14138,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -14156,15 +14156,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily result) {
             if (metricBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 metric_ = java.util.Collections.unmodifiableList(metric_);
    @@ -14176,7 +14176,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -14200,16 +14200,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -14243,7 +14243,7 @@ public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_g
                   bitField0_ = (bitField0_ & ~0x00000008);
                   metricBuilder_ = 
                     com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
    -                   getMetricFieldBuilder() : null;
    +                   internalGetMetricFieldBuilder() : null;
                 } else {
                   metricBuilder_.addAllMessages(other.metric_);
                 }
    @@ -14292,8 +14292,8 @@ public Builder mergeFrom(
                   } // case 18
                   case 24: {
                     int tmpRaw = input.readEnum();
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType tmpValue =
    -                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType.forNumber(tmpRaw);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType tmpValue =
    +                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType.forNumber(tmpRaw);
                     if (tmpValue == null) {
                       mergeUnknownVarintField(3, tmpRaw);
                     } else {
    @@ -14303,9 +14303,9 @@ public Builder mergeFrom(
                     break;
                   } // case 24
                   case 34: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.parser(),
                             extensionRegistry);
                     if (metricBuilder_ == null) {
                       ensureMetricIsMutable();
    @@ -14510,16 +14510,16 @@ public Builder setHelpBytes(
            * @return The type.
            */
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType getType() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType.forNumber(type_);
    -        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType.COUNTER : result;
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType getType() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType.forNumber(type_);
    +        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType.COUNTER : result;
           }
           /**
            * optional .io.prometheus.client.MetricType type = 3;
            * @param value The type to set.
            * @return This builder for chaining.
            */
    -      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricType value) {
    +      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType value) {
             if (value == null) {
               throw new NullPointerException();
             }
    @@ -14539,22 +14539,22 @@ public Builder clearType() {
             return this;
           }
     
    -      private java.util.List metric_ =
    +      private java.util.List metric_ =
             java.util.Collections.emptyList();
           private void ensureMetricIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          metric_ = new java.util.ArrayList(metric_);
    +          metric_ = new java.util.ArrayList(metric_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder> metricBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder> metricBuilder_;
     
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List getMetricList() {
    +      public java.util.List getMetricList() {
             if (metricBuilder_ == null) {
               return java.util.Collections.unmodifiableList(metric_);
             } else {
    @@ -14574,7 +14574,7 @@ public int getMetricCount() {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric getMetric(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getMetric(int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);
             } else {
    @@ -14585,7 +14585,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14602,7 +14602,7 @@ public Builder setMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.set(index, builderForValue.build());
    @@ -14615,7 +14615,7 @@ public Builder setMetric(
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric value) {
    +      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14632,7 +14632,7 @@ public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14649,7 +14649,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(builderForValue.build());
    @@ -14663,7 +14663,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(index, builderForValue.build());
    @@ -14677,7 +14677,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addAllMetric(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -14717,14 +14717,14 @@ public Builder removeMetric(int index) {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder getMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder getMetricBuilder(
               int index) {
    -        return getMetricFieldBuilder().getBuilder(index);
    +        return internalGetMetricFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder getMetricOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder getMetricOrBuilder(
               int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);  } else {
    @@ -14734,7 +14734,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricOrBuilderList() {
             if (metricBuilder_ != null) {
               return metricBuilder_.getMessageOrBuilderList();
    @@ -14745,31 +14745,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder addMetricBuilder() {
    -        return getMetricFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.getDefaultInstance());
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder addMetricBuilder() {
    +        return internalGetMetricFieldBuilder().addBuilder(
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder addMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder addMetricBuilder(
               int index) {
    -        return getMetricFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.getDefaultInstance());
    +        return internalGetMetricFieldBuilder().addBuilder(
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricBuilderList() {
    -        return getMetricFieldBuilder().getBuilderList();
    +        return internalGetMetricFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder> 
    -          getMetricFieldBuilder() {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder> 
    +          internalGetMetricFieldBuilder() {
             if (metricBuilder_ == null) {
               metricBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder>(
                       metric_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -14863,12 +14863,12 @@ public Builder setUnitBytes(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -14904,7 +14904,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics.MetricFamily getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -15029,7 +15029,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_2
           "\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004\022\023\n\017GAUGE_H" +
           "ISTOGRAM\020\005B\212\001\nLio.prometheus.metrics.exp" +
           "ositionformats.generated.com_google_prot" +
    -      "obuf_4_29_3Z:github.com/prometheus/clien" +
    +      "obuf_4_30_0Z:github.com/prometheus/clien" +
           "t_model/go;io_prometheus_client"
         };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    index 608a13caa..9902dc9f1 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    @@ -4,7 +4,7 @@
     
     import com.google.protobuf.TextFormat;
     import io.prometheus.metrics.expositionformats.ExpositionFormatWriter;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot;
    diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java
    index edb28ab67..4dc9b5d83 100644
    --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java
    +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java
    @@ -2,7 +2,7 @@
     
     import static org.assertj.core.api.Assertions.assertThat;
     
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_29_3.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.MetricSnapshot;
    
    From 929e1e63016d3f4066f5a9f1c08ee26aee4159bf Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Thu, 6 Mar 2025 16:38:15 +0100
    Subject: [PATCH 303/870] Bump jetty-server.version from 12.0.16 to 12.0.17
     (#1300)
    
    Bumps `jetty-server.version` from 12.0.16 to 12.0.17.
    Updates `org.eclipse.jetty:jetty-server` from 12.0.16 to 12.0.17
    
    Updates `org.eclipse.jetty.ee10:jetty-ee10-servlet` from 12.0.16 to
    12.0.17
    
    
    Dependabot will resolve any conflicts with this PR as long as you don't
    alter it yourself. You can also trigger a rebase manually by commenting
    `@dependabot rebase`.
    
    [//]: # (dependabot-automerge-start)
    [//]: # (dependabot-automerge-end)
    
    ---
    
    
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index fed800096..b16daa73d 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -15,7 +15,7 @@ Jetty Sample for the Exporter Integration Test - 12.0.16 + 12.0.17 17 From ef4b5bf826c6f2839813cde88edcda002931e03b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 16:38:24 +0100 Subject: [PATCH 304/870] Bump org.apache.tomcat.embed:tomcat-embed-core from 11.0.4 to 11.0.5 (#1301) Bumps org.apache.tomcat.embed:tomcat-embed-core from 11.0.4 to 11.0.5. [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.tomcat.embed:tomcat-embed-core&package-manager=maven&previous-version=11.0.4&new-version=11.0.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 2530297a8..88f2c56b2 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.4 + 11.0.5 diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 7d0f49aff..98acbe4e8 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.4 + 11.0.5 diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 3632748fb..b30d8c5f8 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.4 + 11.0.5 diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index f320764a1..0930052c9 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -33,7 +33,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.4 + 11.0.5 From a4ef5f1b388762548d63816a04e26f5f3b5c754c Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 10 Mar 2025 22:33:54 +1100 Subject: [PATCH 305/870] fix method name in two Histogram builder method javadocs (#1302) Signed-off-by: Benjamin Peterson --- .../java/io/prometheus/metrics/core/metrics/Histogram.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java index 8f76819f1..327867fd0 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/Histogram.java @@ -765,7 +765,7 @@ public Builder classicUpperBounds(double... upperBounds) { /** * Create classic histogram buckets with linear bucket boundaries. * - *

    Example: {@code withClassicLinearBuckets(1.0, 0.5, 10)} creates bucket boundaries {@code + *

    Example: {@code classicLinearUpperBounds(1.0, 0.5, 10)} creates bucket boundaries {@code * [[1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5]}. * * @param start is the first bucket boundary @@ -786,7 +786,7 @@ public Builder classicLinearUpperBounds(double start, double width, int count) { /** * Create classic histogram buckets with exponential boundaries. * - *

    Example: {@code withClassicExponentialBuckets(1.0, 2.0, 10)} creates bucket boundaries + *

    Example: {@code classicExponentialUpperBounds(1.0, 2.0, 10)} creates bucket boundaries * {@code [1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0]} * * @param start is the first bucket boundary From 2d16e8ae4809eef5e116778ebb147ccd9bd8e669 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 11:44:10 +0100 Subject: [PATCH 306/870] Bump junit-jupiter.version from 5.12.0 to 5.12.1 (#1304) Bumps `junit-jupiter.version` from 5.12.0 to 5.12.1. Updates `org.junit.jupiter:junit-jupiter` from 5.12.0 to 5.12.1

    Release notes

    Sourced from org.junit.jupiter:junit-jupiter's releases.

    JUnit 5.12.1 = Platform 1.12.1 + Jupiter 5.12.1 + Vintage 5.12.1

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1

    Commits
    • ba9c9ae Release 5.12.1
    • e28ad4a Finalize 5.12.1 release notes
    • 1044e2c Move entry to 5.12.1 release notes
    • bea821d Fix Javadoc formatting
    • 1a1a67d Set stable module name for the standalone JAR file
    • 062d3fa Remove internal packages from API reports
    • 74521ab Introduce ExtensionContext.getEnclosingTestClasses()
    • 1e135b9 Create initial 5.12.1 release notes from template
    • d540e4f Link to correct method
    • 31d60b7 Split API reports by module and package
    • Additional commits viewable in compare view

    Updates `org.junit.jupiter:junit-jupiter-params` from 5.12.0 to 5.12.1
    Release notes

    Sourced from org.junit.jupiter:junit-jupiter-params's releases.

    JUnit 5.12.1 = Platform 1.12.1 + Jupiter 5.12.1 + Vintage 5.12.1

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1

    Commits
    • ba9c9ae Release 5.12.1
    • e28ad4a Finalize 5.12.1 release notes
    • 1044e2c Move entry to 5.12.1 release notes
    • bea821d Fix Javadoc formatting
    • 1a1a67d Set stable module name for the standalone JAR file
    • 062d3fa Remove internal packages from API reports
    • 74521ab Introduce ExtensionContext.getEnclosingTestClasses()
    • 1e135b9 Create initial 5.12.1 release notes from template
    • d540e4f Link to correct method
    • 31d60b7 Split API reports by module and package
    • Additional commits viewable in compare view

    Updates `org.junit:junit-bom` from 5.12.0 to 5.12.1
    Release notes

    Sourced from org.junit:junit-bom's releases.

    JUnit 5.12.1 = Platform 1.12.1 + Jupiter 5.12.1 + Vintage 5.12.1

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1

    Commits
    • ba9c9ae Release 5.12.1
    • e28ad4a Finalize 5.12.1 release notes
    • 1044e2c Move entry to 5.12.1 release notes
    • bea821d Fix Javadoc formatting
    • 1a1a67d Set stable module name for the standalone JAR file
    • 062d3fa Remove internal packages from API reports
    • 74521ab Introduce ExtensionContext.getEnclosingTestClasses()
    • 1e135b9 Create initial 5.12.1 release notes from template
    • d540e4f Link to correct method
    • 31d60b7 Split API reports by module and package
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5f2029594..edd9c7014 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ UTF-8 --module-name-need-to-be-overriden-- 33.4.0-jre - 5.12.0 + 5.12.1 2.13.3-alpha 8 0.70 From 7572b1faf599e13605a270152983bebd28adb516 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 11:59:07 +0100 Subject: [PATCH 307/870] Bump io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha from 2.13.3-alpha to 2.14.0-alpha (#1306) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://github.com/open-telemetry/opentelemetry-java-instrumentation) from 2.13.3-alpha to 2.14.0-alpha.
    Release notes

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's releases.

    Version 2.13.3

    This is a patch release on the previous 2.13.2 release, fixing the issue(s) below.

    🛠️ Bug fixes

    • Backport: Fix failure to start when AWS Resource Provider is enabled (#13420)
    Changelog

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's changelog.

    Changelog

    Unreleased

    Version 2.14.0 (2025-03-13)

    Migration notes

    • The java.net.http.HttpClient instrumentation package io.opentelemetry.instrumentation.httpclient was deprecated in favor of the new package name io.opentelemetry.instrumentation.javahttpclient
    • The experimental opt-in jvm.buffer.memory.usage metric was renamed to jvm.buffer.memory.used in order to follow general semantic convention naming
    • The Http *TelemetryBuilder generic signatures were simplified (#12858)

    🌟 New javaagent instrumentation

    🌟 New library instrumentation

    📈 Enhancements

    • Support virtual threads in Spring Scheduling instrumentation (#13370)
    • Redact query string values for http client spans (#13114)
    • Support attribute lowercase modifier in JMX metrics yaml definitions (#13385)
    • Add tapir path matching within pekko instrumentation (#13386)
    • Support latest Axis2 version (#13490)

    ... (truncated)

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha&package-manager=maven&previous-version=2.13.3-alpha&new-version=2.14.0-alpha)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index edd9c7014..5e6eb6987 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ --module-name-need-to-be-overriden-- 33.4.0-jre 5.12.1 - 2.13.3-alpha + 2.14.0-alpha 8 0.70 false From 3180503934e49e32a05d06f7d8e0e2caa8630e29 Mon Sep 17 00:00:00 2001 From: Edoardo Comar Date: Mon, 17 Mar 2025 13:04:44 +0000 Subject: [PATCH 308/870] Set a name to threads created by Scheduler Threadfactory (#1307) Use prefix "prometheus-metrics-scheduler-" plus counter. Used in conjunction with https://issues.apache.org/jira/browse/KAFKA-18982 --------- Signed-off-by: Edoardo Comar --- .../java/io/prometheus/metrics/core/util/Scheduler.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java index 96e0643c5..9dc6b79fe 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/util/Scheduler.java @@ -14,9 +14,15 @@ public class Scheduler { private static class DaemonThreadFactory implements ThreadFactory { + private static int threadNum; + + private static synchronized int nextThreadNum() { + return threadNum++; + } + @Override public Thread newThread(Runnable runnable) { - Thread thread = new Thread(runnable); + Thread thread = new Thread(runnable, "prometheus-metrics-scheduler-" + nextThreadNum()); thread.setDaemon(true); return thread; } From 294c8b6775b80186a0bf3e432c5a2a7f50c92d85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 14:05:53 +0100 Subject: [PATCH 309/870] Bump com.google.protobuf:protobuf-java from 4.30.0 to 4.30.1 (#1305) Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.30.0 to 4.30.1.
    Commits
    • 0d815c5 Updating version.json and repo version numbers to: 30.1
    • ebb5224 Re-add system_python repo alias to MODULE.bazel (#20662)
    • 4747628 Remove Java runtime classes from kotlin release. (#20607)
    • 250c550 Fix python codegen crash when C++ features are used. (#20577)
    • 3576a1f Loosen py_proto_library check to be on the import path instead of full direct...
    • efa65c5 Merge pull request #20562 from protocolbuffers/30.x-202503042254
    • 63fc9d6 Updating version.json and repo version numbers to: 30.1-dev
    • See full diff in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.protobuf:protobuf-java&package-manager=maven&previous-version=4.30.0&new-version=4.30.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .github/workflows/build.yml | 9 +- .tool-versions | 2 - CONTRIBUTING.md | 2 + .../client/it/common/ExporterTest.java | 2 +- .../metrics/it/exporter/test/ExporterIT.java | 2 +- .../it/springboot/ApplicationTest.java | 2 +- mise.toml | 15 + .../metrics/core/metrics/CounterTest.java | 2 +- .../metrics/core/metrics/HistogramTest.java | 2 +- .../metrics/core/metrics/InfoTest.java | 2 +- .../generate-protobuf.sh | 8 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- .../Metrics.java | 1810 ++++++++--------- .../PrometheusProtobufWriterImpl.java | 2 +- .../ProtobufExpositionFormatsTest.java | 2 +- 15 files changed, 938 insertions(+), 926 deletions(-) delete mode 100644 .tool-versions create mode 100644 mise.toml rename prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/{com_google_protobuf_4_30_0 => com_google_protobuf_4_30_1}/Metrics.java (89%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cd607b3eb..63901f9f4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,8 +11,7 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - - name: Setup ASDF - uses: equisoft-actions/with-asdf-vm@v2 + - uses: jdx/mise-action@v2 - name: Cache local Maven repository uses: actions/cache@v4 with: @@ -24,7 +23,5 @@ jobs: env: PROTO_GENERATION: true REQUIRE_PROTO_UP_TO_DATE: true - run: | - mvn -v - ./mvnw clean install - ./mvnw javadoc:javadoc -P javadoc # just to check if javadoc is generated + run: mise run ci + diff --git a/.tool-versions b/.tool-versions deleted file mode 100644 index 6e9434844..000000000 --- a/.tool-versions +++ /dev/null @@ -1,2 +0,0 @@ -java temurin-17.0.13+11 -protoc 30.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c27647e49..498aa945f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,6 +30,8 @@ If you're getting errors when running tests: - Use `-Dcheckstyle.skip=true` to skip the checkstyle check during development. - Use `-Dwarnings=-nowarn` to skip the warnings during development. +Combine all with `mvn test -DskipTests=true -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn`. + ## Updating the Protobuf Java Classes Use `PROTO_GENERATION=true mvn clean install` to generate protobuf classes. diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java index 88453fa56..487eb55c4 100644 --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index d7645a575..47995b22d 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -5,7 +5,7 @@ import com.google.common.io.Resources; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; import java.io.IOException; import java.net.URISyntaxException; import java.net.URLEncoder; diff --git a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java index 64c843edb..5e76d0983 100644 --- a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java +++ b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java @@ -3,7 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; import java.io.IOException; import java.net.URL; import java.util.List; diff --git a/mise.toml b/mise.toml new file mode 100644 index 000000000..4d751096b --- /dev/null +++ b/mise.toml @@ -0,0 +1,15 @@ +[env] +PROTO_GENERATION = "true" + +[tools] +java = "temurin-17.0.13+11" +protoc = "30.1" + +[tasks.ci] +description = "CI Build" +run = [ + "./mvnw clean install", + # just to check if javadoc can be generated + "./mvnw javadoc:javadoc -P javadoc" +] +env = { PROTO_GENERATION = "true", REQUIRE_PROTO_UP_TO_DATE = "true" } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index c04055fc4..2f765543c 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -6,7 +6,7 @@ import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.CounterSnapshot; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index 47b059588..915548cef 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -8,7 +8,7 @@ import io.prometheus.metrics.core.datapoints.DistributionDataPoint; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index 275041724..ee3252317 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.Labels; diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index 30e83cfa3..26a1f05eb 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -36,15 +36,15 @@ GENERATED_WITH=$(grep -oP '\/\/ Protobuf Java Version: \K.*' "$TARGET_DIR/${PACK if [[ $GENERATED_WITH != "$PROTOBUF_VERSION" ]]; then echo "Generated protobuf sources version $GENERATED_WITH does not match provided version $PROTOBUF_VERSION" - echo "Please update the protoc version .tool-versions to the latest version of https://github.com/protocolbuffers/protobuf/releases" - echo "Please use https://github.com/asdf-vm/asdf - this will use the version specified in .tool-versions" - echo "Generated protobuf sources are not up-to-date. Please run 'PROTO_GENERATION=true mvn clean install' and commit the changes." + echo "Please use https://mise.jdx.dev/ - this will use the version specified in mise.toml" + echo "Generated protobuf sources are not up-to-date. Please run 'mise up && mvn clean install' and commit the changes." exit 1 fi STATUS=$(git status --porcelain) if [[ ${REQUIRE_PROTO_UP_TO_DATE:-false} == "true" && -n "$STATUS" ]]; then - echo "Generated protobuf sources are not up-to-date. Please run 'PROTO_GENERATION=true mvn clean install' and commit the changes." + echo "Please use https://mise.jdx.dev/ - this will use the version specified in mise.toml" + echo "Generated protobuf sources are not up-to-date. Please run 'mvn clean install' and commit the changes." echo "Local changes:" echo "$STATUS" exit 1 diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 56b7c6c4d..c6b9e47ca 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -20,7 +20,7 @@ io.prometheus.metrics.expositionformats - 4.30.0 + 4.30.1 diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_0/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_1/Metrics.java similarity index 89% rename from prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_0/Metrics.java rename to prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_1/Metrics.java index 523e8fa3a..88c93489b 100644 --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_0/Metrics.java +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_1/Metrics.java @@ -2,9 +2,9 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: src/main/protobuf/metrics.proto -// Protobuf Java Version: 4.30.0 +// Protobuf Java Version: 4.30.1 -package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0; +package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1; public final class Metrics { private Metrics() {} @@ -13,7 +13,7 @@ private Metrics() {} com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 0, + /* patch= */ 1, /* suffix= */ "", Metrics.class.getName()); } @@ -86,7 +86,7 @@ public enum MetricType com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 0, + /* patch= */ 1, /* suffix= */ "", MetricType.class.getName()); } @@ -192,7 +192,7 @@ public MetricType findValueByNumber(int number) { } public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.getDescriptor().getEnumTypes().get(0); + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.getDescriptor().getEnumTypes().get(0); } private static final MetricType[] VALUES = values(); @@ -266,7 +266,7 @@ public static final class LabelPair extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 0, + /* patch= */ 1, /* suffix= */ "", LabelPair.class.getName()); } @@ -281,15 +281,15 @@ private LabelPair() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder.class); } private int bitField0_; @@ -436,10 +436,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair) obj; if (hasName() != other.hasName()) return false; if (hasName()) { @@ -475,44 +475,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -520,26 +520,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -552,7 +552,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -573,21 +573,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.newBuilder() private Builder() { } @@ -609,17 +609,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -627,14 +627,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -650,16 +650,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance()) return this; if (other.hasName()) { name_ = other.name_; bitField0_ |= 0x00000001; @@ -887,12 +887,12 @@ public Builder setValueBytes( } // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -928,7 +928,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -962,7 +962,7 @@ public static final class Gauge extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 0, + /* patch= */ 1, /* suffix= */ "", Gauge.class.getName()); } @@ -975,15 +975,15 @@ private Gauge() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder.class); } private int bitField0_; @@ -1046,10 +1046,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -1078,44 +1078,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1123,26 +1123,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1155,7 +1155,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1176,21 +1176,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.newBuilder() private Builder() { } @@ -1211,17 +1211,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1229,14 +1229,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1248,16 +1248,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -1353,12 +1353,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -1394,7 +1394,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -1424,11 +1424,11 @@ public interface CounterOrBuilder extends * optional .io.prometheus.client.Exemplar exemplar = 2; * @return The exemplar. */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar(); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar(); /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder(); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder(); /** * optional .google.protobuf.Timestamp created_timestamp = 3; @@ -1458,7 +1458,7 @@ public static final class Counter extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 0, + /* patch= */ 1, /* suffix= */ "", Counter.class.getName()); } @@ -1471,15 +1471,15 @@ private Counter() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder.class); } private int bitField0_; @@ -1503,7 +1503,7 @@ public double getValue() { } public static final int EXEMPLAR_FIELD_NUMBER = 2; - private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar exemplar_; + private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar exemplar_; /** * optional .io.prometheus.client.Exemplar exemplar = 2; * @return Whether the exemplar field is set. @@ -1517,15 +1517,15 @@ public boolean hasExemplar() { * @return The exemplar. */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar() { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar() { + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; } public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 3; @@ -1608,10 +1608,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -1658,44 +1658,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1703,26 +1703,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1735,7 +1735,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1756,21 +1756,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -1808,17 +1808,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1826,14 +1826,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1857,16 +1857,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -1978,9 +1978,9 @@ public Builder clearValue() { return this; } - private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar exemplar_; + private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar exemplar_; private com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> exemplarBuilder_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> exemplarBuilder_; /** * optional .io.prometheus.client.Exemplar exemplar = 2; * @return Whether the exemplar field is set. @@ -1992,9 +1992,9 @@ public boolean hasExemplar() { * optional .io.prometheus.client.Exemplar exemplar = 2; * @return The exemplar. */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar() { if (exemplarBuilder_ == null) { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; } else { return exemplarBuilder_.getMessage(); } @@ -2002,7 +2002,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) { + public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) { if (exemplarBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -2019,7 +2019,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com * optional .io.prometheus.client.Exemplar exemplar = 2; */ public Builder setExemplar( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder builderForValue) { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder builderForValue) { if (exemplarBuilder_ == null) { exemplar_ = builderForValue.build(); } else { @@ -2032,11 +2032,11 @@ public Builder setExemplar( /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) { + public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) { if (exemplarBuilder_ == null) { if (((bitField0_ & 0x00000002) != 0) && exemplar_ != null && - exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance()) { + exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance()) { getExemplarBuilder().mergeFrom(value); } else { exemplar_ = value; @@ -2066,7 +2066,7 @@ public Builder clearExemplar() { /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder getExemplarBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder getExemplarBuilder() { bitField0_ |= 0x00000002; onChanged(); return internalGetExemplarFieldBuilder().getBuilder(); @@ -2074,23 +2074,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { if (exemplarBuilder_ != null) { return exemplarBuilder_.getMessageOrBuilder(); } else { return exemplar_ == null ? - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; } } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ private com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> internalGetExemplarFieldBuilder() { if (exemplarBuilder_ == null) { exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder>( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder>( getExemplar(), getParentForChildren(), isClean()); @@ -2224,12 +2224,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -2265,7 +2265,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -2310,7 +2310,7 @@ public static final class Quantile extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 0, + /* patch= */ 1, /* suffix= */ "", Quantile.class.getName()); } @@ -2323,15 +2323,15 @@ private Quantile() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder.class); } private int bitField0_; @@ -2420,10 +2420,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile) obj; if (hasQuantile() != other.hasQuantile()) return false; if (hasQuantile()) { @@ -2463,44 +2463,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2508,26 +2508,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2540,7 +2540,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -2561,21 +2561,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.newBuilder() private Builder() { } @@ -2597,17 +2597,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -2615,14 +2615,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -2638,16 +2638,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.getDefaultInstance()) return this; if (other.hasQuantile()) { setQuantile(other.getQuantile()); } @@ -2791,12 +2791,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -2832,7 +2832,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -2867,12 +2867,12 @@ public interface SummaryOrBuilder extends /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - java.util.List + java.util.List getQuantileList(); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getQuantile(int index); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getQuantile(int index); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @@ -2880,12 +2880,12 @@ public interface SummaryOrBuilder extends /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - java.util.List + java.util.List getQuantileOrBuilderList(); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder getQuantileOrBuilder( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index); /** @@ -2916,7 +2916,7 @@ public static final class Summary extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 0, + /* patch= */ 1, /* suffix= */ "", Summary.class.getName()); } @@ -2930,15 +2930,15 @@ private Summary() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder.class); } private int bitField0_; @@ -2982,19 +2982,19 @@ public double getSampleSum() { public static final int QUANTILE_FIELD_NUMBER = 3; @SuppressWarnings("serial") - private java.util.List quantile_; + private java.util.List quantile_; /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public java.util.List getQuantileList() { + public java.util.List getQuantileList() { return quantile_; } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public java.util.List + public java.util.List getQuantileOrBuilderList() { return quantile_; } @@ -3009,14 +3009,14 @@ public int getQuantileCount() { * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getQuantile(int index) { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getQuantile(int index) { return quantile_.get(index); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder getQuantileOrBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index) { return quantile_.get(index); } @@ -3108,10 +3108,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary) obj; if (hasSampleCount() != other.hasSampleCount()) return false; if (hasSampleCount()) { @@ -3165,44 +3165,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3210,26 +3210,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3242,7 +3242,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -3263,21 +3263,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -3318,17 +3318,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -3336,15 +3336,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary(this); buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary result) { + private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary result) { if (quantileBuilder_ == null) { if (((bitField0_ & 0x00000004) != 0)) { quantile_ = java.util.Collections.unmodifiableList(quantile_); @@ -3356,7 +3356,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats. } } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -3378,16 +3378,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance()) return this; if (other.hasSampleCount()) { setSampleCount(other.getSampleCount()); } @@ -3460,9 +3460,9 @@ public Builder mergeFrom( break; } // case 17 case 26: { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile m = + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile m = input.readMessage( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.parser(), + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.parser(), extensionRegistry); if (quantileBuilder_ == null) { ensureQuantileIsMutable(); @@ -3576,22 +3576,22 @@ public Builder clearSampleSum() { return this; } - private java.util.List quantile_ = + private java.util.List quantile_ = java.util.Collections.emptyList(); private void ensureQuantileIsMutable() { if (!((bitField0_ & 0x00000004) != 0)) { - quantile_ = new java.util.ArrayList(quantile_); + quantile_ = new java.util.ArrayList(quantile_); bitField0_ |= 0x00000004; } } private com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder> quantileBuilder_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder> quantileBuilder_; /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List getQuantileList() { + public java.util.List getQuantileList() { if (quantileBuilder_ == null) { return java.util.Collections.unmodifiableList(quantile_); } else { @@ -3611,7 +3611,7 @@ public int getQuantileCount() { /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile getQuantile(int index) { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getQuantile(int index) { if (quantileBuilder_ == null) { return quantile_.get(index); } else { @@ -3622,7 +3622,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder setQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile value) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3639,7 +3639,7 @@ public Builder setQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder setQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder builderForValue) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.set(index, builderForValue.build()); @@ -3652,7 +3652,7 @@ public Builder setQuantile( /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile value) { + public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3669,7 +3669,7 @@ public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile value) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3686,7 +3686,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder builderForValue) { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.add(builderForValue.build()); @@ -3700,7 +3700,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder builderForValue) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.add(index, builderForValue.build()); @@ -3714,7 +3714,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addAllQuantile( - java.lang.Iterable values) { + java.lang.Iterable values) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( @@ -3754,14 +3754,14 @@ public Builder removeQuantile(int index) { /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder getQuantileBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder getQuantileBuilder( int index) { return internalGetQuantileFieldBuilder().getBuilder(index); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder getQuantileOrBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index) { if (quantileBuilder_ == null) { return quantile_.get(index); } else { @@ -3771,7 +3771,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List + public java.util.List getQuantileOrBuilderList() { if (quantileBuilder_ != null) { return quantileBuilder_.getMessageOrBuilderList(); @@ -3782,31 +3782,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder addQuantileBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder addQuantileBuilder() { return internalGetQuantileFieldBuilder().addBuilder( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.getDefaultInstance()); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.getDefaultInstance()); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder addQuantileBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder addQuantileBuilder( int index) { return internalGetQuantileFieldBuilder().addBuilder( - index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.getDefaultInstance()); + index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.getDefaultInstance()); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List + public java.util.List getQuantileBuilderList() { return internalGetQuantileFieldBuilder().getBuilderList(); } private com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder> + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder> internalGetQuantileFieldBuilder() { if (quantileBuilder_ == null) { quantileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.QuantileOrBuilder>( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder>( quantile_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), @@ -3941,12 +3941,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -3982,7 +3982,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -4016,7 +4016,7 @@ public static final class Untyped extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 0, + /* patch= */ 1, /* suffix= */ "", Untyped.class.getName()); } @@ -4029,15 +4029,15 @@ private Untyped() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder.class); } private int bitField0_; @@ -4100,10 +4100,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -4132,44 +4132,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -4177,26 +4177,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -4209,7 +4209,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -4230,21 +4230,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.newBuilder() private Builder() { } @@ -4265,17 +4265,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -4283,14 +4283,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -4302,16 +4302,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -4407,12 +4407,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -4448,7 +4448,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -4506,7 +4506,7 @@ public interface HistogramOrBuilder extends * * repeated .io.prometheus.client.Bucket bucket = 3; */ - java.util.List + java.util.List getBucketList(); /** *
    @@ -4515,7 +4515,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getBucket(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getBucket(int index);
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -4531,7 +4531,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketOrBuilderList();
         /**
          * 
    @@ -4540,7 +4540,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index);
     
         /**
    @@ -4649,7 +4649,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanList();
         /**
          * 
    @@ -4658,7 +4658,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getNegativeSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getNegativeSpan(int index);
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -4674,7 +4674,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanOrBuilderList();
         /**
          * 
    @@ -4683,7 +4683,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index);
     
         /**
    @@ -4760,7 +4760,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanList();
         /**
          * 
    @@ -4772,7 +4772,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getPositiveSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getPositiveSpan(int index);
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -4794,7 +4794,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanOrBuilderList();
         /**
          * 
    @@ -4806,7 +4806,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index);
     
         /**
    @@ -4880,7 +4880,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsList();
         /**
          * 
    @@ -4889,7 +4889,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplars(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplars(int index);
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -4905,7 +4905,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsOrBuilderList();
         /**
          * 
    @@ -4914,7 +4914,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index);
       }
       /**
    @@ -4930,7 +4930,7 @@ public static final class Histogram extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 0,
    +        /* patch= */ 1,
             /* suffix= */ "",
             Histogram.class.getName());
         }
    @@ -4951,15 +4951,15 @@ private Histogram() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder.class);
         }
     
         private int bitField0_;
    @@ -5030,7 +5030,7 @@ public double getSampleSum() {
     
         public static final int BUCKET_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List bucket_;
    +    private java.util.List bucket_;
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -5039,7 +5039,7 @@ public double getSampleSum() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List getBucketList() {
    +    public java.util.List getBucketList() {
           return bucket_;
         }
         /**
    @@ -5050,7 +5050,7 @@ public java.util.Listrepeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getBucketOrBuilderList() {
           return bucket_;
         }
    @@ -5073,7 +5073,7 @@ public int getBucketCount() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getBucket(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getBucket(int index) {
           return bucket_.get(index);
         }
         /**
    @@ -5084,7 +5084,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index) {
           return bucket_.get(index);
         }
    @@ -5233,7 +5233,7 @@ public double getZeroCountFloat() {
     
         public static final int NEGATIVE_SPAN_FIELD_NUMBER = 9;
         @SuppressWarnings("serial")
    -    private java.util.List negativeSpan_;
    +    private java.util.List negativeSpan_;
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -5242,7 +5242,7 @@ public double getZeroCountFloat() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List getNegativeSpanList() {
    +    public java.util.List getNegativeSpanList() {
           return negativeSpan_;
         }
         /**
    @@ -5253,7 +5253,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getNegativeSpanOrBuilderList() {
           return negativeSpan_;
         }
    @@ -5276,7 +5276,7 @@ public int getNegativeSpanCount() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getNegativeSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getNegativeSpan(int index) {
           return negativeSpan_.get(index);
         }
         /**
    @@ -5287,7 +5287,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index) {
           return negativeSpan_.get(index);
         }
    @@ -5382,7 +5382,7 @@ public double getNegativeCount(int index) {
     
         public static final int POSITIVE_SPAN_FIELD_NUMBER = 12;
         @SuppressWarnings("serial")
    -    private java.util.List positiveSpan_;
    +    private java.util.List positiveSpan_;
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5394,7 +5394,7 @@ public double getNegativeCount(int index) {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List getPositiveSpanList() {
    +    public java.util.List getPositiveSpanList() {
           return positiveSpan_;
         }
         /**
    @@ -5408,7 +5408,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getPositiveSpanOrBuilderList() {
           return positiveSpan_;
         }
    @@ -5437,7 +5437,7 @@ public int getPositiveSpanCount() {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getPositiveSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getPositiveSpan(int index) {
           return positiveSpan_.get(index);
         }
         /**
    @@ -5451,7 +5451,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index) {
           return positiveSpan_.get(index);
         }
    @@ -5546,7 +5546,7 @@ public double getPositiveCount(int index) {
     
         public static final int EXEMPLARS_FIELD_NUMBER = 16;
         @SuppressWarnings("serial")
    -    private java.util.List exemplars_;
    +    private java.util.List exemplars_;
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -5555,7 +5555,7 @@ public double getPositiveCount(int index) {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List getExemplarsList() {
    +    public java.util.List getExemplarsList() {
           return exemplars_;
         }
         /**
    @@ -5566,7 +5566,7 @@ public java.util.Listrepeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getExemplarsOrBuilderList() {
           return exemplars_;
         }
    @@ -5589,7 +5589,7 @@ public int getExemplarsCount() {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplars(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplars(int index) {
           return exemplars_.get(index);
         }
         /**
    @@ -5600,7 +5600,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index) {
           return exemplars_.get(index);
         }
    @@ -5764,10 +5764,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -5915,44 +5915,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5960,26 +5960,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5992,7 +5992,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -6013,21 +6013,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -6101,17 +6101,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -6119,15 +6119,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram result) {
             if (bucketBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 bucket_ = java.util.Collections.unmodifiableList(bucket_);
    @@ -6166,7 +6166,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -6224,16 +6224,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -6443,9 +6443,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.parser(),
                             extensionRegistry);
                     if (bucketBuilder_ == null) {
                       ensureBucketIsMutable();
    @@ -6481,9 +6481,9 @@ public Builder mergeFrom(
                     break;
                   } // case 65
                   case 74: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (negativeSpanBuilder_ == null) {
                       ensureNegativeSpanIsMutable();
    @@ -6527,9 +6527,9 @@ public Builder mergeFrom(
                     break;
                   } // case 90
                   case 98: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (positiveSpanBuilder_ == null) {
                       ensurePositiveSpanIsMutable();
    @@ -6580,9 +6580,9 @@ public Builder mergeFrom(
                     break;
                   } // case 122
                   case 130: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.parser(),
                             extensionRegistry);
                     if (exemplarsBuilder_ == null) {
                       ensureExemplarsIsMutable();
    @@ -6745,17 +6745,17 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List bucket_ =
    +      private java.util.List bucket_ =
             java.util.Collections.emptyList();
           private void ensureBucketIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          bucket_ = new java.util.ArrayList(bucket_);
    +          bucket_ = new java.util.ArrayList(bucket_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder> bucketBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder> bucketBuilder_;
     
           /**
            * 
    @@ -6764,7 +6764,7 @@ private void ensureBucketIsMutable() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List getBucketList() {
    +      public java.util.List getBucketList() {
             if (bucketBuilder_ == null) {
               return java.util.Collections.unmodifiableList(bucket_);
             } else {
    @@ -6792,7 +6792,7 @@ public int getBucketCount() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getBucket(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getBucket(int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);
             } else {
    @@ -6807,7 +6807,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6828,7 +6828,7 @@ public Builder setBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.set(index, builderForValue.build());
    @@ -6845,7 +6845,7 @@ public Builder setBucket(
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket value) {
    +      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6866,7 +6866,7 @@ public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6887,7 +6887,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(builderForValue.build());
    @@ -6905,7 +6905,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(index, builderForValue.build());
    @@ -6923,7 +6923,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addAllBucket(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -6975,7 +6975,7 @@ public Builder removeBucket(int index) {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder getBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder getBucketBuilder(
               int index) {
             return internalGetBucketFieldBuilder().getBuilder(index);
           }
    @@ -6986,7 +6986,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder getBucketOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder getBucketOrBuilder(
               int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);  } else {
    @@ -7000,7 +7000,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketOrBuilderList() {
             if (bucketBuilder_ != null) {
               return bucketBuilder_.getMessageOrBuilderList();
    @@ -7015,9 +7015,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder addBucketBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder addBucketBuilder() {
             return internalGetBucketFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7026,10 +7026,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder addBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder addBucketBuilder(
               int index) {
             return internalGetBucketFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7038,16 +7038,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketBuilderList() {
             return internalGetBucketFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder> 
               internalGetBucketFieldBuilder() {
             if (bucketBuilder_ == null) {
               bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder>(
                       bucket_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -7418,17 +7418,17 @@ public Builder clearZeroCountFloat() {
             return this;
           }
     
    -      private java.util.List negativeSpan_ =
    +      private java.util.List negativeSpan_ =
             java.util.Collections.emptyList();
           private void ensureNegativeSpanIsMutable() {
             if (!((bitField0_ & 0x00000200) != 0)) {
    -          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
    +          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
               bitField0_ |= 0x00000200;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
     
           /**
            * 
    @@ -7437,7 +7437,7 @@ private void ensureNegativeSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List getNegativeSpanList() {
    +      public java.util.List getNegativeSpanList() {
             if (negativeSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(negativeSpan_);
             } else {
    @@ -7465,7 +7465,7 @@ public int getNegativeSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getNegativeSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getNegativeSpan(int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);
             } else {
    @@ -7480,7 +7480,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7501,7 +7501,7 @@ public Builder setNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.set(index, builderForValue.build());
    @@ -7518,7 +7518,7 @@ public Builder setNegativeSpan(
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
    +      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7539,7 +7539,7 @@ public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7560,7 +7560,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(builderForValue.build());
    @@ -7578,7 +7578,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(index, builderForValue.build());
    @@ -7596,7 +7596,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addAllNegativeSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -7648,7 +7648,7 @@ public Builder removeNegativeSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
               int index) {
             return internalGetNegativeSpanFieldBuilder().getBuilder(index);
           }
    @@ -7659,7 +7659,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
               int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);  } else {
    @@ -7673,7 +7673,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanOrBuilderList() {
             if (negativeSpanBuilder_ != null) {
               return negativeSpanBuilder_.getMessageOrBuilderList();
    @@ -7688,9 +7688,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
             return internalGetNegativeSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7699,10 +7699,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
               int index) {
             return internalGetNegativeSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7711,16 +7711,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanBuilderList() {
             return internalGetNegativeSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder> 
               internalGetNegativeSpanFieldBuilder() {
             if (negativeSpanBuilder_ == null) {
               negativeSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder>(
                       negativeSpan_,
                       ((bitField0_ & 0x00000200) != 0),
                       getParentForChildren(),
    @@ -7974,17 +7974,17 @@ public Builder clearNegativeCount() {
             return this;
           }
     
    -      private java.util.List positiveSpan_ =
    +      private java.util.List positiveSpan_ =
             java.util.Collections.emptyList();
           private void ensurePositiveSpanIsMutable() {
             if (!((bitField0_ & 0x00001000) != 0)) {
    -          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
    +          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
               bitField0_ |= 0x00001000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
     
           /**
            * 
    @@ -7996,7 +7996,7 @@ private void ensurePositiveSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List getPositiveSpanList() {
    +      public java.util.List getPositiveSpanList() {
             if (positiveSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(positiveSpan_);
             } else {
    @@ -8030,7 +8030,7 @@ public int getPositiveSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getPositiveSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getPositiveSpan(int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);
             } else {
    @@ -8048,7 +8048,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8072,7 +8072,7 @@ public Builder setPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.set(index, builderForValue.build());
    @@ -8092,7 +8092,7 @@ public Builder setPositiveSpan(
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
    +      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8116,7 +8116,7 @@ public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8140,7 +8140,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(builderForValue.build());
    @@ -8161,7 +8161,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(index, builderForValue.build());
    @@ -8182,7 +8182,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addAllPositiveSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8243,7 +8243,7 @@ public Builder removePositiveSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
               int index) {
             return internalGetPositiveSpanFieldBuilder().getBuilder(index);
           }
    @@ -8257,7 +8257,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
               int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);  } else {
    @@ -8274,7 +8274,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanOrBuilderList() {
             if (positiveSpanBuilder_ != null) {
               return positiveSpanBuilder_.getMessageOrBuilderList();
    @@ -8292,9 +8292,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
             return internalGetPositiveSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8306,10 +8306,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
               int index) {
             return internalGetPositiveSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8321,16 +8321,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanBuilderList() {
             return internalGetPositiveSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder> 
               internalGetPositiveSpanFieldBuilder() {
             if (positiveSpanBuilder_ == null) {
               positiveSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder>(
                       positiveSpan_,
                       ((bitField0_ & 0x00001000) != 0),
                       getParentForChildren(),
    @@ -8584,17 +8584,17 @@ public Builder clearPositiveCount() {
             return this;
           }
     
    -      private java.util.List exemplars_ =
    +      private java.util.List exemplars_ =
             java.util.Collections.emptyList();
           private void ensureExemplarsIsMutable() {
             if (!((bitField0_ & 0x00008000) != 0)) {
    -          exemplars_ = new java.util.ArrayList(exemplars_);
    +          exemplars_ = new java.util.ArrayList(exemplars_);
               bitField0_ |= 0x00008000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
     
           /**
            * 
    @@ -8603,7 +8603,7 @@ private void ensureExemplarsIsMutable() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List getExemplarsList() {
    +      public java.util.List getExemplarsList() {
             if (exemplarsBuilder_ == null) {
               return java.util.Collections.unmodifiableList(exemplars_);
             } else {
    @@ -8631,7 +8631,7 @@ public int getExemplarsCount() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplars(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplars(int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);
             } else {
    @@ -8646,7 +8646,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8667,7 +8667,7 @@ public Builder setExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.set(index, builderForValue.build());
    @@ -8684,7 +8684,7 @@ public Builder setExemplars(
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) {
    +      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8705,7 +8705,7 @@ public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.co
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8726,7 +8726,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(builderForValue.build());
    @@ -8744,7 +8744,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(index, builderForValue.build());
    @@ -8762,7 +8762,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addAllExemplars(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8814,7 +8814,7 @@ public Builder removeExemplars(int index) {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder getExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder getExemplarsBuilder(
               int index) {
             return internalGetExemplarsFieldBuilder().getBuilder(index);
           }
    @@ -8825,7 +8825,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
               int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);  } else {
    @@ -8839,7 +8839,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsOrBuilderList() {
             if (exemplarsBuilder_ != null) {
               return exemplarsBuilder_.getMessageOrBuilderList();
    @@ -8854,9 +8854,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder addExemplarsBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder addExemplarsBuilder() {
             return internalGetExemplarsFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8865,10 +8865,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder addExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder addExemplarsBuilder(
               int index) {
             return internalGetExemplarsFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8877,16 +8877,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsBuilderList() {
             return internalGetExemplarsFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> 
               internalGetExemplarsFieldBuilder() {
             if (exemplarsBuilder_ == null) {
               exemplarsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder>(
                       exemplars_,
                       ((bitField0_ & 0x00008000) != 0),
                       getParentForChildren(),
    @@ -8900,12 +8900,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -8941,7 +8941,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9017,11 +9017,11 @@ public interface BucketOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
       }
       /**
        * 
    @@ -9041,7 +9041,7 @@ public static final class Bucket extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 0,
    +        /* patch= */ 1,
             /* suffix= */ "",
             Bucket.class.getName());
         }
    @@ -9054,15 +9054,15 @@ private Bucket() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder.class);
         }
     
         private int bitField0_;
    @@ -9148,7 +9148,7 @@ public double getUpperBound() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return Whether the exemplar field is set.
    @@ -9162,15 +9162,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -9234,10 +9234,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket) obj;
     
           if (hasCumulativeCount() != other.hasCumulativeCount()) return false;
           if (hasCumulativeCount()) {
    @@ -9296,44 +9296,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9341,26 +9341,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9373,7 +9373,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -9399,21 +9399,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -9447,17 +9447,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -9465,14 +9465,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -9498,16 +9498,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.getDefaultInstance()) return this;
             if (other.hasCumulativeCount()) {
               setCumulativeCount(other.getCumulativeCount());
             }
    @@ -9753,9 +9753,9 @@ public Builder clearUpperBound() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar exemplar_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return Whether the exemplar field is set.
    @@ -9767,9 +9767,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -9777,7 +9777,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -9794,7 +9794,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -9807,11 +9807,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -9841,7 +9841,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return internalGetExemplarFieldBuilder().getBuilder();
    @@ -9849,23 +9849,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> 
               internalGetExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
               exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -9878,12 +9878,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9919,7 +9919,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Bucket getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9989,7 +9989,7 @@ public static final class BucketSpan extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 0,
    +        /* patch= */ 1,
             /* suffix= */ "",
             BucketSpan.class.getName());
         }
    @@ -10002,15 +10002,15 @@ private BucketSpan() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder.class);
         }
     
         private int bitField0_;
    @@ -10115,10 +10115,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan) obj;
     
           if (hasOffset() != other.hasOffset()) return false;
           if (hasOffset()) {
    @@ -10154,44 +10154,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10199,26 +10199,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10231,7 +10231,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10261,21 +10261,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.BucketSpan)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpanOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.newBuilder()
           private Builder() {
     
           }
    @@ -10297,17 +10297,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -10315,14 +10315,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -10338,16 +10338,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance()) return this;
             if (other.hasOffset()) {
               setOffset(other.getOffset());
             }
    @@ -10523,12 +10523,12 @@ public Builder clearLength() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.BucketSpan)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10564,7 +10564,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.BucketSpan getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10577,12 +10577,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -10590,12 +10590,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -10649,7 +10649,7 @@ public static final class Exemplar extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 0,
    +        /* patch= */ 1,
             /* suffix= */ "",
             Exemplar.class.getName());
         }
    @@ -10663,33 +10663,33 @@ private Exemplar() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -10704,14 +10704,14 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
    @@ -10827,10 +10827,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -10874,44 +10874,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10919,26 +10919,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10951,7 +10951,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10972,21 +10972,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Exemplar)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.ExemplarOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -11026,17 +11026,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -11044,15 +11044,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -11064,7 +11064,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -11082,16 +11082,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -11151,9 +11151,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -11192,22 +11192,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -11227,7 +11227,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -11238,7 +11238,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11255,7 +11255,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -11268,7 +11268,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11285,7 +11285,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11302,7 +11302,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -11316,7 +11316,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -11330,7 +11330,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -11370,14 +11370,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -11387,7 +11387,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -11398,31 +11398,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder addLabelBuilder() {
             return internalGetLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return internalGetLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder> 
               internalGetLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -11633,12 +11633,12 @@ public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Exemplar)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11674,7 +11674,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Exemplar getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11687,12 +11687,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -11700,12 +11700,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -11717,11 +11717,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return The gauge.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getGauge();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getGauge();
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder getGaugeOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder getGaugeOrBuilder();
     
         /**
          * optional .io.prometheus.client.Counter counter = 3;
    @@ -11732,11 +11732,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          * optional .io.prometheus.client.Counter counter = 3;
          * @return The counter.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getCounter();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getCounter();
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder getCounterOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder getCounterOrBuilder();
     
         /**
          * optional .io.prometheus.client.Summary summary = 4;
    @@ -11747,11 +11747,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          * optional .io.prometheus.client.Summary summary = 4;
          * @return The summary.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getSummary();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getSummary();
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder getSummaryOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder getSummaryOrBuilder();
     
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
    @@ -11762,11 +11762,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return The untyped.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getUntyped();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getUntyped();
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder getUntypedOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder getUntypedOrBuilder();
     
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
    @@ -11777,11 +11777,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Met
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return The histogram.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getHistogram();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getHistogram();
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder getHistogramOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder getHistogramOrBuilder();
     
         /**
          * optional int64 timestamp_ms = 6;
    @@ -11807,7 +11807,7 @@ public static final class Metric extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 0,
    +        /* patch= */ 1,
             /* suffix= */ "",
             Metric.class.getName());
         }
    @@ -11821,33 +11821,33 @@ private Metric() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -11862,20 +11862,20 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
     
         public static final int GAUGE_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge gauge_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge gauge_;
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return Whether the gauge field is set.
    @@ -11889,19 +11889,19 @@ public boolean hasGauge() {
          * @return The gauge.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getGauge() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getGauge() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
     
         public static final int COUNTER_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter counter_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter counter_;
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          * @return Whether the counter field is set.
    @@ -11915,19 +11915,19 @@ public boolean hasCounter() {
          * @return The counter.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getCounter() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getCounter() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance() : counter_;
         }
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder getCounterOrBuilder() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance() : counter_;
         }
     
         public static final int SUMMARY_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary summary_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary summary_;
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          * @return Whether the summary field is set.
    @@ -11941,19 +11941,19 @@ public boolean hasSummary() {
          * @return The summary.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getSummary() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getSummary() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance() : summary_;
         }
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance() : summary_;
         }
     
         public static final int UNTYPED_FIELD_NUMBER = 5;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped untyped_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped untyped_;
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return Whether the untyped field is set.
    @@ -11967,19 +11967,19 @@ public boolean hasUntyped() {
          * @return The untyped.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getUntyped() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getUntyped() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
     
         public static final int HISTOGRAM_FIELD_NUMBER = 7;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram histogram_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram histogram_;
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return Whether the histogram field is set.
    @@ -11993,15 +11993,15 @@ public boolean hasHistogram() {
          * @return The histogram.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getHistogram() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getHistogram() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
     
         public static final int TIMESTAMP_MS_FIELD_NUMBER = 6;
    @@ -12105,10 +12105,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -12187,44 +12187,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12232,26 +12232,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12264,7 +12264,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -12285,21 +12285,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -12363,17 +12363,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -12381,15 +12381,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -12401,7 +12401,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -12443,16 +12443,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -12524,9 +12524,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -12593,22 +12593,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -12628,7 +12628,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -12639,7 +12639,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12656,7 +12656,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -12669,7 +12669,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12686,7 +12686,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12703,7 +12703,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -12717,7 +12717,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -12731,7 +12731,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -12771,14 +12771,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -12788,7 +12788,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -12799,31 +12799,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder addLabelBuilder() {
             return internalGetLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return internalGetLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder> 
               internalGetLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -12833,9 +12833,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return labelBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge gauge_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge gauge_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder> gaugeBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder> gaugeBuilder_;
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return Whether the gauge field is set.
    @@ -12847,9 +12847,9 @@ public boolean hasGauge() {
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return The gauge.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge getGauge() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getGauge() {
             if (gaugeBuilder_ == null) {
    -          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance() : gauge_;
    +          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance() : gauge_;
             } else {
               return gaugeBuilder_.getMessage();
             }
    @@ -12857,7 +12857,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge value) {
    +      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12874,7 +12874,7 @@ public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_go
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           public Builder setGauge(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder builderForValue) {
             if (gaugeBuilder_ == null) {
               gauge_ = builderForValue.build();
             } else {
    @@ -12887,11 +12887,11 @@ public Builder setGauge(
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge value) {
    +      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 gauge_ != null &&
    -            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance()) {
    +            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance()) {
                 getGaugeBuilder().mergeFrom(value);
               } else {
                 gauge_ = value;
    @@ -12921,7 +12921,7 @@ public Builder clearGauge() {
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder getGaugeBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder getGaugeBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return internalGetGaugeFieldBuilder().getBuilder();
    @@ -12929,23 +12929,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
             if (gaugeBuilder_ != null) {
               return gaugeBuilder_.getMessageOrBuilder();
             } else {
               return gauge_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.getDefaultInstance() : gauge_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance() : gauge_;
             }
           }
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder> 
               internalGetGaugeFieldBuilder() {
             if (gaugeBuilder_ == null) {
               gaugeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.GaugeOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder>(
                       getGauge(),
                       getParentForChildren(),
                       isClean());
    @@ -12954,9 +12954,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return gaugeBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter counter_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter counter_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder> counterBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder> counterBuilder_;
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            * @return Whether the counter field is set.
    @@ -12968,9 +12968,9 @@ public boolean hasCounter() {
            * optional .io.prometheus.client.Counter counter = 3;
            * @return The counter.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter getCounter() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getCounter() {
             if (counterBuilder_ == null) {
    -          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance() : counter_;
    +          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance() : counter_;
             } else {
               return counterBuilder_.getMessage();
             }
    @@ -12978,7 +12978,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter value) {
    +      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12995,7 +12995,7 @@ public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Counter counter = 3;
            */
           public Builder setCounter(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder builderForValue) {
             if (counterBuilder_ == null) {
               counter_ = builderForValue.build();
             } else {
    @@ -13008,11 +13008,11 @@ public Builder setCounter(
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter value) {
    +      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 counter_ != null &&
    -            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance()) {
    +            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance()) {
                 getCounterBuilder().mergeFrom(value);
               } else {
                 counter_ = value;
    @@ -13042,7 +13042,7 @@ public Builder clearCounter() {
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder getCounterBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder getCounterBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return internalGetCounterFieldBuilder().getBuilder();
    @@ -13050,23 +13050,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder getCounterOrBuilder() {
             if (counterBuilder_ != null) {
               return counterBuilder_.getMessageOrBuilder();
             } else {
               return counter_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.getDefaultInstance() : counter_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance() : counter_;
             }
           }
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder> 
               internalGetCounterFieldBuilder() {
             if (counterBuilder_ == null) {
               counterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.CounterOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder>(
                       getCounter(),
                       getParentForChildren(),
                       isClean());
    @@ -13075,9 +13075,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return counterBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary summary_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary summary_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder> summaryBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder> summaryBuilder_;
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            * @return Whether the summary field is set.
    @@ -13089,9 +13089,9 @@ public boolean hasSummary() {
            * optional .io.prometheus.client.Summary summary = 4;
            * @return The summary.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary getSummary() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getSummary() {
             if (summaryBuilder_ == null) {
    -          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance() : summary_;
    +          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance() : summary_;
             } else {
               return summaryBuilder_.getMessage();
             }
    @@ -13099,7 +13099,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary value) {
    +      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13116,7 +13116,7 @@ public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Summary summary = 4;
            */
           public Builder setSummary(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder builderForValue) {
             if (summaryBuilder_ == null) {
               summary_ = builderForValue.build();
             } else {
    @@ -13129,11 +13129,11 @@ public Builder setSummary(
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary value) {
    +      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 summary_ != null &&
    -            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance()) {
    +            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance()) {
                 getSummaryBuilder().mergeFrom(value);
               } else {
                 summary_ = value;
    @@ -13163,7 +13163,7 @@ public Builder clearSummary() {
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder getSummaryBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder getSummaryBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return internalGetSummaryFieldBuilder().getBuilder();
    @@ -13171,23 +13171,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
             if (summaryBuilder_ != null) {
               return summaryBuilder_.getMessageOrBuilder();
             } else {
               return summary_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.getDefaultInstance() : summary_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance() : summary_;
             }
           }
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder> 
               internalGetSummaryFieldBuilder() {
             if (summaryBuilder_ == null) {
               summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.SummaryOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder>(
                       getSummary(),
                       getParentForChildren(),
                       isClean());
    @@ -13196,9 +13196,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return summaryBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped untyped_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped untyped_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder> untypedBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder> untypedBuilder_;
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return Whether the untyped field is set.
    @@ -13210,9 +13210,9 @@ public boolean hasUntyped() {
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return The untyped.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped getUntyped() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getUntyped() {
             if (untypedBuilder_ == null) {
    -          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance() : untyped_;
    +          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance() : untyped_;
             } else {
               return untypedBuilder_.getMessage();
             }
    @@ -13220,7 +13220,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped value) {
    +      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13237,7 +13237,7 @@ public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           public Builder setUntyped(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder builderForValue) {
             if (untypedBuilder_ == null) {
               untyped_ = builderForValue.build();
             } else {
    @@ -13250,11 +13250,11 @@ public Builder setUntyped(
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped value) {
    +      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 untyped_ != null &&
    -            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance()) {
    +            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance()) {
                 getUntypedBuilder().mergeFrom(value);
               } else {
                 untyped_ = value;
    @@ -13284,7 +13284,7 @@ public Builder clearUntyped() {
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder getUntypedBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder getUntypedBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
             return internalGetUntypedFieldBuilder().getBuilder();
    @@ -13292,23 +13292,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
             if (untypedBuilder_ != null) {
               return untypedBuilder_.getMessageOrBuilder();
             } else {
               return untyped_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.getDefaultInstance() : untyped_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance() : untyped_;
             }
           }
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder> 
               internalGetUntypedFieldBuilder() {
             if (untypedBuilder_ == null) {
               untypedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.UntypedOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder>(
                       getUntyped(),
                       getParentForChildren(),
                       isClean());
    @@ -13317,9 +13317,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return untypedBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram histogram_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram histogram_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder> histogramBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder> histogramBuilder_;
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return Whether the histogram field is set.
    @@ -13331,9 +13331,9 @@ public boolean hasHistogram() {
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return The histogram.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram getHistogram() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getHistogram() {
             if (histogramBuilder_ == null) {
    -          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance() : histogram_;
    +          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance() : histogram_;
             } else {
               return histogramBuilder_.getMessage();
             }
    @@ -13341,7 +13341,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram value) {
    +      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13358,7 +13358,7 @@ public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.co
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           public Builder setHistogram(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder builderForValue) {
             if (histogramBuilder_ == null) {
               histogram_ = builderForValue.build();
             } else {
    @@ -13371,11 +13371,11 @@ public Builder setHistogram(
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram value) {
    +      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (((bitField0_ & 0x00000020) != 0) &&
                 histogram_ != null &&
    -            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance()) {
    +            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance()) {
                 getHistogramBuilder().mergeFrom(value);
               } else {
                 histogram_ = value;
    @@ -13405,7 +13405,7 @@ public Builder clearHistogram() {
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder getHistogramBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder getHistogramBuilder() {
             bitField0_ |= 0x00000020;
             onChanged();
             return internalGetHistogramFieldBuilder().getBuilder();
    @@ -13413,23 +13413,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
             if (histogramBuilder_ != null) {
               return histogramBuilder_.getMessageOrBuilder();
             } else {
               return histogram_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.getDefaultInstance() : histogram_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance() : histogram_;
             }
           }
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder> 
               internalGetHistogramFieldBuilder() {
             if (histogramBuilder_ == null) {
               histogramBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.HistogramOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder>(
                       getHistogram(),
                       getParentForChildren(),
                       isClean());
    @@ -13482,12 +13482,12 @@ public Builder clearTimestampMs() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13523,7 +13523,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13576,17 +13576,17 @@ public interface MetricFamilyOrBuilder extends
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType getType();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType getType();
     
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getMetric(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getMetric(int index);
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    @@ -13594,12 +13594,12 @@ public interface MetricFamilyOrBuilder extends
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricOrBuilderList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index);
     
         /**
    @@ -13632,7 +13632,7 @@ public static final class MetricFamily extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 0,
    +        /* patch= */ 1,
             /* suffix= */ "",
             MetricFamily.class.getName());
         }
    @@ -13650,15 +13650,15 @@ private MetricFamily() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.Builder.class);
         }
     
         private int bitField0_;
    @@ -13773,26 +13773,26 @@ public java.lang.String getHelp() {
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType getType() {
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType.forNumber(type_);
    -      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType.COUNTER : result;
    +    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType getType() {
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType.forNumber(type_);
    +      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType.COUNTER : result;
         }
     
         public static final int METRIC_FIELD_NUMBER = 4;
         @SuppressWarnings("serial")
    -    private java.util.List metric_;
    +    private java.util.List metric_;
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List getMetricList() {
    +    public java.util.List getMetricList() {
           return metric_;
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getMetricOrBuilderList() {
           return metric_;
         }
    @@ -13807,14 +13807,14 @@ public int getMetricCount() {
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getMetric(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getMetric(int index) {
           return metric_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index) {
           return metric_.get(index);
         }
    @@ -13933,10 +13933,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -13995,44 +13995,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14040,26 +14040,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14072,7 +14072,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -14093,21 +14093,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamilyOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamilyOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.newBuilder()
           private Builder() {
     
           }
    @@ -14138,17 +14138,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -14156,15 +14156,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily result) {
             if (metricBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 metric_ = java.util.Collections.unmodifiableList(metric_);
    @@ -14176,7 +14176,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -14200,16 +14200,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -14292,8 +14292,8 @@ public Builder mergeFrom(
                   } // case 18
                   case 24: {
                     int tmpRaw = input.readEnum();
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType tmpValue =
    -                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType.forNumber(tmpRaw);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType tmpValue =
    +                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType.forNumber(tmpRaw);
                     if (tmpValue == null) {
                       mergeUnknownVarintField(3, tmpRaw);
                     } else {
    @@ -14303,9 +14303,9 @@ public Builder mergeFrom(
                     break;
                   } // case 24
                   case 34: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.parser(),
                             extensionRegistry);
                     if (metricBuilder_ == null) {
                       ensureMetricIsMutable();
    @@ -14510,16 +14510,16 @@ public Builder setHelpBytes(
            * @return The type.
            */
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType getType() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType.forNumber(type_);
    -        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType.COUNTER : result;
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType getType() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType.forNumber(type_);
    +        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType.COUNTER : result;
           }
           /**
            * optional .io.prometheus.client.MetricType type = 3;
            * @param value The type to set.
            * @return This builder for chaining.
            */
    -      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricType value) {
    +      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType value) {
             if (value == null) {
               throw new NullPointerException();
             }
    @@ -14539,22 +14539,22 @@ public Builder clearType() {
             return this;
           }
     
    -      private java.util.List metric_ =
    +      private java.util.List metric_ =
             java.util.Collections.emptyList();
           private void ensureMetricIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          metric_ = new java.util.ArrayList(metric_);
    +          metric_ = new java.util.ArrayList(metric_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder> metricBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder> metricBuilder_;
     
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List getMetricList() {
    +      public java.util.List getMetricList() {
             if (metricBuilder_ == null) {
               return java.util.Collections.unmodifiableList(metric_);
             } else {
    @@ -14574,7 +14574,7 @@ public int getMetricCount() {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric getMetric(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getMetric(int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);
             } else {
    @@ -14585,7 +14585,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14602,7 +14602,7 @@ public Builder setMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.set(index, builderForValue.build());
    @@ -14615,7 +14615,7 @@ public Builder setMetric(
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric value) {
    +      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14632,7 +14632,7 @@ public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14649,7 +14649,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(builderForValue.build());
    @@ -14663,7 +14663,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(index, builderForValue.build());
    @@ -14677,7 +14677,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addAllMetric(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -14717,14 +14717,14 @@ public Builder removeMetric(int index) {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder getMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder getMetricBuilder(
               int index) {
             return internalGetMetricFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder getMetricOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder getMetricOrBuilder(
               int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);  } else {
    @@ -14734,7 +14734,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricOrBuilderList() {
             if (metricBuilder_ != null) {
               return metricBuilder_.getMessageOrBuilderList();
    @@ -14745,31 +14745,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder addMetricBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder addMetricBuilder() {
             return internalGetMetricFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder addMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder addMetricBuilder(
               int index) {
             return internalGetMetricFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricBuilderList() {
             return internalGetMetricFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder> 
               internalGetMetricFieldBuilder() {
             if (metricBuilder_ == null) {
               metricBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder>(
                       metric_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -14863,12 +14863,12 @@ public Builder setUnitBytes(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -14904,7 +14904,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics.MetricFamily getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -15029,7 +15029,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           "\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004\022\023\n\017GAUGE_H" +
           "ISTOGRAM\020\005B\212\001\nLio.prometheus.metrics.exp" +
           "ositionformats.generated.com_google_prot" +
    -      "obuf_4_30_0Z:github.com/prometheus/clien" +
    +      "obuf_4_30_1Z:github.com/prometheus/clien" +
           "t_model/go;io_prometheus_client"
         };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    index 9902dc9f1..83476ad4b 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    @@ -4,7 +4,7 @@
     
     import com.google.protobuf.TextFormat;
     import io.prometheus.metrics.expositionformats.ExpositionFormatWriter;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot;
    diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java
    index 4dc9b5d83..03000712d 100644
    --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java
    +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java
    @@ -2,7 +2,7 @@
     
     import static org.assertj.core.api.Assertions.assertThat;
     
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_0.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.MetricSnapshot;
    
    From 7adbe725fbfb8d8c392e1c83dd87e153d1acf58e Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Mon, 17 Mar 2025 14:30:19 +0100
    Subject: [PATCH 310/870] Bump org.mockito:mockito-core from 5.16.0 to 5.16.1
     (#1308)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito)
    from 5.16.0 to 5.16.1.
    
    Release notes

    Sourced from org.mockito:mockito-core's releases.

    v5.16.1

    Changelog generated by Shipkit Changelog Gradle Plugin

    5.16.1

    Commits
    • d000e63 Rework of injection strategy in the context of modules (#3608)
    • 0215884 Remove Arrays.asList from critical stubbing path in GenericMetadataSupport (#...
    • d185035 Add reference to Gradle documentation on how to make task relocatable (#3606)
    • See full diff in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.mockito:mockito-core&package-manager=maven&previous-version=5.16.0&new-version=5.16.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5e6eb6987..206bd6faa 100644 --- a/pom.xml +++ b/pom.xml @@ -108,7 +108,7 @@ org.mockito mockito-core - 5.16.0 + 5.16.1 test From d6ee0e7f12c81026fad55701d0d3ec329482834d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Mar 2025 16:41:37 +0100 Subject: [PATCH 311/870] Bump jetty-server.version from 12.0.17 to 12.0.18 (#1309) Bumps `jetty-server.version` from 12.0.17 to 12.0.18. Updates `org.eclipse.jetty:jetty-server` from 12.0.17 to 12.0.18 Updates `org.eclipse.jetty.ee10:jetty-ee10-servlet` from 12.0.17 to 12.0.18 Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index b16daa73d..fc38eded2 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -15,7 +15,7 @@ Jetty Sample for the Exporter Integration Test - 12.0.17 + 12.0.18 17 From 8595e876d37f656800d8a2795910923a730470da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 08:34:03 +0100 Subject: [PATCH 312/870] Bump com.google.guava:guava from 33.4.0-jre to 33.4.5-jre (#1310) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.4.0-jre to 33.4.5-jre.
    Release notes

    Sourced from com.google.guava:guava's releases.

    33.4.5

    For those upgrading from Guava 33.4.0 or earlier, be sure to read the release notes for Guava 33.4.1.

    Maven

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>33.4.5-jre</version>
      <!-- or, for Android: -->
      <version>33.4.5-android</version>
    </dependency>
    

    Jar files

    Guava requires one runtime dependency, which you can download here:

    Javadoc

    JDiff

    Changelog

    • Changed the Guava jar (plus guava-testlib and failureaccess jars) to be a modular jar. (7a71ea0bfa, 287c701a86)
    • Changed various classes to stop using sun.misc.Unsafe under Java 9+. (ee63055ddd, 80aab00dc5b7a36785f5e09b6a54397388980cde, 400af25292096746ed3f6164f0ff88209acbb19f, 71d0692d418a5dd001c9b3786275a5f1f94e1971, d1a3cd5037528a2ae990bfceed9cdd009fbc54de, b3bb29a54b8f13d6f6630b6cb929867adbf6b9a0, 1a300f6b2f7ba03ae9bc3620a80c4d4589c65b69)
      • Note that, if you use guava-android on the JVM (instead of using guava-jre), Guava will still try to use sun.misc.Unsafe. We will do further work on this in the future.
    • Belatedly updated the Public Suffix List data. (ee3b9c64382037f72b3a8341915cc64b87850b53, d25d62fc843ece1c3866859bc8639b815093eac8)

    Special thanks to @​sgammon for his modularization efforts.

    33.4.4

    This is one of a series of releases that improve Guava's nullness annotations. For more information, including troubleshooting help, see the release notes for Guava 33.4.1. Most users can update directly to Guava 33.4.5.

    Maven

    </tr></table>
    

    ... (truncated)

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.guava:guava&package-manager=maven&previous-version=33.4.0-jre&new-version=33.4.5-jre)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 206bd6faa..6799220d8 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ UTF-8 --module-name-need-to-be-overriden-- - 33.4.0-jre + 33.4.5-jre 5.12.1 2.14.0-alpha 8 From ac7fe5fa075eaae4612f1138f80ddf8d5412379f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 09:23:31 +0000 Subject: [PATCH 313/870] Bump com.google.errorprone:error_prone_core from 2.36.0 to 2.37.0 (#1311) Bumps [com.google.errorprone:error_prone_core](https://github.com/google/error-prone) from 2.36.0 to 2.37.0.
    Release notes

    Sourced from com.google.errorprone:error_prone_core's releases.

    Error Prone 2.37.0

    Changes:

    • The annotations that were previously in error_prone_type_annotations have been been merged into error_prone_annotations. error_prone_type_annotations is now deprecated, and will be removed in a future release.

    New checks:

    • AssignmentExpression - The use of an assignment expression can be surprising and hard to read; consider factoring out the assignment to a separate statement.
    • IntFloatConversion - Detect calls to scalb that should be using the double overload instead
    • InvalidSnippet - Detects snippets which omit the : required for inline code.
    • JUnit4EmptyMethods - Detects empty JUnit4 @Before, @After, @BeforeClass, and @AfterClass methods.
    • MockIllegalThrows - Detects cases where Mockito is configured to throw checked exception types which are impossible.
    • NegativeBoolean - Prefer positive boolean names.
    • RuleNotRun - Detects TestRules not annotated with @Rule, that won't be run.
    • StringConcatToTextBlock - Replaces concatenated multiline strings with text blocks.
    • TimeInStaticInitializer - Detects accesses of the system time in static contexts.

    Closed issues:

    • Propagate check flags in patch mode (#4699)
    • Fixes a crash in ComputeIfAbsentAmbiguousReference (#4736)
    • Show the field name in HidingField diagnostics (#4775)
    • Add support for jakarta annotations to some checks (#4782)
    • FloatingPointAssertionWithinEpsilonTest depends on default locale (#4815)
    • @InlineMe patching of Strings.repeat produces broken code (#4819)
    • Fix a crash in IdentifierName on unnamed (_) variables (#4847)
    • Fix a crash in ArgumentParameterSwap (#490)

    Full changelog: https://github.com/google/error-prone/compare/v2.36.0...v2.37.0

    Commits
    • a453935 Release Error Prone 2.37.0
    • 81faa5a Update JDK versions in release.yml
    • 62086b7 Handle multiple arguments in thenThrow.
    • 7440ff1 In StringConcatToTextBlock, don't assume that string literals always have sou...
    • 04fe835 Adds type_annotations back but as a relocation to annotations
    • 1ad73c2 Handle yield in Reachability
    • b1b521f Sniff out the canonical constructor using detective work rather than a flag w...
    • 86e5c95 Optimization: Abort class scan in JUnit4TestNotRun if all suspicious method...
    • c139e7f [StatementSwitchToExpressionSwitch] for the return switch pattern, fix a bug ...
    • 296fb4e Hardcode BoxedPrimitiveEquality:ExemptStaticConstants = false.
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.errorprone:error_prone_core&package-manager=maven&previous-version=2.36.0&new-version=2.37.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- CONTRIBUTING.md | 2 +- mise.toml | 12 + pom.xml | 2 +- .../metrics/core/metrics/CounterTest.java | 38 +- .../metrics/core/metrics/GaugeTest.java | 38 +- .../metrics/core/metrics/HistogramTest.java | 34 +- .../exporter/httpserver/DefaultHandler.java | 3 +- .../ExpositionFormatsTest.java | 413 +++++++++++------- .../caffeine/CacheMetricsCollectorTest.java | 40 +- .../dropwizard5/DropwizardExportsTest.java | 112 ++--- .../labels/CustomLabelMapperTest.java | 60 ++- .../guava/CacheMetricsCollectorTest.java | 34 +- .../jvm/JvmBufferPoolMetricsTest.java | 32 +- .../jvm/JvmClassLoadingMetricsTest.java | 22 +- .../jvm/JvmCompilationMetricsTest.java | 12 +- .../jvm/JvmGarbageCollectorMetricsTest.java | 18 +- .../jvm/JvmMemoryMetricsTest.java | 130 +++--- .../jvm/JvmNativeMemoryMetricsTest.java | 292 +++++++------ .../jvm/JvmRuntimeInfoMetricTest.java | 10 +- .../jvm/JvmThreadsMetricsTest.java | 58 +-- .../jvm/ProcessMetricsTest.java | 64 +-- 21 files changed, 799 insertions(+), 627 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 498aa945f..c8f7501c7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,7 +30,7 @@ If you're getting errors when running tests: - Use `-Dcheckstyle.skip=true` to skip the checkstyle check during development. - Use `-Dwarnings=-nowarn` to skip the warnings during development. -Combine all with `mvn test -DskipTests=true -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn`. +Combine all with `./mvnw test -DskipTests=true -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn`. ## Updating the Protobuf Java Classes diff --git a/mise.toml b/mise.toml index 4d751096b..e4f7afcda 100644 --- a/mise.toml +++ b/mise.toml @@ -13,3 +13,15 @@ run = [ "./mvnw javadoc:javadoc -P javadoc" ] env = { PROTO_GENERATION = "true", REQUIRE_PROTO_UP_TO_DATE = "true" } + +[tasks.format] +description = "format source code" +run = "./mvnw spotless:apply" + +[tasks.test] +description = "run unit tests, ignoring formatting and linters" +run = "./mvnw test -DskipTests=true -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn" + +[tasks.test-all] +description = "run all tests" +run = "./mvnw verify" diff --git a/pom.xml b/pom.xml index 6799220d8..554045314 100644 --- a/pom.xml +++ b/pom.xml @@ -370,7 +370,7 @@ com.google.errorprone error_prone_core - 2.36.0 + 2.37.0

    ... (truncated)

    Commits
    • d4eb556 Increase Nexus timeouts
    • 0226b6a Release v3.4.4
    • 6ba94ae Merge branch '3.3.x' into 3.4.x
    • 36a5936 Next development version (v3.3.11-SNAPSHOT)
    • 375aba6 Upgrade to Spring Framework 6.2.5
    • 37e4a3c Merge branch '3.3.x' into 3.4.x
    • 99fa21c Upgrade to asciidoctor-extensions 1.0.0-alpha.17
    • f86a6fb Upgrade to Spring Batch 5.2.2
    • 6567609 Merge branch '3.3.x' into 3.4.x
    • 80b6c59 Improve debuggability of DockerComposeTestExtension
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.springframework.boot:spring-boot-starter-parent&package-manager=maven&previous-version=3.4.3&new-version=3.4.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 2e0c4e072..e249cedf6 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -7,7 +7,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.3 + 3.4.4 From 059a1ce4f9ac735da0c00740e63e043a4f2b492f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Mar 2025 10:34:07 -0400 Subject: [PATCH 315/870] Bump com.google.guava:guava from 33.4.5-jre to 33.4.6-jre (#1313) Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.4.5-jre to 33.4.6-jre.
    Release notes

    Sourced from com.google.guava:guava's releases.

    33.4.6

    Guava 33.4.6 fixes two problems that we introduced while modularizing Guava in 33.4.5.

    Even if you're not upgrading from Guava 33.4.0 or earlier, still read the release notes for Guava 33.4.1. Those release notes contain information about Guava 33.4.5 and 33.4.6's effect on the module system.

    Maven

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>33.4.6-jre</version>
      <!-- or, for Android: -->
      <version>33.4.6-android</version>
    </dependency>
    

    Jar files

    Guava requires one runtime dependency, which you can download here:

    Javadoc

    JDiff

    Changelog

    • Removed the extra copy of each class from the Guava jar. The extra copies were an accidental addition from the modularization work in Guava 33.4.5. (40485b93ce)
    • Fixed annotation-related warnings when using Guava in modular builds. The most common such warning is Cannot find annotation method 'value()' in type 'DoNotMock': .... (7e15ab3566)
    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.guava:guava&package-manager=maven&previous-version=33.4.5-jre&new-version=33.4.6-jre)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 554045314..fd239c424 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ UTF-8 --module-name-need-to-be-overriden-- - 33.4.5-jre + 33.4.6-jre 5.12.1 2.14.0-alpha 8 From 09bcf7e02f6157d47872d1dea89cf2fde5a65115 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 13:15:26 +0200 Subject: [PATCH 316/870] Bump com.google.protobuf:protobuf-java from 4.30.1 to 4.30.2 (#1314) Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.30.1 to 4.30.2.
    Commits
    • 43e1626 Updating version.json and repo version numbers to: 30.2
    • 7a4c63b Fix lite classes in the protobuf-java Maven release to be JDK8 compatible. (#...
    • 7831669 Remove dllexport attribute on variable definition. (#20833)
    • da9cadc Restore JDK8 compatibility in Bazel for libraries with dependencies from Mave...
    • 09b5078 Add protobuf_maven artifacts to protobuf_maven_dev as well so they can still ...
    • b7f06f1 Add volatile to featuresResolved (#20766)
    • b69f653 Restore generator headers in cmake install until the next breaking C++ releas...
    • f4b0a79 Restore custom protobuf maven namespaces to avoid polluting main maven namesp...
    • 2dc9f35 Fix Java concurrency issue in feature resolution for old <=3.25.x gencode usi...
    • 221b2a0 Change how we decide which empty string implementation to use. (#20708)
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.protobuf:protobuf-java&package-manager=maven&previous-version=4.30.1&new-version=4.30.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .github/workflows/build.yml | 3 - CONTRIBUTING.md | 2 +- .../client/it/common/ExporterTest.java | 2 +- .../metrics/it/exporter/test/ExporterIT.java | 2 +- .../it/springboot/ApplicationTest.java | 2 +- mise.lock | 10 + mise.toml | 5 +- .../metrics/core/metrics/CounterTest.java | 2 +- .../metrics/core/metrics/HistogramTest.java | 2 +- .../metrics/core/metrics/InfoTest.java | 2 +- .../generate-protobuf.sh | 4 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- .../Metrics.java | 1810 ++++++++--------- .../PrometheusProtobufWriterImpl.java | 2 +- .../ProtobufExpositionFormatsTest.java | 2 +- 15 files changed, 930 insertions(+), 922 deletions(-) create mode 100644 mise.lock rename prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/{com_google_protobuf_4_30_1 => com_google_protobuf_4_30_2}/Metrics.java (89%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 63901f9f4..e9f07e786 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,8 +20,5 @@ jobs: restore-keys: | ${{ runner.os }}-maven- - name: Run the Maven verify phase - env: - PROTO_GENERATION: true - REQUIRE_PROTO_UP_TO_DATE: true run: mise run ci diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c8f7501c7..ff9717f67 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,4 +34,4 @@ Combine all with `./mvnw test -DskipTests=true -Dspotless.check.skip=true -Dcove ## Updating the Protobuf Java Classes -Use `PROTO_GENERATION=true mvn clean install` to generate protobuf classes. +Use `mise up && mise run test` to generate protobuf classes. diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java index 487eb55c4..bda5fcc6f 100644 --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index 47995b22d..e938f8c4d 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -5,7 +5,7 @@ import com.google.common.io.Resources; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics; import java.io.IOException; import java.net.URISyntaxException; import java.net.URLEncoder; diff --git a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java index 5e76d0983..9ada4c8ae 100644 --- a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java +++ b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java @@ -3,7 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics; import java.io.IOException; import java.net.URL; import java.util.List; diff --git a/mise.lock b/mise.lock new file mode 100644 index 000000000..789ebabb2 --- /dev/null +++ b/mise.lock @@ -0,0 +1,10 @@ +[tools.java] +version = "temurin-17.0.13+11" +backend = "core:java" + +[tools.protoc] +version = "30.2" +backend = "aqua:protocolbuffers/protobuf/protoc" + +[tools.protoc.checksums] +"protoc-30.2-linux-x86_64.zip" = "sha256:327e9397c6fb3ea2a542513a3221334c6f76f7aa524a7d2561142b67b312a01f" diff --git a/mise.toml b/mise.toml index e4f7afcda..bf7a976de 100644 --- a/mise.toml +++ b/mise.toml @@ -3,7 +3,7 @@ PROTO_GENERATION = "true" [tools] java = "temurin-17.0.13+11" -protoc = "30.1" +protoc = "latest" [tasks.ci] description = "CI Build" @@ -12,7 +12,7 @@ run = [ # just to check if javadoc can be generated "./mvnw javadoc:javadoc -P javadoc" ] -env = { PROTO_GENERATION = "true", REQUIRE_PROTO_UP_TO_DATE = "true" } +env = { REQUIRE_PROTO_UP_TO_DATE = "true" } [tasks.format] description = "format source code" @@ -25,3 +25,4 @@ run = "./mvnw test -DskipTests=true -Dspotless.check.skip=true -Dcoverage.skip=t [tasks.test-all] description = "run all tests" run = "./mvnw verify" + diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index dedcb7a38..8d05811d0 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -6,7 +6,7 @@ import static org.assertj.core.data.Offset.offset; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.CounterSnapshot; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index be506e8ea..40b168285 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -8,7 +8,7 @@ import io.prometheus.metrics.core.datapoints.DistributionDataPoint; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index ee3252317..76854b034 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics; +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.Labels; diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index 26a1f05eb..c92eaf790 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -37,14 +37,14 @@ GENERATED_WITH=$(grep -oP '\/\/ Protobuf Java Version: \K.*' "$TARGET_DIR/${PACK if [[ $GENERATED_WITH != "$PROTOBUF_VERSION" ]]; then echo "Generated protobuf sources version $GENERATED_WITH does not match provided version $PROTOBUF_VERSION" echo "Please use https://mise.jdx.dev/ - this will use the version specified in mise.toml" - echo "Generated protobuf sources are not up-to-date. Please run 'mise up && mvn clean install' and commit the changes." + echo "Generated protobuf sources are not up-to-date. Please run 'mise up && mise run test' and commit the changes." exit 1 fi STATUS=$(git status --porcelain) if [[ ${REQUIRE_PROTO_UP_TO_DATE:-false} == "true" && -n "$STATUS" ]]; then echo "Please use https://mise.jdx.dev/ - this will use the version specified in mise.toml" - echo "Generated protobuf sources are not up-to-date. Please run 'mvn clean install' and commit the changes." + echo "Generated protobuf sources are not up-to-date. Please run 'mise run test' and commit the changes." echo "Local changes:" echo "$STATUS" exit 1 diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index c6b9e47ca..69237e4bf 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -20,7 +20,7 @@ io.prometheus.metrics.expositionformats - 4.30.1 + 4.30.2 diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_1/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_2/Metrics.java similarity index 89% rename from prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_1/Metrics.java rename to prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_2/Metrics.java index 88c93489b..db5361389 100644 --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_1/Metrics.java +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_30_2/Metrics.java @@ -2,9 +2,9 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: src/main/protobuf/metrics.proto -// Protobuf Java Version: 4.30.1 +// Protobuf Java Version: 4.30.2 -package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1; +package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2; public final class Metrics { private Metrics() {} @@ -13,7 +13,7 @@ private Metrics() {} com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 1, + /* patch= */ 2, /* suffix= */ "", Metrics.class.getName()); } @@ -86,7 +86,7 @@ public enum MetricType com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 1, + /* patch= */ 2, /* suffix= */ "", MetricType.class.getName()); } @@ -192,7 +192,7 @@ public MetricType findValueByNumber(int number) { } public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.getDescriptor().getEnumTypes().get(0); + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.getDescriptor().getEnumTypes().get(0); } private static final MetricType[] VALUES = values(); @@ -266,7 +266,7 @@ public static final class LabelPair extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 1, + /* patch= */ 2, /* suffix= */ "", LabelPair.class.getName()); } @@ -281,15 +281,15 @@ private LabelPair() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder.class); } private int bitField0_; @@ -436,10 +436,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair) obj; if (hasName() != other.hasName()) return false; if (hasName()) { @@ -475,44 +475,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -520,26 +520,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -552,7 +552,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -573,21 +573,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.newBuilder() private Builder() { } @@ -609,17 +609,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -627,14 +627,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -650,16 +650,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.getDefaultInstance()) return this; if (other.hasName()) { name_ = other.name_; bitField0_ |= 0x00000001; @@ -887,12 +887,12 @@ public Builder setValueBytes( } // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -928,7 +928,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -962,7 +962,7 @@ public static final class Gauge extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 1, + /* patch= */ 2, /* suffix= */ "", Gauge.class.getName()); } @@ -975,15 +975,15 @@ private Gauge() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.Builder.class); } private int bitField0_; @@ -1046,10 +1046,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -1078,44 +1078,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1123,26 +1123,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1155,7 +1155,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1176,21 +1176,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.GaugeOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.newBuilder() private Builder() { } @@ -1211,17 +1211,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1229,14 +1229,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1248,16 +1248,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -1353,12 +1353,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -1394,7 +1394,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -1424,11 +1424,11 @@ public interface CounterOrBuilder extends * optional .io.prometheus.client.Exemplar exemplar = 2; * @return The exemplar. */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar(); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getExemplar(); /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder(); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder(); /** * optional .google.protobuf.Timestamp created_timestamp = 3; @@ -1458,7 +1458,7 @@ public static final class Counter extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 1, + /* patch= */ 2, /* suffix= */ "", Counter.class.getName()); } @@ -1471,15 +1471,15 @@ private Counter() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.Builder.class); } private int bitField0_; @@ -1503,7 +1503,7 @@ public double getValue() { } public static final int EXEMPLAR_FIELD_NUMBER = 2; - private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar exemplar_; + private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar exemplar_; /** * optional .io.prometheus.client.Exemplar exemplar = 2; * @return Whether the exemplar field is set. @@ -1517,15 +1517,15 @@ public boolean hasExemplar() { * @return The exemplar. */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar() { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getExemplar() { + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance() : exemplar_; } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance() : exemplar_; } public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 3; @@ -1608,10 +1608,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -1658,44 +1658,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1703,26 +1703,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1735,7 +1735,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1756,21 +1756,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.CounterOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -1808,17 +1808,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1826,14 +1826,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1857,16 +1857,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -1978,9 +1978,9 @@ public Builder clearValue() { return this; } - private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar exemplar_; + private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar exemplar_; private com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> exemplarBuilder_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder> exemplarBuilder_; /** * optional .io.prometheus.client.Exemplar exemplar = 2; * @return Whether the exemplar field is set. @@ -1992,9 +1992,9 @@ public boolean hasExemplar() { * optional .io.prometheus.client.Exemplar exemplar = 2; * @return The exemplar. */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getExemplar() { if (exemplarBuilder_ == null) { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance() : exemplar_; } else { return exemplarBuilder_.getMessage(); } @@ -2002,7 +2002,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) { + public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar value) { if (exemplarBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -2019,7 +2019,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com * optional .io.prometheus.client.Exemplar exemplar = 2; */ public Builder setExemplar( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder builderForValue) { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder builderForValue) { if (exemplarBuilder_ == null) { exemplar_ = builderForValue.build(); } else { @@ -2032,11 +2032,11 @@ public Builder setExemplar( /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) { + public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar value) { if (exemplarBuilder_ == null) { if (((bitField0_ & 0x00000002) != 0) && exemplar_ != null && - exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance()) { + exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance()) { getExemplarBuilder().mergeFrom(value); } else { exemplar_ = value; @@ -2066,7 +2066,7 @@ public Builder clearExemplar() { /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder getExemplarBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder getExemplarBuilder() { bitField0_ |= 0x00000002; onChanged(); return internalGetExemplarFieldBuilder().getBuilder(); @@ -2074,23 +2074,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { if (exemplarBuilder_ != null) { return exemplarBuilder_.getMessageOrBuilder(); } else { return exemplar_ == null ? - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance() : exemplar_; } } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ private com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder> internalGetExemplarFieldBuilder() { if (exemplarBuilder_ == null) { exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder>( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder>( getExemplar(), getParentForChildren(), isClean()); @@ -2224,12 +2224,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -2265,7 +2265,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -2310,7 +2310,7 @@ public static final class Quantile extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 1, + /* patch= */ 2, /* suffix= */ "", Quantile.class.getName()); } @@ -2323,15 +2323,15 @@ private Quantile() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder.class); } private int bitField0_; @@ -2420,10 +2420,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile) obj; if (hasQuantile() != other.hasQuantile()) return false; if (hasQuantile()) { @@ -2463,44 +2463,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2508,26 +2508,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2540,7 +2540,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -2561,21 +2561,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.QuantileOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.newBuilder() private Builder() { } @@ -2597,17 +2597,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -2615,14 +2615,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -2638,16 +2638,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.getDefaultInstance()) return this; if (other.hasQuantile()) { setQuantile(other.getQuantile()); } @@ -2791,12 +2791,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -2832,7 +2832,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -2867,12 +2867,12 @@ public interface SummaryOrBuilder extends /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - java.util.List + java.util.List getQuantileList(); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getQuantile(int index); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile getQuantile(int index); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @@ -2880,12 +2880,12 @@ public interface SummaryOrBuilder extends /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - java.util.List + java.util.List getQuantileOrBuilderList(); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder getQuantileOrBuilder( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index); /** @@ -2916,7 +2916,7 @@ public static final class Summary extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 1, + /* patch= */ 2, /* suffix= */ "", Summary.class.getName()); } @@ -2930,15 +2930,15 @@ private Summary() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.Builder.class); } private int bitField0_; @@ -2982,19 +2982,19 @@ public double getSampleSum() { public static final int QUANTILE_FIELD_NUMBER = 3; @SuppressWarnings("serial") - private java.util.List quantile_; + private java.util.List quantile_; /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public java.util.List getQuantileList() { + public java.util.List getQuantileList() { return quantile_; } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public java.util.List + public java.util.List getQuantileOrBuilderList() { return quantile_; } @@ -3009,14 +3009,14 @@ public int getQuantileCount() { * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getQuantile(int index) { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile getQuantile(int index) { return quantile_.get(index); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder getQuantileOrBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index) { return quantile_.get(index); } @@ -3108,10 +3108,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary) obj; if (hasSampleCount() != other.hasSampleCount()) return false; if (hasSampleCount()) { @@ -3165,44 +3165,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3210,26 +3210,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3242,7 +3242,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -3263,21 +3263,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.SummaryOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -3318,17 +3318,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -3336,15 +3336,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary(this); buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary result) { + private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary result) { if (quantileBuilder_ == null) { if (((bitField0_ & 0x00000004) != 0)) { quantile_ = java.util.Collections.unmodifiableList(quantile_); @@ -3356,7 +3356,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats. } } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -3378,16 +3378,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.getDefaultInstance()) return this; if (other.hasSampleCount()) { setSampleCount(other.getSampleCount()); } @@ -3460,9 +3460,9 @@ public Builder mergeFrom( break; } // case 17 case 26: { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile m = + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile m = input.readMessage( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.parser(), + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.parser(), extensionRegistry); if (quantileBuilder_ == null) { ensureQuantileIsMutable(); @@ -3576,22 +3576,22 @@ public Builder clearSampleSum() { return this; } - private java.util.List quantile_ = + private java.util.List quantile_ = java.util.Collections.emptyList(); private void ensureQuantileIsMutable() { if (!((bitField0_ & 0x00000004) != 0)) { - quantile_ = new java.util.ArrayList(quantile_); + quantile_ = new java.util.ArrayList(quantile_); bitField0_ |= 0x00000004; } } private com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder> quantileBuilder_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.QuantileOrBuilder> quantileBuilder_; /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List getQuantileList() { + public java.util.List getQuantileList() { if (quantileBuilder_ == null) { return java.util.Collections.unmodifiableList(quantile_); } else { @@ -3611,7 +3611,7 @@ public int getQuantileCount() { /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile getQuantile(int index) { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile getQuantile(int index) { if (quantileBuilder_ == null) { return quantile_.get(index); } else { @@ -3622,7 +3622,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder setQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile value) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3639,7 +3639,7 @@ public Builder setQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder setQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder builderForValue) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.set(index, builderForValue.build()); @@ -3652,7 +3652,7 @@ public Builder setQuantile( /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile value) { + public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3669,7 +3669,7 @@ public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile value) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3686,7 +3686,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder builderForValue) { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.add(builderForValue.build()); @@ -3700,7 +3700,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder builderForValue) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.add(index, builderForValue.build()); @@ -3714,7 +3714,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addAllQuantile( - java.lang.Iterable values) { + java.lang.Iterable values) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( @@ -3754,14 +3754,14 @@ public Builder removeQuantile(int index) { /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder getQuantileBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder getQuantileBuilder( int index) { return internalGetQuantileFieldBuilder().getBuilder(index); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder getQuantileOrBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index) { if (quantileBuilder_ == null) { return quantile_.get(index); } else { @@ -3771,7 +3771,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List + public java.util.List getQuantileOrBuilderList() { if (quantileBuilder_ != null) { return quantileBuilder_.getMessageOrBuilderList(); @@ -3782,31 +3782,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder addQuantileBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder addQuantileBuilder() { return internalGetQuantileFieldBuilder().addBuilder( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.getDefaultInstance()); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.getDefaultInstance()); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder addQuantileBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder addQuantileBuilder( int index) { return internalGetQuantileFieldBuilder().addBuilder( - index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.getDefaultInstance()); + index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.getDefaultInstance()); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List + public java.util.List getQuantileBuilderList() { return internalGetQuantileFieldBuilder().getBuilderList(); } private com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder> + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.QuantileOrBuilder> internalGetQuantileFieldBuilder() { if (quantileBuilder_ == null) { quantileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.QuantileOrBuilder>( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.QuantileOrBuilder>( quantile_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), @@ -3941,12 +3941,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -3982,7 +3982,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -4016,7 +4016,7 @@ public static final class Untyped extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 30, - /* patch= */ 1, + /* patch= */ 2, /* suffix= */ "", Untyped.class.getName()); } @@ -4029,15 +4029,15 @@ private Untyped() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.Builder.class); } private int bitField0_; @@ -4100,10 +4100,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -4132,44 +4132,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -4177,26 +4177,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -4209,7 +4209,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -4230,21 +4230,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.UntypedOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.newBuilder() private Builder() { } @@ -4265,17 +4265,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -4283,14 +4283,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -4302,16 +4302,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -4407,12 +4407,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -4448,7 +4448,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -4506,7 +4506,7 @@ public interface HistogramOrBuilder extends * * repeated .io.prometheus.client.Bucket bucket = 3; */ - java.util.List + java.util.List getBucketList(); /** *
    @@ -4515,7 +4515,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getBucket(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket getBucket(int index);
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -4531,7 +4531,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketOrBuilderList();
         /**
          * 
    @@ -4540,7 +4540,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index);
     
         /**
    @@ -4649,7 +4649,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanList();
         /**
          * 
    @@ -4658,7 +4658,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getNegativeSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan getNegativeSpan(int index);
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -4674,7 +4674,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanOrBuilderList();
         /**
          * 
    @@ -4683,7 +4683,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index);
     
         /**
    @@ -4760,7 +4760,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanList();
         /**
          * 
    @@ -4772,7 +4772,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getPositiveSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan getPositiveSpan(int index);
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -4794,7 +4794,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanOrBuilderList();
         /**
          * 
    @@ -4806,7 +4806,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index);
     
         /**
    @@ -4880,7 +4880,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsList();
         /**
          * 
    @@ -4889,7 +4889,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplars(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getExemplars(int index);
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -4905,7 +4905,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsOrBuilderList();
         /**
          * 
    @@ -4914,7 +4914,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index);
       }
       /**
    @@ -4930,7 +4930,7 @@ public static final class Histogram extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Histogram.class.getName());
         }
    @@ -4951,15 +4951,15 @@ private Histogram() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.Builder.class);
         }
     
         private int bitField0_;
    @@ -5030,7 +5030,7 @@ public double getSampleSum() {
     
         public static final int BUCKET_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List bucket_;
    +    private java.util.List bucket_;
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -5039,7 +5039,7 @@ public double getSampleSum() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List getBucketList() {
    +    public java.util.List getBucketList() {
           return bucket_;
         }
         /**
    @@ -5050,7 +5050,7 @@ public java.util.Listrepeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getBucketOrBuilderList() {
           return bucket_;
         }
    @@ -5073,7 +5073,7 @@ public int getBucketCount() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getBucket(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket getBucket(int index) {
           return bucket_.get(index);
         }
         /**
    @@ -5084,7 +5084,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index) {
           return bucket_.get(index);
         }
    @@ -5233,7 +5233,7 @@ public double getZeroCountFloat() {
     
         public static final int NEGATIVE_SPAN_FIELD_NUMBER = 9;
         @SuppressWarnings("serial")
    -    private java.util.List negativeSpan_;
    +    private java.util.List negativeSpan_;
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -5242,7 +5242,7 @@ public double getZeroCountFloat() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List getNegativeSpanList() {
    +    public java.util.List getNegativeSpanList() {
           return negativeSpan_;
         }
         /**
    @@ -5253,7 +5253,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getNegativeSpanOrBuilderList() {
           return negativeSpan_;
         }
    @@ -5276,7 +5276,7 @@ public int getNegativeSpanCount() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getNegativeSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan getNegativeSpan(int index) {
           return negativeSpan_.get(index);
         }
         /**
    @@ -5287,7 +5287,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index) {
           return negativeSpan_.get(index);
         }
    @@ -5382,7 +5382,7 @@ public double getNegativeCount(int index) {
     
         public static final int POSITIVE_SPAN_FIELD_NUMBER = 12;
         @SuppressWarnings("serial")
    -    private java.util.List positiveSpan_;
    +    private java.util.List positiveSpan_;
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5394,7 +5394,7 @@ public double getNegativeCount(int index) {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List getPositiveSpanList() {
    +    public java.util.List getPositiveSpanList() {
           return positiveSpan_;
         }
         /**
    @@ -5408,7 +5408,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getPositiveSpanOrBuilderList() {
           return positiveSpan_;
         }
    @@ -5437,7 +5437,7 @@ public int getPositiveSpanCount() {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getPositiveSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan getPositiveSpan(int index) {
           return positiveSpan_.get(index);
         }
         /**
    @@ -5451,7 +5451,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index) {
           return positiveSpan_.get(index);
         }
    @@ -5546,7 +5546,7 @@ public double getPositiveCount(int index) {
     
         public static final int EXEMPLARS_FIELD_NUMBER = 16;
         @SuppressWarnings("serial")
    -    private java.util.List exemplars_;
    +    private java.util.List exemplars_;
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -5555,7 +5555,7 @@ public double getPositiveCount(int index) {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List getExemplarsList() {
    +    public java.util.List getExemplarsList() {
           return exemplars_;
         }
         /**
    @@ -5566,7 +5566,7 @@ public java.util.Listrepeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getExemplarsOrBuilderList() {
           return exemplars_;
         }
    @@ -5589,7 +5589,7 @@ public int getExemplarsCount() {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplars(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getExemplars(int index) {
           return exemplars_.get(index);
         }
         /**
    @@ -5600,7 +5600,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index) {
           return exemplars_.get(index);
         }
    @@ -5764,10 +5764,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -5915,44 +5915,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5960,26 +5960,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5992,7 +5992,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -6013,21 +6013,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.HistogramOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -6101,17 +6101,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -6119,15 +6119,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram result) {
             if (bucketBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 bucket_ = java.util.Collections.unmodifiableList(bucket_);
    @@ -6166,7 +6166,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -6224,16 +6224,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -6443,9 +6443,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.parser(),
                             extensionRegistry);
                     if (bucketBuilder_ == null) {
                       ensureBucketIsMutable();
    @@ -6481,9 +6481,9 @@ public Builder mergeFrom(
                     break;
                   } // case 65
                   case 74: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (negativeSpanBuilder_ == null) {
                       ensureNegativeSpanIsMutable();
    @@ -6527,9 +6527,9 @@ public Builder mergeFrom(
                     break;
                   } // case 90
                   case 98: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (positiveSpanBuilder_ == null) {
                       ensurePositiveSpanIsMutable();
    @@ -6580,9 +6580,9 @@ public Builder mergeFrom(
                     break;
                   } // case 122
                   case 130: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.parser(),
                             extensionRegistry);
                     if (exemplarsBuilder_ == null) {
                       ensureExemplarsIsMutable();
    @@ -6745,17 +6745,17 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List bucket_ =
    +      private java.util.List bucket_ =
             java.util.Collections.emptyList();
           private void ensureBucketIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          bucket_ = new java.util.ArrayList(bucket_);
    +          bucket_ = new java.util.ArrayList(bucket_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder> bucketBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketOrBuilder> bucketBuilder_;
     
           /**
            * 
    @@ -6764,7 +6764,7 @@ private void ensureBucketIsMutable() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List getBucketList() {
    +      public java.util.List getBucketList() {
             if (bucketBuilder_ == null) {
               return java.util.Collections.unmodifiableList(bucket_);
             } else {
    @@ -6792,7 +6792,7 @@ public int getBucketCount() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getBucket(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket getBucket(int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);
             } else {
    @@ -6807,7 +6807,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6828,7 +6828,7 @@ public Builder setBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.set(index, builderForValue.build());
    @@ -6845,7 +6845,7 @@ public Builder setBucket(
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket value) {
    +      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6866,7 +6866,7 @@ public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6887,7 +6887,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(builderForValue.build());
    @@ -6905,7 +6905,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(index, builderForValue.build());
    @@ -6923,7 +6923,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addAllBucket(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -6975,7 +6975,7 @@ public Builder removeBucket(int index) {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder getBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder getBucketBuilder(
               int index) {
             return internalGetBucketFieldBuilder().getBuilder(index);
           }
    @@ -6986,7 +6986,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder getBucketOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketOrBuilder getBucketOrBuilder(
               int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);  } else {
    @@ -7000,7 +7000,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketOrBuilderList() {
             if (bucketBuilder_ != null) {
               return bucketBuilder_.getMessageOrBuilderList();
    @@ -7015,9 +7015,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder addBucketBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder addBucketBuilder() {
             return internalGetBucketFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7026,10 +7026,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder addBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder addBucketBuilder(
               int index) {
             return internalGetBucketFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7038,16 +7038,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketBuilderList() {
             return internalGetBucketFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketOrBuilder> 
               internalGetBucketFieldBuilder() {
             if (bucketBuilder_ == null) {
               bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketOrBuilder>(
                       bucket_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -7418,17 +7418,17 @@ public Builder clearZeroCountFloat() {
             return this;
           }
     
    -      private java.util.List negativeSpan_ =
    +      private java.util.List negativeSpan_ =
             java.util.Collections.emptyList();
           private void ensureNegativeSpanIsMutable() {
             if (!((bitField0_ & 0x00000200) != 0)) {
    -          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
    +          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
               bitField0_ |= 0x00000200;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
     
           /**
            * 
    @@ -7437,7 +7437,7 @@ private void ensureNegativeSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List getNegativeSpanList() {
    +      public java.util.List getNegativeSpanList() {
             if (negativeSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(negativeSpan_);
             } else {
    @@ -7465,7 +7465,7 @@ public int getNegativeSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getNegativeSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan getNegativeSpan(int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);
             } else {
    @@ -7480,7 +7480,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7501,7 +7501,7 @@ public Builder setNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.set(index, builderForValue.build());
    @@ -7518,7 +7518,7 @@ public Builder setNegativeSpan(
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
    +      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7539,7 +7539,7 @@ public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7560,7 +7560,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(builderForValue.build());
    @@ -7578,7 +7578,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(index, builderForValue.build());
    @@ -7596,7 +7596,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addAllNegativeSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -7648,7 +7648,7 @@ public Builder removeNegativeSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
               int index) {
             return internalGetNegativeSpanFieldBuilder().getBuilder(index);
           }
    @@ -7659,7 +7659,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
               int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);  } else {
    @@ -7673,7 +7673,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanOrBuilderList() {
             if (negativeSpanBuilder_ != null) {
               return negativeSpanBuilder_.getMessageOrBuilderList();
    @@ -7688,9 +7688,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
             return internalGetNegativeSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7699,10 +7699,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
               int index) {
             return internalGetNegativeSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7711,16 +7711,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanBuilderList() {
             return internalGetNegativeSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder> 
               internalGetNegativeSpanFieldBuilder() {
             if (negativeSpanBuilder_ == null) {
               negativeSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder>(
                       negativeSpan_,
                       ((bitField0_ & 0x00000200) != 0),
                       getParentForChildren(),
    @@ -7974,17 +7974,17 @@ public Builder clearNegativeCount() {
             return this;
           }
     
    -      private java.util.List positiveSpan_ =
    +      private java.util.List positiveSpan_ =
             java.util.Collections.emptyList();
           private void ensurePositiveSpanIsMutable() {
             if (!((bitField0_ & 0x00001000) != 0)) {
    -          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
    +          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
               bitField0_ |= 0x00001000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
     
           /**
            * 
    @@ -7996,7 +7996,7 @@ private void ensurePositiveSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List getPositiveSpanList() {
    +      public java.util.List getPositiveSpanList() {
             if (positiveSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(positiveSpan_);
             } else {
    @@ -8030,7 +8030,7 @@ public int getPositiveSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getPositiveSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan getPositiveSpan(int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);
             } else {
    @@ -8048,7 +8048,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8072,7 +8072,7 @@ public Builder setPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.set(index, builderForValue.build());
    @@ -8092,7 +8092,7 @@ public Builder setPositiveSpan(
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
    +      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8116,7 +8116,7 @@ public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8140,7 +8140,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(builderForValue.build());
    @@ -8161,7 +8161,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(index, builderForValue.build());
    @@ -8182,7 +8182,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addAllPositiveSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8243,7 +8243,7 @@ public Builder removePositiveSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
               int index) {
             return internalGetPositiveSpanFieldBuilder().getBuilder(index);
           }
    @@ -8257,7 +8257,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
               int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);  } else {
    @@ -8274,7 +8274,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanOrBuilderList() {
             if (positiveSpanBuilder_ != null) {
               return positiveSpanBuilder_.getMessageOrBuilderList();
    @@ -8292,9 +8292,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
             return internalGetPositiveSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8306,10 +8306,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
               int index) {
             return internalGetPositiveSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8321,16 +8321,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanBuilderList() {
             return internalGetPositiveSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder> 
               internalGetPositiveSpanFieldBuilder() {
             if (positiveSpanBuilder_ == null) {
               positiveSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder>(
                       positiveSpan_,
                       ((bitField0_ & 0x00001000) != 0),
                       getParentForChildren(),
    @@ -8584,17 +8584,17 @@ public Builder clearPositiveCount() {
             return this;
           }
     
    -      private java.util.List exemplars_ =
    +      private java.util.List exemplars_ =
             java.util.Collections.emptyList();
           private void ensureExemplarsIsMutable() {
             if (!((bitField0_ & 0x00008000) != 0)) {
    -          exemplars_ = new java.util.ArrayList(exemplars_);
    +          exemplars_ = new java.util.ArrayList(exemplars_);
               bitField0_ |= 0x00008000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
     
           /**
            * 
    @@ -8603,7 +8603,7 @@ private void ensureExemplarsIsMutable() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List getExemplarsList() {
    +      public java.util.List getExemplarsList() {
             if (exemplarsBuilder_ == null) {
               return java.util.Collections.unmodifiableList(exemplars_);
             } else {
    @@ -8631,7 +8631,7 @@ public int getExemplarsCount() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplars(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getExemplars(int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);
             } else {
    @@ -8646,7 +8646,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8667,7 +8667,7 @@ public Builder setExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.set(index, builderForValue.build());
    @@ -8684,7 +8684,7 @@ public Builder setExemplars(
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) {
    +      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8705,7 +8705,7 @@ public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.co
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8726,7 +8726,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(builderForValue.build());
    @@ -8744,7 +8744,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(index, builderForValue.build());
    @@ -8762,7 +8762,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addAllExemplars(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8814,7 +8814,7 @@ public Builder removeExemplars(int index) {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder getExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder getExemplarsBuilder(
               int index) {
             return internalGetExemplarsFieldBuilder().getBuilder(index);
           }
    @@ -8825,7 +8825,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
               int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);  } else {
    @@ -8839,7 +8839,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsOrBuilderList() {
             if (exemplarsBuilder_ != null) {
               return exemplarsBuilder_.getMessageOrBuilderList();
    @@ -8854,9 +8854,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder addExemplarsBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder addExemplarsBuilder() {
             return internalGetExemplarsFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8865,10 +8865,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder addExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder addExemplarsBuilder(
               int index) {
             return internalGetExemplarsFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8877,16 +8877,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsBuilderList() {
             return internalGetExemplarsFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder> 
               internalGetExemplarsFieldBuilder() {
             if (exemplarsBuilder_ == null) {
               exemplarsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder>(
                       exemplars_,
                       ((bitField0_ & 0x00008000) != 0),
                       getParentForChildren(),
    @@ -8900,12 +8900,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -8941,7 +8941,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9017,11 +9017,11 @@ public interface BucketOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
       }
       /**
        * 
    @@ -9041,7 +9041,7 @@ public static final class Bucket extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Bucket.class.getName());
         }
    @@ -9054,15 +9054,15 @@ private Bucket() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder.class);
         }
     
         private int bitField0_;
    @@ -9148,7 +9148,7 @@ public double getUpperBound() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return Whether the exemplar field is set.
    @@ -9162,15 +9162,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -9234,10 +9234,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket) obj;
     
           if (hasCumulativeCount() != other.hasCumulativeCount()) return false;
           if (hasCumulativeCount()) {
    @@ -9296,44 +9296,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9341,26 +9341,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9373,7 +9373,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -9399,21 +9399,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -9447,17 +9447,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -9465,14 +9465,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -9498,16 +9498,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket.getDefaultInstance()) return this;
             if (other.hasCumulativeCount()) {
               setCumulativeCount(other.getCumulativeCount());
             }
    @@ -9753,9 +9753,9 @@ public Builder clearUpperBound() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar exemplar_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return Whether the exemplar field is set.
    @@ -9767,9 +9767,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -9777,7 +9777,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -9794,7 +9794,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -9807,11 +9807,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -9841,7 +9841,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return internalGetExemplarFieldBuilder().getBuilder();
    @@ -9849,23 +9849,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder> 
               internalGetExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
               exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -9878,12 +9878,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9919,7 +9919,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Bucket getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Bucket getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9989,7 +9989,7 @@ public static final class BucketSpan extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             BucketSpan.class.getName());
         }
    @@ -10002,15 +10002,15 @@ private BucketSpan() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder.class);
         }
     
         private int bitField0_;
    @@ -10115,10 +10115,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan) obj;
     
           if (hasOffset() != other.hasOffset()) return false;
           if (hasOffset()) {
    @@ -10154,44 +10154,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10199,26 +10199,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10231,7 +10231,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10261,21 +10261,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.BucketSpan)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpanOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpanOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.newBuilder()
           private Builder() {
     
           }
    @@ -10297,17 +10297,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -10315,14 +10315,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -10338,16 +10338,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan.getDefaultInstance()) return this;
             if (other.hasOffset()) {
               setOffset(other.getOffset());
             }
    @@ -10523,12 +10523,12 @@ public Builder clearLength() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.BucketSpan)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10564,7 +10564,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.BucketSpan getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.BucketSpan getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10577,12 +10577,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -10590,12 +10590,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -10649,7 +10649,7 @@ public static final class Exemplar extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Exemplar.class.getName());
         }
    @@ -10663,33 +10663,33 @@ private Exemplar() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -10704,14 +10704,14 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
    @@ -10827,10 +10827,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -10874,44 +10874,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10919,26 +10919,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10951,7 +10951,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10972,21 +10972,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Exemplar)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.ExemplarOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.ExemplarOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -11026,17 +11026,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -11044,15 +11044,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -11064,7 +11064,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -11082,16 +11082,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -11151,9 +11151,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -11192,22 +11192,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -11227,7 +11227,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -11238,7 +11238,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11255,7 +11255,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -11268,7 +11268,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11285,7 +11285,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11302,7 +11302,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -11316,7 +11316,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -11330,7 +11330,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -11370,14 +11370,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -11387,7 +11387,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -11398,31 +11398,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder addLabelBuilder() {
             return internalGetLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return internalGetLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder> 
               internalGetLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -11633,12 +11633,12 @@ public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Exemplar)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11674,7 +11674,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Exemplar getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Exemplar getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11687,12 +11687,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -11700,12 +11700,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -11717,11 +11717,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return The gauge.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getGauge();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge getGauge();
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder getGaugeOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.GaugeOrBuilder getGaugeOrBuilder();
     
         /**
          * optional .io.prometheus.client.Counter counter = 3;
    @@ -11732,11 +11732,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          * optional .io.prometheus.client.Counter counter = 3;
          * @return The counter.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getCounter();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter getCounter();
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder getCounterOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.CounterOrBuilder getCounterOrBuilder();
     
         /**
          * optional .io.prometheus.client.Summary summary = 4;
    @@ -11747,11 +11747,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          * optional .io.prometheus.client.Summary summary = 4;
          * @return The summary.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getSummary();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary getSummary();
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder getSummaryOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.SummaryOrBuilder getSummaryOrBuilder();
     
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
    @@ -11762,11 +11762,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return The untyped.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getUntyped();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped getUntyped();
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder getUntypedOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.UntypedOrBuilder getUntypedOrBuilder();
     
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
    @@ -11777,11 +11777,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Met
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return The histogram.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getHistogram();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram getHistogram();
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder getHistogramOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.HistogramOrBuilder getHistogramOrBuilder();
     
         /**
          * optional int64 timestamp_ms = 6;
    @@ -11807,7 +11807,7 @@ public static final class Metric extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             Metric.class.getName());
         }
    @@ -11821,33 +11821,33 @@ private Metric() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -11862,20 +11862,20 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
     
         public static final int GAUGE_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge gauge_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge gauge_;
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return Whether the gauge field is set.
    @@ -11889,19 +11889,19 @@ public boolean hasGauge() {
          * @return The gauge.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getGauge() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge getGauge() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
     
         public static final int COUNTER_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter counter_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter counter_;
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          * @return Whether the counter field is set.
    @@ -11915,19 +11915,19 @@ public boolean hasCounter() {
          * @return The counter.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getCounter() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter getCounter() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.getDefaultInstance() : counter_;
         }
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder getCounterOrBuilder() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.getDefaultInstance() : counter_;
         }
     
         public static final int SUMMARY_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary summary_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary summary_;
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          * @return Whether the summary field is set.
    @@ -11941,19 +11941,19 @@ public boolean hasSummary() {
          * @return The summary.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getSummary() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary getSummary() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.getDefaultInstance() : summary_;
         }
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.getDefaultInstance() : summary_;
         }
     
         public static final int UNTYPED_FIELD_NUMBER = 5;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped untyped_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped untyped_;
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return Whether the untyped field is set.
    @@ -11967,19 +11967,19 @@ public boolean hasUntyped() {
          * @return The untyped.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getUntyped() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped getUntyped() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
     
         public static final int HISTOGRAM_FIELD_NUMBER = 7;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram histogram_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram histogram_;
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return Whether the histogram field is set.
    @@ -11993,15 +11993,15 @@ public boolean hasHistogram() {
          * @return The histogram.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getHistogram() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram getHistogram() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
     
         public static final int TIMESTAMP_MS_FIELD_NUMBER = 6;
    @@ -12105,10 +12105,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -12187,44 +12187,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12232,26 +12232,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12264,7 +12264,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -12285,21 +12285,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -12363,17 +12363,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -12381,15 +12381,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -12401,7 +12401,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -12443,16 +12443,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -12524,9 +12524,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -12593,22 +12593,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -12628,7 +12628,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -12639,7 +12639,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12656,7 +12656,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -12669,7 +12669,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12686,7 +12686,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12703,7 +12703,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -12717,7 +12717,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -12731,7 +12731,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -12771,14 +12771,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -12788,7 +12788,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -12799,31 +12799,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder addLabelBuilder() {
             return internalGetLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return internalGetLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder> 
               internalGetLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -12833,9 +12833,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return labelBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge gauge_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge gauge_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder> gaugeBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.GaugeOrBuilder> gaugeBuilder_;
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return Whether the gauge field is set.
    @@ -12847,9 +12847,9 @@ public boolean hasGauge() {
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return The gauge.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge getGauge() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge getGauge() {
             if (gaugeBuilder_ == null) {
    -          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance() : gauge_;
    +          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.getDefaultInstance() : gauge_;
             } else {
               return gaugeBuilder_.getMessage();
             }
    @@ -12857,7 +12857,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge value) {
    +      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12874,7 +12874,7 @@ public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_go
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           public Builder setGauge(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.Builder builderForValue) {
             if (gaugeBuilder_ == null) {
               gauge_ = builderForValue.build();
             } else {
    @@ -12887,11 +12887,11 @@ public Builder setGauge(
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge value) {
    +      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 gauge_ != null &&
    -            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance()) {
    +            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.getDefaultInstance()) {
                 getGaugeBuilder().mergeFrom(value);
               } else {
                 gauge_ = value;
    @@ -12921,7 +12921,7 @@ public Builder clearGauge() {
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder getGaugeBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.Builder getGaugeBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return internalGetGaugeFieldBuilder().getBuilder();
    @@ -12929,23 +12929,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
             if (gaugeBuilder_ != null) {
               return gaugeBuilder_.getMessageOrBuilder();
             } else {
               return gauge_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.getDefaultInstance() : gauge_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.getDefaultInstance() : gauge_;
             }
           }
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.GaugeOrBuilder> 
               internalGetGaugeFieldBuilder() {
             if (gaugeBuilder_ == null) {
               gaugeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.GaugeOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.GaugeOrBuilder>(
                       getGauge(),
                       getParentForChildren(),
                       isClean());
    @@ -12954,9 +12954,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return gaugeBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter counter_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter counter_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder> counterBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.CounterOrBuilder> counterBuilder_;
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            * @return Whether the counter field is set.
    @@ -12968,9 +12968,9 @@ public boolean hasCounter() {
            * optional .io.prometheus.client.Counter counter = 3;
            * @return The counter.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter getCounter() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter getCounter() {
             if (counterBuilder_ == null) {
    -          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance() : counter_;
    +          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.getDefaultInstance() : counter_;
             } else {
               return counterBuilder_.getMessage();
             }
    @@ -12978,7 +12978,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter value) {
    +      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12995,7 +12995,7 @@ public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Counter counter = 3;
            */
           public Builder setCounter(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.Builder builderForValue) {
             if (counterBuilder_ == null) {
               counter_ = builderForValue.build();
             } else {
    @@ -13008,11 +13008,11 @@ public Builder setCounter(
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter value) {
    +      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 counter_ != null &&
    -            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance()) {
    +            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.getDefaultInstance()) {
                 getCounterBuilder().mergeFrom(value);
               } else {
                 counter_ = value;
    @@ -13042,7 +13042,7 @@ public Builder clearCounter() {
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder getCounterBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.Builder getCounterBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return internalGetCounterFieldBuilder().getBuilder();
    @@ -13050,23 +13050,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.CounterOrBuilder getCounterOrBuilder() {
             if (counterBuilder_ != null) {
               return counterBuilder_.getMessageOrBuilder();
             } else {
               return counter_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.getDefaultInstance() : counter_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.getDefaultInstance() : counter_;
             }
           }
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.CounterOrBuilder> 
               internalGetCounterFieldBuilder() {
             if (counterBuilder_ == null) {
               counterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.CounterOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.CounterOrBuilder>(
                       getCounter(),
                       getParentForChildren(),
                       isClean());
    @@ -13075,9 +13075,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return counterBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary summary_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary summary_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder> summaryBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.SummaryOrBuilder> summaryBuilder_;
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            * @return Whether the summary field is set.
    @@ -13089,9 +13089,9 @@ public boolean hasSummary() {
            * optional .io.prometheus.client.Summary summary = 4;
            * @return The summary.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary getSummary() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary getSummary() {
             if (summaryBuilder_ == null) {
    -          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance() : summary_;
    +          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.getDefaultInstance() : summary_;
             } else {
               return summaryBuilder_.getMessage();
             }
    @@ -13099,7 +13099,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary value) {
    +      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13116,7 +13116,7 @@ public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Summary summary = 4;
            */
           public Builder setSummary(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.Builder builderForValue) {
             if (summaryBuilder_ == null) {
               summary_ = builderForValue.build();
             } else {
    @@ -13129,11 +13129,11 @@ public Builder setSummary(
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary value) {
    +      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 summary_ != null &&
    -            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance()) {
    +            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.getDefaultInstance()) {
                 getSummaryBuilder().mergeFrom(value);
               } else {
                 summary_ = value;
    @@ -13163,7 +13163,7 @@ public Builder clearSummary() {
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder getSummaryBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.Builder getSummaryBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return internalGetSummaryFieldBuilder().getBuilder();
    @@ -13171,23 +13171,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
             if (summaryBuilder_ != null) {
               return summaryBuilder_.getMessageOrBuilder();
             } else {
               return summary_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.getDefaultInstance() : summary_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.getDefaultInstance() : summary_;
             }
           }
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.SummaryOrBuilder> 
               internalGetSummaryFieldBuilder() {
             if (summaryBuilder_ == null) {
               summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.SummaryOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.SummaryOrBuilder>(
                       getSummary(),
                       getParentForChildren(),
                       isClean());
    @@ -13196,9 +13196,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return summaryBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped untyped_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped untyped_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder> untypedBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.UntypedOrBuilder> untypedBuilder_;
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return Whether the untyped field is set.
    @@ -13210,9 +13210,9 @@ public boolean hasUntyped() {
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return The untyped.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped getUntyped() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped getUntyped() {
             if (untypedBuilder_ == null) {
    -          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance() : untyped_;
    +          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.getDefaultInstance() : untyped_;
             } else {
               return untypedBuilder_.getMessage();
             }
    @@ -13220,7 +13220,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped value) {
    +      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13237,7 +13237,7 @@ public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           public Builder setUntyped(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.Builder builderForValue) {
             if (untypedBuilder_ == null) {
               untyped_ = builderForValue.build();
             } else {
    @@ -13250,11 +13250,11 @@ public Builder setUntyped(
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped value) {
    +      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 untyped_ != null &&
    -            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance()) {
    +            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.getDefaultInstance()) {
                 getUntypedBuilder().mergeFrom(value);
               } else {
                 untyped_ = value;
    @@ -13284,7 +13284,7 @@ public Builder clearUntyped() {
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder getUntypedBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.Builder getUntypedBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
             return internalGetUntypedFieldBuilder().getBuilder();
    @@ -13292,23 +13292,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
             if (untypedBuilder_ != null) {
               return untypedBuilder_.getMessageOrBuilder();
             } else {
               return untyped_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.getDefaultInstance() : untyped_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.getDefaultInstance() : untyped_;
             }
           }
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.UntypedOrBuilder> 
               internalGetUntypedFieldBuilder() {
             if (untypedBuilder_ == null) {
               untypedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.UntypedOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.UntypedOrBuilder>(
                       getUntyped(),
                       getParentForChildren(),
                       isClean());
    @@ -13317,9 +13317,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return untypedBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram histogram_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram histogram_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder> histogramBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.HistogramOrBuilder> histogramBuilder_;
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return Whether the histogram field is set.
    @@ -13331,9 +13331,9 @@ public boolean hasHistogram() {
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return The histogram.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram getHistogram() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram getHistogram() {
             if (histogramBuilder_ == null) {
    -          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance() : histogram_;
    +          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.getDefaultInstance() : histogram_;
             } else {
               return histogramBuilder_.getMessage();
             }
    @@ -13341,7 +13341,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram value) {
    +      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13358,7 +13358,7 @@ public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.co
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           public Builder setHistogram(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.Builder builderForValue) {
             if (histogramBuilder_ == null) {
               histogram_ = builderForValue.build();
             } else {
    @@ -13371,11 +13371,11 @@ public Builder setHistogram(
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram value) {
    +      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (((bitField0_ & 0x00000020) != 0) &&
                 histogram_ != null &&
    -            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance()) {
    +            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.getDefaultInstance()) {
                 getHistogramBuilder().mergeFrom(value);
               } else {
                 histogram_ = value;
    @@ -13405,7 +13405,7 @@ public Builder clearHistogram() {
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder getHistogramBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.Builder getHistogramBuilder() {
             bitField0_ |= 0x00000020;
             onChanged();
             return internalGetHistogramFieldBuilder().getBuilder();
    @@ -13413,23 +13413,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
             if (histogramBuilder_ != null) {
               return histogramBuilder_.getMessageOrBuilder();
             } else {
               return histogram_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.getDefaultInstance() : histogram_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.getDefaultInstance() : histogram_;
             }
           }
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.HistogramOrBuilder> 
               internalGetHistogramFieldBuilder() {
             if (histogramBuilder_ == null) {
               histogramBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.HistogramOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.HistogramOrBuilder>(
                       getHistogram(),
                       getParentForChildren(),
                       isClean());
    @@ -13482,12 +13482,12 @@ public Builder clearTimestampMs() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13523,7 +13523,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13576,17 +13576,17 @@ public interface MetricFamilyOrBuilder extends
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType getType();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType getType();
     
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getMetric(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric getMetric(int index);
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    @@ -13594,12 +13594,12 @@ public interface MetricFamilyOrBuilder extends
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricOrBuilderList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index);
     
         /**
    @@ -13632,7 +13632,7 @@ public static final class MetricFamily extends
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
             /* minor= */ 30,
    -        /* patch= */ 1,
    +        /* patch= */ 2,
             /* suffix= */ "",
             MetricFamily.class.getName());
         }
    @@ -13650,15 +13650,15 @@ private MetricFamily() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily.Builder.class);
         }
     
         private int bitField0_;
    @@ -13773,26 +13773,26 @@ public java.lang.String getHelp() {
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType getType() {
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType.forNumber(type_);
    -      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType.COUNTER : result;
    +    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType getType() {
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType.forNumber(type_);
    +      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType.COUNTER : result;
         }
     
         public static final int METRIC_FIELD_NUMBER = 4;
         @SuppressWarnings("serial")
    -    private java.util.List metric_;
    +    private java.util.List metric_;
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List getMetricList() {
    +    public java.util.List getMetricList() {
           return metric_;
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getMetricOrBuilderList() {
           return metric_;
         }
    @@ -13807,14 +13807,14 @@ public int getMetricCount() {
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getMetric(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric getMetric(int index) {
           return metric_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index) {
           return metric_.get(index);
         }
    @@ -13933,10 +13933,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -13995,44 +13995,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14040,26 +14040,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14072,7 +14072,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -14093,21 +14093,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamilyOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamilyOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily.newBuilder()
           private Builder() {
     
           }
    @@ -14138,17 +14138,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -14156,15 +14156,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily result) {
             if (metricBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 metric_ = java.util.Collections.unmodifiableList(metric_);
    @@ -14176,7 +14176,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -14200,16 +14200,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -14292,8 +14292,8 @@ public Builder mergeFrom(
                   } // case 18
                   case 24: {
                     int tmpRaw = input.readEnum();
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType tmpValue =
    -                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType.forNumber(tmpRaw);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType tmpValue =
    +                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType.forNumber(tmpRaw);
                     if (tmpValue == null) {
                       mergeUnknownVarintField(3, tmpRaw);
                     } else {
    @@ -14303,9 +14303,9 @@ public Builder mergeFrom(
                     break;
                   } // case 24
                   case 34: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.parser(),
                             extensionRegistry);
                     if (metricBuilder_ == null) {
                       ensureMetricIsMutable();
    @@ -14510,16 +14510,16 @@ public Builder setHelpBytes(
            * @return The type.
            */
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType getType() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType.forNumber(type_);
    -        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType.COUNTER : result;
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType getType() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType.forNumber(type_);
    +        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType.COUNTER : result;
           }
           /**
            * optional .io.prometheus.client.MetricType type = 3;
            * @param value The type to set.
            * @return This builder for chaining.
            */
    -      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricType value) {
    +      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricType value) {
             if (value == null) {
               throw new NullPointerException();
             }
    @@ -14539,22 +14539,22 @@ public Builder clearType() {
             return this;
           }
     
    -      private java.util.List metric_ =
    +      private java.util.List metric_ =
             java.util.Collections.emptyList();
           private void ensureMetricIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          metric_ = new java.util.ArrayList(metric_);
    +          metric_ = new java.util.ArrayList(metric_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder> metricBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricOrBuilder> metricBuilder_;
     
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List getMetricList() {
    +      public java.util.List getMetricList() {
             if (metricBuilder_ == null) {
               return java.util.Collections.unmodifiableList(metric_);
             } else {
    @@ -14574,7 +14574,7 @@ public int getMetricCount() {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric getMetric(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric getMetric(int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);
             } else {
    @@ -14585,7 +14585,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14602,7 +14602,7 @@ public Builder setMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.set(index, builderForValue.build());
    @@ -14615,7 +14615,7 @@ public Builder setMetric(
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric value) {
    +      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14632,7 +14632,7 @@ public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14649,7 +14649,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(builderForValue.build());
    @@ -14663,7 +14663,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(index, builderForValue.build());
    @@ -14677,7 +14677,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addAllMetric(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -14717,14 +14717,14 @@ public Builder removeMetric(int index) {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder getMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder getMetricBuilder(
               int index) {
             return internalGetMetricFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder getMetricOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricOrBuilder getMetricOrBuilder(
               int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);  } else {
    @@ -14734,7 +14734,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricOrBuilderList() {
             if (metricBuilder_ != null) {
               return metricBuilder_.getMessageOrBuilderList();
    @@ -14745,31 +14745,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder addMetricBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder addMetricBuilder() {
             return internalGetMetricFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder addMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder addMetricBuilder(
               int index) {
             return internalGetMetricFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricBuilderList() {
             return internalGetMetricFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricOrBuilder> 
               internalGetMetricFieldBuilder() {
             if (metricBuilder_ == null) {
               metricBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricOrBuilder>(
                       metric_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -14863,12 +14863,12 @@ public Builder setUnitBytes(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -14904,7 +14904,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics.MetricFamily getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics.MetricFamily getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -15029,7 +15029,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           "\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004\022\023\n\017GAUGE_H" +
           "ISTOGRAM\020\005B\212\001\nLio.prometheus.metrics.exp" +
           "ositionformats.generated.com_google_prot" +
    -      "obuf_4_30_1Z:github.com/prometheus/clien" +
    +      "obuf_4_30_2Z:github.com/prometheus/clien" +
           "t_model/go;io_prometheus_client"
         };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    index 83476ad4b..888c57ee4 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java
    @@ -4,7 +4,7 @@
     
     import com.google.protobuf.TextFormat;
     import io.prometheus.metrics.expositionformats.ExpositionFormatWriter;
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics;
     import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot;
     import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot;
    diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java
    index 03000712d..34dc4f163 100644
    --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java
    +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java
    @@ -2,7 +2,7 @@
     
     import static org.assertj.core.api.Assertions.assertThat;
     
    -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_1.Metrics;
    +import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_30_2.Metrics;
     import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl;
     import io.prometheus.metrics.expositionformats.internal.ProtobufUtil;
     import io.prometheus.metrics.model.snapshots.MetricSnapshot;
    
    From 968de7efea42f5f228ed100ec538e42428d2ff53 Mon Sep 17 00:00:00 2001
    From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
    Date: Mon, 31 Mar 2025 16:01:54 +0200
    Subject: [PATCH 317/870] Bump org.apache.maven.plugins:maven-surefire-plugin
     from 3.5.2 to 3.5.3 (#1315)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Bumps
    [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire)
    from 3.5.2 to 3.5.3.
    
    Release notes

    Sourced from org.apache.maven.plugins:maven-surefire-plugin's releases.

    3.5.3

    🐛 Bug Fixes

    👻 Maintenance

    📦 Dependency updates

    Commits
    • 4434650 [maven-release-plugin] prepare release surefire-3.5.3
    • 1270950 use github directly
    • 59f3a1f release tag name backward compatible
    • dfbabe2 assertj-core must be test scope (#826)
    • e1f8119 back to 3.5.3-SNAPSHOT
    • c497559 [maven-release-plugin] prepare for next development iteration
    • 3962112 [maven-release-plugin] prepare release v3.5.3
    • 227c134 surefire shared utils version current version (#825)
    • 1d34c34 Bump org.htmlunit:htmlunit from 4.10.0 to 4.11.1
    • 906b65a Update site descriptors
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.maven.plugins:maven-surefire-plugin&package-manager=maven&previous-version=3.5.2&new-version=3.5.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fd239c424..95b1cf0e4 100644 --- a/pom.xml +++ b/pom.xml @@ -156,7 +156,7 @@ maven-surefire-plugin - 3.5.2 + 3.5.3 maven-jar-plugin From dc89b99b470558dff60c8e020722f8a8856b7f53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 10:52:46 +0200 Subject: [PATCH 318/870] Bump org.jacoco:jacoco-maven-plugin from 0.8.12 to 0.8.13 (#1318) Bumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.12 to 0.8.13.
    Release notes

    Sourced from org.jacoco:jacoco-maven-plugin's releases.

    0.8.13

    New Features

    • JaCoCo now officially supports Java 23 and Java 24 (GitHub #1757, #1631, #1867).
    • Experimental support for Java 25 class files (GitHub #1807).
    • Calculation of line coverage for Kotlin inline functions (GitHub #1670).
    • Calculation of line coverage for Kotlin inline functions with reified type parameter (GitHub #1670, #1700).
    • Calculation of coverage for Kotlin JvmSynthetic functions (GitHub #1700).
    • Part of bytecode generated by the Kotlin Compose compiler plugin is filtered out during generation of report (GitHub #1616).
    • Part of bytecode generated by the Kotlin compiler for inline value classes is filtered out during generation of report (GitHub #1475).
    • Part of bytecode generated by the Kotlin compiler for suspending lambdas without suspension points is filtered out during generation of report (GitHub #1283).
    • Part of bytecode generated by the Kotlin compiler for when expressions and statements with nullable enum subject is filtered out during generation of report (GitHub #1774).
    • Part of bytecode generated by the Kotlin compiler for when expressions and statements with nullable String subject is filtered out during generation of report (GitHub #1769).
    • Part of bytecode generated by the Kotlin compiler for chains of safe call operators is filtered out during generation of report (GitHub #1810, #1818).
    • Method getEntries generated by the Kotlin compiler for enum classes is filtered out during generation of report (GitHub #1625).
    • Methods generated by the Kotlin compiler for constructors and functions with JvmOverloads annotation are filtered out (GitHub #1768).

    Fixed bugs

    • Fixed interpretation of Kotlin SMAP (GitHub #1525).
    • File extensions are preserved in HTML report in case of clashes of normalized file names (GitHub #1660).

    Non-functional Changes

    • JaCoCo build now uses Maven Wrapper and requires at least Maven 3.9.9 (GitHub #1708, #1707, #1681).
    • JaCoCo now depends on ASM 9.8 (GitHub #1862).
    • More context information when IllegalArgumentException occurs during reading of zip file (GitHub #1833).
    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.jacoco:jacoco-maven-plugin&package-manager=maven&previous-version=0.8.12&new-version=0.8.13)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 95b1cf0e4..48a0f0f98 100644 --- a/pom.xml +++ b/pom.xml @@ -263,7 +263,7 @@ org.jacoco jacoco-maven-plugin - 0.8.12 + 0.8.13 ${coverage.skip} From c57106dbfeb61e0e463f1573028c63d3bd29d507 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 10:52:59 +0200 Subject: [PATCH 319/870] Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.5.2 to 3.5.3 (#1316) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.5.2 to 3.5.3.
    Release notes

    Sourced from org.apache.maven.plugins:maven-failsafe-plugin's releases.

    3.5.3

    🐛 Bug Fixes

    👻 Maintenance

    📦 Dependency updates

    Commits
    • 4434650 [maven-release-plugin] prepare release surefire-3.5.3
    • 1270950 use github directly
    • 59f3a1f release tag name backward compatible
    • dfbabe2 assertj-core must be test scope (#826)
    • e1f8119 back to 3.5.3-SNAPSHOT
    • c497559 [maven-release-plugin] prepare for next development iteration
    • 3962112 [maven-release-plugin] prepare release v3.5.3
    • 227c134 surefire shared utils version current version (#825)
    • 1d34c34 Bump org.htmlunit:htmlunit from 4.10.0 to 4.11.1
    • 906b65a Update site descriptors
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.maven.plugins:maven-failsafe-plugin&package-manager=maven&previous-version=3.5.2&new-version=3.5.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 48a0f0f98..47869220a 100644 --- a/pom.xml +++ b/pom.xml @@ -181,7 +181,7 @@
    maven-failsafe-plugin - 3.5.2 + 3.5.3 maven-dependency-plugin From f9eabb55ff7bbf8a7757c0a2d1c2aa1f5cb6784c Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 4 Apr 2025 14:14:47 +0200 Subject: [PATCH 320/870] use Mise (#1319) Signed-off-by: Gregor Zeitlinger --- .github/workflows/acceptance-tests.yml | 28 ++++--------------- .github/workflows/native-tests.yml | 14 ++++------ .gitignore | 1 + mise.lock | 4 +++ mise.toml | 26 +++++++++++++++-- .../generate-protobuf.sh | 1 + scripts/run-acceptance-tests.sh | 9 ------ scripts/run-native-tests.sh | 7 ----- 8 files changed, 39 insertions(+), 51 deletions(-) delete mode 100755 scripts/run-acceptance-tests.sh delete mode 100755 scripts/run-native-tests.sh diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 3baa62489..321d5b330 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -10,32 +10,14 @@ jobs: acceptance-tests: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 - - name: Check out oats + - name: Check out uses: actions/checkout@v4 - with: - repository: grafana/oats - ref: v0.1.0 - path: oats - - name: Set up JDK - uses: actions/setup-java@v4 - with: - java-version: 17 - distribution: temurin - cache: 'maven' - - name: Set up Go - uses: actions/setup-go@v5 - with: - go-version: '1.23' - cache-dependency-path: oats/go.sum - - name: Run the Maven verify phase - run: | - ./mvnw clean install -DskipTests + - uses: jdx/mise-action@v2 - name: Run acceptance tests - run: ./scripts/run-acceptance-tests.sh + run: mise run acceptance-test - name: upload log file uses: actions/upload-artifact@v4 if: failure() with: - name: OATS logs - path: oats/yaml/build/**/*.log + name: OATs logs + path: build/**/*.log diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 9a4ed50a6..f124c8458 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -10,12 +10,8 @@ jobs: native-tests: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 - - name: Set up JDK - uses: actions/setup-java@v4 - with: - java-version: '21' - distribution: graalvm - cache: 'maven' - - name: Run the Maven verify phase - run: ./scripts/run-native-tests.sh + - name: Check out + uses: actions/checkout@v4 + - uses: jdx/mise-action@v2 + - name: Run native tests + run: mise run native-test diff --git a/.gitignore b/.gitignore index 14ec2f863..ad343c1bd 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ *.iml target/ +build/ simpleclient_pushgateway/mockserver.log simpleclient_pushgateway/mockserver_request.log nb-configuration.xml diff --git a/mise.lock b/mise.lock index 789ebabb2..4cdb5f57d 100644 --- a/mise.lock +++ b/mise.lock @@ -1,3 +1,7 @@ +[tools."go:github.com/grafana/oats"] +version = "0.2.0" +backend = "go:github.com/grafana/oats" + [tools.java] version = "temurin-17.0.13+11" backend = "core:java" diff --git a/mise.toml b/mise.toml index bf7a976de..e70b12fa8 100644 --- a/mise.toml +++ b/mise.toml @@ -2,15 +2,16 @@ PROTO_GENERATION = "true" [tools] +"go:github.com/grafana/oats" = "0.2.0" java = "temurin-17.0.13+11" protoc = "latest" [tasks.ci] description = "CI Build" run = [ - "./mvnw clean install", - # just to check if javadoc can be generated - "./mvnw javadoc:javadoc -P javadoc" + "./mvnw clean install", + # just to check if javadoc can be generated + "./mvnw javadoc:javadoc -P javadoc" ] env = { REQUIRE_PROTO_UP_TO_DATE = "true" } @@ -26,3 +27,22 @@ run = "./mvnw test -DskipTests=true -Dspotless.check.skip=true -Dcoverage.skip=t description = "run all tests" run = "./mvnw verify" +[tasks.build] +description = "build all modules wihthout tests" +run = "./mvnw clean install -DskipTests" + +[tasks.acceptance-test] +description = "Run OATs acceptance tests" +depends = "build" +run = "oats -timeout 5m examples/" + +[tasks.native-test] +depends = "build" +tools.java = "graalvm-22.3.3+java17" +run = "../../mvnw test -PnativeTest" +dir = "integration-tests/it-spring-boot-smoke-test" + +[settings] +# to get lock file support and for go backend +experimental = true + diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index c92eaf790..7411626f4 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -41,6 +41,7 @@ if [[ $GENERATED_WITH != "$PROTOBUF_VERSION" ]]; then exit 1 fi +git checkout -- ../mise.lock # see https://github.com/jdx/mise/discussions/4782 STATUS=$(git status --porcelain) if [[ ${REQUIRE_PROTO_UP_TO_DATE:-false} == "true" && -n "$STATUS" ]]; then echo "Please use https://mise.jdx.dev/ - this will use the version specified in mise.toml" diff --git a/scripts/run-acceptance-tests.sh b/scripts/run-acceptance-tests.sh deleted file mode 100755 index f72b98573..000000000 --- a/scripts/run-acceptance-tests.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -cd oats/yaml -go install github.com/onsi/ginkgo/v2/ginkgo -export TESTCASE_TIMEOUT=5m -export TESTCASE_BASE_PATH=../../examples -ginkgo diff --git a/scripts/run-native-tests.sh b/scripts/run-native-tests.sh deleted file mode 100755 index 535bc136c..000000000 --- a/scripts/run-native-tests.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -./mvnw clean install -DskipTests -cd integration-tests/it-spring-boot-smoke-test -../../mvnw test -PnativeTest From 6006e474c2674bd55db21bbc20a2fa323da0dcaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 16:58:31 +0200 Subject: [PATCH 321/870] Bump org.mockito:mockito-core from 5.16.1 to 5.17.0 (#1320) Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.16.1 to 5.17.0.
    Release notes

    Sourced from org.mockito:mockito-core's releases.

    v5.17.0

    Changelog generated by Shipkit Changelog Gradle Plugin

    5.17.0

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.mockito:mockito-core&package-manager=maven&previous-version=5.16.1&new-version=5.17.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 47869220a..9ce73ed03 100644 --- a/pom.xml +++ b/pom.xml @@ -108,7 +108,7 @@ org.mockito mockito-core - 5.16.1 + 5.17.0 test From 9f8e9c10df8e5c73dd7103593d9ff2ca316f4d12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 17:28:17 +0200 Subject: [PATCH 322/870] Bump jetty-server.version from 12.0.18 to 12.0.19 (#1317) Bumps `jetty-server.version` from 12.0.18 to 12.0.19. Updates `org.eclipse.jetty:jetty-server` from 12.0.18 to 12.0.19 Updates `org.eclipse.jetty.ee10:jetty-ee10-servlet` from 12.0.18 to 12.0.19 Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .../oats-tests/agent/example_target_info.json | 82 +++++++++++++++++++ .../agent/service-instance-id-check.py | 11 +-- .../it-exporter-servlet-jetty-sample/pom.xml | 2 +- 3 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 examples/example-exporter-opentelemetry/oats-tests/agent/example_target_info.json diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/example_target_info.json b/examples/example-exporter-opentelemetry/oats-tests/agent/example_target_info.json new file mode 100644 index 000000000..3be06bcb4 --- /dev/null +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/example_target_info.json @@ -0,0 +1,82 @@ +{ + "status": "success", + "data": { + "resultType": "vector", + "result": [ + { + "metric": { + "__name__": "target_info", + "container_id": "0282187277c5f259f3405455bd5094a936642415a02bd8dbbdb41a73987d8db7", + "host_arch": "amd64", + "host_name": "0282187277c5", + "instance": "6b3318d9-2b87-498b-a1a3-bbfaecc96374", + "job": "rolldice", + "os_description": "Linux 6.8.0-57-generic", + "os_type": "linux", + "process_command_args": "[\"/opt/java/openjdk/bin/java\",\"-jar\",\"./app.jar\"]", + "process_executable_path": "/opt/java/openjdk/bin/java", + "process_pid": "1", + "process_runtime_description": "Eclipse Adoptium OpenJDK 64-Bit Server VM 21.0.6+7-LTS", + "process_runtime_name": "OpenJDK Runtime Environment", + "process_runtime_version": "21.0.6+7-LTS", + "service_instance_id": "6b3318d9-2b87-498b-a1a3-bbfaecc96374", + "service_name": "rolldice", + "telemetry_distro_name": "opentelemetry-java-instrumentation", + "telemetry_distro_version": "2.8.0", + "telemetry_sdk_language": "java", + "telemetry_sdk_name": "opentelemetry", + "telemetry_sdk_version": "1.42.1" + }, + "value": [ + 1743776399.291, + "1" + ] + }, + { + "metric": { + "__name__": "target_info", + "http_scheme": "http", + "instance": "e6ff9e41-acdb-4c47-88b5-8112c831f5b5", + "job": "otelcol-contrib", + "net_host_port": "8888", + "server_port": "8888", + "service_instance_id": "e6ff9e41-acdb-4c47-88b5-8112c831f5b5", + "service_name": "otelcol-contrib", + "service_version": "0.122.1", + "url_scheme": "http" + }, + "value": [ + 1743776399.291, + "1" + ] + }, + { + "metric": { + "__name__": "target_info", + "container_id": "0282187277c5f259f3405455bd5094a936642415a02bd8dbbdb41a73987d8db7", + "host_arch": "amd64", + "host_name": "0282187277c5", + "instance": "6b3318d9-2b87-498b-a1a3-bbfaecc96374", + "job": "rolldice", + "os_description": "Linux 6.8.0-57-generic", + "os_type": "linux", + "process_command_line": "/opt/java/openjdk/bin/java -javaagent:/usr/src/app/opentelemetry-javaagent.jar -jar ./app.jar", + "process_executable_path": "/opt/java/openjdk/bin/java", + "process_pid": "1", + "process_runtime_description": "Eclipse Adoptium OpenJDK 64-Bit Server VM 21.0.6+7-LTS", + "process_runtime_name": "OpenJDK Runtime Environment", + "process_runtime_version": "21.0.6+7-LTS", + "service_instance_id": "6b3318d9-2b87-498b-a1a3-bbfaecc96374", + "service_name": "rolldice", + "telemetry_sdk_language": "java", + "telemetry_sdk_name": "opentelemetry", + "telemetry_sdk_version": "1.48.0" + }, + "value": [ + 1743776399.291, + "1" + ] + } + ] + } +} diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/service-instance-id-check.py b/examples/example-exporter-opentelemetry/oats-tests/agent/service-instance-id-check.py index 196c629c9..bcb7f1203 100755 --- a/examples/example-exporter-opentelemetry/oats-tests/agent/service-instance-id-check.py +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/service-instance-id-check.py @@ -7,14 +7,15 @@ import urllib.parse import json -url = ' http://localhost:9090/api/v1/label/instance/values' +url = ' http://localhost:9090/api/v1/query?query=target_info' res = json.loads(urlopen(url).read().decode('utf-8')) -values = list(res['data']) -print(values) +# uncomment the following line to use the local file instead of the url - for debugging +# with open('example_target_info.json') as f: +# res = json.load(f) -if "localhost:8888" in values: - values.remove("localhost:8888") +values = list({r['metric']['instance'] for r in res['data']['result'] if not r['metric']['service_name'] == 'otelcol-contrib'}) +print(values) # both the agent and the exporter should report the same instance id assert len(values) == 1 diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index fc38eded2..d6a9972ce 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -15,7 +15,7 @@ Jetty Sample for the Exporter Integration Test - 12.0.18 + 12.0.19 17 From 6d51883a3f5c22ef4c0904aa8bf83ee01726206e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 11:31:28 +0200 Subject: [PATCH 323/870] Bump com.diffplug.spotless:spotless-maven-plugin from 2.44.3 to 2.44.4 (#1322) Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.44.3 to 2.44.4.
    Release notes

    Sourced from com.diffplug.spotless:spotless-maven-plugin's releases.

    Maven Plugin v2.44.4

    Changed

    • Use palantir-java-format 2.57.0 on Java 21. (#2447)
    • Re-try npm install with --prefer-online after ERESOLVE error. (#2448)
    Commits
    • 0ca99e5 Published maven/2.44.4
    • 1b1a4fb Published gradle/7.0.3
    • 0fa3cab Published lib/3.1.1
    • 0fe8f9b Update README.md for android kotlin callouts (#2438)
    • d25f04d Minor tweak.
    • fa3fd1e Add the cool blockquote warning trick to the other Android spot.
    • 60993fd Fix the Android Kotlin warning and adjust its position.
    • 0426db1 Apply Gradle's strict plugin types validation to the Spotless plugin in prepa...
    • 48b4cde fix(deps): update dependency org.mockito:mockito-core to v5.17.0 (#2461)
    • 81f2f8b fix(deps): update dependency org.mockito:mockito-core to v5.17.0
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.diffplug.spotless:spotless-maven-plugin&package-manager=maven&previous-version=2.44.3&new-version=2.44.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index e249cedf6..4cc27292e 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -77,7 +77,7 @@ com.diffplug.spotless spotless-maven-plugin - 2.44.3 + 2.44.4 diff --git a/pom.xml b/pom.xml index 9ce73ed03..c2619e425 100644 --- a/pom.xml +++ b/pom.xml @@ -216,7 +216,7 @@ com.diffplug.spotless spotless-maven-plugin - 2.44.3 + 2.44.4 From 1ae726e30732060282396834f8aa379d56cc1591 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 15:45:21 +0200 Subject: [PATCH 324/870] Bump io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha from 2.14.0-alpha to 2.15.0-alpha (#1326) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://github.com/open-telemetry/opentelemetry-java-instrumentation) from 2.14.0-alpha to 2.15.0-alpha.
    Release notes

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's releases.

    Version 2.14.0

    This release targets the OpenTelemetry SDK 1.48.0.

    Note that many artifacts have the -alpha suffix attached to their version number, reflecting that they are still alpha quality and will continue to have breaking changes. Please see the VERSIONING.md for more details.

    Migration notes

    • The java.net.http.HttpClient instrumentation package io.opentelemetry.instrumentation.httpclient was deprecated in favor of the new package name io.opentelemetry.instrumentation.javahttpclient
    • The experimental opt-in jvm.buffer.memory.usage metric was renamed to jvm.buffer.memory.used in order to follow general semantic convention naming
    • The Http *TelemetryBuilder generic signatures were simplified (#12858)

    🌟 New javaagent instrumentation

    🌟 New library instrumentation

    📈 Enhancements

    • Support virtual threads in Spring Scheduling instrumentation (#13370)
    • Redact query string values for http client spans (#13114)
    • Support attribute lowercase modifier in JMX metrics yaml definitions (#13385)
    • Add tapir path matching within pekko instrumentation (#13386)
    • Support latest Axis2 version (#13490)
    • Add instrumentation for Lambda Java interface HandleStreamRequest (#13466)
    • Remove usage of gRPC internal api (#13510)
    • Add options to disable gRPC per-message events (#13443)
    • Add @​WithSpan option to break from existing context and start a new trace (#13112)

    🛠️ Bug fixes

    • Fix NoSuchElementException thrown by Akka instrumentation (#13360)
    • Fix Spring Boot Starter MDC instrumentation for Logback not injecting trace_id (#13391)
    • Fix opt-in invoke dynamic instrumentation mechanism in OpenJ9 (#13282)
    • Fix spans in Pekko instrumentation on server timeout (#13435)
    • Avoid overriding user's trace_id in Log4j MDC instrumentation (#13479)
    • Fix gRPC message ID attribute (#13443)

    🙇 Thank you

    This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:

    @​123liuziming @​anuraaga @​breedx-splk @​chlos

    ... (truncated)

    Changelog

    Sourced from io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha's changelog.

    Changelog

    Unreleased

    Version 2.15.0 (2025-04-10)

    📈 Enhancements

    • Delete deprecated java http client classes (#13527)
    • Support latest version of kafka client library (#13544)
    • Implement genai events for bedrock (streaming) (#13507)
    • JMX metrics support unit conversion (#13448)
    • Rename experimental method, use Telemetry instead of Metrics (#13574)
    • End metric description with dot (#13559)
    • Add initial gen_ai instrumentation of bedrock InvokeModel (#13547)
    • Delete deprecated library instrumentation methods (#13575)
    • Add experimental http client url.template attribute (#13581)
    • Add error.type for JDBC under otel.semconv-stability.opt-in flag (#13331)
    • Add azure resource provider (#13627)
    • Remove aws.endpoint attribute from SQS instrumentation (#13620)
    • Avoid conflicts with user-defined Apache Dubbo filters with default order (#13625)
    • Support filtering negative values from JMX metrics (#13589)
    • Instrument bedrock InvokeModelWithResponseStream (#13607)
    • Use context instead of request attributes for servlet async instrumentation (#13493)
    • Improve handling of quoted table names (#13612)

    🛠️ Bug fixes

    • Fix aws timeseries requests misdetected as dynamodb (#13579)
    • Fix pekko route naming (#13491)
    • Fix route handling when local root span wasn't created by instrumentation api

    ... (truncated)

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha&package-manager=maven&previous-version=2.14.0-alpha&new-version=2.15.0-alpha)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c2619e425..4ce721ea5 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ --module-name-need-to-be-overriden-- 33.4.6-jre 5.12.1 - 2.14.0-alpha + 2.15.0-alpha 8 0.70 false From 2059498982a041b79ca8aa9d2851c989c34f9363 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 16:23:01 +0200 Subject: [PATCH 325/870] Bump org.apache.tomcat.embed:tomcat-embed-core from 11.0.5 to 11.0.6 (#1324) Bumps org.apache.tomcat.embed:tomcat-embed-core from 11.0.5 to 11.0.6. [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.tomcat.embed:tomcat-embed-core&package-manager=maven&previous-version=11.0.5&new-version=11.0.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 88f2c56b2..a5c9d9ce4 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.5 + 11.0.6 diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 98acbe4e8..4b452182a 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.5 + 11.0.6 diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index b30d8c5f8..11ddaccef 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -38,7 +38,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.5 + 11.0.6 diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 0930052c9..048e9d976 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -33,7 +33,7 @@ org.apache.tomcat.embed tomcat-embed-core - 11.0.5 + 11.0.6 From 96e552d1c1680c93476e6c94735684bb2a11187e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 16:23:14 +0200 Subject: [PATCH 326/870] Bump com.google.guava:guava from 33.4.6-jre to 33.4.7-jre (#1323) Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.4.6-jre to 33.4.7-jre.
    Release notes

    Sourced from com.google.guava:guava's releases.

    33.4.7

    Known issue: This release breaks the build of Android apps with a minSdkVersion below 26. We will publish a fixed version soon. Sorry again for the continuing trouble.

    Guava 33.4.7, like 33.4.6, fixes two problems that we introduced while modularizing Guava and migrating off Unsafe in 33.4.5.

    Even if you're not upgrading from Guava 33.4.0 or earlier, still read the release notes for Guava 33.4.1. Those release notes contain information about the effects of Guava 33.4.5 and higher on the module system.

    Maven

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>33.4.7-jre</version>
      <!-- or, for Android: -->
      <version>33.4.7-android</version>
    </dependency>
    

    Jar files

    Guava requires one runtime dependency, which you can download here:

    Javadoc

    JDiff

    Changelog

    • Modified the guava module's dependency on failureaccess to be transitive. Also, modified the guava-testlib module to make its dependency on guava transitive, to remove its dependency on failureaccess, and to add a dependency (transitive) on junit. (63ecdf2239)
    • util.concurrent: Modified our fast paths to ensure that they continue to work when run through optimizers, such as those commonly used by Android apps. This fixes problems that some users may have seen since Guava 33.4.5. (b8dcaede09bcf1c3bd5fc037690498f6ac560c54, f9eff73b8d)
    • util.concurrent: Changed the guava-android copy of AbstractFuture to try VarHandle before Unsafe, eliminating a warning under newer JDKs. (7336af1831)
    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.guava:guava&package-manager=maven&previous-version=33.4.6-jre&new-version=33.4.7-jre)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4ce721ea5..5e9cccc11 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ UTF-8 --module-name-need-to-be-overriden-- - 33.4.6-jre + 33.4.7-jre 5.12.1 2.15.0-alpha 8 From bdca41547478521d172bc8b579844eb87c51abf9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 17:27:16 +0200 Subject: [PATCH 327/870] Bump junit-jupiter.version from 5.12.1 to 5.12.2 (#1327) Bumps `junit-jupiter.version` from 5.12.1 to 5.12.2. Updates `org.junit.jupiter:junit-jupiter` from 5.12.1 to 5.12.2
    Release notes

    Sourced from org.junit.jupiter:junit-jupiter's releases.

    JUnit 5.12.2 = Platform 1.12.2 + Jupiter 5.12.2 + Vintage 5.12.2

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2

    Commits
    • 0a44659 Release 5.12.2
    • 4c7dfdc Finalize 5.12.2 release notes
    • 561613e Fix handling of CleanupMode.ON_SUCCESS
    • 19d07d2 Add 5.12.2 release notes from template
    • 803cbb6 Add build parameter for enabling dry-run mode for test execution
    • eb43e62 Back to snapshots for further development
    • See full diff in compare view

    Updates `org.junit.jupiter:junit-jupiter-params` from 5.12.1 to 5.12.2
    Release notes

    Sourced from org.junit.jupiter:junit-jupiter-params's releases.

    JUnit 5.12.2 = Platform 1.12.2 + Jupiter 5.12.2 + Vintage 5.12.2

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2

    Commits
    • 0a44659 Release 5.12.2
    • 4c7dfdc Finalize 5.12.2 release notes
    • 561613e Fix handling of CleanupMode.ON_SUCCESS
    • 19d07d2 Add 5.12.2 release notes from template
    • 803cbb6 Add build parameter for enabling dry-run mode for test execution
    • eb43e62 Back to snapshots for further development
    • See full diff in compare view

    Updates `org.junit:junit-bom` from 5.12.1 to 5.12.2
    Release notes

    Sourced from org.junit:junit-bom's releases.

    JUnit 5.12.2 = Platform 1.12.2 + Jupiter 5.12.2 + Vintage 5.12.2

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2

    Commits
    • 0a44659 Release 5.12.2
    • 4c7dfdc Finalize 5.12.2 release notes
    • 561613e Fix handling of CleanupMode.ON_SUCCESS
    • 19d07d2 Add 5.12.2 release notes from template
    • 803cbb6 Add build parameter for enabling dry-run mode for test execution
    • eb43e62 Back to snapshots for further development
    • See full diff in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5e9cccc11..78c432785 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ UTF-8 --module-name-need-to-be-overriden-- 33.4.7-jre - 5.12.1 + 5.12.2 2.15.0-alpha 8 0.70 From 43c4c39ad794ef82de7fae221da935832a3ba6de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 17:27:34 +0200 Subject: [PATCH 328/870] Bump commons-io:commons-io from 2.18.0 to 2.19.0 (#1328) Bumps commons-io:commons-io from 2.18.0 to 2.19.0. [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=commons-io:commons-io&package-manager=maven&previous-version=2.18.0&new-version=2.19.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 20d0f1f38..3a8d1343d 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -51,7 +51,7 @@ commons-io commons-io - 2.18.0 + 2.19.0 org.testcontainers From 610600476590878a6a62f3ea858c85c0ac68dbce Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 15 Apr 2025 14:41:17 +0200 Subject: [PATCH 329/870] add option to skip the shaded protobuf and otel libraries (#1293) Signed-off-by: Gregor Zeitlinger --- .github/workflows/acceptance-tests.yml | 6 - docs/content/exporters/formats.md | 80 ++++++++-- .../it-spring-boot-smoke-test/pom.xml | 27 +++- mise.lock | 2 +- mise.toml | 2 +- pom.xml | 3 + prometheus-metrics-bom/pom.xml | 10 ++ .../pom.xml | 148 ++++++++++++++++++ .../pom.xml | 122 +-------------- .../pom.xml | 95 +++++++++++ prometheus-metrics-exposition-formats/pom.xml | 49 +----- 11 files changed, 361 insertions(+), 183 deletions(-) create mode 100644 prometheus-metrics-exporter-opentelemetry-shaded/pom.xml create mode 100644 prometheus-metrics-exposition-formats-shaded/pom.xml diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 321d5b330..1f40d6e55 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -15,9 +15,3 @@ jobs: - uses: jdx/mise-action@v2 - name: Run acceptance tests run: mise run acceptance-test - - name: upload log file - uses: actions/upload-artifact@v4 - if: failure() - with: - name: OATs logs - path: build/**/*.log diff --git a/docs/content/exporters/formats.md b/docs/content/exporters/formats.md index 79ae46e06..189d13d56 100644 --- a/docs/content/exporters/formats.md +++ b/docs/content/exporters/formats.md @@ -32,14 +32,74 @@ You can exclude the protobuf exposition format by including the For example, in Maven: ```xml - - io.prometheus - prometheus-metrics-exporter-httpserver - - - io.prometheus - prometheus-metrics-exposition-formats - - - + + + io.prometheus + prometheus-metrics-exporter-httpserver + + + io.prometheus + prometheus-metrics-exposition-formats + + + + + io.prometheus + prometheus-metrics-exposition-textformats + + +``` + +## Exclude the shaded protobuf classes + +You can exclude the shaded protobuf classes including the +`prometheus-metrics-exposition-formats-no-protobuf` module and excluding the +`prometheus-metrics-exposition-formats` module in your build file. + +For example, in Maven: + +```xml + + + io.prometheus + prometheus-metrics-exporter-httpserver + + + io.prometheus + prometheus-metrics-exposition-formats + + + + + io.prometheus + prometheus-metrics-exposition-formats-no-protobuf + + +``` + +## Exclude the shaded otel classes + +You can exclude the shaded otel classes including the +`prometheus-metrics-exporter-opentelemetry-no-otel` module and excluding the +`prometheus-metrics-exporter-opentelemetry` module in your build file. + +For example, in Maven: + +```xml + + + io.prometheus + prometheus-metrics-exporter-opentelemetry + + + io.prometheus + prometheus-metrics-exporter-opentelemetry + + + + + io.prometheus + prometheus-metrics-exporter-opentelemetry-no-otel + + ``` diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 4cc27292e..286aa8802 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 @@ -21,10 +22,18 @@ 17 + 5.12.0 + + org.junit + junit-bom + ${junit-jupiter.version} + pom + import + io.prometheus prometheus-metrics-bom @@ -49,12 +58,26 @@ micrometer-registry-prometheus runtime - org.springframework.boot spring-boot-starter-test test + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.platform + junit-platform-launcher + test + io.prometheus it-common diff --git a/mise.lock b/mise.lock index 4cdb5f57d..049ab1acf 100644 --- a/mise.lock +++ b/mise.lock @@ -1,5 +1,5 @@ [tools."go:github.com/grafana/oats"] -version = "0.2.0" +version = "0.3.0" backend = "go:github.com/grafana/oats" [tools.java] diff --git a/mise.toml b/mise.toml index e70b12fa8..a59047096 100644 --- a/mise.toml +++ b/mise.toml @@ -2,7 +2,7 @@ PROTO_GENERATION = "true" [tools] -"go:github.com/grafana/oats" = "0.2.0" +"go:github.com/grafana/oats" = "latest" java = "temurin-17.0.13+11" protoc = "latest" diff --git a/pom.xml b/pom.xml index 78c432785..e2f5d01eb 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,7 @@ UTF-8 --module-name-need-to-be-overriden-- + 4.30.2 33.4.7-jre 5.12.2 2.15.0-alpha @@ -68,12 +69,14 @@ prometheus-metrics-model prometheus-metrics-tracer prometheus-metrics-exposition-formats + prometheus-metrics-exposition-formats-shaded prometheus-metrics-exposition-textformats prometheus-metrics-exporter-common prometheus-metrics-exporter-servlet-jakarta prometheus-metrics-exporter-servlet-javax prometheus-metrics-exporter-httpserver prometheus-metrics-exporter-opentelemetry + prometheus-metrics-exporter-opentelemetry-shaded prometheus-metrics-exporter-opentelemetry-otel-agent-resources prometheus-metrics-exporter-pushgateway prometheus-metrics-instrumentation-caffeine diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index 496f2fc4f..e38595da0 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -47,6 +47,11 @@ prometheus-metrics-exporter-opentelemetry ${project.version} + + io.prometheus + prometheus-metrics-exporter-opentelemetry-no-otel + ${project.version} + io.prometheus prometheus-metrics-exporter-pushgateway @@ -62,6 +67,11 @@ prometheus-metrics-exporter-servlet-javax ${project.version} + + io.prometheus + prometheus-metrics-exposition-formats-no-protobuf + ${project.version} + io.prometheus prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml b/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml new file mode 100644 index 000000000..98c7966f8 --- /dev/null +++ b/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml @@ -0,0 +1,148 @@ + + + 4.0.0 + + + io.prometheus + client_java + 10.0.0-SNAPSHOT + + + prometheus-metrics-exporter-opentelemetry + bundle + + Prometheus Metrics to OpenTelemetry Exporter + + Converts Prometheus metrics to OpenTelemetry format and pushes them to an OTLP endpoint + + + + io.prometheus.metrics.exporter.opentelemetry + + + + + io.prometheus + prometheus-metrics-exporter-opentelemetry-no-otel + ${project.version} + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + regex-property + + regex-property + + + otel.instrumentation.string-version + ${otel.instrumentation.version} + [\.-] + _ + true + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + + + io.opentelemetry:* + io.opentelemetry.semconv:* + io.opentelemetry.instrumentation:* + com.squareup.*:* + org.jetbrains:* + org.jetbrains.*:* + + + + + io.opentelemetry + + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version} + + + + io.opentelemetry.instrumentation + + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.instrumentation + + + + io.opentelemetry.semconv + + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.semconv + + + + okhttp3 + + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.okhttp3 + + + + kotlin + + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.kotlin + + + + org.intellij + + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.org.intellij + + + + org.jetbrains + + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.org.jetbrains + + + + okio + + io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.okio + + + + + + + + + *:* + + lib/opentelemetry-* + META-INF/maven/org.jctools/** + META-INF/maven/org.jetbrains/** + META-INF/versions/** + META-INF/native-image/** + META-INF/proguard/** + META-INF/*.kotlin_module + META-INF/MANIFEST.MF + + + + + + + + + + diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 4bf7e4bf4..fa02e3706 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -9,16 +9,16 @@ 10.0.0-SNAPSHOT - prometheus-metrics-exporter-opentelemetry + prometheus-metrics-exporter-opentelemetry-no-otel bundle - Prometheus Metrics to OpenTelemetry Exporter + Prometheus Metrics to OpenTelemetry Exporter without OTel shaded - Converts Prometheus metrics to OpenTelemetry format and pushes them to an OTLP endpoint + Converts Prometheus metrics to OpenTelemetry format and pushes them to an OTLP endpoint without shading OpenTelemetry. - io.prometheus.metrics.exporter.opentelemetry + io.prometheus.metrics.exporter.opentelemetry.no-otel @@ -108,119 +108,5 @@ true - - - org.codehaus.mojo - build-helper-maven-plugin - - - regex-property - - regex-property - - - otel.instrumentation.string-version - ${otel.instrumentation.version} - [\.-] - _ - true - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - package - - shade - - - - - io.opentelemetry:* - io.opentelemetry.semconv:* - io.opentelemetry.instrumentation:* - com.squareup.*:* - org.jetbrains:* - org.jetbrains.*:* - - - - - io.opentelemetry - - io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version} - - - - io.opentelemetry.instrumentation - - io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.instrumentation - - - - io.opentelemetry.semconv - - io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.semconv - - - - okhttp3 - - io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.okhttp3 - - - - kotlin - - io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.kotlin - - - - org.intellij - - io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.org.intellij - - - - org.jetbrains - - io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.org.jetbrains - - - - okio - - io.prometheus.metrics.shaded.io_opentelemetry_${otel.instrumentation.string-version}.okio - - - - - - - - - *:* - - lib/opentelemetry-* - META-INF/maven/org.jctools/** - META-INF/maven/org.jetbrains/** - META-INF/versions/** - META-INF/native-image/** - META-INF/proguard/** - META-INF/*.kotlin_module - META-INF/MANIFEST.MF - - - - - - - - diff --git a/prometheus-metrics-exposition-formats-shaded/pom.xml b/prometheus-metrics-exposition-formats-shaded/pom.xml new file mode 100644 index 000000000..486336105 --- /dev/null +++ b/prometheus-metrics-exposition-formats-shaded/pom.xml @@ -0,0 +1,95 @@ + + + 4.0.0 + + + io.prometheus + client_java + 10.0.0-SNAPSHOT + + + prometheus-metrics-exposition-formats + bundle + + Prometheus Metrics Exposition Formats + + Prometheus exposition formats. + + + + io.prometheus.metrics.expositionformats + + + + + io.prometheus + prometheus-metrics-exposition-formats-no-protobuf + ${project.version} + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + regex-property + + regex-property + + + protobuf-java.string-version + ${protobuf-java.version} + \. + _ + true + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + true + true + + + com.google.protobuf:protobuf-java + + + + + com.google.protobuf + + io.prometheus.metrics.shaded.com_google_protobuf_${protobuf-java.string-version} + + + + + + com.google.protobuf:protobuf-java + + META-INF/maven/com.google.protobuf/** + **/*.proto + META-INF/MANIFEST.MF + + + + + + + + + + diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 69237e4bf..0a00907bd 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -10,17 +10,16 @@ 10.0.0-SNAPSHOT - prometheus-metrics-exposition-formats + prometheus-metrics-exposition-formats-no-protobuf bundle - Prometheus Metrics Exposition Formats + Prometheus Metrics Exposition Formats no protobuf - Prometheus exposition formats. + Prometheus exposition formats without shaded Protobuf classes. - io.prometheus.metrics.expositionformats - 4.30.2 + io.prometheus.metrics.expositionformats.noprotobuf @@ -34,7 +33,6 @@ protobuf-java ${protobuf-java.version} - @@ -138,45 +136,6 @@ src/main/java;src/main/generated
    - - org.apache.maven.plugins - maven-shade-plugin - - - package - - shade - - - true - true - - - com.google.protobuf:protobuf-java - - - - - com.google.protobuf - - io.prometheus.metrics.shaded.com_google_protobuf_${protobuf-java.string-version} - - - - - - com.google.protobuf:protobuf-java - - META-INF/maven/com.google.protobuf/** - **/*.proto - META-INF/MANIFEST.MF - - - - - - - From 61ae8168b9fcc3dbab7aa0e5c258a8ba6dc2d653 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 15 Apr 2025 16:09:08 +0200 Subject: [PATCH 330/870] fix timestamp representation (#1292) Fixes https://github.com/prometheus/client_java/issues/1277 --------- Signed-off-by: Gregor Zeitlinger --- .../benchmarks/TextFormatUtilBenchmark.java | 4 +- mise.toml | 10 +++- .../metrics/config/ExporterProperties.java | 29 +++++++++- .../config/ExporterPropertiesTest.java | 1 + .../exporter/pushgateway/PushGateway.java | 33 ++++++++++- .../pushgateway/BasicAuthPushGatewayTest.java | 1 + .../expositionformats/ExpositionFormats.java | 12 +++- .../OpenMetricsTextFormatWriter.java | 51 +++++++++++++--- .../PrometheusTextFormatWriter.java | 58 +++++++++++++++++-- .../expositionformats/TextFormatUtil.java | 15 ++++- .../ExpositionFormatWriterTest.java | 2 +- .../ExpositionFormatsTest.java | 26 ++++++--- .../expositionformats/TextFormatUtilTest.java | 13 +++++ 13 files changed, 219 insertions(+), 36 deletions(-) diff --git a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/TextFormatUtilBenchmark.java b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/TextFormatUtilBenchmark.java index 03dcd0d07..dcacf9a76 100644 --- a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/TextFormatUtilBenchmark.java +++ b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/TextFormatUtilBenchmark.java @@ -50,9 +50,9 @@ public class TextFormatUtilBenchmark { } private static final ExpositionFormatWriter OPEN_METRICS_TEXT_FORMAT_WRITER = - new OpenMetricsTextFormatWriter(false, false); + OpenMetricsTextFormatWriter.create(); private static final ExpositionFormatWriter PROMETHEUS_TEXT_FORMAT_WRITER = - new PrometheusTextFormatWriter(false); + PrometheusTextFormatWriter.create(); @State(Scope.Benchmark) public static class WriterState { diff --git a/mise.toml b/mise.toml index a59047096..f1032d2a4 100644 --- a/mise.toml +++ b/mise.toml @@ -19,9 +19,13 @@ env = { REQUIRE_PROTO_UP_TO_DATE = "true" } description = "format source code" run = "./mvnw spotless:apply" +[tasks.compile] +description = "bare compile, ignoring formatting and linters" +run = "./mvnw install -DskipTests -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn" + [tasks.test] description = "run unit tests, ignoring formatting and linters" -run = "./mvnw test -DskipTests=true -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn" +run = "./mvnw test -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn" [tasks.test-all] description = "run all tests" @@ -29,7 +33,7 @@ run = "./mvnw verify" [tasks.build] description = "build all modules wihthout tests" -run = "./mvnw clean install -DskipTests" +run = "./mvnw install -DskipTests" [tasks.acceptance-test] description = "Run OATs acceptance tests" @@ -39,7 +43,7 @@ run = "oats -timeout 5m examples/" [tasks.native-test] depends = "build" tools.java = "graalvm-22.3.3+java17" -run = "../../mvnw test -PnativeTest" +run = "../../mvnw test -PnativeTest" dir = "integration-tests/it-spring-boot-smoke-test" [settings] diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java index 72c04c33b..d35f970ff 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java @@ -6,14 +6,21 @@ public class ExporterProperties { private static final String INCLUDE_CREATED_TIMESTAMPS = "includeCreatedTimestamps"; + // milliseconds is the default - we only provide a boolean flag to avoid a breaking change + private static final String PROMETHEUS_TIMESTAMPS_IN_MS = "prometheusTimestampsInMs"; private static final String EXEMPLARS_ON_ALL_METRIC_TYPES = "exemplarsOnAllMetricTypes"; private static final String PREFIX = "io.prometheus.exporter"; private final Boolean includeCreatedTimestamps; + private final Boolean prometheusTimestampsInMs; private final Boolean exemplarsOnAllMetricTypes; - private ExporterProperties(Boolean includeCreatedTimestamps, Boolean exemplarsOnAllMetricTypes) { + private ExporterProperties( + Boolean includeCreatedTimestamps, + Boolean prometheusTimestampsInMs, + Boolean exemplarsOnAllMetricTypes) { this.includeCreatedTimestamps = includeCreatedTimestamps; + this.prometheusTimestampsInMs = prometheusTimestampsInMs; this.exemplarsOnAllMetricTypes = exemplarsOnAllMetricTypes; } @@ -22,6 +29,11 @@ public boolean getIncludeCreatedTimestamps() { return includeCreatedTimestamps != null && includeCreatedTimestamps; } + /** Use milliseconds for timestamps in prometheus text format? Default is {@code false}. */ + public boolean getPrometheusTimestampsInMs() { + return prometheusTimestampsInMs != null && prometheusTimestampsInMs; + } + /** * Allow Exemplars on all metric types in OpenMetrics format? Default is {@code false}, which * means Exemplars will only be added for Counters and Histogram buckets. @@ -38,9 +50,12 @@ static ExporterProperties load(Map properties) throws PrometheusPropertiesException { Boolean includeCreatedTimestamps = Util.loadBoolean(PREFIX + "." + INCLUDE_CREATED_TIMESTAMPS, properties); + Boolean timestampsInMs = + Util.loadBoolean(PREFIX + "." + PROMETHEUS_TIMESTAMPS_IN_MS, properties); Boolean exemplarsOnAllMetricTypes = Util.loadBoolean(PREFIX + "." + EXEMPLARS_ON_ALL_METRIC_TYPES, properties); - return new ExporterProperties(includeCreatedTimestamps, exemplarsOnAllMetricTypes); + return new ExporterProperties( + includeCreatedTimestamps, timestampsInMs, exemplarsOnAllMetricTypes); } public static Builder builder() { @@ -51,6 +66,7 @@ public static class Builder { private Boolean includeCreatedTimestamps; private Boolean exemplarsOnAllMetricTypes; + boolean prometheusTimestampsInMs; private Builder() {} @@ -66,8 +82,15 @@ public Builder exemplarsOnAllMetricTypes(boolean exemplarsOnAllMetricTypes) { return this; } + /** See {@link #getPrometheusTimestampsInMs()}. */ + public Builder prometheusTimestampsInMs(boolean prometheusTimestampsInMs) { + this.prometheusTimestampsInMs = prometheusTimestampsInMs; + return this; + } + public ExporterProperties build() { - return new ExporterProperties(includeCreatedTimestamps, exemplarsOnAllMetricTypes); + return new ExporterProperties( + includeCreatedTimestamps, prometheusTimestampsInMs, exemplarsOnAllMetricTypes); } } } diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java index c09bc12c3..190616292 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java @@ -48,6 +48,7 @@ void builder() { ExporterProperties.builder() .includeCreatedTimestamps(true) .exemplarsOnAllMetricTypes(true) + .prometheusTimestampsInMs(false) .build(); assertThat(properties.getIncludeCreatedTimestamps()).isTrue(); assertThat(properties.getExemplarsOnAllMetricTypes()).isTrue(); diff --git a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java index 6c89185f1..1f7262368 100644 --- a/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java +++ b/prometheus-metrics-exporter-pushgateway/src/main/java/io/prometheus/metrics/exporter/pushgateway/PushGateway.java @@ -80,6 +80,7 @@ public class PushGateway { private final URL url; private final ExpositionFormatWriter writer; + private final boolean prometheusTimestampsInMs; private final Map requestHeaders; private final PrometheusRegistry registry; private final HttpConnectionFactory connectionFactory; @@ -89,20 +90,25 @@ private PushGateway( Format format, URL url, HttpConnectionFactory connectionFactory, - Map requestHeaders) { + Map requestHeaders, + boolean prometheusTimestampsInMs) { this.registry = registry; this.url = url; this.requestHeaders = Collections.unmodifiableMap(new HashMap<>(requestHeaders)); this.connectionFactory = connectionFactory; + this.prometheusTimestampsInMs = prometheusTimestampsInMs; writer = getWriter(format); if (!writer.isAvailable()) { throw new RuntimeException(writer.getClass() + " is not available"); } } + @SuppressWarnings("deprecation") private ExpositionFormatWriter getWriter(Format format) { if (format == Format.PROMETHEUS_TEXT) { - return new PrometheusTextFormatWriter(false); + return PrometheusTextFormatWriter.builder() + .setTimestampsInMs(this.prometheusTimestampsInMs) + .build(); } else { // use reflection to avoid a compile-time dependency on the expositionformats module return new PrometheusProtobufWriter(); @@ -264,6 +270,7 @@ public static class Builder { private String address; private Scheme scheme; private String job; + private boolean prometheusTimestampsInMs; private final Map requestHeaders = new HashMap<>(); private PrometheusRegistry registry = PrometheusRegistry.defaultRegistry; private HttpConnectionFactory connectionFactory = new DefaultHttpConnectionFactory(); @@ -380,6 +387,21 @@ public Builder registry(PrometheusRegistry registry) { return this; } + /** + * Use milliseconds for timestamps in text format? Default is {@code false}. Can be overwritten + * at runtime with the {@code io.prometheus.exporter.timestampsInMs} property. + */ + public Builder prometheusTimestampsInMs(boolean prometheusTimestampsInMs) { + this.prometheusTimestampsInMs = prometheusTimestampsInMs; + return this; + } + + private boolean getPrometheusTimestampsInMs() { + // accept either to opt in to timestamps in milliseconds + return config.getExporterProperties().getPrometheusTimestampsInMs() + || this.prometheusTimestampsInMs; + } + private Scheme getScheme(ExporterPushgatewayProperties properties) { if (properties != null && properties.getScheme() != null) { return Scheme.valueOf(properties.getScheme()); @@ -453,7 +475,12 @@ public PushGateway build() { config == null ? null : config.getExporterPushgatewayProperties(); try { return new PushGateway( - registry, getFormat(), makeUrl(properties), connectionFactory, requestHeaders); + registry, + getFormat(), + makeUrl(properties), + connectionFactory, + requestHeaders, + getPrometheusTimestampsInMs()); } catch (MalformedURLException e) { throw new PrometheusPropertiesException( address + ": Invalid address. Expecting :"); diff --git a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java index 598172eaa..ce0fec354 100644 --- a/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java +++ b/prometheus-metrics-exporter-pushgateway/src/test/java/io/prometheus/metrics/exporter/pushgateway/BasicAuthPushGatewayTest.java @@ -29,6 +29,7 @@ public void setUp() { .address("localhost:" + mockServerClient.getPort()) .basicAuth("testUser", "testPwd") .registry(registry) + .prometheusTimestampsInMs(true) .job("j") .build(); } diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java index 01ea9ef40..daec7677b 100644 --- a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java @@ -22,12 +22,18 @@ public static ExpositionFormats init() { return init(PrometheusProperties.get().getExporterProperties()); } + @SuppressWarnings("deprecation") public static ExpositionFormats init(ExporterProperties properties) { return new ExpositionFormats( new PrometheusProtobufWriter(), - new PrometheusTextFormatWriter(properties.getIncludeCreatedTimestamps()), - new OpenMetricsTextFormatWriter( - properties.getIncludeCreatedTimestamps(), properties.getExemplarsOnAllMetricTypes())); + PrometheusTextFormatWriter.builder() + .setIncludeCreatedTimestamps(properties.getIncludeCreatedTimestamps()) + .setTimestampsInMs(properties.getPrometheusTimestampsInMs()) + .build(), + OpenMetricsTextFormatWriter.builder() + .setCreatedTimestampsEnabled(properties.getIncludeCreatedTimestamps()) + .setExemplarsOnAllMetricTypesEnabled(properties.getExemplarsOnAllMetricTypes()) + .build()); } public ExpositionFormatWriter findWriter(String acceptHeader) { diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java index 0e34934d7..914b28515 100644 --- a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java @@ -4,7 +4,7 @@ import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeEscapedLabelValue; import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLabels; import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLong; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeTimestamp; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeOpenMetricsTimestamp; import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.CounterSnapshot; @@ -37,14 +37,43 @@ */ public class OpenMetricsTextFormatWriter implements ExpositionFormatWriter { + public static class Builder { + boolean createdTimestampsEnabled; + boolean exemplarsOnAllMetricTypesEnabled; + + private Builder() {} + + /** + * @param createdTimestampsEnabled whether to include the _created timestamp in the output + */ + public Builder setCreatedTimestampsEnabled(boolean createdTimestampsEnabled) { + this.createdTimestampsEnabled = createdTimestampsEnabled; + return this; + } + + /** + * @param exemplarsOnAllMetricTypesEnabled whether to include exemplars in the output for all + * metric types + */ + public Builder setExemplarsOnAllMetricTypesEnabled(boolean exemplarsOnAllMetricTypesEnabled) { + this.exemplarsOnAllMetricTypesEnabled = exemplarsOnAllMetricTypesEnabled; + return this; + } + + public OpenMetricsTextFormatWriter build() { + return new OpenMetricsTextFormatWriter( + createdTimestampsEnabled, exemplarsOnAllMetricTypesEnabled); + } + } + public static final String CONTENT_TYPE = "application/openmetrics-text; version=1.0.0; charset=utf-8"; private final boolean createdTimestampsEnabled; private final boolean exemplarsOnAllMetricTypesEnabled; /** - * @param createdTimestampsEnabled defines if {@code _created} timestamps should be included in - * the output or not. + * @param createdTimestampsEnabled whether to include the _created timestamp in the output - This + * will produce an invalid OpenMetrics output, but is kept for backwards compatibility. */ public OpenMetricsTextFormatWriter( boolean createdTimestampsEnabled, boolean exemplarsOnAllMetricTypesEnabled) { @@ -52,6 +81,14 @@ public OpenMetricsTextFormatWriter( this.exemplarsOnAllMetricTypesEnabled = exemplarsOnAllMetricTypesEnabled; } + public static Builder builder() { + return new Builder(); + } + + public static OpenMetricsTextFormatWriter create() { + return builder().build(); + } + @Override public boolean accepts(String acceptHeader) { if (acceptHeader == null) { @@ -299,10 +336,10 @@ private void writeCreated(Writer writer, MetricMetadata metadata, DataPointSnaps throws IOException { if (createdTimestampsEnabled && data.hasCreatedTimestamp()) { writeNameAndLabels(writer, metadata.getPrometheusName(), "_created", data.getLabels()); - writeTimestamp(writer, data.getCreatedTimestampMillis()); + writeOpenMetricsTimestamp(writer, data.getCreatedTimestampMillis()); if (data.hasScrapeTimestamp()) { writer.write(' '); - writeTimestamp(writer, data.getScrapeTimestampMillis()); + writeOpenMetricsTimestamp(writer, data.getScrapeTimestampMillis()); } writer.write('\n'); } @@ -335,7 +372,7 @@ private void writeScrapeTimestampAndExemplar( Writer writer, DataPointSnapshot data, Exemplar exemplar) throws IOException { if (data.hasScrapeTimestamp()) { writer.write(' '); - writeTimestamp(writer, data.getScrapeTimestampMillis()); + writeOpenMetricsTimestamp(writer, data.getScrapeTimestampMillis()); } if (exemplar != null) { writer.write(" # "); @@ -344,7 +381,7 @@ private void writeScrapeTimestampAndExemplar( writeDouble(writer, exemplar.getValue()); if (exemplar.hasTimestamp()) { writer.write(' '); - writeTimestamp(writer, exemplar.getTimestampMillis()); + writeOpenMetricsTimestamp(writer, exemplar.getTimestampMillis()); } } writer.write('\n'); diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java index 8602b0ba5..76a5e4228 100644 --- a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusTextFormatWriter.java @@ -4,7 +4,7 @@ import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeEscapedLabelValue; import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLabels; import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeLong; -import static io.prometheus.metrics.expositionformats.TextFormatUtil.writeTimestamp; +import static io.prometheus.metrics.expositionformats.TextFormatUtil.writePrometheusTimestamp; import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.CounterSnapshot; @@ -36,9 +36,55 @@ public class PrometheusTextFormatWriter implements ExpositionFormatWriter { public static final String CONTENT_TYPE = "text/plain; version=0.0.4; charset=utf-8"; private final boolean writeCreatedTimestamps; + private final boolean timestampsInMs; + public static class Builder { + boolean includeCreatedTimestamps; + boolean timestampsInMs = true; + + private Builder() {} + + /** + * @param includeCreatedTimestamps whether to include the _created timestamp in the output + */ + public Builder setIncludeCreatedTimestamps(boolean includeCreatedTimestamps) { + this.includeCreatedTimestamps = includeCreatedTimestamps; + return this; + } + + @Deprecated + public Builder setTimestampsInMs(boolean timestampsInMs) { + this.timestampsInMs = timestampsInMs; + return this; + } + + public PrometheusTextFormatWriter build() { + return new PrometheusTextFormatWriter(includeCreatedTimestamps, timestampsInMs); + } + } + + /** + * @param writeCreatedTimestamps whether to include the _created timestamp in the output - This + * will produce an invalid OpenMetrics output, but is kept for backwards compatibility. + * @deprecated this constructor is deprecated and will be removed in the next major version - + * {@link #builder()} or {@link #create()} instead + */ + @Deprecated public PrometheusTextFormatWriter(boolean writeCreatedTimestamps) { + this(writeCreatedTimestamps, false); + } + + private PrometheusTextFormatWriter(boolean writeCreatedTimestamps, boolean timestampsInMs) { this.writeCreatedTimestamps = writeCreatedTimestamps; + this.timestampsInMs = timestampsInMs; + } + + public static PrometheusTextFormatWriter.Builder builder() { + return new Builder(); + } + + public static PrometheusTextFormatWriter create() { + return builder().build(); } @Override @@ -62,7 +108,7 @@ public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOEx // "summary". Writer writer = new BufferedWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8)); for (MetricSnapshot snapshot : metricSnapshots) { - if (snapshot.getDataPoints().size() > 0) { + if (!snapshot.getDataPoints().isEmpty()) { if (snapshot instanceof CounterSnapshot) { writeCounter(writer, (CounterSnapshot) snapshot); } else if (snapshot instanceof GaugeSnapshot) { @@ -82,7 +128,7 @@ public void write(OutputStream out, MetricSnapshots metricSnapshots) throws IOEx } if (writeCreatedTimestamps) { for (MetricSnapshot snapshot : metricSnapshots) { - if (snapshot.getDataPoints().size() > 0) { + if (!snapshot.getDataPoints().isEmpty()) { if (snapshot instanceof CounterSnapshot) { writeCreated(writer, snapshot); } else if (snapshot instanceof HistogramSnapshot) { @@ -106,14 +152,14 @@ public void writeCreated(Writer writer, MetricSnapshot snapshot) throws IOExcept metadataWritten = true; } writeNameAndLabels(writer, metadata.getPrometheusName(), "_created", data.getLabels()); - writeTimestamp(writer, data.getCreatedTimestampMillis()); + writePrometheusTimestamp(writer, data.getCreatedTimestampMillis(), timestampsInMs); writeScrapeTimestampAndNewline(writer, data); } } } private void writeCounter(Writer writer, CounterSnapshot snapshot) throws IOException { - if (snapshot.getDataPoints().size() > 0) { + if (!snapshot.getDataPoints().isEmpty()) { MetricMetadata metadata = snapshot.getMetadata(); writeMetadata(writer, "_total", "counter", metadata); for (CounterSnapshot.CounterDataPointSnapshot data : snapshot.getDataPoints()) { @@ -363,7 +409,7 @@ private void writeScrapeTimestampAndNewline(Writer writer, DataPointSnapshot dat throws IOException { if (data.hasScrapeTimestamp()) { writer.write(' '); - writeTimestamp(writer, data.getScrapeTimestampMillis()); + writePrometheusTimestamp(writer, data.getScrapeTimestampMillis(), timestampsInMs); } writer.write('\n'); } diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java index dffa8ddef..787a11c01 100644 --- a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java @@ -21,7 +21,20 @@ static void writeDouble(Writer writer, double d) throws IOException { } } - static void writeTimestamp(Writer writer, long timestampMs) throws IOException { + static void writePrometheusTimestamp(Writer writer, long timestampMs, boolean timestampsInMs) + throws IOException { + if (timestampsInMs) { + // correct for prometheus exposition format + // https://prometheus.io/docs/instrumenting/exposition_formats/#text-format-details + writer.write(Long.toString(timestampMs)); + } else { + // incorrect for prometheus exposition format - + // but we need to support it for backwards compatibility + writeOpenMetricsTimestamp(writer, timestampMs); + } + } + + static void writeOpenMetricsTimestamp(Writer writer, long timestampMs) throws IOException { writer.write(Long.toString(timestampMs / 1000L)); writer.write("."); long ms = timestampMs % 1000; diff --git a/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriterTest.java b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriterTest.java index 7fae4a2fb..aa50d9876 100644 --- a/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriterTest.java +++ b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatWriterTest.java @@ -7,7 +7,7 @@ class ExpositionFormatWriterTest { - private final ExpositionFormatWriter writer = new OpenMetricsTextFormatWriter(false, false); + private final ExpositionFormatWriter writer = OpenMetricsTextFormatWriter.create(); @Test void toDebugString() { diff --git a/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java index be6c42284..c0824c8e0 100644 --- a/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/ExpositionFormatsTest.java @@ -2739,7 +2739,8 @@ public void testLabelValueEscape() throws IOException { private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, false); + OpenMetricsTextFormatWriter writer = + OpenMetricsTextFormatWriter.builder().setCreatedTimestampsEnabled(true).build(); writer.write(out, MetricSnapshots.of(snapshot)); assertThat(out).hasToString(expected); } @@ -2747,7 +2748,11 @@ private void assertOpenMetricsText(String expected, MetricSnapshot snapshot) thr private void assertOpenMetricsTextWithExemplarsOnAllTimeSeries( String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(true, true); + OpenMetricsTextFormatWriter writer = + OpenMetricsTextFormatWriter.builder() + .setCreatedTimestampsEnabled(true) + .setExemplarsOnAllMetricTypesEnabled(true) + .build(); writer.write(out, MetricSnapshots.of(snapshot)); assertThat(out).hasToString(expected); } @@ -2755,23 +2760,30 @@ private void assertOpenMetricsTextWithExemplarsOnAllTimeSeries( private void assertOpenMetricsTextWithoutCreated(String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); - OpenMetricsTextFormatWriter writer = new OpenMetricsTextFormatWriter(false, false); + OpenMetricsTextFormatWriter writer = OpenMetricsTextFormatWriter.create(); writer.write(out, MetricSnapshots.of(snapshot)); assertThat(out).hasToString(expected); } private void assertPrometheusText(String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); - PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(true); - writer.write(out, MetricSnapshots.of(snapshot)); + + getPrometheusWriter(PrometheusTextFormatWriter.builder().setIncludeCreatedTimestamps(true)) + .write(out, MetricSnapshots.of(snapshot)); assertThat(out).hasToString(expected); } + @SuppressWarnings("deprecation") + private static PrometheusTextFormatWriter getPrometheusWriter( + PrometheusTextFormatWriter.Builder builder) { + return builder.setTimestampsInMs(false).build(); + } + private void assertPrometheusTextWithoutCreated(String expected, MetricSnapshot snapshot) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); - PrometheusTextFormatWriter writer = new PrometheusTextFormatWriter(false); - writer.write(out, MetricSnapshots.of(snapshot)); + getPrometheusWriter(PrometheusTextFormatWriter.builder()) + .write(out, MetricSnapshots.of(snapshot)); assertThat(out).hasToString(expected); } diff --git a/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/TextFormatUtilTest.java b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/TextFormatUtilTest.java index dece52abb..3f3558160 100644 --- a/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/TextFormatUtilTest.java +++ b/prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/TextFormatUtilTest.java @@ -1,5 +1,6 @@ package io.prometheus.metrics.expositionformats; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; @@ -21,4 +22,16 @@ private static String escape(String s) throws IOException { TextFormatUtil.writeEscapedLabelValue(writer, s); return writer.toString(); } + + @Test + void testWritePrometheusTimestamp() throws IOException { + assertThat(writePrometheusTimestamp(true)).isEqualTo("1000"); + assertThat(writePrometheusTimestamp(false)).isEqualTo("1.000"); + } + + private static String writePrometheusTimestamp(boolean timestampsInMs) throws IOException { + StringWriter writer = new StringWriter(); + TextFormatUtil.writePrometheusTimestamp(writer, 1000, timestampsInMs); + return writer.toString(); + } } From 62561aa2baf26550c556d95c792ee4189a89309b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 16:14:40 +0200 Subject: [PATCH 331/870] Bump junit-jupiter.version from 5.12.2 to 5.12.2 (#1329) Bumps `junit-jupiter.version` from 5.12.2 to 5.12.2. Updates `org.junit.jupiter:junit-jupiter` from 5.12.2 to 5.12.2
    Commits

    Updates `org.junit.jupiter:junit-jupiter-params` from 5.12.2 to 5.12.2
    Commits

    Updates `org.junit:junit-bom` from 5.12.0 to 5.12.2
    Release notes

    Sourced from org.junit:junit-bom's releases.

    JUnit 5.12.2 = Platform 1.12.2 + Jupiter 5.12.2 + Vintage 5.12.2

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2

    JUnit 5.12.1 = Platform 1.12.1 + Jupiter 5.12.1 + Vintage 5.12.1

    See Release Notes.

    Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1

    Commits
    • 0a44659 Release 5.12.2
    • 4c7dfdc Finalize 5.12.2 release notes
    • 561613e Fix handling of CleanupMode.ON_SUCCESS
    • 19d07d2 Add 5.12.2 release notes from template
    • 803cbb6 Add build parameter for enabling dry-run mode for test execution
    • eb43e62 Back to snapshots for further development
    • ba9c9ae Release 5.12.1
    • e28ad4a Finalize 5.12.1 release notes
    • 1044e2c Move entry to 5.12.1 release notes
    • bea821d Fix Javadoc formatting
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 286aa8802..0fd3d26ba 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -22,7 +22,7 @@ 17 - 5.12.0 + 5.12.2 From 2838f6aa41496a06aec4663857e4bf70f690d1d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 16:14:46 +0200 Subject: [PATCH 332/870] Bump com.google.guava:guava from 33.4.7-jre to 33.4.8-jre (#1330) Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.4.7-jre to 33.4.8-jre.
    Release notes

    Sourced from com.google.guava:guava's releases.

    33.4.8

    Guava 33.4.8 fixes a problem that we introduced while starting to migrate guava-android off Unsafe in 33.4.7.

    Even if you're not upgrading from Guava 33.4.0 or earlier, still read the release notes for Guava 33.4.1. Those release notes contain information about the effects of Guava 33.4.5 and higher on the module system.

    Maven

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>33.4.8-jre</version>
      <!-- or, for Android: -->
      <version>33.4.8-android</version>
    </dependency>
    

    Jar files

    Guava requires one runtime dependency, which you can download here:

    Javadoc

    JDiff

    Changelog

    • util.concurrent: Removed our VarHandle code from guava-android. While the code was never used at runtime under Android, it was causing problems under the Android Gradle Plugin with a minSdkVersion below 26. To continue to avoid sun.misc.Unsafe under the JVM, guava-android will now always use AtomicReferenceFieldUpdater when run there. (75da92419a)
    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.guava:guava&package-manager=maven&previous-version=33.4.7-jre&new-version=33.4.8-jre)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e2f5d01eb..ab8b80faa 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ UTF-8 --module-name-need-to-be-overriden-- 4.30.2 - 33.4.7-jre + 33.4.8-jre 5.12.2 2.15.0-alpha 8 From 8d80d77da11ab94dbea6e6a52f8ab0e3a4b38c3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20St=C3=A4ber?= Date: Tue, 15 Apr 2025 16:15:20 +0200 Subject: [PATCH 333/870] Fix next SNAPSHOT version (#1217) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tiny fix. --------- Signed-off-by: Fabian Stäber Signed-off-by: Gregor Zeitlinger Co-authored-by: Gregor Zeitlinger --- benchmarks/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exemplars-tail-sampling/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-multi-target/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter/it-exporter-httpserver-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-exporter/it-no-protobuf-test/pom.xml | 2 +- integration-tests/it-exporter/pom.xml | 2 +- integration-tests/it-pushgateway/pom.xml | 2 +- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- integration-tests/pom.xml | 2 +- mise.toml | 3 +++ pom.xml | 2 +- prometheus-metrics-bom/pom.xml | 2 +- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- prometheus-metrics-exporter-httpserver/pom.xml | 2 +- .../pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry-shaded/pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exporter-pushgateway/pom.xml | 2 +- prometheus-metrics-exporter-servlet-jakarta/pom.xml | 2 +- prometheus-metrics-exporter-servlet-javax/pom.xml | 2 +- prometheus-metrics-exposition-formats-shaded/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- prometheus-metrics-exposition-textformats/pom.xml | 2 +- prometheus-metrics-instrumentation-caffeine/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard5/pom.xml | 2 +- prometheus-metrics-instrumentation-guava/pom.xml | 2 +- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- prometheus-metrics-simpleclient-bridge/pom.xml | 2 +- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../prometheus-metrics-tracer-initializer/pom.xml | 2 +- .../prometheus-metrics-tracer-otel-agent/pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- 51 files changed, 53 insertions(+), 50 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 98d084787..8e476d5a6 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT benchmarks diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index a5c9d9ce4..dfd151cb8 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT example-greeting-service diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 4b452182a..475f10e91 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -5,7 +5,7 @@ io.prometheus example-exemplars-tail-sampling - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT example-hello-world-app diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index 3c62dfb66..84117e965 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT example-exemplars-tail-sampling diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index 74124c6bd..575cc479a 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT example-exporter-httpserver diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index 8ba600b73..8b7382275 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT example-exporter-multi-target diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index e8546c5a0..057022269 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT example-exporter-opentelemetry diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 11ddaccef..96ca3c3ca 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT example-exporter-servlet-tomcat diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index 3aebe8278..0d17251ae 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT example-native-histogram diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index 112b775d9..0c910483f 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT example-prometheus-properties diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index abd461450..0e2607f1c 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus examples - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT example-simpleclient-bridge diff --git a/examples/pom.xml b/examples/pom.xml index 3e7864ff1..db1b56b3e 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT examples diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index 511cf9a8c..57e8947c7 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -6,7 +6,7 @@ io.prometheus integration-tests - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT it-common diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index 25696a247..e44f4396a 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml b/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml index 4a0dc8772..825081d3c 100644 --- a/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml +++ b/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT it-exporter-no-protobuf diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index d6a9972ce..76334c3ff 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index 048e9d976..534eeed9a 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 5a6496ba2..13ade72d0 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT it-exporter-test diff --git a/integration-tests/it-exporter/it-no-protobuf-test/pom.xml b/integration-tests/it-exporter/it-no-protobuf-test/pom.xml index 8ceda5e8f..2e5599205 100644 --- a/integration-tests/it-exporter/it-no-protobuf-test/pom.xml +++ b/integration-tests/it-exporter/it-no-protobuf-test/pom.xml @@ -5,7 +5,7 @@ io.prometheus it-exporter - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT it-no-protobuf-test diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index 4ea63136e..685c8b0b0 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT it-exporter diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index 15f99ff46..783f83bea 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -5,7 +5,7 @@ io.prometheus integration-tests - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT it-pushgateway diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 0fd3d26ba..2417246eb 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -14,7 +14,7 @@ io.prometheus it-spring-boot-smoke-test - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT Integration Test - Spring Smoke Tests diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 3a8d1343d..3b5f11ef3 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT integration-tests diff --git a/mise.toml b/mise.toml index f1032d2a4..cd4046f35 100644 --- a/mise.toml +++ b/mise.toml @@ -46,6 +46,9 @@ tools.java = "graalvm-22.3.3+java17" run = "../../mvnw test -PnativeTest" dir = "integration-tests/it-spring-boot-smoke-test" +[tasks.set-version] +run = 'mvn versions:set -DnewVersion={{arg(name="version")}}' + [settings] # to get lock file support and for go backend experimental = true diff --git a/pom.xml b/pom.xml index ab8b80faa..52e9cd642 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT Prometheus Metrics Library http://github.com/prometheus/client_java diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index e38595da0..baa52cd0e 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-bom diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index 420ed8a13..a6c8e008f 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 7305675bd..1f1079992 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index e54f925fd..4d8c5dde6 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index 5e639f3f8..efeb6fc80 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml b/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml index a1ee03d71..533b05956 100644 --- a/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry-otel-agent-resources diff --git a/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml b/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml index 98c7966f8..5c2c6e22a 100644 --- a/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index fa02e3706..9fb29adbe 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry-no-otel diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index a3881f472..aa02be7c6 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exporter-pushgateway diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 3cf77ca86..c8852f597 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml index b5657ffb0..b173a3b07 100644 --- a/prometheus-metrics-exporter-servlet-javax/pom.xml +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exporter-servlet-javax diff --git a/prometheus-metrics-exposition-formats-shaded/pom.xml b/prometheus-metrics-exposition-formats-shaded/pom.xml index 486336105..eee3ea2db 100644 --- a/prometheus-metrics-exposition-formats-shaded/pom.xml +++ b/prometheus-metrics-exposition-formats-shaded/pom.xml @@ -7,7 +7,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index 0a00907bd..e174a254f 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -7,7 +7,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exposition-formats-no-protobuf diff --git a/prometheus-metrics-exposition-textformats/pom.xml b/prometheus-metrics-exposition-textformats/pom.xml index 13ab9e5e7..87ede09d6 100644 --- a/prometheus-metrics-exposition-textformats/pom.xml +++ b/prometheus-metrics-exposition-textformats/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-exposition-textformats diff --git a/prometheus-metrics-instrumentation-caffeine/pom.xml b/prometheus-metrics-instrumentation-caffeine/pom.xml index dd471254a..38236ebf2 100644 --- a/prometheus-metrics-instrumentation-caffeine/pom.xml +++ b/prometheus-metrics-instrumentation-caffeine/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-instrumentation-caffeine diff --git a/prometheus-metrics-instrumentation-dropwizard/pom.xml b/prometheus-metrics-instrumentation-dropwizard/pom.xml index 54c5c7ce2..050a07d15 100644 --- a/prometheus-metrics-instrumentation-dropwizard/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-instrumentation-dropwizard diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index e79f236ef..e377f78c2 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-instrumentation-dropwizard5 diff --git a/prometheus-metrics-instrumentation-guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml index 06393868d..2381493bb 100644 --- a/prometheus-metrics-instrumentation-guava/pom.xml +++ b/prometheus-metrics-instrumentation-guava/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-instrumentation-guava diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index 24758db8c..ba28d9ad0 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index 4e803ee5a..3c6af3fe3 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-model diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index 76f0b203d..d81cd879e 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-simpleclient-bridge diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 885120d4a..6511d93ce 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -5,7 +5,7 @@ io.prometheus client_java - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index fcdf81d2f..40c3d566f 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index 432fa0dfa..c32ab9aed 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index d4efbd099..3ab18baf1 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index 72fdb71d6..68dd6c81a 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -5,7 +5,7 @@ io.prometheus prometheus-metrics-tracer - 10.0.0-SNAPSHOT + 1.4.0-SNAPSHOT prometheus-metrics-tracer-otel From 8c551d6a4717f0d03ad73d478034d7935e74faf8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 11:55:57 +0200 Subject: [PATCH 334/870] Bump com.google.errorprone:error_prone_core from 2.37.0 to 2.38.0 (#1332) Bumps [com.google.errorprone:error_prone_core](https://github.com/google/error-prone) from 2.37.0 to 2.38.0.
    Release notes

    Sourced from com.google.errorprone:error_prone_core's releases.

    Error Prone 2.38.0

    New checks:

    Closed issues: #4924, #4897, #4995

    Full changelog: https://github.com/google/error-prone/compare/v2.37.0...v2.38.0

    Commits
    • a07bd3e Release Error Prone 2.38.0
    • 09fd394 Fix typo in NullTernary.md
    • 4171fd7 FindIdentifiers: find binding variables declared by enclosing or earlier if...
    • d78f515 Audit each use of ElementKind.LOCAL_VARIABLE, and add BINDING_VARIABLE if app...
    • 6f94a97 Tolerate default cases in switches as being present to handle version skew
    • 0223abb Support @LenientFormatString in LenientFormatStringValidation.
    • cb7dfaf Remove the Side enum.
    • d64c9ce Promote error prone check TestExceptionChecker to ERROR within Google (blaze ...
    • c0ce475 Move TargetType to a top-level class alongside ASTHelpers.
    • 90b8efb Allow binding to BINDING_VARIABLEs in GuardedByBinder.
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.errorprone:error_prone_core&package-manager=maven&previous-version=2.37.0&new-version=2.38.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --------- Signed-off-by: dependabot[bot] Signed-off-by: Gregor Zeitlinger Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .../client/it/common/LogConsumer.java | 13 +++----- pom.xml | 2 +- .../snapshots/HistogramSnapshotTest.java | 32 +++++++++---------- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/LogConsumer.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/LogConsumer.java index 0e6cfbcc6..a57c5a7f3 100644 --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/LogConsumer.java +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/LogConsumer.java @@ -19,15 +19,10 @@ public static LogConsumer withPrefix(String prefix) { @Override public void accept(OutputFrame outputFrame) { switch (outputFrame.getType()) { - case STDOUT: - System.out.print(prefix + " - " + outputFrame.getUtf8String()); - break; - case END: - System.out.println(prefix + " - END"); - break; - default: // STDERR or unexpected - System.err.print(prefix + " - " + outputFrame.getUtf8String()); - break; + case STDOUT -> System.out.print(prefix + " - " + outputFrame.getUtf8String()); + case END -> System.out.println(prefix + " - END"); + default -> // STDERR or unexpected + System.err.print(prefix + " - " + outputFrame.getUtf8String()); } } } diff --git a/pom.xml b/pom.xml index 52e9cd642..664c51873 100644 --- a/pom.xml +++ b/pom.xml @@ -373,7 +373,7 @@ com.google.errorprone error_prone_core - 2.37.0 + 2.38.0

    🚀 New Features

    🐞 Bug fixes

    ✍ Other changes

    📦 Dependency updates

    ... (truncated)

    Commits
    • e948a9f Bump the version for the latest release
    • 7767f2f Merge pull request #2927 from wernerblanck/master
    • df1f4f9 Always use the system default DocumentBuilderFactory, TransformerFactory ...
    • 0da30c8 Merge pull request #3026 from Vodafone/feature/add_truncation_of_long_tails_t...
    • 32e3995 Merge pull request #2997 from wiremock/basic-auth-case-fix
    • 4da8c0f Merge pull request #2991 from MasonM/remove-unused-mappings
    • 8a796d5 Merge pull request #3014 from lhcopetti/include-client-ip-matcher
    • ec515d7 Merge pull request #3022 from ns-amosc/bugfix/multipart-related-template-dupl...
    • c5ee8a1 Fix code formatting to comply with Spotless rules
    • b632839 feat: document new clientIp matcher in openapi
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.wiremock:wiremock&package-manager=maven&previous-version=3.12.1&new-version=3.13.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index 9fb29adbe..8d9b4fdb6 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -73,7 +73,7 @@ org.wiremock wiremock - 3.12.1 + 3.13.0 test From 785f1638e54588ea74fe8feaa2e518b54b1249ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 13:36:49 +0000 Subject: [PATCH 336/870] Bump org.testcontainers:junit-jupiter from 1.20.6 to 1.21.0 (#1333) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [org.testcontainers:junit-jupiter](https://github.com/testcontainers/testcontainers-java) from 1.20.6 to 1.21.0.
    Release notes

    Sourced from org.testcontainers:junit-jupiter's releases.

    1.21.0

    What's Changed

    ⚠️ Breaking API changes

    🚀 Features & Enhancements

    ☠️ Deprecations

    🐛 Bug Fixes

    📖 Documentation

    🧹 Housekeeping

    📦 Dependency updates

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.testcontainers:junit-jupiter&package-manager=maven&previous-version=1.20.6&new-version=1.21.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 3b5f11ef3..d408995e9 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -56,7 +56,7 @@ org.testcontainers junit-jupiter - 1.20.6 + 1.21.0 test From 365d2056c2ae2036d622a8e86e97ab0da003ede2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Apr 2025 10:04:36 +0200 Subject: [PATCH 337/870] Bump org.springframework.boot:spring-boot-starter-parent from 3.4.4 to 3.4.5 (#1336) Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.4 to 3.4.5.
    Release notes

    Sourced from org.springframework.boot:spring-boot-starter-parent's releases.

    v3.4.5

    :lady_beetle: Bug Fixes

    • Spring Boot with native image container image build fails on podman due to directory permissions #45256
    • Neo4jReactiveDataAutoConfiguration assumes that certain beans are available #45235
    • Wrong jOOQ exception translator with empty db name #45219
    • MessageSourceMessageInterpolator does not replace a parameter when the message matches its code #45213
    • IntegrationMbeanExporter is not eligible for getting processed by all BeanPostProcessors warnings are shown when using JMX #45194
    • OAuth2AuthorizationServerJwtAutoConfiguration uses @ConditionalOnClass incorrectly #45178
    • MongoDB's dependency management is missing Kotlin coroutine driver modules #45159
    • ImagePlatform can cause "OS must not be empty" IllegalArgumentException #45153
    • TypeUtils does not handle generics with identical names in different positions #45039
    • HttpClient5 5.4.3 breaks local Docker transport #45028
    • spring.datasource.hikari.data-source-class-name cannot be used as a driver class name is always required and Hikari does not accept both #45002
    • Post-processing to apply custom JdbcConnectionDetails triggers an NPE in Hikari if the JDBC URL is for an unknown driver #44998
    • DataSourceBuilder triggers an NPE in Hikari when trying to build a DataSource with a JDBC URL for an unknown driver #44995
    • SSL config does not watch for symlink file changes #44887
    • EmbeddedLdapAutoConfiguration should not rely on PreDestroy #44874
    • DataSourceTransactionManagerAutoConfiguration should run after DataSourceAutoConfiguration #44819
    • JsonValueWriter can throw StackOverflowError on deeply nested items #44627
    • In a reactive web app, SslBundle can no longer open store file locations without using a 'file:' prefix #44535
    • Logging a Path object using structured logging throws StackOverflowError #44507

    :notebook_with_decorative_cover: Documentation

    • Make @Component a javadoc link #45258
    • Fix documentation links to buildpacks.io #45241
    • Clarify the use of multiple profile expressions with "spring.config.activate.on-profile" #45224
    • Show the use of token properties in authorization server clients configuration example #45176
    • Add details of the purpose of the metrics endpoint #45047
    • Escape the asterisk in spring-application.adoc #45033
    • Add reference to Styra (OPA) Spring Boot SDK #44976
    • Update CDS documentation to cover AOTCache #44970
    • WebFlux security documentation incorrectly links to servlet classes #44966
    • Replace mentions of deprecated MockBean annotation #44947
    • TaskExecution documentation should describe what happens when multiple Executor beans are present #44908
    • Documentation lists coordinates for some dependencies that are not actually managed #44879
    • Polish javadoc of SpringProfileAction #44826

    :hammer: Dependency Upgrades

    • Upgrade to AspectJ 1.9.24 #45184
    • Upgrade to Couchbase Client 3.7.9 #45072
    • Upgrade to Hibernate 6.6.13.Final #45073
    • Upgrade to HttpClient5 5.4.3 #45074
    • Upgrade to HttpCore5 5.3.4 #45075
    • Upgrade to Jaybird 5.0.7.java11 #45076
    • Upgrade to Jetty 12.0.19 #45077
    • Upgrade to jOOQ 3.19.22 #45078
    • Upgrade to Lombok 1.18.38 #45079

    ... (truncated)

    Commits
    • b882c29 Release v3.4.5
    • 918066f Merge branch '3.3.x' into 3.4.x
    • ab0c332 Next development version (v3.3.12-SNAPSHOT)
    • 71acf93 Merge branch '3.3.x' into 3.4.x
    • d2eaac6 Revert "Upgrade to Netty 4.1.120.Final"
    • d24a38f Merge branch '3.3.x' into 3.4.x
    • 933572a Upgrade to Netty 4.1.120.Final
    • 016b3de Upgrade to Netty 4.1.120.Final
    • 46a709a Merge branch '3.3.x' into 3.4.x
    • 55f67c9 Fix potential null problem in actuator
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.springframework.boot:spring-boot-starter-parent&package-manager=maven&previous-version=3.4.4&new-version=3.4.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 2417246eb..21622e7a0 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -8,7 +8,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.4 + 3.4.5 From 2625cb1974123b026b68e5f2d0f82f0658cccac0 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 29 Apr 2025 03:19:27 -0700 Subject: [PATCH 338/870] Eagerly reject null label values (#1335) Scraping generally doesn't support null label values and can throw NPEs at various points. It's easiest to debug such problems at the point null is introduced. Signed-off-by: Benjamin Peterson Signed-off-by: Benjamin Peterson --- .../metrics/core/metrics/StatefulMetric.java | 15 ++++++++++++++- .../metrics/core/metrics/StatefulMetricTest.java | 9 +++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java index d7fb3afd0..87e8429f1 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/StatefulMetric.java @@ -112,7 +112,20 @@ public D labelValues(String... labelValues) { "Expected " + labelNames.length + " label values, but got " + labelValues.length + "."); } } - return data.computeIfAbsent(Arrays.asList(labelValues), l -> newDataPoint()); + return data.computeIfAbsent( + Arrays.asList(labelValues), + l -> { + for (int i = 0; i < l.size(); i++) { + if (l.get(i) == null) { + throw new IllegalArgumentException( + "null label value for metric " + + getMetadata().getName() + + " and label " + + labelNames[i]); + } + } + return newDataPoint(); + }); } /** diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java index 1120b06a3..e12618436 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/StatefulMetricTest.java @@ -1,6 +1,7 @@ package io.prometheus.metrics.core.metrics; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import java.lang.reflect.Field; import java.util.Map; @@ -67,4 +68,12 @@ public void testClearNoLabels() { assertThat(counter.collect().getDataPoints()).hasSize(1); assertThat(counter.collect().getDataPoints().get(0).getValue()).isEqualTo(1.0); } + + @Test + public void testNullLabel() { + Counter counter = Counter.builder().name("test").labelNames("l1", "l2").build(); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> counter.labelValues("l1", null)) + .withMessage("null label value for metric test and label l2"); + } } From 8f75de40e952cb33a306b4d4c95cdb9969655e90 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 29 Apr 2025 13:27:00 +0200 Subject: [PATCH 339/870] add Zizmor (#1337) Signed-off-by: Gregor Zeitlinger --- .github/workflows/acceptance-tests.yml | 6 ++- .github/workflows/build.yml | 6 ++- .github/workflows/github-pages.yaml | 55 ++++++++------------------ .github/workflows/lint.yml | 20 ++++++++++ .github/workflows/native-tests.yml | 6 ++- .github/workflows/release.yml | 8 +++- mise.lock | 12 ++++++ mise.toml | 33 ++++++++++++++++ scripts/build-release.sh | 1 - 9 files changed, 103 insertions(+), 44 deletions(-) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 1f40d6e55..334602715 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -6,12 +6,16 @@ on: pull_request: branches: [ "main" ] +permissions: {} + jobs: acceptance-tests: runs-on: ubuntu-24.04 steps: - name: Check out + with: + persist-credentials: false uses: actions/checkout@v4 - - uses: jdx/mise-action@v2 + - uses: jdx/mise-action@7a111ead46986ccad89a74ad013ba2a7c08c9e67 # v2.1.1 - name: Run acceptance tests run: mise run acceptance-test diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e9f07e786..679ce1752 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,12 +6,16 @@ on: pull_request: branches: [ "main" ] +permissions: {} + jobs: build: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - - uses: jdx/mise-action@v2 + with: + persist-credentials: false + - uses: jdx/mise-action@7a111ead46986ccad89a74ad013ba2a7c08c9e67 # v2.1.1 - name: Cache local Maven repository uses: actions/cache@v4 with: diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 46fe56c96..0f1b8ac5c 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -11,11 +11,7 @@ on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write +permissions: {} # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. @@ -32,55 +28,38 @@ jobs: # Build job build: runs-on: ubuntu-24.04 - env: - HUGO_VERSION: 0.115.4 steps: - uses: actions/checkout@v4 with: + persist-credentials: false fetch-tags: 'true' fetch-depth: 0 - - name: Set up JDK - uses: actions/setup-java@v4 + - uses: jdx/mise-action@7a111ead46986ccad89a74ad013ba2a7c08c9e67 # v2.1.1 with: - java-version: 17 - distribution: temurin - cache: 'maven' - - name: Set release version - run: ./scripts/set-release-version-github-pages.sh - - name: Install Hugo CLI - run: | - wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ - && sudo dpkg -i ${{ runner.temp }}/hugo.deb - - name: Make Javadoc - run: ./mvnw -B clean compile javadoc:javadoc javadoc:aggregate -P javadoc - - name: Move the Javadoc to docs/static/api/ - run: mv ./target/reports/apidocs ./docs/static/api && echo && echo 'ls ./docs/static/api' && ls ./docs/static/api + cache: 'false' + - name: Prepare GitHub Pages + run: mise run prepare-gh-pages + with: + permissions: block - name: Setup Pages id: pages uses: actions/configure-pages@v5 - - name: Install Node.js dependencies - run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true" - working-directory: ./docs - - name: Build with Hugo - env: - # For maximum backward compatibility with Hugo modules - HUGO_ENVIRONMENT: production - HUGO_ENV: production - run: | - hugo \ - --gc \ - --minify \ - --baseURL "${{ steps.pages.outputs.base_url }}/" - working-directory: ./docs - - name: ls ./docs/public/api - run: echo 'ls ./docs/public/api' && ls ./docs/public/api + - name: Build GitHub Pages + run: mise run build-gh-pages + with: + permissions: block - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: ./docs/public + # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages # Deployment job deploy: + permissions: + contents: read + pages: write + id-token: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..ee3cffab2 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,20 @@ +--- +name: Acceptance Tests + +on: [pull_request] + +permissions: {} + +jobs: + acceptance-tests: + permissions: {} + runs-on: ubuntu-24.04 + steps: + - name: Check out + with: + persist-credentials: false + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: jdx/mise-action@7a111ead46986ccad89a74ad013ba2a7c08c9e67 # v2.1.1 + - name: Lint + run: mise run lint-all + diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index f124c8458..6d21a5faa 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -6,12 +6,16 @@ on: pull_request: branches: [ "main" ] +permissions: {} + jobs: native-tests: runs-on: ubuntu-24.04 steps: - name: Check out + with: + persist-credentials: false uses: actions/checkout@v4 - - uses: jdx/mise-action@v2 + - uses: jdx/mise-action@7a111ead46986ccad89a74ad013ba2a7c08c9e67 # v2.1.1 - name: Run native tests run: mise run native-test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bf63247f3..bf0e60d02 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,6 +9,7 @@ jobs: deploy: if: ${{ github.repository == 'prometheus/client_java' }} runs-on: ubuntu-24.04 + permissions: {} steps: - name: Debug gpg key - remove after debugging @@ -19,16 +20,19 @@ jobs: echo "$GPG_SIGNING_KEY" | gpg --batch --import-options import-show --import - name: Checkout Plugin Repository uses: actions/checkout@v4 + with: + persist-credentials: false - name: Set Up JDK uses: actions/setup-java@v4 with: java-version: 17 distribution: temurin - cache: 'maven' - name: Build with Maven - run: ./scripts/build-release.sh ${{ github.ref_name }} + run: ./scripts/build-release.sh + env: + TAG: ${{ github.ref_name }} - name: Set up Apache Maven Central uses: actions/setup-java@v4 diff --git a/mise.lock b/mise.lock index 049ab1acf..d06f9f801 100644 --- a/mise.lock +++ b/mise.lock @@ -1,3 +1,11 @@ +[tools."cargo:zizmor"] +version = "1.6.0" +backend = "cargo:zizmor" + +[tools."go:github.com/gohugoio/hugo"] +version = "v0.147.0" +backend = "go:github.com/gohugoio/hugo" + [tools."go:github.com/grafana/oats"] version = "0.3.0" backend = "go:github.com/grafana/oats" @@ -6,6 +14,10 @@ backend = "go:github.com/grafana/oats" version = "temurin-17.0.13+11" backend = "core:java" +[tools.node] +version = "23.10.0" +backend = "core:node" + [tools.protoc] version = "30.2" backend = "aqua:protocolbuffers/protobuf/protoc" diff --git a/mise.toml b/mise.toml index cd4046f35..86ef33f8a 100644 --- a/mise.toml +++ b/mise.toml @@ -2,8 +2,11 @@ PROTO_GENERATION = "true" [tools] +"cargo:zizmor" = "latest" +"go:github.com/gohugoio/hugo" = "latest" "go:github.com/grafana/oats" = "latest" java = "temurin-17.0.13+11" +node = "latest" protoc = "latest" [tasks.ci] @@ -35,6 +38,12 @@ run = "./mvnw verify" description = "build all modules wihthout tests" run = "./mvnw install -DskipTests" +[tasks.lint-gh-actions] +run = "zizmor .github/" + +[tasks.lint-all] +depends = ["lint-gh-actions"] + [tasks.acceptance-test] description = "Run OATs acceptance tests" depends = "build" @@ -49,6 +58,30 @@ dir = "integration-tests/it-spring-boot-smoke-test" [tasks.set-version] run = 'mvn versions:set -DnewVersion={{arg(name="version")}}' +[tasks.javadoc] +run = [ + "./mvnw -B clean compile javadoc:javadoc javadoc:aggregate -P javadoc", + "mv ./target/reports/apidocs ./docs/static/api && echo && echo 'ls ./docs/static/api' && ls ./docs/static/api" +] + +[tasks.set-gh-pages-version] +run = "./scripts/set-release-version-github-pages.sh" + +[tasks.prepare-gh-pages] +description = "Prepare GitHub pages" +depends = ["javadoc", "set-gh-pages-version"] + +[tasks.build-gh-pages] +description = "Build GitHub pages" +# For maximum backward compatibility with Hugo modules +env = { HUGO_ENVIRONMENT = "production", HUGO_ENV = "production" } +dir = "docs" +run = [ + "npm ci", + "hugo --gc --minify --baseURL ${BASE_URL}/", + "echo 'ls ./docs/public/api' && ls ./docs/public/api" +] + [settings] # to get lock file support and for go backend experimental = true diff --git a/scripts/build-release.sh b/scripts/build-release.sh index 8cbc50a61..df4e83645 100755 --- a/scripts/build-release.sh +++ b/scripts/build-release.sh @@ -2,7 +2,6 @@ set -euo pipefail -TAG=$1 VERSION=${TAG#v} mvn versions:set -DnewVersion=$VERSION From f08dab81769f07d22fa96b496f7577fb0bb18145 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 30 Apr 2025 17:41:02 +0200 Subject: [PATCH 340/870] fix gh pages, add super linter (#1338) Signed-off-by: Gregor Zeitlinger --- .editorconfig | 10 + .github/dependabot.yml | 7 +- .github/super-linter.env | 34 + .github/workflows/acceptance-tests.yml | 5 +- .github/workflows/build.yml | 6 +- .github/workflows/github-pages.yaml | 14 +- .github/workflows/{lint.yml => lint-rest.yml} | 4 +- .github/workflows/native-tests.yml | 5 +- .github/workflows/release.yml | 11 +- .github/workflows/super-linter.yml | 31 + .gitignore | 2 + .gitleaksignore | 2 + .yaml-lint.yml | 5 + CODE_OF_CONDUCT.md | 3 +- CONTRIBUTING.md | 13 +- MAINTAINERS.md | 10 +- README.md | 20 +- RELEASING.md | 7 +- benchmarks/README.md | 25 +- benchmarks/pom.xml | 229 +- .../client/CKMSQuantileBenchmark.java | 238 +- .../client/benchmark/CounterBenchmark.java | 42 +- .../client/benchmark/ExemplarsBenchmark.java | 42 +- .../client/benchmark/GaugeBenchmark.java | 57 +- .../SanitizeMetricNameBenchmark.java | 32 +- .../client/benchmark/SummaryBenchmark.java | 58 +- checkstyle.xml | 77 +- docs/README.md | 51 +- docs/content/_index.md | 44 +- docs/content/config/config.md | 201 +- docs/content/exporters/filter.md | 14 +- docs/content/exporters/formats.md | 21 +- docs/content/exporters/httpserver.md | 38 +- docs/content/exporters/pushgateway.md | 47 +- docs/content/exporters/servlet.md | 35 +- docs/content/exporters/spring.md | 82 +- docs/content/getting-started/callbacks.md | 23 +- docs/content/getting-started/labels.md | 54 +- docs/content/getting-started/metric-types.md | 159 +- docs/content/getting-started/multi-target.md | 176 +- docs/content/getting-started/performance.md | 34 +- docs/content/getting-started/quickstart.md | 52 +- docs/content/getting-started/registry.md | 34 +- docs/content/instrumentation/caffeine.md | 52 +- docs/content/instrumentation/guava.md | 24 +- docs/content/instrumentation/jvm.md | 146 +- docs/content/internals/model.md | 33 +- docs/content/migration/simpleclient.md | 151 +- docs/content/otel/names.md | 40 +- docs/content/otel/otlp.md | 36 +- docs/content/otel/tracing.md | 60 +- docs/themes/hugo-geekdoc/data/assets.json | 2 +- docs/themes/hugo-geekdoc/i18n/nl.yaml | 2 +- .../layouts/partials/language.html | 2 +- .../partials/microformats/opengraph.html | 2 +- .../partials/microformats/twitter_cards.html | 2 +- .../hugo-geekdoc/static/favicon/manifest.json | 2 +- .../static/js/116-341f79d9.chunk.min.js | 10871 ++- .../static/js/118-f1de6a20.chunk.min.js | 1788 +- .../static/js/19-86f47ecd.chunk.min.js | 1504 +- .../static/js/361-f7cd601a.chunk.min.js | 3737 +- .../static/js/423-897d7f17.chunk.min.js | 1866 +- .../static/js/430-cc171d93.chunk.min.js | 1567 +- .../static/js/433-f2655a46.chunk.min.js | 419 +- .../static/js/438-760c9ed3.chunk.min.js | 1150 +- .../static/js/476-86e5cf96.chunk.min.js | 495 +- .../static/js/506-6950d52c.chunk.min.js | 2920 +- .../static/js/519-8d0cec7f.chunk.min.js | 464 +- .../static/js/535-dcead599.chunk.min.js | 1380 +- .../static/js/545-8e970b03.chunk.min.js | 3020 +- .../static/js/546-560b35c2.chunk.min.js | 746 +- .../static/js/579-9222afff.chunk.min.js | 1099 +- .../static/js/626-1706197a.chunk.min.js | 231 +- .../static/js/637-86fbbecd.chunk.min.js | 13646 ++- .../static/js/639-88c6538a.chunk.min.js | 74386 +++++++++++++++- .../static/js/642-12e7dea2.chunk.min.js | 459 +- .../static/js/662-17acb8f4.chunk.min.js | 21856 ++++- .../static/js/728-5df4a5e5.chunk.min.js | 430 +- .../static/js/729-32b017b3.chunk.min.js | 2021 +- .../static/js/747-b55f0f97.chunk.min.js | 234 +- .../static/js/76-732e78f1.chunk.min.js | 1825 +- .../static/js/771-942a62df.chunk.min.js | 3177 +- .../static/js/773-8f0c4fb8.chunk.min.js | 2053 +- .../static/js/81-4e653aac.chunk.min.js | 426 +- .../static/js/813-0d3c16f5.chunk.min.js | 2894 +- .../static/js/940-25dfc794.chunk.min.js | 980 +- .../js/colortheme-d3e4d351.bundle.min.js | 301 +- .../static/js/katex-d4d5881d.bundle.min.js | 356 +- .../static/js/main-924a1933.bundle.min.js | 543 +- .../static/js/mermaid-d305d450.bundle.min.js | 460 +- .../static/js/search-9719be99.bundle.min.js | 3313 +- .../example-exemplars-tail-sampling/README.md | 134 +- .../config/grafana-dashboards.yaml | 2 +- .../config/grafana-datasources.yaml | 2 +- .../config/grafana-example-dashboard.json | 4 +- .../config/k6-script.js | 22 +- .../config/otelcol-config.yaml | 8 +- .../example-greeting-service/pom.xml | 126 +- .../example-hello-world-app/pom.xml | 126 +- .../example-exemplars-tail-sampling/pom.xml | 42 +- .../example-exporter-httpserver/README.md | 21 +- examples/example-exporter-httpserver/pom.xml | 109 +- .../example-exporter-multi-target/README.md | 24 +- .../example-exporter-multi-target/pom.xml | 109 +- .../example-exporter-opentelemetry/README.md | 9 +- .../oats-tests/agent/docker-compose.yml | 4 +- .../oats-tests/agent/example_target_info.json | 15 +- .../oats-tests/agent/oats.yaml | 10 +- .../agent/service-instance-id-check.py | 34 - .../agent/service_instance_id_check.py | 48 + .../oats-tests/http/docker-compose.yml | 4 +- .../oats-tests/http/oats.yaml | 8 +- .../example-exporter-opentelemetry/pom.xml | 109 +- .../example-exporter-servlet-tomcat/README.md | 55 +- .../example-exporter-servlet-tomcat/pom.xml | 124 +- examples/example-native-histogram/README.md | 18 +- .../grafana-dashboard-classic-histogram.json | 4 +- .../docker-compose/grafana-dashboards.yaml | 4 +- .../docker-compose/grafana-datasources.yaml | 1 - .../docker-compose/prometheus.yml | 4 +- examples/example-native-histogram/pom.xml | 108 +- .../example-prometheus-properties/README.md | 19 +- .../example-prometheus-properties/pom.xml | 108 +- .../example-simpleclient-bridge/README.md | 15 +- examples/example-simpleclient-bridge/pom.xml | 108 +- examples/pom.xml | 53 +- integration-tests/it-common/pom.xml | 78 +- .../test/resources/project_version.properties | 5 +- .../it-exporter-httpserver-sample/pom.xml | 98 +- .../it-exporter-no-protobuf/pom.xml | 120 +- .../it-exporter-servlet-jetty-sample/pom.xml | 127 +- .../it-exporter-servlet-tomcat-sample/pom.xml | 115 +- .../it-exporter/it-exporter-test/pom.xml | 40 +- .../metrics/it/exporter/test/ExporterIT.java | 12 +- .../it-exporter/it-no-protobuf-test/pom.xml | 43 +- integration-tests/it-exporter/pom.xml | 43 +- integration-tests/it-pushgateway/pom.xml | 136 +- .../test/resources/prometheus-basicauth.yaml | 4 +- .../src/test/resources/prometheus-ssl.yaml | 2 +- .../src/test/resources/prometheus.yaml | 2 +- .../test/resources/pushgateway-basicauth.yaml | 9 +- .../src/test/resources/pushgateway-ssl.yaml | 5 +- .../src/main/resources/application.yaml | 2 +- .../it/springboot/ApplicationTest.java | 3 +- integration-tests/pom.xml | 116 +- lychee.toml | 5 + mise.lock | 6 +- mise.toml | 18 +- mvnw | 248 +- pom.xml | 1042 +- prometheus-metrics-bom/pom.xml | 271 +- prometheus-metrics-config/pom.xml | 33 +- .../config/ExporterPropertiesTest.java | 6 +- .../ExporterPushgatewayPropertiesTest.java | 3 +- .../metrics/config/MetricsPropertiesTest.java | 6 +- .../PrometheusPropertiesLoaderTest.java | 3 +- prometheus-metrics-core/pom.xml | 90 +- .../core/metrics/CKMSQuantilesTest.java | 3 +- .../core/metrics/CallbackMetricTest.java | 9 +- .../metrics/core/metrics/HistogramTest.java | 6 +- .../metrics/core/metrics/InfoTest.java | 15 +- .../metrics/core/metrics/StateSetTest.java | 3 +- prometheus-metrics-exporter-common/pom.xml | 69 +- .../pom.xml | 49 +- .../pom.xml | 110 +- .../ResourceAttributesFromOtelAgent.java | 2 +- .../pom.xml | 276 +- .../pom.xml | 201 +- .../instrumentationScope.properties | 3 +- .../PrometheusInstrumentationScopeTest.java | 6 +- .../pom.xml | 68 +- .../pom.xml | 58 +- .../pom.xml | 73 +- .../pom.xml | 168 +- .../generate-protobuf.sh | 36 +- prometheus-metrics-exposition-formats/pom.xml | 256 +- .../pom.xml | 86 +- .../ExpositionFormatsTest.java | 40 +- .../pom.xml | 103 +- .../caffeine/CacheMetricsCollectorTest.java | 38 +- .../pom.xml | 135 +- .../dropwizard/DropwizardExportsTest.java | 156 +- .../pom.xml | 114 +- .../dropwizard5/DropwizardExportsTest.java | 115 +- .../labels/CustomLabelMapperTest.java | 60 +- .../pom.xml | 85 +- .../pom.xml | 75 +- .../jvm/JvmClassLoadingMetricsTest.java | 22 +- .../jvm/JvmCompilationMetricsTest.java | 12 +- .../jvm/JvmMemoryMetricsTest.java | 130 +- .../jvm/JvmNativeMemoryMetricsTest.java | 104 +- .../jvm/JvmRuntimeInfoMetricTest.java | 10 +- .../jvm/JvmThreadsMetricsTest.java | 58 +- prometheus-metrics-model/pom.xml | 34 +- .../pom.xml | 95 +- prometheus-metrics-tracer/pom.xml | 23 +- .../prometheus-metrics-tracer-common/pom.xml | 3 +- .../pom.xml | 3 +- .../pom.xml | 4 +- .../prometheus-metrics-tracer-otel/pom.xml | 3 +- scripts/build-release.sh | 2 +- scripts/super-linter.sh | 16 + simpleclient-archive/README.md | 8 +- .../integration_tests/it_common/pom.xml.bak | 3 +- .../client/it/common/Downloader.java | 49 +- .../client/it/common/LogConsumer.java | 47 +- .../prometheus/client/it/common/Scraper.java | 87 +- .../prometheus/client/it/common/Version.java | 14 +- .../prometheus/client/it/common/Volume.java | 145 +- .../test/resources/project_version.properties | 5 +- .../it_exemplars_otel_agent/pom.xml.bak | 3 +- .../ExampleSpringBootApp.java | 75 +- .../ExemplarsOpenTelemetryAgentIT.java | 131 +- .../it_exemplars_otel_sdk/pom.xml.bak | 3 +- .../it/exemplars_otel/ExampleApplication.java | 13 +- .../ExemplarsOpenTelemetrySdkIT.java | 231 +- .../it_java_versions/pom.xml.bak | 3 +- .../it/java_versions/ExampleApplication.java | 12 +- .../it/java_versions/JavaVersionsIT.java | 65 +- .../integration_tests/it_log4j2/pom.xml.bak | 3 +- .../client/it/log4j2/ExampleApplication.java | 7 +- .../prometheus/client/it/log4j2/Log4j2IT.java | 95 +- .../it_pushgateway/pom.xml.bak | 3 +- .../it/pushgateway/ExampleBatchJob.java | 53 +- .../client/it/pushgateway/PushGatewayIT.java | 144 +- .../src/test/resources/web-config.yml | 6 +- .../pom.xml.bak | 3 +- .../it/servlet/jakarta/ExampleServlet.java | 26 +- .../src/main/webapp/WEB-INF/web.xml | 83 +- .../ServletJakartaExporterWebXmlIT.java | 180 +- .../integration_tests/pom.xml.bak | 3 +- .../simpleclient_graphite_bridge/pom.xml.bak | 3 +- .../io/prometheus/client/bridge/Graphite.java | 54 +- .../client/bridge/GraphiteTest.java | 35 +- .../simpleclient_hibernate/pom.xml.bak | 3 +- .../HibernateStatisticsCollector.java | 373 +- .../HibernateStatisticsCollectorTest.java | 107 +- .../simpleclient_httpserver/pom.xml.bak | 3 +- .../client/exporter/HTTPServer.java | 812 +- .../exporter/SampleNameFilterSupplier.java | 26 +- .../client/exporter/ExampleExporter.java | 26 +- .../client/exporter/HttpRequest.java | 395 +- .../client/exporter/HttpResponse.java | 168 +- .../client/exporter/TestDaemonFlags.java | 59 +- .../client/exporter/TestHTTPServer.java | 264 +- .../simpleclient_jetty/pom.xml.bak | 3 +- .../jetty/JettyStatisticsCollector.java | 124 +- .../jetty/JettyStatisticsCollectorTest.java | 76 +- .../simpleclient_jetty_jdk8/pom.xml.bak | 3 +- .../QueuedThreadPoolStatisticsCollector.java | 31 +- ...euedThreadPoolStatisticsCollectorTest.java | 23 +- .../simpleclient_log4j/pom.xml.bak | 3 +- .../client/log4j/InstrumentedAppender.java | 17 +- .../log4j/InstrumentedAppenderTest.java | 7 +- .../simpleclient_log4j2/pom.xml.bak | 3 +- .../client/log4j2/InstrumentedAppender.java | 99 +- .../log4j2/InstrumentedAppenderTest.java | 98 +- .../simpleclient_logback/pom.xml.bak | 3 +- .../client/logback/InstrumentedAppender.java | 18 +- .../logback/InstrumentedAppenderTest.java | 8 +- .../client/exporter/MetricsServlet.java | 21 +- .../client/filter/MetricsFilter.java | 123 +- .../prometheus/client/internal/Adapter.java | 159 +- .../client/exporter/ExampleBenchmark.java | 73 +- .../client/exporter/ExampleExporter.java | 1 - .../common/adapter/FilterConfigAdapter.java | 2 +- .../adapter/HttpServletRequestAdapter.java | 14 +- .../adapter/HttpServletResponseAdapter.java | 11 +- .../common/adapter/ServletConfigAdapter.java | 2 +- .../servlet/common/exporter/Exporter.java | 46 +- .../ServletConfigurationException.java | 3 +- .../client/servlet/common/filter/Filter.java | 285 +- .../filter/FilterConfigurationException.java | 10 +- .../servlet/common/exporter/ExporterTest.java | 61 +- .../servlet/common/filter/FilterTest.java | 448 +- .../client/servlet/jakarta/Adapter.java | 155 +- .../servlet/jakarta/filter/MetricsFilter.java | 111 +- .../client/exporter/ExampleBenchmark.java | 78 +- .../client/exporter/ExampleExporter.java | 1 - .../spring/web/EnablePrometheusTiming.java | 14 +- .../client/spring/web/MethodTimer.java | 179 +- .../spring/web/PrometheusTimeMethod.java | 34 +- .../client/spring/web/MethodTimerAppTest.java | 23 +- .../client/spring/web/MethodTimerTest.java | 398 +- .../client/vertx/MetricsHandler.java | 38 +- .../client/vertx/ExampleExporter.java | 1 - .../client/vertx/MetricsHandlerTest.java | 29 +- .../client/vertx/MetricsHandler.java | 38 +- .../client/vertx/ExampleExporter.java | 1 - .../client/vertx/MetricsHandlerTest.java | 29 +- 290 files changed, 171271 insertions(+), 7905 deletions(-) create mode 100644 .github/super-linter.env rename .github/workflows/{lint.yml => lint-rest.yml} (88%) create mode 100644 .github/workflows/super-linter.yml create mode 100644 .gitleaksignore create mode 100644 .yaml-lint.yml delete mode 100755 examples/example-exporter-opentelemetry/oats-tests/agent/service-instance-id-check.py create mode 100755 examples/example-exporter-opentelemetry/oats-tests/agent/service_instance_id_check.py create mode 100644 lychee.toml create mode 100755 scripts/super-linter.sh diff --git a/.editorconfig b/.editorconfig index b33efbd87..1ade83fa3 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,5 +4,15 @@ root = true max_line_length = 100 indent_size = 2 +[{version-rules.xml,maven-wrapper.properties,checkstyle.xml,docker-compose.yaml,docker-compose.yml,Dockerfile,example_target_info.json,mise.toml,mise.lock,mvnm,mvnw.cmd,generate-protobuf.sh,super-linter.env,.gitleaksignore}] +max_line_length = 200 + +[{grafana-dashboard-*.json,.editorconfig}] +max_line_length = 300 + [pom.xml] +max_line_length = 110 + +[*.py] +# checked by black indent_size = 4 diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 505013ce1..c6485ad12 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,3 +1,4 @@ +--- version: 2 updates: - package-ecosystem: "github-actions" @@ -5,8 +6,10 @@ updates: schedule: interval: weekly - package-ecosystem: maven - # excluding simpleclient_archive from the update is not possible, only includes are supported - # when we use includes, we run into https://github.com/dependabot/dependabot-core/issues/10415 - + # excluding simpleclient_archive from the update is not possible, + # only includes are supported + # when we use includes, + # we run into https://github.com/dependabot/dependabot-core/issues/10415 # even if we limit to 1 PR at a time # therefore we just rename pom.xml in simpleclient_archive for now # if this becomes a problem, we can move to renovate diff --git a/.github/super-linter.env b/.github/super-linter.env new file mode 100644 index 000000000..8d10a7d3b --- /dev/null +++ b/.github/super-linter.env @@ -0,0 +1,34 @@ +FILTER_REGEX_EXCLUDE=mvnw|src/main/generated/.*|docs/themes/.*|keystore.pkcs12|.*.java|prometheus-metrics-exporter-opentelemetry-shaded/pom.xml +IGNORE_GITIGNORED_FILES=true +JAVA_FILE_NAME=google_checks.xml +# disable kubernetes linter - complains about resource limits, etc +VALIDATE_CHECKOV=false +VALIDATE_CSS=false +VALIDATE_CSS_PRETTIER=false +VALIDATE_DOCKERFILE_HADOLINT=false +VALIDATE_GIT_COMMITLINT=false +# done by maven +VALIDATE_GOOGLE_JAVA_FORMAT=false +# times out +VALIDATE_GO_MODULES=false +VALIDATE_HTML=false +# done by checkstyle +VALIDATE_JAVA=false +# contradicting with prettier +VALIDATE_JAVASCRIPT_STANDARD=false +# we have many duplicate code in our codebase for demo purposes +VALIDATE_JSCPD=false +VALIDATE_PYTHON_PYLINT=false + +FIX_ENV=true +FIX_GO=true +FIX_JAVASCRIPT_PRETTIER=true +FIX_JSON=true +FIX_JSONC=true +FIX_JSONC_PRETTIER=true +FIX_JSON_PRETTIER=true +FIX_MARKDOWN=true +FIX_MARKDOWN_PRETTIER=true +FIX_PYTHON_BLACK=true +FIX_SHELL_SHFMT=true +FIX_YAML_PRETTIER=true diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 334602715..c114d177a 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -1,10 +1,11 @@ +--- name: OpenTelemetry Acceptance Tests on: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] permissions: {} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 679ce1752..09cfd7e15 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,10 +1,11 @@ +--- name: Build on: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] permissions: {} @@ -25,4 +26,3 @@ jobs: ${{ runner.os }}-maven- - name: Run the Maven verify phase run: mise run ci - diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 0f1b8ac5c..5cba7fea6 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -13,8 +13,10 @@ on: permissions: {} -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +# Allow only one concurrent deployment, skipping runs queued between +# the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow +# these production deployments to complete. concurrency: group: "pages" cancel-in-progress: false @@ -32,22 +34,18 @@ jobs: - uses: actions/checkout@v4 with: persist-credentials: false - fetch-tags: 'true' + fetch-tags: "true" fetch-depth: 0 - uses: jdx/mise-action@7a111ead46986ccad89a74ad013ba2a7c08c9e67 # v2.1.1 with: - cache: 'false' + cache: "false" - name: Prepare GitHub Pages run: mise run prepare-gh-pages - with: - permissions: block - name: Setup Pages id: pages uses: actions/configure-pages@v5 - name: Build GitHub Pages run: mise run build-gh-pages - with: - permissions: block - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint-rest.yml similarity index 88% rename from .github/workflows/lint.yml rename to .github/workflows/lint-rest.yml index ee3cffab2..8a747cf94 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint-rest.yml @@ -7,7 +7,6 @@ permissions: {} jobs: acceptance-tests: - permissions: {} runs-on: ubuntu-24.04 steps: - name: Check out @@ -16,5 +15,4 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: jdx/mise-action@7a111ead46986ccad89a74ad013ba2a7c08c9e67 # v2.1.1 - name: Lint - run: mise run lint-all - + run: mise run lint-rest diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 6d21a5faa..d5b3927db 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -1,10 +1,11 @@ +--- name: GraalVM Native Tests on: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] permissions: {} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bf0e60d02..087356453 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,3 +1,4 @@ +--- name: Deploy to Maven Central on: @@ -14,10 +15,10 @@ jobs: steps: - name: Debug gpg key - remove after debugging env: - GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} + GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} run: | - echo "$GPG_SIGNING_KEY" | wc -c - echo "$GPG_SIGNING_KEY" | gpg --batch --import-options import-show --import + echo "${#GPG_SIGNING_KEY}" + echo "${GPG_SIGNING_KEY}" | gpg --batch --import-options import-show --import - name: Checkout Plugin Repository uses: actions/checkout@v4 with: @@ -37,8 +38,8 @@ jobs: - name: Set up Apache Maven Central uses: actions/setup-java@v4 with: - distribution: 'temurin' - java-version: '17' + distribution: "temurin" + java-version: "17" server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_CENTRAL_TOKEN diff --git a/.github/workflows/super-linter.yml b/.github/workflows/super-linter.yml new file mode 100644 index 000000000..102695d4b --- /dev/null +++ b/.github/workflows/super-linter.yml @@ -0,0 +1,31 @@ +--- +name: Lint + +on: + pull_request: + +jobs: + lint: + runs-on: ubuntu-24.04 + + permissions: + contents: read + packages: read + # To report GitHub Actions status checks + statuses: write + + steps: + - name: Checkout code + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + fetch-depth: 0 + + - name: Load super-linter configuration + run: grep -v '^#' .github/super-linter.env | grep -v 'FIX_' >> "$GITHUB_ENV" + + - name: Super-linter + uses: super-linter/super-linter@4e8a7c2bf106c4c766c816b35ec612638dc9b6b2 # v7.3.0 + env: + # To report GitHub Actions status checks + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index ad343c1bd..b727017a9 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,5 @@ dependency-reduced-pom.xml **/.classpath **.project **/.settings/ +docs/public +.lycheecache diff --git a/.gitleaksignore b/.gitleaksignore new file mode 100644 index 000000000..605fefa97 --- /dev/null +++ b/.gitleaksignore @@ -0,0 +1,2 @@ +/tmp/lint/integration-tests/it-pushgateway/src/test/resources/pushgateway-ssl.yaml:private-key:36 +/github/workspace/integration-tests/it-pushgateway/src/test/resources/pushgateway-ssl.yaml:private-key:36 diff --git a/.yaml-lint.yml b/.yaml-lint.yml new file mode 100644 index 000000000..a06ffeed5 --- /dev/null +++ b/.yaml-lint.yml @@ -0,0 +1,5 @@ +extends: relaxed + +rules: + line-length: + max: 120 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index d325872bd..524d1ab50 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,3 +1,4 @@ # Prometheus Community Code of Conduct -Prometheus follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md). +Prometheus follows the +[CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ff9717f67..aaa08ea7d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,18 +2,19 @@ Prometheus uses GitHub to manage reviews of pull requests. -* If you have a trivial fix or improvement, go ahead and create a pull request, +- If you have a trivial fix or improvement, go ahead and create a pull request, addressing (with `@...`) the maintainer of this repository (see [MAINTAINERS.md](MAINTAINERS.md)) in the description of the pull request. -* If you plan to do something more involved, first discuss your ideas +- If you plan to do something more involved, first discuss your ideas on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers). This will avoid unnecessary work and surely give you and us a good deal of inspiration. ## Formatting -This repository uses [Google Java Format](https://github.com/google/google-java-format) to format the code. +This repository uses [Google Java Format](https://github.com/google/google-java-format) to format +the code. Run `./mvnw spotless:apply` to format the code (only changed files) before committing. @@ -21,7 +22,8 @@ Run `./mvnw spotless:apply` to format the code (only changed files) before commi If you're getting errors when running tests: -- Make sure that the IDE uses only the "Maven Shade" dependency of "prometheus-metrics-exposition-formats" and the "prometheus-metrics-tracer*" dependencies. +- Make sure that the IDE uses only the "Maven Shade" dependency of " + prometheus-metrics-exposition-formats" and the "prometheus-metrics-tracer\*" dependencies. ### Avoid failures while running tests @@ -30,7 +32,8 @@ If you're getting errors when running tests: - Use `-Dcheckstyle.skip=true` to skip the checkstyle check during development. - Use `-Dwarnings=-nowarn` to skip the warnings during development. -Combine all with `./mvnw test -DskipTests=true -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn`. +Combine all with +`./mvnw test -DskipTests=true -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn`. # editorconfig-checker-disable-line ## Updating the Protobuf Java Classes diff --git a/MAINTAINERS.md b/MAINTAINERS.md index dae5c71de..cf0a885eb 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -1,4 +1,6 @@ -* Fabian Stäber @fstab -* Doug Hoard @dhoard -* Tom Wilkie @tomwilkie -* Gregor Zeitlinger @zeitlinger +# Maintainers + +- Fabian Stäber @fstab +- Doug Hoard @dhoard +- Tom Wilkie @tomwilkie +- Gregor Zeitlinger @zeitlinger diff --git a/README.md b/README.md index f03a3e2a6..6e62e3577 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,25 @@ # Prometheus Java Metrics Library -[![Build](https://github.com/prometheus/client_java/actions/workflows/build.yml/badge.svg)](https://github.com/prometheus/client_java/actions/workflows/build.yml) java 8+ Apache 2.0 +[![Build](https://github.com/prometheus/client_java/actions/workflows/build.yml/badge.svg)](https://github.com/prometheus/client_java/actions/workflows/build.yml) java 8+ Apache 2.0 # editorconfig-checker-disable-line -# Documentation +## Documentation [https://prometheus.github.io/client_java](https://prometheus.github.io/client_java) -# Contributing and community +## Contributing and community -See [CONTRIBUTING.md](CONTRIBUTING.md) and the [community section](http://prometheus.io/community/) of the Prometheus homepage. +See [CONTRIBUTING.md](CONTRIBUTING.md) and the [community section](http://prometheus.io/community/) +of the Prometheus homepage. -The Prometheus Java community is present on the [CNCF Slack](https://cloud-native.slack.com) on `#prometheus-java`, and we have a fortnightly community call in the [Prometheus public calendar](https://prometheus.io/community/). +The Prometheus Java community is present on the [CNCF Slack](https://cloud-native.slack.com) on +`#prometheus-java`, and we have a fortnightly community call in +the [Prometheus public calendar](https://prometheus.io/community/). -# Previous Releases +## Previous Releases -The source code for 0.16.0 and older is on the [simpleclient](https://github.com/prometheus/client_java/tree/simpleclient) branch. +The source code for 0.16.0 and older is on +the [simpleclient](https://github.com/prometheus/client_java/tree/simpleclient) branch. -# License +## License Apache License 2.0, see [LICENSE](LICENSE). diff --git a/RELEASING.md b/RELEASING.md index eadbb8a76..151fae720 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,6 +1,7 @@ -## Create a Release +# Create a Release -1. Go to https://github.com/prometheus/client_java/releases/new +1. Go to 2. Click on "Choose a tag", enter the tag name (e.g. `v0.1.0`), and click "Create a new tag". -3. Click on "Generate release notes" to auto-generate the release notes based on the commits since the last release. +3. Click on "Generate release notes" to auto-generate the release notes based on the commits since + the last release. 4. Click on "Publish release". diff --git a/benchmarks/README.md b/benchmarks/README.md index 36300e4d1..cb445c7bf 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -1,15 +1,14 @@ -Benchmarks ----------- +# Benchmarks ## How to Run -``` +```shell java -jar ./benchmarks/target/benchmarks.jar ``` Run only one specific benchmark: -``` +```shell java -jar ./benchmarks/target/benchmarks.jar CounterBenchmark ``` @@ -17,16 +16,22 @@ java -jar ./benchmarks/target/benchmarks.jar CounterBenchmark See Javadoc of the benchmark classes: -* [CounterBenchmark](https://github.com/prometheus/client_java/blob/1.0.x/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java) -* [HistogramBenchmark](https://github.com/prometheus/client_java/blob/1.0.x/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java) +- [CounterBenchmark](https://github.com/prometheus/client_java/blob/1.0.x/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/CounterBenchmark.java) +- [HistogramBenchmark](https://github.com/prometheus/client_java/blob/1.0.x/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java) ## What Prometheus Java client optimizes for concurrent updates of metrics in multi-threaded applications. -If your application is single-threaded and uses only one processor core, your application isn't performance critical anyway. -If your application is designed to use all available processor cores for maximum performance, then you want a metric library that doesn't slow your application down. -Prometheus client Java metrics support concurrent updates and scrapes. This shows in benchmarks with multiple threads recording data in shared metrics. +If your application is single-threaded and uses only one processor core, your application isn't +performance critical anyway. +If your application is designed to use all available processor cores for maximum performance, then +you want a metric library that doesn't slow your +application down. +Prometheus client Java metrics support concurrent updates and scrapes. This shows in benchmarks with +multiple threads recording data in shared +metrics. ## Archive -The `src/main/archive/` directory contains the old benchmarks from 0.16.0 and earlier. It will be removed as soon as all benchmarks are ported to the 1.0.0 release. +The `src/main/archive/` directory contains the old benchmarks from 0.16.0 and earlier. It will be +removed as soon as all benchmarks are ported to the 1.0.0 release. diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 8e476d5a6..3cdbc09c0 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -1,122 +1,125 @@ - - 4.0.0 + + 4.0.0 - - io.prometheus - client_java - 1.4.0-SNAPSHOT - + + io.prometheus + client_java + 1.4.0-SNAPSHOT + - benchmarks + benchmarks - Prometheus Java Client Benchmarks - - Benchmarks of client performance, and comparison to other systems. - + Prometheus Java Client Benchmarks + + Benchmarks of client performance, and comparison to other systems. + - - 1.37 - 0.16.0 - 3.0.2 - true - - - - - - io.opentelemetry.instrumentation - opentelemetry-instrumentation-bom-alpha - ${otel.instrumentation.version} - pom - import - - - + + 1.37 + 0.16.0 + 3.0.2 + true + + - - org.openjdk.jmh - jmh-core - ${jmh.version} - - - io.prometheus - prometheus-metrics-core - ${project.version} - - - io.prometheus - prometheus-metrics-exposition-textformats - ${project.version} - - - io.prometheus - simpleclient - ${simpleclient.version} - - - com.codahale.metrics - metrics-core - ${codahale.version} - - - io.opentelemetry - opentelemetry-api - - - io.opentelemetry - opentelemetry-sdk - - - io.opentelemetry - opentelemetry-sdk-testing - + + io.opentelemetry.instrumentation + opentelemetry-instrumentation-bom-alpha + ${otel.instrumentation.version} + pom + import + - - ${project.artifactId} - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - - -parameters - - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - package - - shade - - - benchmarks - - - io.prometheus.metrics.benchmarks.BenchmarkRunner - - - - - - - - + + + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + io.prometheus + prometheus-metrics-core + ${project.version} + + + io.prometheus + prometheus-metrics-exposition-textformats + ${project.version} + + + io.prometheus + simpleclient + ${simpleclient.version} + + + com.codahale.metrics + metrics-core + ${codahale.version} + + + io.opentelemetry + opentelemetry-api + + + io.opentelemetry + opentelemetry-sdk + + + io.opentelemetry + opentelemetry-sdk-testing + + + + ${project.artifactId} + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + -parameters + + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + benchmarks + + + io.prometheus.metrics.benchmarks.BenchmarkRunner + + + + + + + + + diff --git a/benchmarks/src/archive/java/io/prometheus/client/CKMSQuantileBenchmark.java b/benchmarks/src/archive/java/io/prometheus/client/CKMSQuantileBenchmark.java index 530810481..ab383d327 100644 --- a/benchmarks/src/archive/java/io/prometheus/client/CKMSQuantileBenchmark.java +++ b/benchmarks/src/archive/java/io/prometheus/client/CKMSQuantileBenchmark.java @@ -1,6 +1,11 @@ package io.prometheus.client; import io.prometheus.client.CKMSQuantiles.Quantile; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.infra.Blackhole; import org.openjdk.jmh.runner.Runner; @@ -8,131 +13,120 @@ import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Random; -import java.util.concurrent.TimeUnit; - public class CKMSQuantileBenchmark { - @State(Scope.Benchmark) - public static class EmptyBenchmarkState { - @Param({"10000", "100000", "1000000"}) - public int value; - - List quantiles; - Random rand = new Random(0); - - List shuffle; - - Quantile mean = new Quantile(0.50, 0.050); - Quantile q90 = new Quantile(0.90, 0.010); - Quantile q95 = new Quantile(0.95, 0.005); - Quantile q99 = new Quantile(0.99, 0.001); - - @Setup(Level.Trial) - public void setup() { - quantiles = new ArrayList(); - quantiles.add(mean); - quantiles.add(q90); - quantiles.add(q95); - quantiles.add(q99); - - shuffle = new ArrayList(value); - for (int i = 0; i < value; i++) { - shuffle.add((double) i); - } - Collections.shuffle(shuffle, rand); - } - } - - @Benchmark - @BenchmarkMode({Mode.AverageTime}) - @OutputTimeUnit(TimeUnit.MILLISECONDS) - public void ckmsQuantileInsertBenchmark(EmptyBenchmarkState state) { - CKMSQuantiles q = new CKMSQuantiles(state.quantiles.toArray(new Quantile[]{})); - for (Double l : state.shuffle) { - q.insert(l); - } - } - - /** prefilled benchmark, means that we already have a filled and compressed samples available */ - @State(Scope.Benchmark) - public static class PrefilledBenchmarkState { - @Param({"10000", "100000", "1000000"}) - public int value; - - - CKMSQuantiles ckmsQuantiles; - - List quantiles; - Random rand = new Random(0); - - Quantile mean = new Quantile(0.50, 0.050); - Quantile q90 = new Quantile(0.90, 0.010); - Quantile q95 = new Quantile(0.95, 0.005); - Quantile q99 = new Quantile(0.99, 0.001); - List shuffle; - - int rank = (int) (value * q95.quantile); - - - @Setup(Level.Trial) - public void setup() { - quantiles = new ArrayList(); - quantiles.add(mean); - quantiles.add(q90); - quantiles.add(q95); - quantiles.add(q99); - - shuffle = new ArrayList(value); - for (int i = 0; i < value; i++) { - shuffle.add((double) i); - } - Collections.shuffle(shuffle, rand); - - - ckmsQuantiles = new CKMSQuantiles(quantiles.toArray(new Quantile[]{})); - for (Double l : shuffle) { - ckmsQuantiles.insert(l); - } - // make sure we inserted all 'hanging' samples (count % 128) - ckmsQuantiles.get(0); - // compress everything so we have a similar samples size regardless of n. - ckmsQuantiles.compress(); - System.out.println("Sample size is: " + ckmsQuantiles.samples.size()); - } - - } - - @Benchmark - @BenchmarkMode({Mode.AverageTime}) - @OutputTimeUnit(TimeUnit.NANOSECONDS) - public void ckmsQuantileGetBenchmark(Blackhole blackhole, PrefilledBenchmarkState state) { - blackhole.consume(state.ckmsQuantiles.get(state.q90.quantile)); + @State(Scope.Benchmark) + public static class EmptyBenchmarkState { + @Param({"10000", "100000", "1000000"}) + public int value; + + List quantiles; + Random rand = new Random(0); + + List shuffle; + + Quantile mean = new Quantile(0.50, 0.050); + Quantile q90 = new Quantile(0.90, 0.010); + Quantile q95 = new Quantile(0.95, 0.005); + Quantile q99 = new Quantile(0.99, 0.001); + + @Setup(Level.Trial) + public void setup() { + quantiles = new ArrayList(); + quantiles.add(mean); + quantiles.add(q90); + quantiles.add(q95); + quantiles.add(q99); + + shuffle = new ArrayList(value); + for (int i = 0; i < value; i++) { + shuffle.add((double) i); + } + Collections.shuffle(shuffle, rand); } - - /** - * benchmark for the f method. - */ - @Benchmark - @BenchmarkMode({Mode.AverageTime}) - @OutputTimeUnit(TimeUnit.NANOSECONDS) - public void ckmsQuantileF(Blackhole blackhole, PrefilledBenchmarkState state) { - blackhole.consume(state.ckmsQuantiles.f(state.rank)); + } + + @Benchmark + @BenchmarkMode({Mode.AverageTime}) + @OutputTimeUnit(TimeUnit.MILLISECONDS) + public void ckmsQuantileInsertBenchmark(EmptyBenchmarkState state) { + CKMSQuantiles q = new CKMSQuantiles(state.quantiles.toArray(new Quantile[] {})); + for (Double l : state.shuffle) { + q.insert(l); } - - public static void main(String[] args) throws RunnerException { - - Options opt = new OptionsBuilder() - .include(CKMSQuantileBenchmark.class.getSimpleName()) - .warmupIterations(5) - .measurementIterations(4) - .threads(1) - .forks(1) - .build(); - - new Runner(opt).run(); + } + + /** prefilled benchmark, means that we already have a filled and compressed samples available */ + @State(Scope.Benchmark) + public static class PrefilledBenchmarkState { + @Param({"10000", "100000", "1000000"}) + public int value; + + CKMSQuantiles ckmsQuantiles; + + List quantiles; + Random rand = new Random(0); + + Quantile mean = new Quantile(0.50, 0.050); + Quantile q90 = new Quantile(0.90, 0.010); + Quantile q95 = new Quantile(0.95, 0.005); + Quantile q99 = new Quantile(0.99, 0.001); + List shuffle; + + int rank = (int) (value * q95.quantile); + + @Setup(Level.Trial) + public void setup() { + quantiles = new ArrayList(); + quantiles.add(mean); + quantiles.add(q90); + quantiles.add(q95); + quantiles.add(q99); + + shuffle = new ArrayList(value); + for (int i = 0; i < value; i++) { + shuffle.add((double) i); + } + Collections.shuffle(shuffle, rand); + + ckmsQuantiles = new CKMSQuantiles(quantiles.toArray(new Quantile[] {})); + for (Double l : shuffle) { + ckmsQuantiles.insert(l); + } + // make sure we inserted all 'hanging' samples (count % 128) + ckmsQuantiles.get(0); + // compress everything so we have a similar samples size regardless of n. + ckmsQuantiles.compress(); + System.out.println("Sample size is: " + ckmsQuantiles.samples.size()); } + } + + @Benchmark + @BenchmarkMode({Mode.AverageTime}) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public void ckmsQuantileGetBenchmark(Blackhole blackhole, PrefilledBenchmarkState state) { + blackhole.consume(state.ckmsQuantiles.get(state.q90.quantile)); + } + + /** benchmark for the f method. */ + @Benchmark + @BenchmarkMode({Mode.AverageTime}) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public void ckmsQuantileF(Blackhole blackhole, PrefilledBenchmarkState state) { + blackhole.consume(state.ckmsQuantiles.f(state.rank)); + } + + public static void main(String[] args) throws RunnerException { + + Options opt = + new OptionsBuilder() + .include(CKMSQuantileBenchmark.class.getSimpleName()) + .warmupIterations(5) + .measurementIterations(4) + .threads(1) + .forks(1) + .build(); + + new Runner(opt).run(); + } } diff --git a/benchmarks/src/archive/java/io/prometheus/client/benchmark/CounterBenchmark.java b/benchmarks/src/archive/java/io/prometheus/client/benchmark/CounterBenchmark.java index 592efc6f2..c37076156 100644 --- a/benchmarks/src/archive/java/io/prometheus/client/benchmark/CounterBenchmark.java +++ b/benchmarks/src/archive/java/io/prometheus/client/benchmark/CounterBenchmark.java @@ -1,6 +1,7 @@ package io.prometheus.client.benchmark; import com.codahale.metrics.MetricRegistry; +import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; @@ -13,8 +14,6 @@ import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; -import java.util.concurrent.TimeUnit; - @State(Scope.Benchmark) public class CounterBenchmark { @@ -28,16 +27,16 @@ public class CounterBenchmark { @Setup public void setup() { - prometheusSimpleCounter = io.prometheus.client.Counter.build() - .name("name") - .help("some description..") - .labelNames("some", "group").create(); + prometheusSimpleCounter = + io.prometheus.client.Counter.build() + .name("name") + .help("some description..") + .labelNames("some", "group") + .create(); prometheusSimpleCounterChild = prometheusSimpleCounter.labels("test", "group"); - prometheusSimpleCounterNoLabels = io.prometheus.client.Counter.build() - .name("name") - .help("some description..") - .create(); + prometheusSimpleCounterNoLabels = + io.prometheus.client.Counter.build().name("name").help("some description..").create(); registry = new MetricRegistry(); codahaleCounter = registry.counter("counter"); @@ -48,21 +47,21 @@ public void setup() { @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleCounterIncBenchmark() { - prometheusSimpleCounter.labels("test", "group").inc(); + prometheusSimpleCounter.labels("test", "group").inc(); } - + @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleCounterChildIncBenchmark() { - prometheusSimpleCounterChild.inc(); + prometheusSimpleCounterChild.inc(); } @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleCounterNoLabelsIncBenchmark() { - prometheusSimpleCounterNoLabels.inc(); + prometheusSimpleCounterNoLabels.inc(); } @Benchmark @@ -81,13 +80,14 @@ public void codahaleMeterMarkBenchmark() { public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(CounterBenchmark.class.getSimpleName()) - .warmupIterations(5) - .measurementIterations(4) - .threads(4) - .forks(1) - .build(); + Options opt = + new OptionsBuilder() + .include(CounterBenchmark.class.getSimpleName()) + .warmupIterations(5) + .measurementIterations(4) + .threads(4) + .forks(1) + .build(); new Runner(opt).run(); } diff --git a/benchmarks/src/archive/java/io/prometheus/client/benchmark/ExemplarsBenchmark.java b/benchmarks/src/archive/java/io/prometheus/client/benchmark/ExemplarsBenchmark.java index 7d033afcd..a3fa45ae1 100644 --- a/benchmarks/src/archive/java/io/prometheus/client/benchmark/ExemplarsBenchmark.java +++ b/benchmarks/src/archive/java/io/prometheus/client/benchmark/ExemplarsBenchmark.java @@ -3,6 +3,7 @@ import io.prometheus.client.Counter; import io.prometheus.client.exemplars.DefaultExemplarSampler; import io.prometheus.client.exemplars.tracer.common.SpanContextSupplier; +import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; @@ -11,8 +12,6 @@ import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import java.util.concurrent.TimeUnit; - @State(Scope.Benchmark) public class ExemplarsBenchmark { @@ -23,25 +22,28 @@ public class ExemplarsBenchmark { @Setup public void setup() { - counter = Counter.build() - .name("counter_total") - .help("Total number of requests.") - .labelNames("path") - .create(); + counter = + Counter.build() + .name("counter_total") + .help("Total number of requests.") + .labelNames("path") + .create(); - counterWithExemplars = Counter.build() - .name("counter_with_exemplars_total") - .help("Total number of requests.") - .labelNames("path") - .withExemplarSampler(new DefaultExemplarSampler(new MockSpanContextSupplier())) - .create(); + counterWithExemplars = + Counter.build() + .name("counter_with_exemplars_total") + .help("Total number of requests.") + .labelNames("path") + .withExemplarSampler(new DefaultExemplarSampler(new MockSpanContextSupplier())) + .create(); - counterWithoutExemplars = Counter.build() - .name("counter_without_exemplars_total") - .help("Total number of requests.") - .labelNames("path") - .withoutExemplars() - .create(); + counterWithoutExemplars = + Counter.build() + .name("counter_without_exemplars_total") + .help("Total number of requests.") + .labelNames("path") + .withoutExemplars() + .create(); } @Benchmark @@ -79,7 +81,7 @@ public String getSpanId() { @Override public boolean isSampled() { - return true; + return true; } } } diff --git a/benchmarks/src/archive/java/io/prometheus/client/benchmark/GaugeBenchmark.java b/benchmarks/src/archive/java/io/prometheus/client/benchmark/GaugeBenchmark.java index d088d280d..a8eb03c83 100644 --- a/benchmarks/src/archive/java/io/prometheus/client/benchmark/GaugeBenchmark.java +++ b/benchmarks/src/archive/java/io/prometheus/client/benchmark/GaugeBenchmark.java @@ -1,6 +1,7 @@ package io.prometheus.client.benchmark; import com.codahale.metrics.MetricRegistry; +import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; @@ -13,8 +14,6 @@ import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; -import java.util.concurrent.TimeUnit; - @State(Scope.Benchmark) public class GaugeBenchmark { @@ -27,16 +26,16 @@ public class GaugeBenchmark { @Setup public void setup() { - prometheusSimpleGauge = io.prometheus.client.Gauge.build() - .name("name") - .help("some description..") - .labelNames("some", "group").create(); + prometheusSimpleGauge = + io.prometheus.client.Gauge.build() + .name("name") + .help("some description..") + .labelNames("some", "group") + .create(); prometheusSimpleGaugeChild = prometheusSimpleGauge.labels("test", "group"); - prometheusSimpleGaugeNoLabels = io.prometheus.client.Gauge.build() - .name("name") - .help("some description..") - .create(); + prometheusSimpleGaugeNoLabels = + io.prometheus.client.Gauge.build().name("name").help("some description..").create(); registry = new MetricRegistry(); codahaleCounter = registry.counter("name"); @@ -47,21 +46,21 @@ public void setup() { @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleGaugeIncBenchmark() { - prometheusSimpleGauge.labels("test", "group").inc(); + prometheusSimpleGauge.labels("test", "group").inc(); } - + @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleGaugeChildIncBenchmark() { - prometheusSimpleGaugeChild.inc(); + prometheusSimpleGaugeChild.inc(); } @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleGaugeNoLabelsIncBenchmark() { - prometheusSimpleGaugeNoLabels.inc(); + prometheusSimpleGaugeNoLabels.inc(); } @Benchmark @@ -71,27 +70,26 @@ public void codahaleCounterIncBenchmark() { codahaleCounter.inc(); } - // Decrement. @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleGaugeDecBenchmark() { - prometheusSimpleGauge.labels("test", "group").dec(); + prometheusSimpleGauge.labels("test", "group").dec(); } - + @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleGaugeChildDecBenchmark() { - prometheusSimpleGaugeChild.dec(); + prometheusSimpleGaugeChild.dec(); } @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleGaugeNoLabelsDecBenchmark() { - prometheusSimpleGaugeNoLabels.dec(); + prometheusSimpleGaugeNoLabels.dec(); } @Benchmark @@ -106,9 +104,9 @@ public void codahaleCounterDecBenchmark() { @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleGaugeSetBenchmark() { - prometheusSimpleGauge.labels("test", "group").set(42); + prometheusSimpleGauge.labels("test", "group").set(42); } - + @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) @@ -120,18 +118,19 @@ public void prometheusSimpleGaugeChildSetBenchmark() { @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleGaugeNoLabelsSetBenchmark() { - prometheusSimpleGaugeNoLabels.set(42); + prometheusSimpleGaugeNoLabels.set(42); } public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(GaugeBenchmark.class.getSimpleName()) - .warmupIterations(5) - .measurementIterations(4) - .threads(4) - .forks(1) - .build(); + Options opt = + new OptionsBuilder() + .include(GaugeBenchmark.class.getSimpleName()) + .warmupIterations(5) + .measurementIterations(4) + .threads(4) + .forks(1) + .build(); new Runner(opt).run(); } diff --git a/benchmarks/src/archive/java/io/prometheus/client/benchmark/SanitizeMetricNameBenchmark.java b/benchmarks/src/archive/java/io/prometheus/client/benchmark/SanitizeMetricNameBenchmark.java index d89e676e5..cb5f300ce 100644 --- a/benchmarks/src/archive/java/io/prometheus/client/benchmark/SanitizeMetricNameBenchmark.java +++ b/benchmarks/src/archive/java/io/prometheus/client/benchmark/SanitizeMetricNameBenchmark.java @@ -1,12 +1,12 @@ package io.prometheus.client.benchmark; -import com.codahale.metrics.MetricRegistry; +import io.prometheus.client.Collector; +import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; @@ -14,23 +14,18 @@ import org.openjdk.jmh.runner.options.OptionsBuilder; import org.openjdk.jmh.runner.options.TimeValue; -import io.prometheus.client.Collector; - -import java.util.Random; -import java.util.concurrent.TimeUnit; - @State(Scope.Benchmark) public class SanitizeMetricNameBenchmark { @Benchmark - @BenchmarkMode({ Mode.AverageTime }) + @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void sanitizeSanitizedName() { Collector.sanitizeMetricName("good_name"); } @Benchmark - @BenchmarkMode({ Mode.AverageTime }) + @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void sanitizeNonSanitizedName() { Collector.sanitizeMetricName("9not_good_name!"); @@ -38,15 +33,16 @@ public void sanitizeNonSanitizedName() { public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(SanitizeMetricNameBenchmark.class.getSimpleName()) - .warmupIterations(5) - .measurementIterations(4) - .measurementTime(TimeValue.seconds(1)) - .warmupTime(TimeValue.seconds(1)) - .threads(4) - .forks(1) - .build(); + Options opt = + new OptionsBuilder() + .include(SanitizeMetricNameBenchmark.class.getSimpleName()) + .warmupIterations(5) + .measurementIterations(4) + .measurementTime(TimeValue.seconds(1)) + .warmupTime(TimeValue.seconds(1)) + .threads(4) + .forks(1) + .build(); new Runner(opt).run(); } diff --git a/benchmarks/src/archive/java/io/prometheus/client/benchmark/SummaryBenchmark.java b/benchmarks/src/archive/java/io/prometheus/client/benchmark/SummaryBenchmark.java index 973106c68..2964b8ea8 100644 --- a/benchmarks/src/archive/java/io/prometheus/client/benchmark/SummaryBenchmark.java +++ b/benchmarks/src/archive/java/io/prometheus/client/benchmark/SummaryBenchmark.java @@ -1,6 +1,7 @@ package io.prometheus.client.benchmark; import com.codahale.metrics.MetricRegistry; +import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; @@ -13,8 +14,6 @@ import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; -import java.util.concurrent.TimeUnit; - @State(Scope.Benchmark) public class SummaryBenchmark { @@ -30,27 +29,27 @@ public class SummaryBenchmark { @Setup public void setup() { - prometheusSimpleSummary = io.prometheus.client.Summary.build() - .name("name") - .help("some description..") - .labelNames("some", "group").create(); + prometheusSimpleSummary = + io.prometheus.client.Summary.build() + .name("name") + .help("some description..") + .labelNames("some", "group") + .create(); prometheusSimpleSummaryChild = prometheusSimpleSummary.labels("test", "group"); - prometheusSimpleSummaryNoLabels = io.prometheus.client.Summary.build() - .name("name") - .help("some description..") - .create(); + prometheusSimpleSummaryNoLabels = + io.prometheus.client.Summary.build().name("name").help("some description..").create(); - prometheusSimpleHistogram = io.prometheus.client.Histogram.build() - .name("name") - .help("some description..") - .labelNames("some", "group").create(); + prometheusSimpleHistogram = + io.prometheus.client.Histogram.build() + .name("name") + .help("some description..") + .labelNames("some", "group") + .create(); prometheusSimpleHistogramChild = prometheusSimpleHistogram.labels("test", "group"); - prometheusSimpleHistogramNoLabels = io.prometheus.client.Histogram.build() - .name("name") - .help("some description..") - .create(); + prometheusSimpleHistogramNoLabels = + io.prometheus.client.Histogram.build().name("name").help("some description..").create(); registry = new MetricRegistry(); codahaleHistogram = registry.histogram("name"); @@ -60,28 +59,28 @@ public void setup() { @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleSummaryBenchmark() { - prometheusSimpleSummary.labels("test", "group").observe(1) ; + prometheusSimpleSummary.labels("test", "group").observe(1); } @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleSummaryChildBenchmark() { - prometheusSimpleSummaryChild.observe(1); + prometheusSimpleSummaryChild.observe(1); } @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleSummaryNoLabelsBenchmark() { - prometheusSimpleSummaryNoLabels.observe(1); + prometheusSimpleSummaryNoLabels.observe(1); } @Benchmark @BenchmarkMode({Mode.AverageTime}) @OutputTimeUnit(TimeUnit.NANOSECONDS) public void prometheusSimpleHistogramBenchmark() { - prometheusSimpleHistogram.labels("test", "group").observe(1) ; + prometheusSimpleHistogram.labels("test", "group").observe(1); } @Benchmark @@ -107,13 +106,14 @@ public void codahaleHistogramBenchmark() { public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(SummaryBenchmark.class.getSimpleName()) - .warmupIterations(5) - .measurementIterations(4) - .threads(4) - .forks(1) - .build(); + Options opt = + new OptionsBuilder() + .include(SummaryBenchmark.class.getSimpleName()) + .warmupIterations(5) + .measurementIterations(4) + .threads(4) + .forks(1) + .build(); new Runner(opt).run(); } diff --git a/checkstyle.xml b/checkstyle.xml index fd483abfa..cac6be8d3 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -30,7 +30,7 @@ + default="checkstyle-suppressions.xml"/> @@ -44,7 +44,7 @@ + value="^package.*|^import.*|a href|href|http://|https://|ftp://|# HELP.*|jvm_runtime_info\{"/> @@ -64,9 +64,9 @@ + value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/> + value="Consider using special escape sequence instead of octal value or Unicode escaped value."/> @@ -81,15 +81,15 @@ + value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/> + value="LITERAL_DO, LITERAL_ELSE, LITERAL_FOR, LITERAL_IF, LITERAL_WHILE"/> @@ -117,7 +117,7 @@ @@ -128,7 +128,7 @@ + value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may + only be represented as '{}' when not part of a multi-block statement (4.1.3)"/> + value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/> @@ -148,7 +149,7 @@ @@ -184,76 +185,76 @@ + value="Type name ''{0}'' must match pattern ''{1}''."/> + value="Member name ''{0}'' must match pattern ''{1}''."/> + value="Logger fields must be named ''logger''."/> + value="Parameter name ''{0}'' must match pattern ''{1}''."/> + value="Lambda parameter name ''{0}'' must match pattern ''{1}''."/> + value="Catch parameter name ''{0}'' must match pattern ''{1}''."/> + value="Local variable name ''{0}'' must match pattern ''{1}''."/> + value="Pattern variable name ''{0}'' must match pattern ''{1}''."/> + value="Class type name ''{0}'' must match pattern ''{1}''."/> + value="Record type name ''{0}'' must match pattern ''{1}''."/> + value="Method type name ''{0}'' must match pattern ''{1}''."/> + value="Interface type name ''{0}'' must match pattern ''{1}''."/> + value="GenericWhitespace ''{0}'' is followed by whitespace."/> + value="GenericWhitespace ''{0}'' is preceded with whitespace."/> + value="GenericWhitespace ''{0}'' should followed by whitespace."/> + value="GenericWhitespace ''{0}'' is not preceded with whitespace."/> @@ -273,18 +274,18 @@ @@ -321,7 +322,7 @@ + value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/> @@ -342,7 +343,7 @@ + value="Method name ''{0}'' must match pattern ''{1}''."/> + default="checkstyle-xpath-suppressions.xml"/> diff --git a/docs/README.md b/docs/README.md index 294c9a622..8ca147236 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,59 +1,60 @@ -Docs ----- +# Docs -This directory contains [hugo](https://gohugo.io) documentation to be published in Github pages. +This directory contains [hugo](https://gohugo.io) documentation to be published in GitHub pages. -Run Locally ------------ +## Run Locally -``` +```shell hugo server -D ``` This will serve the docs on [http://localhost:1313](http://localhost:1313). -Deploy to Github Pages ----------------------- +## Deploy to GitHub Pages -Changes to the `main` branch will be deployed automatically with Github actions. +Changes to the `main` branch will be deployed automatically with GitHub Actions. -Update Javadoc --------------- +## Update Javadoc -Javadoc are not checked-in to the Github repository. -They are generated on the fly by Github actions when the docs are updated. +Javadoc are not checked-in to the GitHub repository. +They are generated on the fly by GitHub Actions when the docs are updated. To view locally, run the following: -``` -# note that the 'compile' in the following command is necessary for Javadoc to detect the module structure +```shell +# note that the 'compile' in the following command is necessary for +# Javadoc to detect the module structure ./mvnw clean compile javadoc:javadoc javadoc:aggregate rm -r ./docs/static/api mv ./target/site/apidocs ./docs/static/api ``` -Github pages are in the `/client_java/` folder, so we link to `/client_java/api` rather than `/api`. +GitHub pages are in the `/client_java/` folder, so we link to `/client_java/api` rather than `/api`. To make JavaDoc work locally, create a link: -``` +```shell mkdir ./docs/static/client_java ln -s ../api ./docs/static/client_java/api ``` -Update Geekdocs ---------------- +## Update Geekdocs -The docs use the [Geekdocs](https://geekdocs.de/) theme. The theme is checked in to Github in the `./docs/themes/hugo-geekdoc/` folder. To update [Geekdocs](https://geekdocs.de/), remove the current folder and create a new one with the latest [release](https://github.com/thegeeklab/hugo-geekdoc/releases). There are no local modifications in `./docs/themes/hugo-geekdoc/`. +The docs use the [Geekdocs](https://geekdocs.de/) theme. The theme is checked in to GitHub in the +`./docs/themes/hugo-geekdoc/` folder. To update [Geekdocs](https://geekdocs.de/), remove the current +folder and create a new one with the +latest [release](https://github.com/thegeeklab/hugo-geekdoc/releases). There are no local +modifications in `./docs/themes/hugo-geekdoc/`. -Notes ------ +## Notes Here's how the initial `docs/` folder was set up: -``` +```shell hugo new site docs cd docs/ mkdir -p themes/hugo-geekdoc/ -curl -L https://github.com/thegeeklab/hugo-geekdoc/releases/download/v0.41.1/hugo-geekdoc.tar.gz | tar -xz -C themes/hugo-geekdoc/ --strip-components=1 +curl -L https://github.com/thegeeklab/hugo-geekdoc/releases/download/v0.41.1/hugo-geekdoc.tar.gz \ + | tar -xz -C themes/hugo-geekdoc/ --strip-components=1 ``` -Create the initial `hugo.toml` file as described in [https://geekdocs.de/usage/getting-started/](https://geekdocs.de/usage/getting-started/). +Create the initial `hugo.toml` file as described +in [https://geekdocs.de/usage/getting-started/](https://geekdocs.de/usage/getting-started/). diff --git a/docs/content/_index.md b/docs/content/_index.md index 9de934995..3b8966cf3 100644 --- a/docs/content/_index.md +++ b/docs/content/_index.md @@ -2,32 +2,54 @@ title: "client_java" --- -This is the documentation for the [Prometheus Java client library](https://github.com/prometheus/client_java) version 1.0.0 and higher. +This is the documentation for the +[Prometheus Java client library](https://github.com/prometheus/client_java) +version 1.0.0 and higher. The main new features of the 1.0.0 release are: -* **Prometheus native histograms:** Support for the new Prometheus histogram type. -* **OpenTelemetry Exporter:** Push metrics in OTLP format to an OpenTelemetry endpoint. -* **Runtime configuration:** Configure metrics, exporters, and more at runtime using a properties file or system properties. +- **Prometheus native histograms:** Support for the new Prometheus histogram type. +- **OpenTelemetry Exporter:** Push metrics in OTLP format to an OpenTelemetry endpoint. +- **Runtime configuration:** Configure metrics, exporters, and more at runtime using a properties + file or system properties. **Documentation and Examples** -In addition to this documentation page we created an [examples/](https://github.com/prometheus/client_java/tree/main/examples) directory with end-to-end scenarios (Docker compose) illustrating new features. +In addition to this documentation page we created an +[examples/](https://github.com/prometheus/client_java/tree/main/examples) directory with end-to-end +scenarios (Docker compose) illustrating new features. **Performance Benchmarks** -Initial performance benchmarks are looking great: All core metric types (including native histograms) allow concurrent updates, so if you instrument a performance critical Web service that utilizes all processor cores in parallel the metrics library will not introduce additional synchronization. See Javadoc comments in [benchmarks/](https://github.com/prometheus/client_java/tree/main/benchmarks) for benchmark results. +Initial performance benchmarks are looking great: All core metric types (including native +histograms) allow concurrent updates, so if you instrument a performance critical Web service +that utilizes all processor cores in parallel the metrics library will not introduce additional +synchronization. See Javadoc comments in +[benchmarks/](https://github.com/prometheus/client_java/tree/main/benchmarks) for benchmark results. **More Info** -The Grafana Labs Blog has a post [Introducing the Prometheus Java Client 1.0.0](https://grafana.com/blog/2023/09/27/introducing-the-prometheus-java-client-1.0.0/) with a good overview of the release. +The Grafana Labs Blog has a post +[Introducing the Prometheus Java Client 1.0.0](https://grafana.com/blog/2023/09/27/introducing-the-prometheus-java-client-1.0.0/) +with a good overview of the release. -There will also be a presentation at the [PromCon](https://promcon.io) conference on 29 Sep 2023. Tune in to the live stream on [https://promcon.io](https://promcon.io) or watch the recording on YouTube. +There will also be a presentation at the [PromCon](https://promcon.io) conference on 29 Sep 2023. +Tune in to the live stream on [https://promcon.io](https://promcon.io) +or watch the recording on YouTube. **For users of the 0.16.0 version and older** -Updating to the 1.0.0 version is a breaking change. However, there's a `prometheus-metrics-simpleclient-bridge` module available that allows you to use your existing simpleclient 0.16.0 metrics with the new 1.0.0 `PrometheusRegistry`. So you don't need to upgrade your instrumentation code, you can keep using your existing metrics. See the [compatibility > simpleclient](https://prometheus.github.io/client_java/migration/simpleclient/) in the menu on the left. +Updating to the 1.0.0 version is a breaking change. However, there's a +`prometheus-metrics-simpleclient-bridge` module available that allows you to use your existing +simpleclient 0.16.0 metrics with the new 1.0.0 `PrometheusRegistry`. +So you don't need to upgrade your instrumentation code, you can keep using your existing metrics. +See the +[compatibility > simpleclient](https://prometheus.github.io/client_java/migration/simpleclient/) +in the menu on the left. -The pre 1.0.0 code is now maintained on the [simpleclient](https://github.com/prometheus/client_java/tree/simpleclient) feature branch. +The pre 1.0.0 code is now maintained on the +[simpleclient](https://github.com/prometheus/client_java/tree/simpleclient) feature branch. -Not all `simpleclient` modules from 0.16.0 are included in the initial 1.0.0 release. Over the next couple of weeks we will work on porting the remaining modules, starting with `pushgateway` and the Servlet filter. +Not all `simpleclient` modules from 0.16.0 are included in the initial 1.0.0 release. +Over the next couple of weeks we will work on porting the remaining modules, +starting with `pushgateway` and the Servlet filter. diff --git a/docs/content/config/config.md b/docs/content/config/config.md index a7e57ac0d..a56b33da2 100644 --- a/docs/content/config/config.md +++ b/docs/content/config/config.md @@ -7,67 +7,76 @@ weight: 1 The Prometheus metrics library provides multiple options how to override configuration at runtime: -* Properties file -* System properties +- Properties file +- System properties Future releases will add more options, like configuration via environment variables. Example: -``` +```properties io.prometheus.exporter.httpServer.port = 9401 ``` -The property above changes the port for the [HTTPServer exporter]({{< relref "/exporters/httpserver.md" >}}) to _9401_. +The property above changes the port for the +[HTTPServer exporter]({{< relref "/exporters/httpserver.md" >}}) to _9401_. -* Properties file: Add the line above to the properties file. -* System properties: Use the command line parameter `-Dio.prometheus.exporter.httpServer.port=9401` when starting your application. +- Properties file: Add the line above to the properties file. +- System properties: Use the command line parameter `-Dio.prometheus.exporter.httpServer.port=9401` +- when starting your application. -Location of the Properties File -------------------------------- +## Location of the Properties File The properties file is searched in the following locations: -* `/prometheus.properties` in the classpath. This is for bundling a properties file with your application. -* System property `-Dprometheus.config=/path/to/prometheus.properties`. -* Environment variable `PROMETHEUS_CONFIG=/path/to/prometheus.properties`. - -Metrics Properties ------------------- - -| Name | Javadoc | Note | -| --------------- | --------|------| -| io.prometheus.metrics.exemplarsEnabled | [Counter.Builder.withExemplars()](/client_java/api/io/prometheus/metrics/core/metrics/Counter.Builder.html#withExemplars()) | (1) (2) | -| io.prometheus.metrics.histogramNativeOnly | [Histogram.Builder.nativeOnly()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeOnly()) | (2) | -| io.prometheus.metrics.histogramClassicOnly | [Histogram.Builder.classicOnly()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#classicOnly()) | (2) | -| io.prometheus.metrics.histogramClassicUpperBounds | [Histogram.Builder.classicUpperBounds()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#classicUpperBounds(double...)) | (3) | -| io.prometheus.metrics.histogramNativeInitialSchema | [Histogram.Builder.nativeInitialSchema()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeInitialSchema(int)) | | -| io.prometheus.metrics.histogramNativeMinZeroThreshold | [Histogram.Builder.nativeMinZeroThreshold()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeMinZeroThreshold(double)) | | -| io.prometheus.metrics.histogramNativeMaxZeroThreshold | [Histogram.Builder.nativeMaxZeroThreshold()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeMaxZeroThreshold(double)) | | -| io.prometheus.metrics.histogramNativeMaxNumberOfBuckets | [Histogram.Builder.nativeMaxNumberOfBuckets()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeMaxNumberOfBuckets(int)) | | -| io.prometheus.metrics.histogramNativeResetDurationSeconds | [Histogram.Builder.nativeResetDuration()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeResetDuration(long,java.util.concurrent.TimeUnit)) | | -| io.prometheus.metrics.summaryQuantiles | [Summary.Builder.quantile(double)](/client_java/api/io/prometheus/metrics/core/metrics/Summary.Builder.html#quantile(double)) | (4) | -| io.prometheus.metrics.summaryQuantileErrors | [Summary.Builder.quantile(double, double)](/client_java/api/io/prometheus/metrics/core/metrics/Summary.Builder.html#quantile(double,double)) | (5) | -| io.prometheus.metrics.summaryMaxAgeSeconds | [Summary.Builder.maxAgeSeconds()](/client_java/api/io/prometheus/metrics/core/metrics/Summary.Builder.html#maxAgeSeconds(long)) | | -| io.prometheus.metrics.summaryNumberOfAgeBuckets | [Summary.Builder.numberOfAgeBuckets()](/client_java/api/io/prometheus/metrics/core/metrics/Summary.Builder.html#numberOfAgeBuckets(int)) | | +- `/prometheus.properties` in the classpath. This is for bundling a properties file + with your application. +- System property `-Dprometheus.config=/path/to/prometheus.properties`. +- Environment variable `PROMETHEUS_CONFIG=/path/to/prometheus.properties`. + +## Metrics Properties + + + +| Name | Javadoc | Note | +| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| io.prometheus.metrics.exemplarsEnabled | [Counter.Builder.withExemplars()]() | (1) (2) | +| io.prometheus.metrics.histogramNativeOnly | [Histogram.Builder.nativeOnly()]() | (2) | +| io.prometheus.metrics.histogramClassicOnly | [Histogram.Builder.classicOnly()]() | (2) | +| io.prometheus.metrics.histogramClassicUpperBounds | [Histogram.Builder.classicUpperBounds()]() | (3) | +| io.prometheus.metrics.histogramNativeInitialSchema | [Histogram.Builder.nativeInitialSchema()]() | | +| io.prometheus.metrics.histogramNativeMinZeroThreshold | [Histogram.Builder.nativeMinZeroThreshold()]() | | +| io.prometheus.metrics.histogramNativeMaxZeroThreshold | [Histogram.Builder.nativeMaxZeroThreshold()]() | | +| io.prometheus.metrics.histogramNativeMaxNumberOfBuckets | [Histogram.Builder.nativeMaxNumberOfBuckets()]() | | +| io.prometheus.metrics.histogramNativeResetDurationSeconds | [Histogram.Builder.nativeResetDuration()]() | | +| io.prometheus.metrics.summaryQuantiles | [Summary.Builder.quantile(double)]() | (4) | +| io.prometheus.metrics.summaryQuantileErrors | [Summary.Builder.quantile(double, double)]() | (5) | +| io.prometheus.metrics.summaryMaxAgeSeconds | [Summary.Builder.maxAgeSeconds()]() | | +| io.prometheus.metrics.summaryNumberOfAgeBuckets | [Summary.Builder.numberOfAgeBuckets()]() | | + + **Notes** -(1) _withExemplars()_ and _withoutExemplars()_ are available for all metric types, not just for counters
    +(1) _withExemplars()_ and _withoutExemplars()_ are available for all metric types, +not just for counters
    (2) Boolean value. Format: `property=true` or `property=false`.
    (3) Comma-separated list. Example: `.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10`.
    (4) Comma-separated list. Example: `0.5, 0.95, 0.99`.
    -(5) Comma-separated list. If specified, the list must have the same length as `io.prometheus.metrics.summaryQuantiles`. Example: `0.01, 0.005, 0.005`. +(5) Comma-separated list. If specified, the list must have the same length as +`io.prometheus.metrics.summaryQuantiles`. Example: `0.01, 0.005, 0.005`. -There's one special feature about metric properties: You can set a property for one specific metric only by specifying the metric name. Example: Let's say you have a histogram named `latency_seconds`. +There's one special feature about metric properties: You can set a property for one specific +metric only by specifying the metric name. Example: +Let's say you have a histogram named `latency_seconds`. -``` +```properties io.prometheus.metrics.histogramClassicUpperBounds = 0.2, 0.4, 0.8, 1.0 ``` The line above sets histogram buckets for all histograms. However: -``` +```properties io.prometheus.metrics.latency_seconds.histogramClassicUpperBounds = 0.2, 0.4, 0.8, 1.0 ``` @@ -75,75 +84,95 @@ The line above sets histogram buckets only for the histogram named `latency_seco This works for all Metrics properties. -Exemplar Properties -------------------- +## Exemplar Properties + + + +| Name | Javadoc | Note | +| -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | +| io.prometheus.exemplars.minRetentionPeriodSeconds | [ExemplarsProperties.getMinRetentionPeriodSeconds()]() | | +| io.prometheus.exemplars.maxRetentionPeriodSeconds | [ExemplarsProperties.getMaxRetentionPeriodSeconds()]() | | +| io.prometheus.exemplars.sampleIntervalMilliseconds | [ExemplarsProperties.getSampleIntervalMilliseconds()]() | | -| Name | Javadoc | Note | -| --------------- | --------|------| -| io.prometheus.exemplars.minRetentionPeriodSeconds | [ExemplarsProperties.getMinRetentionPeriodSeconds()](/client_java/api/io/prometheus/metrics/config/ExemplarsProperties.html#getMinRetentionPeriodSeconds()) | | -| io.prometheus.exemplars.maxRetentionPeriodSeconds | [ExemplarsProperties.getMaxRetentionPeriodSeconds()](/client_java/api/io/prometheus/metrics/config/ExemplarsProperties.html#getMaxRetentionPeriodSeconds()) | | -| io.prometheus.exemplars.sampleIntervalMilliseconds | [ExemplarsProperties.getSampleIntervalMilliseconds()](/client_java/api/io/prometheus/metrics/config/ExemplarsProperties.html#getSampleIntervalMilliseconds()) | | + -Exporter Properties -------------------- +## Exporter Properties -| Name | Javadoc | Note | -| --------------- | --------|------| -| io.prometheus.exporter.includeCreatedTimestamps | [ExporterProperties.getIncludeCreatedTimestamps()](/client_java/api/io/prometheus/metrics/config/ExporterProperties.html#getIncludeCreatedTimestamps()) | (1) | -| io.prometheus.exporter.exemplarsOnAllMetricTypes | [ExporterProperties.getExemplarsOnAllMetricTypes()](/client_java/api/io/prometheus/metrics/config/ExporterProperties.html#getExemplarsOnAllMetricTypes()) | (1) | + + +| Name | Javadoc | Note | +| ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | +| io.prometheus.exporter.includeCreatedTimestamps | [ExporterProperties.getIncludeCreatedTimestamps()]() | (1) | +| io.prometheus.exporter.exemplarsOnAllMetricTypes | [ExporterProperties.getExemplarsOnAllMetricTypes()]() | (1) | + + (1) Boolean value, `true` or `false`. Default see Javadoc. -Exporter Filter Properties --------------------------- +## Exporter Filter Properties + + + +| Name | Javadoc | Note | +| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | +| io.prometheus.exporter.filter.metricNameMustBeEqualTo | [ExporterFilterProperties.getAllowedMetricNames()]() | (1) | +| io.prometheus.exporter.filter.metricNameMustNotBeEqualTo | [ExporterFilterProperties.getExcludedMetricNames()]() | (2) | +| io.prometheus.exporter.filter.metricNameMustStartWith | [ExporterFilterProperties.getAllowedMetricNamePrefixes()]() | (3) | +| io.prometheus.exporter.filter.metricNameMustNotStartWith | [ExporterFilterProperties.getExcludedMetricNamePrefixes()]() | (4) | -| Name | Javadoc | Note | -| --------------- | --------|------| -| io.prometheus.exporter.filter.metricNameMustBeEqualTo | [ExporterFilterProperties.getAllowedMetricNames()](/client_java/api/io/prometheus/metrics/config/ExporterFilterProperties.html#getAllowedMetricNames()) | (1) | -| io.prometheus.exporter.filter.metricNameMustNotBeEqualTo | [ExporterFilterProperties.getExcludedMetricNames()](/client_java/api/io/prometheus/metrics/config/ExporterFilterProperties.html#getExcludedMetricNames()) | (2) | -| io.prometheus.exporter.filter.metricNameMustStartWith | [ExporterFilterProperties.getAllowedMetricNamePrefixes()](/client_java/api/io/prometheus/metrics/config/ExporterFilterProperties.html#getAllowedMetricNamePrefixes()) | (3) | -| io.prometheus.exporter.filter.metricNameMustNotStartWith | [ExporterFilterProperties.getExcludedMetricNamePrefixes()](/client_java/api/io/prometheus/metrics/config/ExporterFilterProperties.html#getExcludedMetricNamePrefixes()) | (4) | + (1) Comma sparated list of allowed metric names. Only these metrics will be exposed.
    (2) Comma sparated list of excluded metric names. These metrics will not be exposed.
    (3) Comma sparated list of prefixes. Only metrics starting with these prefixes will be exposed.
    (4) Comma sparated list of prefixes. Metrics starting with these prefixes will not be exposed.
    -Exporter HTTPServer Properties ------------------------------- - -| Name | Javadoc | Note | -| --------------- | --------|------| -| io.prometheus.exporter.httpServer.port | [HTTPServer.Builder.port()](/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#port(int)) | | - -Exporter OpenTelemetry Properties ---------------------------------- - -| Name | Javadoc | Note | -| --------------- | --------|------| -| io.prometheus.exporter.opentelemetry.protocol | [OpenTelemetryExporter.Builder.protocol()](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html#protocol(java.lang.String)) | (1) | -| io.prometheus.exporter.opentelemetry.endpoint | [OpenTelemetryExporter.Builder.endpoint()](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html#endpoint(java.lang.String)) | | -| io.prometheus.exporter.opentelemetry.headers | [OpenTelemetryExporter.Builder.headers()](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html#header(java.lang.String,java.lang.String)) | (2) | -| io.prometheus.exporter.opentelemetry.intervalSeconds | [OpenTelemetryExporter.Builder.intervalSeconds()](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html#intervalSeconds(int)) | | -| io.prometheus.exporter.opentelemetry.timeoutSeconds | [OpenTelemetryExporter.Builder.timeoutSeconds()](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html#timeoutSeconds(int)) | | -| io.prometheus.exporter.opentelemetry.serviceName | [OpenTelemetryExporter.Builder.serviceName()](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html#serviceName(java.lang.String)) | | -| io.prometheus.exporter.opentelemetry.serviceNamespace | [OpenTelemetryExporter.Builder.serviceNamespace()](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html#serviceNamespace(java.lang.String)) | | -| io.prometheus.exporter.opentelemetry.serviceInstanceId | [OpenTelemetryExporter.Builder.serviceInstanceId()](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html#serviceInstanceId(java.lang.String)) | | -| io.prometheus.exporter.opentelemetry.serviceVersion | [OpenTelemetryExporter.Builder.serviceVersion()](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html#serviceVersion(java.lang.String)) | | -| io.prometheus.exporter.opentelemetry.resourceAttributes | [OpenTelemetryExporter.Builder.resourceAttributes()](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html#resourceAttribute(java.lang.String,java.lang.String)) | (3) | +## Exporter HTTPServer Properties + + + +| Name | Javadoc | Note | +| -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ---- | +| io.prometheus.exporter.httpServer.port | [HTTPServer.Builder.port()]() | | + + + +## Exporter OpenTelemetry Properties + + + +| Name | Javadoc | Note | +| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | +| io.prometheus.exporter.opentelemetry.protocol | [OpenTelemetryExporter.Builder.protocol()]() | (1) | +| io.prometheus.exporter.opentelemetry.endpoint | [OpenTelemetryExporter.Builder.endpoint()]() | | +| io.prometheus.exporter.opentelemetry.headers | [OpenTelemetryExporter.Builder.headers()]() | (2) | +| io.prometheus.exporter.opentelemetry.intervalSeconds | [OpenTelemetryExporter.Builder.intervalSeconds()]() | | +| io.prometheus.exporter.opentelemetry.timeoutSeconds | [OpenTelemetryExporter.Builder.timeoutSeconds()]() | | +| io.prometheus.exporter.opentelemetry.serviceName | [OpenTelemetryExporter.Builder.serviceName()]() | | +| io.prometheus.exporter.opentelemetry.serviceNamespace | [OpenTelemetryExporter.Builder.serviceNamespace()]() | | +| io.prometheus.exporter.opentelemetry.serviceInstanceId | [OpenTelemetryExporter.Builder.serviceInstanceId()]() | | +| io.prometheus.exporter.opentelemetry.serviceVersion | [OpenTelemetryExporter.Builder.serviceVersion()]() | | +| io.prometheus.exporter.opentelemetry.resourceAttributes | [OpenTelemetryExporter.Builder.resourceAttributes()]() | (3) | + + (1) Protocol can be `grpc` or `http/protobuf`.
    (2) Format: `key1=value1,key2=value2`
    (3) Format: `key1=value1,key2=value2` -Many of these attributes can alternatively be configured via OpenTelemetry environment variables, like `OTEL_EXPORTER_OTLP_ENDPOINT`. The Prometheus metrics library has support for OpenTelemetry environment variables. See Javadoc for details. +Many of these attributes can alternatively be configured via OpenTelemetry environment variables, +like `OTEL_EXPORTER_OTLP_ENDPOINT`. +The Prometheus metrics library has support for OpenTelemetry environment variables. +See Javadoc for details. + +## Exporter PushGateway Properties -Exporter PushGateway Properties -------------------------------- + -| Name | Javadoc | Note | -|--------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|------| -| io.prometheus.exporter.pushgateway.address | [PushGateway.Builder.address()](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.Builder.html#address(java.lang.String)) | | -| io.prometheus.exporter.pushgateway.scheme | [PushGateway.Builder.scheme()](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.Builder.html#scheme(java.lang.String)) | | -| io.prometheus.exporter.pushgateway.job | [PushGateway.Builder.job()](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.Builder.html#job(java.lang.String)) | | +| Name | Javadoc | Note | +| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | +| io.prometheus.exporter.pushgateway.address | [PushGateway.Builder.address()]() | | +| io.prometheus.exporter.pushgateway.scheme | [PushGateway.Builder.scheme()]() | | +| io.prometheus.exporter.pushgateway.job | [PushGateway.Builder.job()]() | | + diff --git a/docs/content/exporters/filter.md b/docs/content/exporters/filter.md index 32dc0a56d..01ac48e69 100644 --- a/docs/content/exporters/filter.md +++ b/docs/content/exporters/filter.md @@ -5,14 +5,16 @@ weight: 2 All exporters support a `name[]` URL parameter for querying only specific metric names. Examples: -* `/metrics?name[]=jvm_threads_current` will query the metric named `jvm_threads_current`. -* `/metrics?name[]=jvm_threads_current&name[]=jvm_threads_daemon` will query two metrics, `jvm_threads_current` and `jvm_threads_daemon`. +- `/metrics?name[]=jvm_threads_current` will query the metric named `jvm_threads_current`. +- `/metrics?name[]=jvm_threads_current&name[]=jvm_threads_daemon` will query two metrics, + `jvm_threads_current` and `jvm_threads_daemon`. -Add the following to the scape job configuration in `prometheus.yml` to make the Prometheus server send the `name[]` parameter: +Add the following to the scape job configuration in `prometheus.yml` +to make the Prometheus server send the `name[]` parameter: ```yaml params: - name[]: - - jvm_threads_current - - jvm_threads_daemon + name[]: + - jvm_threads_current + - jvm_threads_daemon ``` diff --git a/docs/content/exporters/formats.md b/docs/content/exporters/formats.md index 189d13d56..a6485c84c 100644 --- a/docs/content/exporters/formats.md +++ b/docs/content/exporters/formats.md @@ -5,23 +5,28 @@ weight: 1 All exporters the following exposition formats: -* OpenMetrics text format -* Prometheus text format -* Prometheus protobuf format +- OpenMetrics text format +- Prometheus text format +- Prometheus protobuf format Moreover, gzip encoding is supported for each of these formats. ## Scraping with a Prometheus server -The Prometheus server sends an `Accept` header to specify which format is requested. By default, the Prometheus server will scrape OpenMetrics text format with gzip encoding. If the Prometheus server is started with `--enable-feature=native-histograms`, it will scrape Prometheus protobuf format instead. +The Prometheus server sends an `Accept` header to specify which format is requested. By default, the +Prometheus server will scrape OpenMetrics text format with gzip encoding. If the Prometheus server +is started with `--enable-feature=native-histograms`, it will scrape Prometheus protobuf format +instead. ## Viewing with a Web Browser -If you view the `/metrics` endpoint with your Web browser you will see Prometheus text format. For quick debugging of the other formats, exporters provide a `debug` URL parameter: +If you view the `/metrics` endpoint with your Web browser you will see Prometheus text format. For +quick debugging of the other formats, exporters provide a `debug` URL parameter: -* `/metrics?debug=openmetrics`: View OpenMetrics text format. -* `/metrics?debug=text`: View Prometheus text format. -* `/metrics?debug=prometheus-protobuf`: View a text representation of the Prometheus protobuf format. +- `/metrics?debug=openmetrics`: View OpenMetrics text format. +- `/metrics?debug=text`: View Prometheus text format. +- `/metrics?debug=prometheus-protobuf`: View a text representation of the Prometheus protobuf + format. ## Exclude protobuf exposition format diff --git a/docs/content/exporters/httpserver.md b/docs/content/exporters/httpserver.md index e524b4cd1..4d0aab5f2 100644 --- a/docs/content/exporters/httpserver.md +++ b/docs/content/exporters/httpserver.md @@ -3,35 +3,41 @@ title: HTTPServer weight: 3 --- -The `HTTPServer` is a standalone server for exposing a metric endpoint. A minimal example application for `HTTPServer` can be found in the [examples](https://github.com/prometheus/client_java/tree/1.0.x/examples) directory. +The `HTTPServer` is a standalone server for exposing a metric endpoint. A minimal example +application for `HTTPServer` can be found in +the [examples](https://github.com/prometheus/client_java/tree/1.0.x/examples) directory. ```java HTTPServer server = HTTPServer.builder() - .port(9400) - .buildAndStart(); + .port(9400) + .buildAndStart(); ``` -By default, `HTTPServer` binds to any IP address, you can change this with [hostname()](/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#hostname(java.lang.String)) or [inetAddress()](/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#inetAddress(java.net.InetAddress)). +By default, `HTTPServer` binds to any IP address, you can change this with +[hostname()]() +or [inetAddress()](). `HTTPServer` is configured with three endpoints: -* `/metrics` for Prometheus scraping. -* `/-/healthy` for simple health checks. -* `/` the default handler is a static HTML page. +- `/metrics` for Prometheus scraping. +- `/-/healthy` for simple health checks. +- `/` the default handler is a static HTML page. -The default handler can be changed with [defaultHandler()](/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#defaultHandler(com.sun.net.httpserver.HttpHandler)). +The default handler can be changed +with [defaultHandler()](). -Authentication and HTTPS ------------------------- +## Authentication and HTTPS -* [authenticator()](/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#authenticator(com.sun.net.httpserver.Authenticator)) is for configuring authentication. -* [httpsConfigurator()](/client_java/api/io/prometheus/metrics/exporter/httpserver/HTTPServer.Builder.html#httpsConfigurator(com.sun.net.httpserver.HttpsConfigurator)) is for configuring HTTPS. +- [authenticator()]() + is for configuring authentication. +- [httpsConfigurator()]() + is for configuring HTTPS. -You can find an example of authentication and SSL in the [jmx_exporter](https://github.com/prometheus/jmx_exporter). +You can find an example of authentication and SSL in the +[jmx_exporter](https://github.com/prometheus/jmx_exporter). -Properties ----------- +## Properties See _config_ section (_todo_) on runtime configuration options. -* `io.prometheus.exporter.httpServer.port`: The port to bind to. +- `io.prometheus.exporter.httpServer.port`: The port to bind to. diff --git a/docs/content/exporters/pushgateway.md b/docs/content/exporters/pushgateway.md index 1ca2946b1..b4c531022 100644 --- a/docs/content/exporters/pushgateway.md +++ b/docs/content/exporters/pushgateway.md @@ -3,23 +3,28 @@ title: Pushgateway weight: 5 --- -The [Prometheus Pushgateway](https://github.com/prometheus/pushgateway) exists to allow ephemeral and batch jobs to expose their metrics to Prometheus. -Since these kinds of jobs may not exist long enough to be scraped, they can instead push their metrics to a Pushgateway. +The [Prometheus Pushgateway](https://github.com/prometheus/pushgateway) exists to allow ephemeral +and batch jobs to expose their metrics to Prometheus. +Since these kinds of jobs may not exist long enough to be scraped, they can instead push their +metrics to a Pushgateway. The Pushgateway then exposes these metrics to Prometheus. -The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) Java class allows you to push metrics to a Prometheus Pushgateway. +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) Java +class allows you to push metrics to a Prometheus Pushgateway. -Example -------- +## Example {{< tabs "uniqueid" >}} {{< tab "Gradle" >}} -``` + +```groovy implementation 'io.prometheus:prometheus-metrics-core:1.3.0' implementation 'io.prometheus:prometheus-metrics-exporter-pushgateway:1.3.0' ``` + {{< /tab >}} {{< tab "Maven" >}} + ```xml io.prometheus @@ -32,6 +37,7 @@ implementation 'io.prometheus:prometheus-metrics-exporter-pushgateway:1.3.0' 1.3.0 ``` + {{< /tab >}} {{< /tabs >}} @@ -66,10 +72,10 @@ public class ExampleBatchJob { } ``` -Basic Auth ----------- +## Basic Auth -The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) supports basic authentication. +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) +supports basic authentication. ```java PushGateway pushGateway = PushGateway.builder() @@ -80,10 +86,10 @@ PushGateway pushGateway = PushGateway.builder() The `PushGatewayTestApp` in `integration-tests/it-pushgateway` has a complete example of this. -Bearer token ----------- +## Bearer token -The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) supports Bearer token authentication. +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) +supports Bearer token authentication. ```java PushGateway pushGateway = PushGateway.builder() @@ -94,11 +100,10 @@ PushGateway pushGateway = PushGateway.builder() The `PushGatewayTestApp` in `integration-tests/it-pushgateway` has a complete example of this. +## SSL -SSL ---- - -The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) supports SSL. +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) +supports SSL. ```java PushGateway pushGateway = PushGateway.builder() @@ -109,10 +114,12 @@ PushGateway pushGateway = PushGateway.builder() However, this requires that the JVM can validate the server certificate. -If you want to skip certificate verification, you need to provide your own [HttpConnectionFactory](/client_java/api/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.html). +If you want to skip certificate verification, you need to provide your own +[HttpConnectionFactory](/client_java/api/io/prometheus/metrics/exporter/pushgateway/HttpConnectionFactory.html). The `PushGatewayTestApp` in `integration-tests/it-pushgateway` has a complete example of this. -Configuration Properties ------------------------- +## Configuration Properties -The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) supports a couple of properties that can be configured at runtime. See [config](../../config/config). +The [PushGateway](/client_java/api/io/prometheus/metrics/exporter/pushgateway/PushGateway.html) +supports a couple of properties that can be configured at runtime. +See [config]({{< relref "../config/config.md" >}}). diff --git a/docs/content/exporters/servlet.md b/docs/content/exporters/servlet.md index 36a5161cf..93b870b1d 100644 --- a/docs/content/exporters/servlet.md +++ b/docs/content/exporters/servlet.md @@ -3,13 +3,16 @@ title: Servlet weight: 4 --- -The [PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) is a [Jakarta Servlet](https://jakarta.ee/specifications/servlet/) for exposing a metric endpoint. +The +[PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) +is a [Jakarta Servlet](https://jakarta.ee/specifications/servlet/) for exposing a metric endpoint. -web.xml -------- +## web.xml The old-school way of configuring a servlet is in a `web.xml` file: + + ```xml ``` -Programmatic ------------- - -Today, most Servlet applications use an embedded Servlet container and configure Servlets programmatically rather than via `web.xml`. -The API for that depends on the Servlet container. -The [examples](https://github.com/prometheus/client_java/tree/1.0.x/examples) directory has an example of an embedded [Tomcat](https://tomcat.apache.org/) container with the [PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) configured. + -Spring ------- +## Programmatic -You can use the [PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) in Spring applications. See [our Spring doc]({{< relref "spring.md" >}}). +Today, most Servlet applications use an embedded Servlet container and configure Servlets +programmatically rather than via `web.xml`. +The API for that depends on the Servlet container. +The [examples](https://github.com/prometheus/client_java/tree/1.0.x/examples) directory has an +example of an embedded +[Tomcat](https://tomcat.apache.org/) container with the +[PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) +configured. + +## Spring + +You can use +the [PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) +in Spring applications. +See [our Spring doc]({{< relref "spring.md" >}}). diff --git a/docs/content/exporters/spring.md b/docs/content/exporters/spring.md index 73e4b2549..fc0d946dd 100644 --- a/docs/content/exporters/spring.md +++ b/docs/content/exporters/spring.md @@ -3,33 +3,40 @@ title: Spring weight: 5 --- -Alternative: Use Spring's Built-in Metrics Library --------------------------------------------------- +## Alternative: Use Spring's Built-in Metrics Library -[Spring Boot](https://spring.io/projects/spring-boot) has a built-in metric library named [Micrometer](https://micrometer.io/), which supports Prometheus exposition format and can be set up in three simple steps: +[Spring Boot](https://spring.io/projects/spring-boot) has a built-in metric library named +[Micrometer](https://micrometer.io/), which supports Prometheus +exposition format and can be set up in three simple steps: 1. Add the `org.springframework.boot:spring-boot-starter-actuator` dependency. 2. Add the `io.micrometer:micrometer-registry-prometheus` as a _runtime_ dependency. -3. Enable the Prometheus endpoint by adding the line `management.endpoints.web.exposure.include=prometheus` to `application.properties`. +3. Enable the Prometheus endpoint by adding the line + `management.endpoints.web.exposure.include=prometheus` to `application.properties`. Note that Spring's default Prometheus endpoint is `/actuator/prometheus`, not `/metrics`. -In most cases the built-in Spring metrics library will work for you and you don't need the Prometheus Java library in Spring applications. +In most cases the built-in Spring metrics library will work for you and you don't need the +Prometheus Java library in Spring applications. -Use the Prometheus Metrics Library in Spring --------------------------------------------- +## Use the Prometheus Metrics Library in Spring -However, you may have your reasons why you want to use the Prometheus metrics library in Spring anyway. Maybe you want full support for all Prometheus metric types, or you want to use the new Prometheus native histograms. +However, you may have your reasons why you want to use the Prometheus metrics library in +Spring anyway. Maybe you want full support for all Prometheus metric types, +or you want to use the new Prometheus native histograms. -The easiest way to use the Prometheus metrics library in Spring is to configure the [PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) to expose metrics. +The easiest way to use the Prometheus metrics library in Spring is to configure the +[PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) +to expose metrics. Dependencies: -* `prometheus-metrics-core`: The core metrics library. -* `prometheus-metrics-exporter-servlet-jakarta`: For providing the `/metrics` endpoint. -* `prometheus-metrics-instrumentation-jvm`: Optional - JVM metrics +- `prometheus-metrics-core`: The core metrics library. +- `prometheus-metrics-exporter-servlet-jakarta`: For providing the `/metrics` endpoint. +- `prometheus-metrics-instrumentation-jvm`: Optional - JVM metrics -The following is the complete source code of a Spring Boot REST service using the Prometheus metrics library: +The following is the complete source code of a Spring Boot REST service using +the Prometheus metrics library: ```java import io.prometheus.metrics.core.metrics.Counter; @@ -46,35 +53,40 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class DemoApplication { - private static final Counter requestCount = Counter.builder() - .name("requests_total") - .register(); - - public static void main(String[] args) { - SpringApplication.run(DemoApplication.class, args); - JvmMetrics.builder().register(); - } - - @GetMapping("/") - public String sayHello() throws InterruptedException { - requestCount.inc(); - return "Hello, World!\n"; - } - - @Bean - public ServletRegistrationBean createPrometheusMetricsEndpoint() { - return new ServletRegistrationBean<>(new PrometheusMetricsServlet(), "/metrics/*"); - } + private static final Counter requestCount = Counter.builder() + .name("requests_total") + .register(); + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + JvmMetrics.builder().register(); + } + + @GetMapping("/") + public String sayHello() throws InterruptedException { + requestCount.inc(); + return "Hello, World!\n"; + } + + @Bean + public ServletRegistrationBean createPrometheusMetricsEndpoint() { + return new ServletRegistrationBean<>(new PrometheusMetricsServlet(), "/metrics/*"); + } } ``` -The important part are the last three lines: They configure the [PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) to expose metrics on `/metrics`: +The important part are the last three lines: They configure the +[PrometheusMetricsServlet](/client_java/api/io/prometheus/metrics/exporter/servlet/jakarta/PrometheusMetricsServlet.html) +to expose metrics on `/metrics`: ```java + @Bean public ServletRegistrationBean createPrometheusMetricsEndpoint() { - return new ServletRegistrationBean<>(new PrometheusMetricsServlet(), "/metrics/*"); + return new ServletRegistrationBean<>(new PrometheusMetricsServlet(), "/metrics/*"); } ``` -The example provides a _Hello, world!_ endpoint on [http://localhost:8080](http://localhost:8080), and Prometheus metrics on [http://localhost:8080/metrics](http://localhost:8080/metrics). +The example provides a _Hello, world!_ endpoint on +[http://localhost:8080](http://localhost:8080), and Prometheus metrics on +[http://localhost:8080/metrics](http://localhost:8080/metrics). diff --git a/docs/content/getting-started/callbacks.md b/docs/content/getting-started/callbacks.md index b94033fc5..514d74c2a 100644 --- a/docs/content/getting-started/callbacks.md +++ b/docs/content/getting-started/callbacks.md @@ -3,11 +3,14 @@ title: Callbacks weight: 5 --- -The section on [metric types](../metric-types) showed how to use metrics that actively maintain their state. +The section on [metric types]({{< relref "metric-types.md" >}}) +showed how to use metrics that actively maintain their state. -This section shows how to create callback-based metrics, i.e. metrics that invoke a callback at scrape time to get the current values. +This section shows how to create callback-based metrics, i.e. metrics that invoke a callback +at scrape time to get the current values. -For example, let's assume we have two instances of a `Cache`, a `coldCache` and a `hotCache`. The following implements a callback-based `cache_size_bytes` metric: +For example, let's assume we have two instances of a `Cache`, a `coldCache` and a `hotCache`. +The following implements a callback-based `cache_size_bytes` metric: ```java Cache coldCache = new Cache(); @@ -27,7 +30,7 @@ GaugeWithCallback.builder() The resulting text format looks like this: -``` +```text # TYPE cache_size_bytes gauge # UNIT cache_size_bytes bytes # HELP cache_size_bytes Size of the cache in Bytes. @@ -35,15 +38,17 @@ cache_size_bytes{state="cold"} 78.0 cache_size_bytes{state="hot"} 83.0 ``` -Better examples of callback metrics can be found in the `prometheus-metrics-instrumentation-jvm` module. +Better examples of callback metrics can be found in the `prometheus-metrics-instrumentation-jvm` +module. The available callback metric types are: -* `GaugeWithCallback` for gauges. -* `CounterWithCallback` for counters. -* `SummaryWithCallback` for summaries. +- `GaugeWithCallback` for gauges. +- `CounterWithCallback` for counters. +- `SummaryWithCallback` for summaries. -The API for gauges and counters is very similar. For summaries the callback has a few more parameters, because it accepts a count, a sum, and quantiles: +The API for gauges and counters is very similar. For summaries the callback has a few more +parameters, because it accepts a count, a sum, and quantiles: ```java SummaryWithCallback.builder() diff --git a/docs/content/getting-started/labels.md b/docs/content/getting-started/labels.md index 5aeb5f215..d056a6ce6 100644 --- a/docs/content/getting-started/labels.md +++ b/docs/content/getting-started/labels.md @@ -5,7 +5,7 @@ weight: 3 The following shows an example of a Prometheus metric in text format: -``` +```text # HELP payments_total total number of payments # TYPE payments_total counter payments_total{status="error",type="paypal"} 1.0 @@ -13,12 +13,14 @@ payments_total{status="success",type="credit card"} 3.0 payments_total{status="success",type="paypal"} 2.0 ``` -The example shows a counter metric named `payments_total` with two labels: `status` and `type`. Each individual data point (each line in text format) is identified by the unique combination of its metric name and its label name/value pairs. +The example shows a counter metric named `payments_total` with two labels: `status` and `type`. +Each individual data point (each line in text format) is identified by the unique combination of +its metric name and its label name/value pairs. -Creating a Metric with Labels ------------------------------ +## Creating a Metric with Labels -Labels are supported for all metric types. We are using counters in this example, however the `labelNames()` and `labelValues()` methods are the same for other metric types. +Labels are supported for all metric types. We are using counters in this example, however the +`labelNames()` and `labelValues()` methods are the same for other metric types. The following code creates the counter above. @@ -34,10 +36,10 @@ counter.labelValues("paypal", "success").inc(2.0); counter.labelValues("paypal", "error").inc(1.0); ``` -The label names have to be specified when the metric is created and cannot change. The label values are created on demand when values are observed. +The label names have to be specified when the metric is created and cannot change. The label values +are created on demand when values are observed. -Creating a Metric without Labels --------------------------------- +## Creating a Metric without Labels Labels are optional. The following example shows a metric without labels: @@ -50,12 +52,13 @@ Counter counter = Counter.builder() counter.inc(3.0); ``` -Cardinality Explosion ---------------------- +## Cardinality Explosion -Each combination of label names and values will result in a new data point, i.e. a new line in text format. +Each combination of label names and values will result in a new data point, i.e. a new line in text +format. Therefore, a good label should have only a small number of possible values. -If you select labels with many possible values, like unique IDs or timestamps, you may end up with an enormous number of data points. +If you select labels with many possible values, like unique IDs or timestamps, +you may end up with an enormous number of data points. This is called cardinality explosion. Here's a bad example, don't do this: @@ -73,12 +76,12 @@ String timestamp = Long.toString(System.currentTimeMillis()); loginCount.labelValues(userId, timestamp).inc(); ``` -Initializing Label Values -------------------------- +## Initializing Label Values If you register a metric without labels, it will show up immediately with initial value of zero. -However, metrics with labels only show up after the label values are first used. In the example above +However, metrics with labels only show up after the label values are first used. In the example +above ```java counter.labelValues("paypal", "error").inc(); @@ -86,13 +89,14 @@ counter.labelValues("paypal", "error").inc(); The data point -``` +```text payments_total{status="error",type="paypal"} 1.0 ``` will jump from non-existent to value 1.0. You will never see it with value 0.0. -This is usually not an issue. However, if you find this annoying and want to see all possible label values from the start, you can initialize label values with `initLabelValues()` like this: +This is usually not an issue. However, if you find this annoying and want to see all possible label +values from the start, you can initialize label values with `initLabelValues()` like this: ```java Counter counter = Counter.builder() @@ -109,7 +113,7 @@ counter.initLabelValues("paypal", "error"); Now the four combinations will be visible from the start with initial value zero. -``` +```text # HELP payments_total total number of payments # TYPE payments_total counter payments_total{status="error",type="credit card"} 0.0 @@ -118,10 +122,10 @@ payments_total{status="success",type="credit card"} 0.0 payments_total{status="success",type="paypal"} 0.0 ``` -Expiring Unused Label Values ----------------------------- +## Expiring Unused Label Values -There is no automatic expiry of unused label values (yet). Once a set of label values is used, it will remain there forever. +There is no automatic expiry of unused label values (yet). Once a set of label values is used, it +will remain there forever. However, you can programmatically remove label values like this: @@ -130,8 +134,7 @@ counter.remove("paypal", "error"); counter.remove("paypal", "success"); ``` -Const Labels ------------- +## Const Labels If you have labels values that never change, you can specify them in the builder as `constLabels()`: @@ -144,6 +147,7 @@ Counter counter = Counter.builder() .register(); ``` -However, most use cases for `constLabels()` are better covered by target labels set by the scraping Prometheus server, +However, most use cases for `constLabels()` are better covered by target labels set by the scraping +Prometheus server, or by one specific metric (e.g. a `build_info` or a `machine_role` metric). See also -[target labels, not static scraped labels](https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels). +[target labels, not static scraped labels](https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels). diff --git a/docs/content/getting-started/metric-types.md b/docs/content/getting-started/metric-types.md index e10d51e9a..3bcda84fe 100644 --- a/docs/content/getting-started/metric-types.md +++ b/docs/content/getting-started/metric-types.md @@ -1,19 +1,25 @@ --- -title: 'Metric Types' +title: "Metric Types" weight: 4 --- -The Prometheus Java metrics library implements the metric types defined in the [OpenMetrics](https://openmetrics.io) standard: +The Prometheus Java metrics library implements the metric types defined in +the [OpenMetrics](https://openmetrics.io) standard: {{< toc >}} -Counter -------- +## Counter -Counter is the most common and useful metric type. Counters can only increase, but never decrease. In the Prometheus query language, the [rate()](https://prometheus.io/docs/prometheus/latest/querying/functions/#rate) function is often used for counters to calculate the average increase per second. +Counter is the most common and useful metric type. Counters can only increase, but never decrease. +In the Prometheus query language, +the [rate()](https://prometheus.io/docs/prometheus/latest/querying/functions/#rate) function is +often used for counters to calculate the average increase per second. {{< hint type=note >}} -Counter values do not need to be integers. In many cases counters represent a number of events (like the number of requests), and in that case the counter value is an integer. However, counters can also be used for something like "total time spent doing something" in which case the counter value is a floating point number. +Counter values do not need to be integers. In many cases counters represent a number of events (like +the number of requests), and in that case the counter value is an integer. However, counters can +also be used for something like "total time spent doing something" in which case the counter value +is a floating point number. {{< /hint >}} Here's an example of a counter: @@ -28,12 +34,14 @@ Counter serviceTimeSeconds = Counter.builder() serviceTimeSeconds.inc(Unit.millisToSeconds(200)); ``` -The resulting counter has the value `0.2`. As `SECONDS` is the standard time unit in Prometheus, the `Unit` utility class has methods to convert other time units to seconds. +The resulting counter has the value `0.2`. As `SECONDS` is the standard time unit in Prometheus, the +`Unit` utility class has methods to convert other time units to seconds. -As defined in [OpenMetrics](https://openmetrics.io/), counter metric names must have the `_total` suffix. If you create a counter without the `_total` suffix the suffix will be appended automatically. +As defined in [OpenMetrics](https://openmetrics.io/), counter metric names must have the `_total` +suffix. If you create a counter without the `_total` suffix the suffix will be appended +automatically. -Gauge ------ +## Gauge Gauges are current measurements, such as the current temperature in Celsius. @@ -48,27 +56,36 @@ Gauge temperature = Gauge.builder() temperature.labelValues("Berlin").set(22.3); ``` -Histogram ---------- +## Histogram -Histograms are for observing distributions, like latency distributions for HTTP services or the distribution of request sizes. -Unlike with counters and gauges, each histogram data point has a complex data structure representing different aspects of the distribution: +Histograms are for observing distributions, like latency distributions for HTTP services or the +distribution of request sizes. +Unlike with counters and gauges, each histogram data point has a complex data structure representing +different aspects of the distribution: -* Count: The total number of observations. -* Sum: The sum of all observed values, e.g. the total time spent serving requests. -* Buckets: The histogram buckets representing the distribution. +- Count: The total number of observations. +- Sum: The sum of all observed values, e.g. the total time spent serving requests. +- Buckets: The histogram buckets representing the distribution. Prometheus supports two flavors of histograms: -* Classic histograms: Bucket boundaries are explicitly defined when the histogram is created. -* Native histograms (exponential histograms): Infinitely many virtual buckets. +- Classic histograms: Bucket boundaries are explicitly defined when the histogram is created. +- Native histograms (exponential histograms): Infinitely many virtual buckets. -By default, histograms maintain both flavors. Which one is used depends on the scrape request from the Prometheus server. -* By default, the Prometheus server will scrape metrics in OpenMetrics format and get the classic histogram flavor. -* If the Prometheus server is started with `--enable-feature=native-histograms`, it will request metrics in Prometheus protobuf format and ingest the native histogram. -* If the Prometheus server is started with `--enable-feature=native-histogram` and the scrape config has the option `scrape_classic_histograms: true`, it will request metrics in Prometheus protobuf format and ingest both, the classic and the native flavor. This is great for migrating from classic histograms to native histograms. +By default, histograms maintain both flavors. Which one is used depends on the scrape request from +the Prometheus server. -See [examples/example-native-histogram](https://github.com/prometheus/client_java/tree/1.0.x/examples/example-native-histogram) for an example. +- By default, the Prometheus server will scrape metrics in OpenMetrics format and get the classic + histogram flavor. +- If the Prometheus server is started with `--enable-feature=native-histograms`, it will request + metrics in Prometheus protobuf format and ingest the native histogram. +- If the Prometheus server is started with `--enable-feature=native-histogram` and the scrape config + has the option `scrape_classic_histograms: true`, it will request metrics in Prometheus protobuf + format and ingest both, the classic and the native flavor. This is great for migrating from + classic histograms to native histograms. + +See [examples/example-native-histogram](https://github.com/prometheus/client_java/tree/1.0.x/examples/example-native-histogram) +for an example. ```java Histogram duration = Histogram.builder() @@ -83,17 +100,30 @@ long start = System.nanoTime(); duration.labelValues("GET", "/", "200").observe(Unit.nanosToSeconds(System.nanoTime() - start)); ``` -Histograms implement the [TimerApi](/client_java/api/io/prometheus/metrics/core/datapoints/TimerApi.html) interface, which provides convenience methods for measuring durations. +Histograms implement +the [TimerApi](/client_java/api/io/prometheus/metrics/core/datapoints/TimerApi.html) interface, +which provides convenience methods for measuring durations. -The histogram builder provides a lot of configuration for fine-tuning the histogram behavior. In most cases you don't need them, defaults are good. The following is an incomplete list showing the most important options: +The histogram builder provides a lot of configuration for fine-tuning the histogram behavior. In +most cases you don't need them, defaults are good. The following is an incomplete list showing the +most important options: -* `nativeOnly()` / `classicOnly()`: Create a histogram with one representation only. -* `classicBuckets(...)`: Set the classic bucket boundaries. Default buckets are `.005`, `.01`, `.025`, `.05`, `.1`, `.25`, `.5`, `1`, `2.5`, `5`, `and 10`. The default bucket boundaries are designed for measuring request durations in seconds. -* `nativeMaxNumberOfBuckets()`: Upper limit for the number of native histogram buckets. Default is 160. When the maximum is reached, the native histogram automatically reduces resolution to stay below the limit. +- `nativeOnly()` / `classicOnly()`: Create a histogram with one representation only. +- `classicBuckets(...)`: Set the classic bucket boundaries. Default buckets are `.005`, `.01`, + `.025`, `.05`, `.1`, `.25`, `.5`, `1`, `2.5`, `5`, `and 10`. The default bucket boundaries are + designed for measuring request durations in seconds. +- `nativeMaxNumberOfBuckets()`: Upper limit for the number of native histogram buckets. + Default is 160. When the maximum is reached, the native histogram automatically + reduces resolution to stay below the limit. -See Javadoc for [Histogram.Builder](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html) for a complete list of options. Some options can be configured at runtime, see [config](../../config/config). +See Javadoc +for [Histogram.Builder](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html) +for a complete list of options. Some options can be configured at runtime, +see [config]({{< relref "../config/config.md" >}}). -Histograms and summaries are both used for observing distributions. Therefore, the both implement the `DistributionDataPoint` interface. Using the `DistributionDataPoint` interface directly gives you the option to switch between histograms and summaries later with minimal code changes. +Histograms and summaries are both used for observing distributions. Therefore, the both implement +the `DistributionDataPoint` interface. Using the `DistributionDataPoint` interface directly gives +you the option to switch between histograms and summaries later with minimal code changes. Example of using the `DistributionDataPoint` interface for a histogram without labels: @@ -128,10 +158,10 @@ successfulEvents.observe(0.7); erroneousEvents.observe(0.2); ``` -Summary -------- +## Summary -Like histograms, summaries are for observing distributions. Each summary data point has a count and a sum like a histogram data point. +Like histograms, summaries are for observing distributions. Each summary data point has a count and +a sum like a histogram data point. However, rather than histogram buckets summaries maintain quantiles. ```java @@ -148,26 +178,37 @@ Summary requestLatency = Summary.builder() requestLatency.labelValues("ok").observe(2.7); ``` -The example above creates a summary with the 50th percentile (median), the 95th percentile, and the 99th percentile. Quantiles are optional, you can create a summary without quantiles if all you need is the count and the sum. +The example above creates a summary with the 50th percentile (median), the 95th percentile, and the +99th percentile. Quantiles are optional, you can create a summary without quantiles if all you need +is the count and the sum. {{< hint type=note >}} -The terms "percentile" and "quantile" mean the same thing. We use percentile when we express it as a number in [0, 100], and we use quantile when we express it as a number in [0.0, 1.0]. +The terms "percentile" and "quantile" mean the same thing. We use percentile when we express it as a +number in [0, 100], and we use quantile when we express it as a number in [0.0, 1.0]. {{< /hint >}} -The second parameter to `quantile()` is the maximum acceptable error. The call `.quantile(0.5, 0.01)` means that the actual quantile is somewhere in [0.49, 0.51]. Higher precision means higher memory usage. +The second parameter to `quantile()` is the maximum acceptable error. The call +`.quantile(0.5, 0.01)` means that the actual quantile is somewhere in [0.49, 0.51]. Higher precision +means higher memory usage. -The 0.0 quantile (min value) and the 1.0 quantile (max value) are special cases because you can get the precise values (error 0.0) with almost no memory overhead. +The 0.0 quantile (min value) and the 1.0 quantile (max value) are special cases because you can get +the precise values (error 0.0) with almost no memory overhead. -Quantile values are calculated based on a 5 minutes moving time window. The default time window can be changed with `maxAgeSeconds()` and `numberOfAgeBuckets()`. +Quantile values are calculated based on a 5 minutes moving time window. The default time window can +be changed with `maxAgeSeconds()` and `numberOfAgeBuckets()`. -Some options can be configured at runtime, see [config](../../config/config). +Some options can be configured at runtime, see [config]({{< relref "../config/config.md" >}}). -In general you should prefer histograms over summaries. The Prometheus query language has a function [histogram_quantile()](https://prometheus.io/docs/prometheus/latest/querying/functions/#histogram_quantile) for calculating quantiles from histograms. The advantage of query-time quantile calculation is that you can aggregate histograms before calculating the quantile. With summaries you must use the quantile with all its labels as it is. +In general you should prefer histograms over summaries. The Prometheus query language has a +function [histogram_quantile()](https://prometheus.io/docs/prometheus/latest/querying/functions/#histogram_quantile) +for calculating quantiles from histograms. The advantage of query-time quantile calculation is that +you can aggregate histograms before calculating the quantile. With summaries you must use the +quantile with all its labels as it is. -Info ----- +## Info -Info metrics are used to expose textual information which should not change during process lifetime. The value of an Info metric is always `1`. +Info metrics are used to expose textual information which should not change during process lifetime. +The value of an Info metric is always `1`. ```java Info info = Info.builder() @@ -185,20 +226,27 @@ info.setLabelValues(version, vendor, runtime); The info above looks as follows in OpenMetrics text format: -``` + + +```text # TYPE jvm_runtime info # HELP jvm_runtime JVM runtime info jvm_runtime_info{runtime="OpenJDK Runtime Environment",vendor="Oracle Corporation",version="1.8.0_382-b05"} 1 ``` -The example is taken from the `prometheus-metrics-instrumentation-jvm` module, so if you have `JvmMetrics` registered you should have a `jvm_runtime_info` metric out-of-the-box. + -As defined in [OpenMetrics](https://openmetrics.io/), info metric names must have the `_info` suffix. If you create a counter without the `_info` suffix the suffix will be appended automatically. +The example is taken from the `prometheus-metrics-instrumentation-jvm` module, so if you have +`JvmMetrics` registered you should have a `jvm_runtime_info` metric out-of-the-box. -StateSet --------- +As defined in [OpenMetrics](https://openmetrics.io/), info metric names must have the `_info` +suffix. If you create a counter without the `_info` suffix the suffix will be appended +automatically. -StateSet are a niche metric type in the OpenMetrics standard that is rarely used. The main use case is to signal which feature flags are enabled. +## StateSet + +StateSet are a niche metric type in the OpenMetrics standard that is rarely used. The main use case +is to signal which feature flags are enabled. ```java StateSet stateSet = StateSet.builder() @@ -214,16 +262,17 @@ stateSet.labelValues("dev").setTrue("feature2"); The OpenMetrics text format looks like this: -``` +```text # TYPE feature_flags stateset # HELP feature_flags Feature flags feature_flags{env="dev",feature_flags="feature1"} 0 feature_flags{env="dev",feature_flags="feature2"} 1 ``` -GaugeHistogram and Unknown --------------------------- +## GaugeHistogram and Unknown -These types are defined in the [OpenMetrics](https://openmetrics.io/) standard but not implemented in the `prometheus-metrics-core` API. +These types are defined in the [OpenMetrics](https://openmetrics.io/) standard but not implemented +in the `prometheus-metrics-core` API. However, `prometheus-metrics-model` implements the underlying data model for these types. -To use these types, you need to implement your own `Collector` where the `collect()` method returns an `UnknownSnapshot` or a `HistogramSnapshot` with `.gaugeHistogram(true)`. +To use these types, you need to implement your own `Collector` where the `collect()` method returns +an `UnknownSnapshot` or a `HistogramSnapshot` with `.gaugeHistogram(true)`. diff --git a/docs/content/getting-started/multi-target.md b/docs/content/getting-started/multi-target.md index 93e37d9af..16f85ac40 100644 --- a/docs/content/getting-started/multi-target.md +++ b/docs/content/getting-started/multi-target.md @@ -7,108 +7,118 @@ weight: 7 This is for the upcoming release 1.1.0. {{< /hint >}} -To support multi-target pattern you can create a custom collector overriding the purposed internal method in ExtendedMultiCollector +To support multi-target pattern you can create a custom collector overriding the purposed internal +method in ExtendedMultiCollector see SampleExtendedMultiCollector in io.prometheus.metrics.examples.httpserver + + ```java public class SampleExtendedMultiCollector extends ExtendedMultiCollector { - public SampleExtendedMultiCollector() { - super(); - } - - @Override - protected MetricSnapshots collectMetricSnapshots(PrometheusScrapeRequest scrapeRequest) { - - GaugeSnapshot.Builder gaugeBuilder = GaugeSnapshot.builder(); - gaugeBuilder.name("x_load").help("process load"); - - CounterSnapshot.Builder counterBuilder = CounterSnapshot.builder(); - counterBuilder.name(PrometheusNaming.sanitizeMetricName("x_calls_total")).help("invocations"); - - String[] targetNames = scrapeRequest.getParameterValues("target"); - String targetName; - String[] procs = scrapeRequest.getParameterValues("proc"); - if (targetNames == null || targetNames.length == 0) { - targetName = "defaultTarget"; - procs = null; //ignore procs param - } else { - targetName = targetNames[0]; - } - Builder counterDataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder(); - io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot.Builder gaugeDataPointBuilder = GaugeSnapshot.GaugeDataPointSnapshot.builder(); - Labels lbls = Labels.of("target", targetName); - - if (procs == null || procs.length == 0) { - counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); - gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); - counterDataPointBuilder.value(70); - gaugeDataPointBuilder.value(Math.random()); - - counterBuilder.dataPoint(counterDataPointBuilder.build()); - gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); - - } else { - for (int i = 0; i < procs.length; i++) { - counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); - gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); - counterDataPointBuilder.value(Math.random()); - gaugeDataPointBuilder.value(Math.random()); - - counterBuilder.dataPoint(counterDataPointBuilder.build()); - gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); - } - } - Collection snaps = new ArrayList(); - snaps.add(counterBuilder.build()); - snaps.add(gaugeBuilder.build()); - MetricSnapshots msnaps = new MetricSnapshots(snaps); - return msnaps; - } - - public List getPrometheusNames() { - List names = new ArrayList(); - names.add("x_calls_total"); - names.add("x_load"); - return names; - } + public SampleExtendedMultiCollector() { + super(); + } + + @Override + protected MetricSnapshots collectMetricSnapshots(PrometheusScrapeRequest scrapeRequest) { + + GaugeSnapshot.Builder gaugeBuilder = GaugeSnapshot.builder(); + gaugeBuilder.name("x_load").help("process load"); + + CounterSnapshot.Builder counterBuilder = CounterSnapshot.builder(); + counterBuilder.name(PrometheusNaming.sanitizeMetricName("x_calls_total")).help("invocations"); + + String[] targetNames = scrapeRequest.getParameterValues("target"); + String targetName; + String[] procs = scrapeRequest.getParameterValues("proc"); + if (targetNames == null || targetNames.length == 0) { + targetName = "defaultTarget"; + procs = null; //ignore procs param + } else { + targetName = targetNames[0]; + } + Builder counterDataPointBuilder = CounterSnapshot.CounterDataPointSnapshot.builder(); + io.prometheus.metrics.model.snapshots.GaugeSnapshot.GaugeDataPointSnapshot.Builder gaugeDataPointBuilder = GaugeSnapshot.GaugeDataPointSnapshot.builder(); + Labels lbls = Labels.of("target", targetName); + + if (procs == null || procs.length == 0) { + counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); + gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", "defaultProc"))); + counterDataPointBuilder.value(70); + gaugeDataPointBuilder.value(Math.random()); + + counterBuilder.dataPoint(counterDataPointBuilder.build()); + gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); + + } else { + for (int i = 0; i < procs.length; i++) { + counterDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); + gaugeDataPointBuilder.labels(lbls.merge(Labels.of("proc", procs[i]))); + counterDataPointBuilder.value(Math.random()); + gaugeDataPointBuilder.value(Math.random()); + + counterBuilder.dataPoint(counterDataPointBuilder.build()); + gaugeBuilder.dataPoint(gaugeDataPointBuilder.build()); + } + } + Collection snaps = new ArrayList(); + snaps.add(counterBuilder.build()); + snaps.add(gaugeBuilder.build()); + MetricSnapshots msnaps = new MetricSnapshots(snaps); + return msnaps; + } + + public List getPrometheusNames() { + List names = new ArrayList(); + names.add("x_calls_total"); + names.add("x_load"); + return names; + } } ``` -`PrometheusScrapeRequest` provides methods to access http-related infos from the request originally received by the endpoint + + + +`PrometheusScrapeRequest` provides methods to access http-related infos from the request originally +received by the endpoint ```java public interface PrometheusScrapeRequest { - String getRequestURI(); + String getRequestURI(); - String[] getParameterValues(String name); + String[] getParameterValues(String name); } ``` - Sample Prometheus scrape_config +```yaml +- job_name: "multi-target" + + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + params: + proc: [proc1, proc2] + relabel_configs: + - source_labels: [__address__] + target_label: __param_target + - source_labels: [__param_target] + target_label: instance + - target_label: __address__ + replacement: localhost:9401 + static_configs: + - targets: ["target1", "target2"] ``` - - job_name: "multi-target" - - # metrics_path defaults to '/metrics' - # scheme defaults to 'http'. - params: - proc: [proc1, proc2] - relabel_configs: - - source_labels: [__address__] - target_label: __param_target - - source_labels: [__param_target] - target_label: instance - - target_label: __address__ - replacement: localhost:9401 - static_configs: - - targets: ["target1", "target2"] -``` + It's up to the specific MultiCollector implementation how to interpret the _target_ parameter. -It might be an explicit real target (i.e. via host name/ip address) or as an alias in some internal configuration. -The latter is more suitable when the MultiCollector implementation is a proxy (see https://github.com/prometheus/snmp_exporter) -In this case, invoking real target might require extra parameters (e.g. credentials) that might be complex to manage in Prometheus configuration +It might be an explicit real target (i.e. via host name/ip address) or as an alias in some internal +configuration. +The latter is more suitable when the MultiCollector implementation is a proxy ( +see ) +In this case, invoking real target might require extra parameters (e.g. credentials) that might be +complex to manage in Prometheus configuration (not considering the case where the proxy might become an "open relay") diff --git a/docs/content/getting-started/performance.md b/docs/content/getting-started/performance.md index 43e95c430..31b8de162 100644 --- a/docs/content/getting-started/performance.md +++ b/docs/content/getting-started/performance.md @@ -5,10 +5,10 @@ weight: 6 This section has tips on how to use the Prometheus Java client in high performance applications. -Specify Label Values Only Once ------------------------------- +## Specify Label Values Only Once -For high performance applications, we recommend to specify label values only once, and then use the data point directly. +For high performance applications, we recommend to specify label values only once, and then use the +data point directly. This applies to all metric types. Let's use a counter as an example here: @@ -26,7 +26,8 @@ You could increment the counter above like this: requestCount.labelValue("/", "200").inc(); ``` -However, the line above does not only increment the counter, it also looks up the label values to find the right data point. +However, the line above does not only increment the counter, it also looks up the label values to +find the right data point. In high performance applications you can optimize this by looking up the data point only once: @@ -40,16 +41,21 @@ Now, you can increment the data point directly, which is a highly optimized oper successfulCalls.inc(); ``` -Enable Only One Histogram Representation ----------------------------------------- +## Enable Only One Histogram Representation -By default, histograms maintain two representations under the hood: The classic histogram representation with static buckets, and the native histogram representation with dynamic buckets. +By default, histograms maintain two representations under the hood: The classic histogram +representation with static buckets, and the native histogram representation with dynamic buckets. -While this default provides the flexibility to scrape different representations at runtime, it comes at a cost, because maintaining multiple representations causes performance overhead. +While this default provides the flexibility to scrape different representations at runtime, it comes +at a cost, because maintaining multiple representations causes performance overhead. -In performance critical applications we recommend to use either the classic representation or the native representation, but not both. +In performance critical applications we recommend to use either the classic representation or the +native representation, but not both. -You can either configure this in code for each histogram by calling [classicOnly()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#classicOnly()) or [nativeOnly()](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.Builder.html#nativeOnly()), or you use the corresponding [config options](../../config/config/). +You can either configure this in code for each histogram by +calling [classicOnly()]() +or [nativeOnly()](), +or you use the corresponding [config options]({{< relref "../config/config.md" >}}). One way to do this is with system properties in the command line when you start your application @@ -63,7 +69,10 @@ or java -Dio.prometheus.metrics.histogramNativeOnly=true my-app.jar ``` -If you don't want to add a command line parameter every time you start your application, you can add a `prometheus.properties` file to your classpath (put it in the `src/main/resources/` directory so that it gets packed into your JAR file). The `prometheus.properties` file should have the following line: +If you don't want to add a command line parameter every time you start your application, you can add +a `prometheus.properties` file to your classpath (put it in the `src/main/resources/` directory so +that it gets packed into your JAR file). The `prometheus.properties` file should have the following +line: ```properties io.prometheus.metrics.histogramClassicOnly=true @@ -75,4 +84,5 @@ or io.prometheus.metrics.histogramNativeOnly=true ``` -Future releases will add more configuration options, like support for configuration via environment variable`IO_PROMETHEUS_METRICS_HISTOGRAM_NATIVE_ONLY=true`. +Future releases will add more configuration options, like support for configuration via environment +variable`IO_PROMETHEUS_METRICS_HISTOGRAM_NATIVE_ONLY=true`. diff --git a/docs/content/getting-started/quickstart.md b/docs/content/getting-started/quickstart.md index 27b7c13f5..7974b26c9 100644 --- a/docs/content/getting-started/quickstart.md +++ b/docs/content/getting-started/quickstart.md @@ -7,22 +7,26 @@ This tutorial shows the quickest way to get started with the Prometheus Java met {{< toc >}} -# Dependencies +## Dependencies We use the following dependencies: -* `prometheus-metrics-core` is the actual metrics library. -* `prometheus-metrics-instrumentation-jvm` provides out-of-the-box JVM metrics. -* `prometheus-metrics-exporter-httpserver` is a standalone HTTP server for exposing Prometheus metrics. -{{< tabs "deps" >}} -{{< tab "Gradle" >}} -``` +- `prometheus-metrics-core` is the actual metrics library. +- `prometheus-metrics-instrumentation-jvm` provides out-of-the-box JVM metrics. +- `prometheus-metrics-exporter-httpserver` is a standalone HTTP server for exposing Prometheus + metrics. + {{< tabs "deps" >}} + {{< tab "Gradle" >}} + +```groovy implementation 'io.prometheus:prometheus-metrics-core:$version' implementation 'io.prometheus:prometheus-metrics-instrumentation-jvm:$version' implementation 'io.prometheus:prometheus-metrics-exporter-httpserver:$version' ``` + {{< /tab >}} {{< tab "Maven" >}} + ```xml io.prometheus @@ -40,25 +44,29 @@ implementation 'io.prometheus:prometheus-metrics-exporter-httpserver:$version' $version ``` + {{< /tab >}} {{< /tabs >}} -There are alternative exporters as well, for example if you are using a Servlet container like Tomcat or Undertow you might want to use `prometheus-exporter-servlet-jakarta` rather than a standalone HTTP server. +There are alternative exporters as well, for example if you are using a Servlet container like +Tomcat or Undertow you might want to use `prometheus-exporter-servlet-jakarta` rather than a +standalone HTTP server. {{< hint type=note >}} If you do not use the protobuf exposition format, you can -[exclude](../../exporters/formats#exclude-protobuf-exposition-format) +[exclude]({{< relref "quickstart.md#exclude-protobuf-exposition-format" >}}) it from the dependencies. {{< /hint >}} -# Dependency management +## Dependency management A Bill of Material -([BOM](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#bill-of-materials-bom-poms)) +([BOM](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#bill-of-materials-bom-poms)) ensures that versions of dependencies (including transitive ones) are aligned. -This is especially important when using Spring Boot, which manages some of the dependencies of the project. +This is especially important when using Spring Boot, which manages some of the dependencies of the +project. You should omit the version number of the dependencies in your build file if you are using a BOM. @@ -138,7 +146,7 @@ The following example shows how to import the Prometheus Java metrics BOMs using {{< /tab >}} {{< /tabs >}} -# Example Application +## Example Application ```java import io.prometheus.metrics.core.metrics.Counter; @@ -167,34 +175,38 @@ public class App { .port(9400) .buildAndStart(); - System.out.println("HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + System.out.println("HTTPServer listening on port http://localhost:" + + server.getPort() + "/metrics"); Thread.currentThread().join(); // sleep forever } } ``` -# Result +## Result -Run the application and view [http://localhost:9400/metrics](http://localhost:9400/metrics) with your browser to see the raw metrics. You should see the `my_count_total` metric as shown below plus the `jvm_` and `process_` metrics coming from `JvmMetrics`. +Run the application and view [http://localhost:9400/metrics](http://localhost:9400/metrics) with +your browser to see the raw metrics. You should see the `my_count_total` metric as shown below plus +the `jvm_` and `process_` metrics coming from `JvmMetrics`. -``` +```text # HELP my_count_total example counter # TYPE my_count_total counter my_count_total{status="error"} 1.0 my_count_total{status="ok"} 2.0 ``` -# Prometheus Configuration +## Prometheus Configuration -To scrape the metrics with a Prometheus server, download the latest Prometheus server [release](https://github.com/prometheus/prometheus/releases), and configure the `prometheus.yml` file as follows: +To scrape the metrics with a Prometheus server, download the latest Prometheus +server [release](https://github.com/prometheus/prometheus/releases), and configure the +`prometheus.yml` file as follows: ```yaml global: scrape_interval: 10s # short interval for manual testing scrape_configs: - - job_name: "java-example" static_configs: - targets: ["localhost:9400"] diff --git a/docs/content/getting-started/registry.md b/docs/content/getting-started/registry.md index 7ae1bcbff..afebbb304 100644 --- a/docs/content/getting-started/registry.md +++ b/docs/content/getting-started/registry.md @@ -3,10 +3,10 @@ title: Registry weight: 2 --- -In order to expose metrics, you need to register them with a `PrometheusRegistry`. We are using a counter as an example here, but the `register()` method is the same for all metric types. +In order to expose metrics, you need to register them with a `PrometheusRegistry`. We are using a +counter as an example here, but the `register()` method is the same for all metric types. -Registering a Metrics with the Default Registry ------------------------------------------------ +## Registering a Metrics with the Default Registry ```java Counter eventsTotal = Counter.builder() @@ -15,10 +15,10 @@ Counter eventsTotal = Counter.builder() .register(); // <-- implicitly uses PrometheusRegistry.defaultRegistry ``` -The `register()` call above builds the counter and registers it with the global static `PrometheusRegistry.defaultRegistry`. Using the default registry is recommended. +The `register()` call above builds the counter and registers it with the global static +`PrometheusRegistry.defaultRegistry`. Using the default registry is recommended. -Registering a Metrics with a Custom Registry --------------------------------------------- +## Registering a Metrics with a Custom Registry You can also register your metric with a custom registry: @@ -31,10 +31,10 @@ Counter eventsTotal = Counter.builder() .register(myRegistry); ``` -Registering a Metric with Multiple Registries ---------------------------------------------- +## Registering a Metric with Multiple Registries -As an alternative to calling `register()` directly, you can `build()` metrics without registering them, +As an alternative to calling `register()` directly, you can `build()` metrics without registering +them, and register them later: ```java @@ -51,7 +51,7 @@ Counter eventsTotal = Counter.builder() PrometheusRegistry.defaultRegistry.register(eventsTotal); // register the counter with a custom registry. -// This is ok, you can register a metric with multiple registries. +// This is OK, you can register a metric with multiple registries. PrometheusRegistry myRegistry = new PrometheusRegistry(); myRegistry.register(eventsTotal); @@ -60,10 +60,10 @@ myRegistry.register(eventsTotal); Custom registries are useful if you want to maintain different scopes of metrics, like a debug registry with a lot of metrics, and a default registry with only a few metrics. -IllegalArgumentException: Duplicate Metric Name in Registry ------------------------------------------------------------ +## IllegalArgumentException: Duplicate Metric Name in Registry -While it is ok to register the same metric with multiple registries, it is illegal to register the same metric name multiple times with the same registry. +While it is OK to register the same metric with multiple registries, it is illegal to register the +same metric name multiple times with the same registry. The following code will throw an `IllegalArgumentException`: ```java @@ -75,13 +75,13 @@ Counter eventsTotal1 = Counter.builder() Counter eventsTotal2 = Counter.builder() .name("events_total") .help("Total number of events") - .register(); // <-- IllegalArgumentException, because a metric with that name is already registered + .register(); // IllegalArgumentException, because a metric with that name is already registered ``` -Unregistering a Metric ----------------------- +## Unregistering a Metric -There is no automatic expiry of unused metrics (yet), once a metric is registered it will remain registered forever. +There is no automatic expiry of unused metrics (yet), once a metric is registered it will remain +registered forever. However, you can programmatically unregistered an obsolete metric like this: diff --git a/docs/content/instrumentation/caffeine.md b/docs/content/instrumentation/caffeine.md index dde7e561a..104a9b9fa 100644 --- a/docs/content/instrumentation/caffeine.md +++ b/docs/content/instrumentation/caffeine.md @@ -8,11 +8,14 @@ provided by caffeine `Cache` objects into prometheus metrics. {{< tabs "uniqueid" >}} {{< tab "Gradle" >}} -``` + +```groovy implementation 'io.prometheus:prometheus-metrics-instrumentation-caffeine:1.3.2' ``` + {{< /tab >}} {{< tab "Maven" >}} + ```xml io.prometheus @@ -20,17 +23,18 @@ implementation 'io.prometheus:prometheus-metrics-instrumentation-caffeine:1.3.2' 1.3.2 ``` + {{< /tab >}} {{< /tabs >}} In order to collect metrics: - * A single `CacheMetricsCollector` instance must be registered with the registry; - * Multiple `CacheMetricsCollector` instances cannot be registered with the same registry; - * The `Cache` object must be instantiated with the `recordStats()` option, and then added to the - `CacheMetricsCollector` instance with a unique name, which will be used as the value of the - `cache` label on the exported metrics; - * If the `recordStats` option is not set, most metrics will only return zero values; +- A single `CacheMetricsCollector` instance must be registered with the registry; + - Multiple `CacheMetricsCollector` instances cannot be registered with the same registry; +- The `Cache` object must be instantiated with the `recordStats()` option, and then added to the + `CacheMetricsCollector` instance with a unique name, which will be used as the value of the + `cache` label on the exported metrics; + - If the `recordStats` option is not set, most metrics will only return zero values; ```java var cache = Caffeine.newBuilder().recordStats().build(); @@ -48,12 +52,11 @@ does not exist, i.e. a constructor call `new CacheMetricsCollector()` is the onl All example metrics on this page will use the `mycache` label value. -Generic Cache Metrics ---------------------- +## Generic Cache Metrics For all cache instances, the following metrics will be available: -``` +```text # TYPE caffeine_cache_hit counter # HELP caffeine_cache_hit Cache hit totals caffeine_cache_hit_total{cache="mycache"} 10.0 @@ -71,14 +74,13 @@ caffeine_cache_eviction_total{cache="mycache"} 1.0 caffeine_cache_estimated_size{cache="mycache"} 5.0 ``` -Loading Cache Metrics ---------------------- +## Loading Cache Metrics If the cache is an instance of `LoadingCache`, i.e. it is built with a `loader` function that is managed by the cache library, then metrics for observing load time and load failures become available: -``` +```text # TYPE caffeine_cache_load_failure counter # HELP caffeine_cache_load_failure Cache load failures caffeine_cache_load_failure_total{cache="mycache"} 10.0 @@ -91,14 +93,14 @@ caffeine_cache_load_duration_seconds_count{cache="mycache"} 7.0 caffeine_cache_load_duration_seconds_sum{cache="mycache"} 0.0034 ``` -Weighted Cache Metrics ----------------------- +## Weighted Cache Metrics Two metrics exist for observability specifically of caches that define a `weigher`: -``` +```text # TYPE caffeine_cache_eviction_weight counter -# HELP caffeine_cache_eviction_weight Weight of evicted cache entries, doesn't include manually removed entries +# HELP caffeine_cache_eviction_weight Weight of evicted cache entries, doesn't include manually removed entries // editorconfig-checker-disable-line + caffeine_cache_eviction_weight_total{cache="mycache"} 5.0 # TYPE caffeine_cache_weighted_size gauge # HELP caffeine_cache_weighted_size Approximate accumulated weight of cache entries @@ -113,14 +115,14 @@ caffeine_cache_weighted_size{cache="mycache"} 30.0 Up to version 1.3.5 and older, the weighted metrics had a different behavior: - * `caffeine_cache_weighted_size` was not implemented; - * `caffeine_cache_eviction_weight` was exposed as a `gauge`; +- `caffeine_cache_weighted_size` was not implemented; +- `caffeine_cache_eviction_weight` was exposed as a `gauge`; It is possible to restore the behavior of version 1.3.5 and older, by either: - * Using the deprecated `new CacheMetricsCollector()` constructor; - * Using the flags provided on the `CacheMetricsCollector.Builder` object to opt-out of each of the - elements of the post-1.3.5 behavior: - * `builder.collectWeightedSize(false)` will disable collection of `caffeine_cache_weighted_size`; - * `builder.collectEvictionWeightAsCounter(false)` will expose `caffeine_cache_eviction_weight` as - a `gauge` metric; +- Using the deprecated `new CacheMetricsCollector()` constructor; +- Using the flags provided on the `CacheMetricsCollector.Builder` object to opt-out of each of the + elements of the post-1.3.5 behavior: + - `builder.collectWeightedSize(false)` will disable collection of `caffeine_cache_weighted_size`; + - `builder.collectEvictionWeightAsCounter(false)` will expose `caffeine_cache_eviction_weight` as + a `gauge` metric; diff --git a/docs/content/instrumentation/guava.md b/docs/content/instrumentation/guava.md index 33cadae97..ffc8f0ab2 100644 --- a/docs/content/instrumentation/guava.md +++ b/docs/content/instrumentation/guava.md @@ -8,11 +8,14 @@ provided by Guava `Cache` objects into prometheus metrics. {{< tabs "uniqueid" >}} {{< tab "Gradle" >}} -``` + +```groovy implementation 'io.prometheus:prometheus-metrics-instrumentation-guava:1.3.2' ``` + {{< /tab >}} {{< tab "Maven" >}} + ```xml io.prometheus @@ -20,17 +23,18 @@ implementation 'io.prometheus:prometheus-metrics-instrumentation-guava:1.3.2' 1.3.2 ``` + {{< /tab >}} {{< /tabs >}} In order to collect metrics: -* A single `CacheMetricsCollector` instance must be registered with the registry; - * Multiple `CacheMetricsCollector` instances cannot be registered with the same registry; -* The `Cache` object must be instantiated with the `recordStats()` option, and then added to the +- A single `CacheMetricsCollector` instance must be registered with the registry; + - Multiple `CacheMetricsCollector` instances cannot be registered with the same registry; +- The `Cache` object must be instantiated with the `recordStats()` option, and then added to the `CacheMetricsCollector` instance with a unique name, which will be used as the value of the `cache` label on the exported metrics; - * If the `recordStats` option is not set, most metrics will only return zero values; + - If the `recordStats` option is not set, most metrics will only return zero values; ```java var cache = CacheBuilder.newBuilder().recordStats().build(); @@ -41,12 +45,11 @@ cacheMetrics.addCache("mycache", cache); All example metrics on this page will use the `mycache` label value. -Generic Cache Metrics ---------------------- +## Generic Cache Metrics For all cache instances, the following metrics will be available: -``` +```text # TYPE guava_cache_hit counter # HELP guava_cache_hit Cache hit totals guava_cache_hit_total{cache="mycache"} 10.0 @@ -64,14 +67,13 @@ guava_cache_eviction_total{cache="mycache"} 1.0 guava_cache_size{cache="mycache"} 5.0 ``` -Loading Cache Metrics ---------------------- +## Loading Cache Metrics If the cache is an instance of `LoadingCache`, i.e. it is built with a `loader` function that is managed by the cache library, then metrics for observing load time and load failures become available: -``` +```text # TYPE guava_cache_load_failure counter # HELP guava_cache_load_failure Cache load failures guava_cache_load_failure_total{cache="mycache"} 10.0 diff --git a/docs/content/instrumentation/jvm.md b/docs/content/instrumentation/jvm.md index 4b6f90cc7..804c1b09b 100644 --- a/docs/content/instrumentation/jvm.md +++ b/docs/content/instrumentation/jvm.md @@ -3,15 +3,19 @@ title: JVM weight: 1 --- -The JVM instrumentation module provides a variety of out-of-the-box JVM and process metrics. To use it, add the following dependency: +The JVM instrumentation module provides a variety of out-of-the-box JVM and process metrics. To use +it, add the following dependency: {{< tabs "uniqueid" >}} {{< tab "Gradle" >}} -``` + +```groovy implementation 'io.prometheus:prometheus-metrics-instrumentation-jvm:1.0.0' ``` + {{< /tab >}} {{< tab "Maven" >}} + ```xml io.prometheus @@ -19,6 +23,7 @@ implementation 'io.prometheus:prometheus-metrics-instrumentation-jvm:1.0.0' 1.0.0 ``` + {{< /tab >}} {{< /tabs >}} @@ -28,16 +33,23 @@ Now, you can register the JVM metrics as follows: JvmMetrics.builder().register(); ``` -The line above will initialize all JVM metrics and register them with the default registry. If you want to register the metrics with a custom `PrometheusRegistry`, you can pass the registry as parameter to the `register()` call. +The line above will initialize all JVM metrics and register them with the default registry. If you +want to register the metrics with a custom `PrometheusRegistry`, you can pass the registry as +parameter to the `register()` call. -The sections below describe the individual classes providing JVM metrics. If you don't want to register all JVM metrics, you can register each of these classes individually rather than using `JvmMetrics`. +The sections below describe the individual classes providing JVM metrics. If you don't want to +register all JVM metrics, you can register each of these classes individually rather than using +`JvmMetrics`. -JVM Buffer Pool Metrics ------------------------ +## JVM Buffer Pool Metrics -JVM buffer pool metrics are provided by the [JvmBufferPoolMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetrics.html) class. The data is coming from the [BufferPoolMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/BufferPoolMXBean.html). Example metrics: +JVM buffer pool metrics are provided by +the [JvmBufferPoolMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetrics.html) +class. The data is coming from +the [BufferPoolMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/BufferPoolMXBean.html). +Example metrics: -``` +```text # HELP jvm_buffer_pool_capacity_bytes Bytes capacity of a given JVM buffer pool. # TYPE jvm_buffer_pool_capacity_bytes gauge jvm_buffer_pool_capacity_bytes{pool="direct"} 8192.0 @@ -52,12 +64,17 @@ jvm_buffer_pool_used_bytes{pool="direct"} 8192.0 jvm_buffer_pool_used_bytes{pool="mapped"} 0.0 ``` -JVM Class Loading Metrics -------------------------- +## JVM Class Loading Metrics -JVM class loading metrics are provided by the [JvmClassLoadingMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.html) class. The data is coming from the [ClassLoadingMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/ClassLoadingMXBean.html). Example metrics: +JVM class loading metrics are provided by +the [JvmClassLoadingMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.html) +class. The data is coming from +the [ClassLoadingMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/ClassLoadingMXBean.html). +Example metrics: -``` + + +```text # HELP jvm_classes_currently_loaded The number of classes that are currently loaded in the JVM # TYPE jvm_classes_currently_loaded gauge jvm_classes_currently_loaded 1109.0 @@ -69,23 +86,35 @@ jvm_classes_loaded_total 1109.0 jvm_classes_unloaded_total 0.0 ``` -JVM Compilation Metrics ------------------------ + -JVM compilation metrics are provided by the [JvmCompilationMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetrics.html) class. The data is coming from the [CompilationMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/CompilationMXBean.html). Example metrics: +## JVM Compilation Metrics -``` +JVM compilation metrics are provided by +the [JvmCompilationMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetrics.html) +class. The data is coming from +the [CompilationMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/CompilationMXBean.html). +Example metrics: + + + +```text # HELP jvm_compilation_time_seconds_total The total time in seconds taken for HotSpot class compilation # TYPE jvm_compilation_time_seconds_total counter jvm_compilation_time_seconds_total 0.152 ``` -JVM Garbage Collector Metrics ------------------------------ + -JVM garbage collector metrics are provided by the [JvmGarbageCollectorMetric](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetrics.html) class. The data is coming from the [GarbageCollectorMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/GarbageCollectorMXBean.html). Example metrics: +## JVM Garbage Collector Metrics -``` +JVM garbage collector metrics are provided by +the [JvmGarbageCollectorMetric](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetrics.html) +class. The data is coming from +the [GarbageCollectorMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/GarbageCollectorMXBean.html). +Example metrics: + +```text # HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds. # TYPE jvm_gc_collection_seconds summary jvm_gc_collection_seconds_count{gc="PS MarkSweep"} 0 @@ -94,12 +123,18 @@ jvm_gc_collection_seconds_count{gc="PS Scavenge"} 0 jvm_gc_collection_seconds_sum{gc="PS Scavenge"} 0.0 ``` -JVM Memory Metrics ------------------- +## JVM Memory Metrics -JVM memory metrics are provided by the [JvmMemoryMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.html) class. The data is coming from the [MemoryMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/MemoryMXBean.html) and the [MemoryPoolMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html). Example metrics: +JVM memory metrics are provided by +the [JvmMemoryMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmMemoryMetrics.html) +class. The data is coming from +the [MemoryMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/MemoryMXBean.html) +and the [MemoryPoolMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html). +Example metrics: -``` + + +```text # HELP jvm_memory_committed_bytes Committed (bytes) of a given JVM memory area. # TYPE jvm_memory_committed_bytes gauge jvm_memory_committed_bytes{area="heap"} 4.98597888E8 @@ -173,12 +208,20 @@ jvm_memory_used_bytes{area="heap"} 9051232.0 jvm_memory_used_bytes{area="nonheap"} 1.1490688E7 ``` -JVM Memory Pool Allocation Metrics ----------------------------------- + -JVM memory pool allocation metrics are provided by the [JvmMemoryPoolAllocationMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.html) class. The data is obtained by adding a [NotificationListener](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/javax/management/NotificationListener.html) to the [GarbageCollectorMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/GarbageCollectorMXBean.html). Example metrics: +## JVM Memory Pool Allocation Metrics -``` +JVM memory pool allocation metrics are provided by +the [JvmMemoryPoolAllocationMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmMemoryPoolAllocationMetrics.html) +class. The data is obtained by adding +a [NotificationListener](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/javax/management/NotificationListener.html) +to the [GarbageCollectorMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/GarbageCollectorMXBean.html). +Example metrics: + + + +```text # HELP jvm_memory_pool_allocated_bytes_total Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously. # TYPE jvm_memory_pool_allocated_bytes_total counter jvm_memory_pool_allocated_bytes_total{pool="Code Cache"} 4336448.0 @@ -189,24 +232,36 @@ jvm_memory_pool_allocated_bytes_total{pool="PS Old Gen"} 1428888.0 jvm_memory_pool_allocated_bytes_total{pool="PS Survivor Space"} 4115280.0 ``` -JVM Runtime Info Metric ------------------------ + +## JVM Runtime Info Metric -The JVM runtime info metric is provided by the [JvmRuntimeInfoMetric](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetric.html) class. The data is obtained via system properties and will not change throughout the lifetime of the application. Example metric: +The JVM runtime info metric is provided by +the [JvmRuntimeInfoMetric](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmRuntimeInfoMetric.html) +class. The data is obtained via system properties and will not change throughout the lifetime of the +application. Example metric: -``` + + +```text # TYPE jvm_runtime info # HELP jvm_runtime JVM runtime info jvm_runtime_info{runtime="OpenJDK Runtime Environment",vendor="Oracle Corporation",version="1.8.0_382-b05"} 1 ``` -JVM Thread Metrics ------------------- + -JVM thread metrics are provided by the [JvmThreadsMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.html) class. The data is coming from the [ThreadMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/ThreadMXBean.html). Example metrics: +## JVM Thread Metrics -``` +JVM thread metrics are provided by +the [JvmThreadsMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/JvmThreadsMetrics.html) +class. The data is coming from +the [ThreadMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/ThreadMXBean.html). +Example metrics: + + + +```text # HELP jvm_threads_current Current thread count of a JVM # TYPE jvm_threads_current gauge jvm_threads_current 10.0 @@ -236,12 +291,23 @@ jvm_threads_state{state="UNKNOWN"} 0.0 jvm_threads_state{state="WAITING"} 3.0 ``` -Process Metrics ---------------- + -Process metrics are provided by the [ProcessMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.html) class. The data is coming from the [OperatingSystemMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/OperatingSystemMXBean.html), the [RuntimeMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/RuntimeMXBean.html), and from the `/proc/self/status` file on Linux. The metrics with prefix `process_` are not specific to Java, but should be provided by every Prometheus client library, see [Process Metrics](https://prometheus.io/docs/instrumenting/writing_clientlibs/#process-metrics) in the Prometheus [writing client libraries](https://prometheus.io/docs/instrumenting/writing_clientlibs/#process-metrics) documentation. Example metrics: +## Process Metrics -``` +Process metrics are provided by +the [ProcessMetrics](/client_java/api/io/prometheus/metrics/instrumentation/jvm/ProcessMetrics.html) +class. The data is coming from +the [OperatingSystemMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/OperatingSystemMXBean.html), +the [RuntimeMXBean](https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/RuntimeMXBean.html), +and from the `/proc/self/status` file on Linux. The metrics with prefix `process_` are not specific +to Java, but should be provided by every Prometheus client library, +see [Process Metrics](https://prometheus.io/docs/instrumenting/writing_clientlibs/#process-metrics) +in the +Prometheus [writing client libraries](https://prometheus.io/docs/instrumenting/writing_clientlibs/#process-metrics) +documentation. Example metrics: + +```text # HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. # TYPE process_cpu_seconds_total counter process_cpu_seconds_total 1.63 diff --git a/docs/content/internals/model.md b/docs/content/internals/model.md index c1f1e7b6a..c54e79ee3 100644 --- a/docs/content/internals/model.md +++ b/docs/content/internals/model.md @@ -9,21 +9,36 @@ The illustration below shows the internal architecture of the Prometheus Java cl ## prometheus-metrics-core -This is the user facing metrics library, implementing the core metric types, like [Counter](/client_java/api/io/prometheus/metrics/core/metrics/Counter.html), [Gauge](/client_java/api/io/prometheus/metrics/core/metrics/Gauge.html) [Histogram](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.html), and so on. - -All metric types implement the [Collector](/client_java/api/io/prometheus/metrics/model/registry/Collector.html) interface, i.e. they provide a [collect()](/client_java/api/io/prometheus/metrics/model/registry/Collector.html#collect()) method to produce snapshots. +This is the user facing metrics library, implementing the core metric types, +like [Counter](/client_java/api/io/prometheus/metrics/core/metrics/Counter.html), +[Gauge](/client_java/api/io/prometheus/metrics/core/metrics/Gauge.html) +[Histogram](/client_java/api/io/prometheus/metrics/core/metrics/Histogram.html), +and so on. + +All metric types implement +the [Collector](/client_java/api/io/prometheus/metrics/model/registry/Collector.html) interface, +i.e. they provide +a [collect()]() +method to produce snapshots. ## prometheus-metrics-model -The model is an internal library, implementing read-only immutable snapshots. These snapshots are returned by the [Collector.collect()](/client_java/api/io/prometheus/metrics/model/registry/Collector.html#collect()) method. +The model is an internal library, implementing read-only immutable snapshots. These snapshots are +returned by +the [Collector.collect()]() +method. -There is no need for users to use `prometheus-metrics-model` directly. Users should use the API provided by `prometheus-metrics-core`, which includes the core metrics as well as callback metrics. +There is no need for users to use `prometheus-metrics-model` directly. Users should use the API +provided by `prometheus-metrics-core`, which includes the core metrics as well as callback metrics. -However, maintainers of 3rd party metrics libraries might want to use `prometheus-metrics-model` if they want to add Prometheus exposition formats to their metrics library. +However, maintainers of third-party metrics libraries might want to use `prometheus-metrics-model` +if they want to add Prometheus exposition formats to their metrics library. ## Exporters and exposition formats -The `prometheus-metrics-exposition-formats` module converts snapshots to Prometheus exposition formats, like text format, OpenMetrics text format, or Prometheus protobuf format. - -The exporters like `prometheus-metrics-exporter-httpserver` or `prometheus-metrics-exporter-servlet-jakarta` use this to convert snapshots into the right format depending on the `Accept` header in the scrape request. +The `prometheus-metrics-exposition-formats` module converts snapshots to Prometheus exposition +formats, like text format, OpenMetrics text format, or Prometheus protobuf format. +The exporters like `prometheus-metrics-exporter-httpserver` or +`prometheus-metrics-exporter-servlet-jakarta` use this to convert snapshots into the right format +depending on the `Accept` header in the scrape request. diff --git a/docs/content/migration/simpleclient.md b/docs/content/migration/simpleclient.md index 27606dbb6..6d0580571 100644 --- a/docs/content/migration/simpleclient.md +++ b/docs/content/migration/simpleclient.md @@ -3,34 +3,53 @@ title: Simpleclient weight: 1 --- -The Prometheus Java client library 1.0.0 is a complete rewrite of the underlying data model, and is not backwards compatible with releases 0.16.0 and older for a variety of reasons: - -* The old data model was based on [OpenMetrics](https://openmetrics.io). Native histograms don't fit with the OpenMetrics model because they don't follow the "every sample has exactly one double value" paradigm. It was a lot cleaner to implement a dedicated `prometheus-metrics-model` than trying to fit native histograms into the existing OpenMetrics-based model. -* Version 0.16.0 and older has multiple Maven modules sharing the same Java package name. This is not supported by the Java module system. To support users of Java modules, we renamed all packages and made sure no package is reused across multiple Maven modules. - -Migration using the Simpleclient Bridge ---------------------------------------- - -Good news: Users of version 0.16.0 and older do not need to refactor all their instrumentation code to get started with 1.0.0. - -We provide a migration module for bridging the old simpleclient `CollectorRegistry` to the new `PrometheusRegistry`. +The Prometheus Java client library 1.0.0 is a complete rewrite of the underlying data model, and is +not backward +compatible with releases 0.16.0 and older for a variety of reasons: + +- The old data model was based on [OpenMetrics](https://openmetrics.io). Native histograms don't fit + with the + OpenMetrics model because they don't follow the "every sample has exactly one double value" + paradigm. It was a lot + cleaner to implement a dedicated `prometheus-metrics-model` than trying to fit native histograms + into the existing + OpenMetrics-based model. +- Version 0.16.0 and older has multiple Maven modules sharing the same Java package name. This is + not supported by the + Java module system. To support users of Java modules, we renamed all packages and made sure no + package is reused + across multiple Maven modules. + +## Migration using the Simpleclient Bridge + +Good news: Users of version 0.16.0 and older do not need to refactor all their instrumentation code +to get started with +1.0.0. + +We provide a migration module for bridging the old simpleclient `CollectorRegistry` to the new +`PrometheusRegistry`. To use the bridge, add the following dependency: {{< tabs "uniqueid" >}} {{< tab "Gradle" >}} -``` + +```groovy implementation 'io.prometheus:prometheus-metrics-simpleclient-bridge:1.0.0' ``` + {{< /tab >}} {{< tab "Maven" >}} + ```xml + - io.prometheus - prometheus-metrics-simpleclient-bridge - 1.0.0 + io.prometheus + prometheus-metrics-simpleclient-bridge + 1.0.0 ``` + {{< /tab >}} {{< /tabs >}} @@ -40,7 +59,9 @@ Then add the following to your code: SimpleclientCollector.builder().register(); ``` -This will make all metrics registered with simpleclient's `CollectorRegistry.defaultRegistry` available in the new `PrometheusRegistry.defaultRegistry`. +This will make all metrics registered with simpleclient's `CollectorRegistry.defaultRegistry` +available in the new +`PrometheusRegistry.defaultRegistry`. If you are using custom registries, you can specify them like this: @@ -49,23 +70,27 @@ CollectorRegistry simpleclientRegistry = ...; PrometheusRegistry prometheusRegistry = ...; SimpleclientCollector.builder() - .collectorRegistry(simpleclientRegistry) - .register(prometheusRegistry); + .collectorRegistry(simpleclientRegistry) + .register(prometheusRegistry); ``` -Refactoring the Instrumentation Code ------------------------------------- +## Refactoring the Instrumentation Code -If you decide to get rid of the old 0.16.0 dependencies and use 1.0.0 only, you need to refactor your code: +If you decide to get rid of the old 0.16.0 dependencies and use 1.0.0 only, you need to refactor +your code: Dependencies: -* `simpleclient` -> `prometheus-metrics-core` -* `simpleclient_hotspot` -> `prometheus-metrics-instrumentation-jvm` -* `simpleclient_httpserver` -> `prometheus-metrics-exporter-httpserver` -* `simpleclient_servlet_jakarta` -> `prometheus-metrics-exporter-servlet-jakarta` +- `simpleclient` -> `prometheus-metrics-core` +- `simpleclient_hotspot` -> `prometheus-metrics-instrumentation-jvm` +- `simpleclient_httpserver` -> `prometheus-metrics-exporter-httpserver` +- `simpleclient_servlet_jakarta` -> `prometheus-metrics-exporter-servlet-jakarta` -As long as you are using high-level metric API like `Counter`, `Gauge`, `Histogram`, and `Summary` converting code to the new API is relatively straightforward. You will need to adapt the package name and apply some minor changes like using `builder()` instead of `build()` or using `labelValues()` instead of `labels()`. +As long as you are using high-level metric API like `Counter`, `Gauge`, `Histogram`, and `Summary` +converting code to +the new API is relatively straightforward. You will need to adapt the package name and apply some +minor changes like +using `builder()` instead of `build()` or using `labelValues()` instead of `labels()`. Example of the old 0.16.0 API: @@ -73,10 +98,10 @@ Example of the old 0.16.0 API: import io.prometheus.client.Counter; Counter counter = Counter.build() - .name("test") - .help("test counter") - .labelNames("path") - .register(); + .name("test") + .help("test counter") + .labelNames("path") + .register(); counter.labels("/hello-world").inc(); ``` @@ -87,20 +112,31 @@ Example of the new 1.0.0 API: import io.prometheus.metrics.core.metrics.Counter; Counter counter = Counter.builder() - .name("test") - .help("test counter") - .labelNames("path") - .register(); + .name("test") + .help("test counter") + .labelNames("path") + .register(); counter.labelValues("/hello-world").inc(); ``` -Reasons why we changed the API: Changing the package names was a necessity because the previous package names were incompatible with the Java module system. However, renaming packages requires changing code anyway, so we decided to clean up some things. For example, the name `builder()` for a builder method is very common in the Java ecosystem, it's used in Spring, Lombok, and so on. So naming the method `builder()` makes the Prometheus library more aligned with the broader Java ecosystem. +Reasons why we changed the API: Changing the package names was a necessity because the previous +package names were +incompatible with the Java module system. However, renaming packages requires changing code anyway, +so we decided to +clean up some things. For example, the name `builder()` for a builder method is very common in the +Java ecosystem, it's +used in Spring, Lombok, and so on. So naming the method `builder()` makes the Prometheus library +more aligned with the +broader Java ecosystem. -If you are using the low level `Collector` API directly, you should have a look at the new callback metric types, see [/getting-started/callbacks/](../../getting-started/callbacks/). Chances are good that the new callback metrics have an easier way to achieve what you need than the old 0.16.0 code. +If you are using the low level `Collector` API directly, you should have a look at the new callback +metric types, +see [/getting-started/callbacks/]({{< relref "../getting-started/callbacks.md" >}}). Chances are +good that the new callback metrics have +an easier way to achieve what you need than the old 0.16.0 code. -JVM Metrics ------------ +## JVM Metrics Version 0.16.0 provided the `simpleclient_hotspot` module for exposing built-in JVM metrics: @@ -108,25 +144,30 @@ Version 0.16.0 provided the `simpleclient_hotspot` module for exposing built-in DefaultExports.initialize(); ``` -With version 1.0.0 these metrics moved to the `prometheus-metrics-instrumentation-jvm` module and are initialized as follows: +With version 1.0.0 these metrics moved to the `prometheus-metrics-instrumentation-jvm` module and +are initialized as follows: ```java JvmMetrics.builder().register(); ``` -A full list of the available JVM metrics can be found on [/instrumentation/jvm](../../instrumentation/jvm/). - -Most JVM metric names remained the same, except for a few cases where the old 0.16.0 metric names were not compliant with the [OpenMetrics](https://openmetrics.io) specification. OpenMetrics requires the unit to be a suffix, so we renamed metrics where the unit was in the middle of the metric name and moved the unit to the end of the metric name. The following metric names changed: - -* `jvm_memory_bytes_committed` -> `jvm_memory_committed_bytes` -* `jvm_memory_bytes_init` -> `jvm_memory_init_bytes` -* `jvm_memory_bytes_max` -> `jvm_memory_max_bytes` -* `jvm_memory_pool_bytes_committed` -> `jvm_memory_pool_committed_bytes` -* `jvm_memory_pool_bytes_init` -> `jvm_memory_pool_init_bytes` -* `jvm_memory_pool_bytes_max` -> `jvm_memory_pool_max_bytes` -* `jvm_memory_pool_bytes_used` -> `jvm_memory_pool_used_bytes` -* `jvm_memory_pool_collection_bytes_committed` -> `jvm_memory_pool_collection_committed_bytes` -* `jvm_memory_pool_collection_bytes_init` -> `jvm_memory_pool_collection_init_bytes` -* `jvm_memory_pool_collection_bytes_max` -> `jvm_memory_pool_collection_max_bytes` -* `jvm_memory_pool_collection_bytes_used` -> `jvm_memory_pool_collection_used_bytes` -* `jvm_info` -> `jvm_runtime_info` +A full list of the available JVM metrics can be found +on [/instrumentation/jvm]({{< relref "../instrumentation/jvm.md" >}}). + +Most JVM metric names remained the same, except for a few cases where the old 0.16.0 metric names +were not compliant with the [OpenMetrics](https://openmetrics.io) specification. OpenMetrics +requires the unit to be a suffix, so we renamed metrics where the unit was in the middle of the +metric name and moved the unit to the end of the metric name. The following metric names changed: + +- `jvm_memory_bytes_committed` -> `jvm_memory_committed_bytes` +- `jvm_memory_bytes_init` -> `jvm_memory_init_bytes` +- `jvm_memory_bytes_max` -> `jvm_memory_max_bytes` +- `jvm_memory_pool_bytes_committed` -> `jvm_memory_pool_committed_bytes` +- `jvm_memory_pool_bytes_init` -> `jvm_memory_pool_init_bytes` +- `jvm_memory_pool_bytes_max` -> `jvm_memory_pool_max_bytes` +- `jvm_memory_pool_bytes_used` -> `jvm_memory_pool_used_bytes` +- `jvm_memory_pool_collection_bytes_committed` -> `jvm_memory_pool_collection_committed_bytes` +- `jvm_memory_pool_collection_bytes_init` -> `jvm_memory_pool_collection_init_bytes` +- `jvm_memory_pool_collection_bytes_max` -> `jvm_memory_pool_collection_max_bytes` +- `jvm_memory_pool_collection_bytes_used` -> `jvm_memory_pool_collection_used_bytes` +- `jvm_info` -> `jvm_runtime_info` diff --git a/docs/content/otel/names.md b/docs/content/otel/names.md index 3d25dd3d4..2945d70e9 100644 --- a/docs/content/otel/names.md +++ b/docs/content/otel/names.md @@ -3,26 +3,40 @@ title: Names weight: 3 --- -OpenTelemetry naming conventions are different from Prometheus naming conventions. The mapping from OpenTelemetry metric names to Prometheus metric names is well defined in OpenTelemetry's [Prometheus and OpenMetrics Compatibility](https://opentelemetry.io/docs/specs/otel/compatibility/prometheus_and_openmetrics/) spec, and the [OpenTelemetryExporter](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.html) implements that specification. +OpenTelemetry naming conventions are different from Prometheus naming conventions. The mapping from +OpenTelemetry metric names to Prometheus metric names is well defined in +OpenTelemetry's [Prometheus and OpenMetrics Compatibility](https://opentelemetry.io/docs/specs/otel/compatibility/prometheus_and_openmetrics/) +spec, and +the [OpenTelemetryExporter](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.html) +implements that specification. -The goal is, if you set up a pipeline as illustrated below, you will see the same metric names in the Prometheus server as if you had exposed Prometheus metrics directly. +The goal is, if you set up a pipeline as illustrated below, you will see the same metric names in +the Prometheus server as if you had exposed Prometheus metrics directly. -![Image of a with the Prometheus client library pushing metrics to an OpenTelemetry collector](/client_java/images/otel-pipeline.png) +![Image of a with the Prometheus client library pushing metrics to an OpenTelemetry collector](/client_java/images/otel-pipeline.png) The main steps when converting OpenTelemetry metric names to Prometheus metric names are: -* Replace dots with underscores. -* If the metric has a unit, append the unit to the metric name, like `_seconds`. -* If the metric type has a suffix, append it, like `_total` for counters. +- Replace dots with underscores. +- If the metric has a unit, append the unit to the metric name, like `_seconds`. +- If the metric type has a suffix, append it, like `_total` for counters. -Dots in Metric and Label Names ------------------------------- +## Dots in Metric and Label Names -OpenTelemetry defines not only a line protocol, but also _semantic conventions_, i.e. standardized metric and label names. For example, OpenTelemetry's [Semantic Conventions for HTTP Metrics](https://opentelemetry.io/docs/specs/otel/metrics/semantic_conventions/http-metrics/) say that if you instrument an HTTP server with OpenTelemetry, you must have a histogram named `http.server.duration`. +OpenTelemetry defines not only a line protocol, but also _semantic conventions_, i.e. standardized +metric and label names. For example, +OpenTelemetry's [Semantic Conventions for HTTP Metrics](https://opentelemetry.io/docs/specs/otel/metrics/semantic_conventions/http-metrics/) +say that if you instrument an HTTP server with OpenTelemetry, you must have a histogram named +`http.server.duration`. -Most names defined in semantic conventions use dots. In the Prometheus server, the dot is an illegal character (this might change in future versions of the Prometheus server). +Most names defined in semantic conventions use dots. In the Prometheus server, the dot is an illegal +character (this might change in future versions of the Prometheus server). -The Prometheus Java client library allows dots, so that you can use metric names and label names as defined in OpenTelemetry's semantic conventions. -The dots will automatically be replaced with underscores if you expose metrics in Prometheus format, but you will see the original names with dots if you push your metrics in OpenTelemetry format. +The Prometheus Java client library allows dots, so that you can use metric names and label names as +defined in OpenTelemetry's semantic conventions. +The dots will automatically be replaced with underscores if you expose metrics in Prometheus format, +but you will see the original names with dots if you push your metrics in OpenTelemetry format. -That way, you can use OTel-compliant metric and label names today when instrumenting your application with the Prometheus Java client, and you are prepared in case your monitoring backend adds features in the future that require OTel-compliant instrumentation. +That way, you can use OTel-compliant metric and label names today when instrumenting your +application with the Prometheus Java client, and you are prepared in case your monitoring backend +adds features in the future that require OTel-compliant instrumentation. diff --git a/docs/content/otel/otlp.md b/docs/content/otel/otlp.md index ea39f178f..2a6f8da9b 100644 --- a/docs/content/otel/otlp.md +++ b/docs/content/otel/otlp.md @@ -3,19 +3,23 @@ title: OTLP weight: 1 --- -The Prometheus Java client library allows you to push metrics to an OpenTelemetry endpoint using the OTLP protocol. +The Prometheus Java client library allows you to push metrics to an OpenTelemetry endpoint using the +OTLP protocol. -![Image of a with the Prometheus client library pushing metrics to an OpenTelemetry collector](/client_java/images/otel-pipeline.png) +![Image of a with the Prometheus client library pushing metrics to an OpenTelemetry collector](/client_java/images/otel-pipeline.png) To implement this, you need to include `prometheus-metrics-exporter` as a dependency {{< tabs "uniqueid" >}} {{< tab "Gradle" >}} -``` + +```groovy implementation 'io.prometheus:prometheus-metrics-exporter-opentelemetry:1.0.0' ``` + {{< /tab >}} {{< tab "Maven" >}} + ```xml io.prometheus @@ -23,6 +27,7 @@ implementation 'io.prometheus:prometheus-metrics-exporter-opentelemetry:1.0.0' 1.0.0 ``` + {{< /tab >}} {{< /tabs >}} @@ -34,8 +39,23 @@ OpenTelemetryExporter.builder() .buildAndStart(); ``` -By default, the `OpenTelemetryExporter` will push metrics every 60 seconds to `localhost:4317` using `grpc` protocol. You can configure this in code using the [OpenTelemetryExporter.Builder](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html), or at runtime via [`io.prometheus.exporter.opentelemetry.*`](../../config/config/#exporter-opentelemetry-properties) properties. - -In addition to the Prometheus Java client configuration, the exporter also recognizes standard OpenTelemetry configuration. For example, you can set the [OTEL_EXPORTER_OTLP_METRICS_ENDPOINT](https://opentelemetry.io/docs/concepts/sdk-configuration/otlp-exporter-configuration/#otel_exporter_otlp_metrics_endpoint) environment variable to configure the endpoint. The Javadoc for [OpenTelemetryExporter.Builder](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html) shows which settings have corresponding OTel configuration. The intended use case is that if you attach the [OpenTelemetry Java agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation/) for tracing, and use the Prometheus Java client for metrics, it is sufficient to configure the OTel agent because the Prometheus library will pick up the same configuration. - -The [examples/example-exporter-opentelemetry](https://github.com/prometheus/client_java/tree/main/examples/example-exporter-opentelemetry) folder has a docker compose with a complete end-to-end example, including a Java app, the OTel collector, and a Prometheus server. +By default, the `OpenTelemetryExporter` will push metrics every 60 seconds to `localhost:4317` using +`grpc` protocol. You can configure this in code using +the [OpenTelemetryExporter.Builder](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html), +or at runtime via [`io.prometheus.exporter.opentelemetry.*`]({{< relref "../config/config.md#exporter-opentelemetry-properties" >}}) +properties. + +In addition to the Prometheus Java client configuration, the exporter also recognizes standard +OpenTelemetry configuration. For example, you can set +the [OTEL_EXPORTER_OTLP_METRICS_ENDPOINT](https://opentelemetry.io/docs/concepts/sdk-configuration/otlp-exporter-configuration/#otel_exporter_otlp_metrics_endpoint) +environment variable to configure the endpoint. The Javadoc +for [OpenTelemetryExporter.Builder](/client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html) +shows which settings have corresponding OTel configuration. The intended use case is that if you +attach the +[OpenTelemetry Java agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation/) +for tracing, and use the Prometheus Java client for metrics, it is sufficient to configure the OTel +agent because the Prometheus library will pick up the same configuration. + +The [examples/example-exporter-opentelemetry](https://github.com/prometheus/client_java/tree/main/examples/example-exporter-opentelemetry) +folder has a docker compose with a complete end-to-end example, including a Java app, the OTel +collector, and a Prometheus server. diff --git a/docs/content/otel/tracing.md b/docs/content/otel/tracing.md index 406575a63..0e3fb72fa 100644 --- a/docs/content/otel/tracing.md +++ b/docs/content/otel/tracing.md @@ -3,9 +3,21 @@ title: Tracing weight: 2 --- -OpenTelemetry’s [vision statement](https://github.com/open-telemetry/community/blob/main/mission-vision-values.md) says that [telemetry should be loosely coupled](https://github.com/open-telemetry/community/blob/main/mission-vision-values.md#telemetry-should-be-loosely-coupled), allowing end users to pick and choose from the pieces they want without having to bring in the rest of the project, too. In that spirit, you might choose to instrument your Java application with the Prometheus Java client library for metrics, and attach the [OpenTelemetry Java agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation/) to get distributed tracing. +OpenTelemetry’s +[vision statement](https://github.com/open-telemetry/community/blob/main/mission-vision-values.md) +says that +[telemetry should be loosely coupled](https://github.com/open-telemetry/community/blob/main/mission-vision-values.md#telemetry-should-be-loosely-coupled), +allowing end users to pick and choose from the pieces they want without having to bring in the rest +of the project, too. In that spirit, you might choose to instrument your Java application with the +Prometheus Java client library for metrics, and attach the +[OpenTelemetry Java agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation/) +to get distributed tracing. -First, if you attach the [OpenTelemetry Java agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation/) you might want to turn off OTel's built-in metrics, because otherwise you get metrics from both the Prometheus Java client library and the OpenTelemetry agent (technically it's no problem to get both metrics, it's just not a common use case). +First, if you attach the +[OpenTelemetry Java agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation/) +you might want to turn off OTel's built-in metrics, because otherwise you get metrics from both the +Prometheus Java client library and the OpenTelemetry agent (technically it's no problem to get both +metrics, it's just not a common use case). ```bash # This will tell the OpenTelemetry agent not to send metrics, just traces and logs. @@ -18,19 +30,34 @@ Now, start your application with the OpenTelemetry Java agent attached for trace java -javaagent:path/to/opentelemetry-javaagent.jar -jar myapp.jar ``` -With the OpenTelemetry Java agent attached, the Prometheus client library will do a lot of magic under the hood. +With the OpenTelemetry Java agent attached, the Prometheus client library will do a lot of magic +under the hood. -* `service.name` and `service.instance.id` are used in OpenTelemetry to uniquely identify a service instance. The Prometheus client library will automatically use the same `service.name` and `service.instance.id` as the agent when pushing metrics in OpenTelemetry format. That way the monitoring backend will see that the metrics and the traces are coming from the same instance. -* Exemplars are added automatically if a Prometheus metric is updated in the context of a distributed OpenTelemetry trace. -* If a Span is used as an Exemplar, the Span is marked with the Span attribute `exemplar="true"`. This can be used in the OpenTelemetry's sampling policy to make sure Exemplars are always sampled. +- `service.name` and `service.instance.id` are used in OpenTelemetry to uniquely identify a service + instance. The Prometheus client library will automatically use the same `service.name` and + `service.instance.id` as the agent when pushing metrics in OpenTelemetry format. That way the + monitoring backend will see that the metrics and the traces are coming from the same instance. +- Exemplars are added automatically if a Prometheus metric is updated in the context of a + distributed OpenTelemetry trace. +- If a Span is used as an Exemplar, the Span is marked with the Span attribute `exemplar="true"`. + This can be used in the OpenTelemetry's sampling policy to make sure Exemplars are always sampled. -Here's more context on the `exemplar="true"` Span attribute: Many users of tracing libraries don't keep 100% of their trace data, because traces are very repetitive. It is very common to sample only 10% of traces and discard 90%. However, this can be an issue with Exemplars: In 90% of the cases Exemplars would point to a trace that has been thrown away. +Here's more context on the `exemplar="true"` Span attribute: Many users of tracing libraries don't +keep 100% of their trace data, because traces are very repetitive. It is very common to sample only +10% of traces and discard 90%. However, this can be an issue with Exemplars: In 90% of the cases +Exemplars would point to a trace that has been thrown away. -To solve this, the Prometheus Java client library annotates each Span that has been used as an Exemplar with the `exemplar="true"` Span attribute. +To solve this, the Prometheus Java client library annotates each Span that has been used as an +Exemplar with the `exemplar="true"` Span attribute. -The sampling policy in the OpenTelemetry collector can be configured to keep traces with this attribute. There's no risk that this results in a significant increase in trace data, because new Exemplars are only selected every [`minRetentionPeriodSeconds`](../../config/config/#exemplar-properties) seconds. +The sampling policy in the OpenTelemetry collector can be configured to keep traces with this +attribute. There's no risk that this results in a significant increase in trace data, because new +Exemplars are only selected every +[`minRetentionPeriodSeconds`]({{< relref "../config/config.md#exemplar-properties" >}}) seconds. -Here's an example of how to configure OpenTelemetry's [tail sampling processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/tailsamplingprocessor/) to sample all Spans marked with `exemplar="true"`, and then discard 90% of the traces: +Here's an example of how to configure OpenTelemetry's +[tail sampling processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/tailsamplingprocessor/) +to sample all Spans marked with `exemplar="true"`, and then discard 90% of the traces: ```yaml policies: @@ -38,14 +65,13 @@ policies: { name: keep-exemplars, type: string_attribute, - string_attribute: { key: "exemplar", values: [ "true" ] } - }, - { - name: keep-10-percent, - type: probabilistic, - probabilistic: { sampling_percentage: 10 } + string_attribute: { key: "exemplar", values: ["true"] }, }, + { name: keep-10-percent, type: probabilistic, probabilistic: { sampling_percentage: 10 } }, ] ``` -The [examples/example-exemplar-tail-sampling/](https://github.com/prometheus/client_java/tree/main/examples/example-exemplars-tail-sampling) directory has a complete end-to-end example, with a distributed Java application with two services, an OpenTelemetry collector, Prometheus, Tempo as a trace database, and Grafana dashboards. Use docker-compose as described in the example's README to run the example and explore the results. +The [examples/example-exemplar-tail-sampling/](https://github.com/prometheus/client_java/tree/main/examples/example-exemplars-tail-sampling) +directory has a complete end-to-end example, with a distributed Java application with two services, +an OpenTelemetry collector, Prometheus, Tempo as a trace database, and Grafana dashboards. Use +docker-compose as described in the example's readme to run the example and explore the results. diff --git a/docs/themes/hugo-geekdoc/data/assets.json b/docs/themes/hugo-geekdoc/data/assets.json index 9a34ed54d..81541fbbc 100644 --- a/docs/themes/hugo-geekdoc/data/assets.json +++ b/docs/themes/hugo-geekdoc/data/assets.json @@ -155,4 +155,4 @@ "src": "custom.css", "integrity": "sha512-1kALo+zc1L2u1rvyxPIew+ZDPWhnIA1Ei2rib3eHHbskQW+EMxfI9Ayyva4aV+YRrHvH0zFxvPSFIuZ3mfsbRA==" } -} \ No newline at end of file +} diff --git a/docs/themes/hugo-geekdoc/i18n/nl.yaml b/docs/themes/hugo-geekdoc/i18n/nl.yaml index 8e24d62a4..240bcea5a 100644 --- a/docs/themes/hugo-geekdoc/i18n/nl.yaml +++ b/docs/themes/hugo-geekdoc/i18n/nl.yaml @@ -36,7 +36,7 @@ posts_tagged_with: Alle berichten gemarkeerd met '{{ . }}' footer_build_with: > Gebouwd met Hugo en - + footer_legal_notice: Juridische mededeling footer_privacy_policy: Privacybeleid footer_content_license_prefix: > diff --git a/docs/themes/hugo-geekdoc/layouts/partials/language.html b/docs/themes/hugo-geekdoc/layouts/partials/language.html index fdcafd2b2..8ad972d07 100644 --- a/docs/themes/hugo-geekdoc/layouts/partials/language.html +++ b/docs/themes/hugo-geekdoc/layouts/partials/language.html @@ -1,4 +1,4 @@ -{{ if .Site.IsMultiLingual }} +{{ if .IsTranslated }}
* - * Returning {@code null} means checks are omitted (registration the metric always succeeds), and - * the collector is always scraped (the result is dropped after scraping if a name filter is + *

Returning {@code null} means checks are omitted (registration the metric always succeeds), + * and the collector is always scraped (the result is dropped after scraping if a name filter is * present and the metric name is excluded). * *

If your metric has a name that does not change at runtime it is a good idea to overwrite diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java index e4a224bdf..27ac3e10c 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/registry/MultiCollector.java @@ -62,9 +62,9 @@ default MetricSnapshots collect( * and all names are excluded. * * - * Returning an empty list means checks are omitted (registration metric always succeeds), and the - * collector is always scraped (if a name filter is present and all names are excluded the result - * is dropped). + *

Returning an empty list means checks are omitted (registration metric always succeeds), and + * the collector is always scraped (if a name filter is present and all names are excluded the + * result is dropped). * *

If your collector returns a constant list of metrics that have names that do not change at * runtime it is a good idea to overwrite this and return the names. diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java index 71de5d0b4..4f766fdad 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java @@ -27,7 +27,7 @@ public class PrometheusNaming { *

  • OpenTelemetry: {@code process_runtime_jvm_buffer_count} * * - * We do not treat {@code _count} and {@code _sum} as reserved suffixes here for compatibility + *

    We do not treat {@code _count} and {@code _sum} as reserved suffixes here for compatibility * with these libraries. However, there is a risk of name conflict if someone creates a gauge * named {@code my_data_count} and a histogram or summary named {@code my_data}, because the * histogram or summary will implicitly have a sample named {@code my_data_count}. @@ -47,9 +47,9 @@ public class PrometheusNaming { *

  • The name MUST NOT end with one of the {@link #RESERVED_METRIC_NAME_SUFFIXES}. * * - * If a metric has a {@link Unit}, the metric name SHOULD end with the unit as a suffix. Note that - * OpenMetrics requires metric names to have their unit as - * suffix, and we implement this in {@code prometheus-metrics-core}. However, {@code + *

    If a metric has a {@link Unit}, the metric name SHOULD end with the unit as a suffix. Note + * that OpenMetrics requires metric names to have their unit + * as suffix, and we implement this in {@code prometheus-metrics-core}. However, {@code * prometheus-metrics-model} does not enforce Unit suffixes. * *

    Example: If you create a Counter for a processing time with Unit {@link Unit#SECONDS diff --git a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java index 31a9524e7..6e652af13 100644 --- a/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java +++ b/prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/Unit.java @@ -9,8 +9,8 @@ * new Unit("myUnit"); * * - * Note that in Prometheus, units are largely based on SI base units (seconds, bytes, joules, grams, - * meters, ratio, volts, amperes, and Celsius). + *

    Note that in Prometheus, units are largely based on SI base units (seconds, bytes, joules, + * grams, meters, ratio, volts, amperes, and Celsius). */ public final class Unit { From 5b65034f0a095c3f9ed2294cfe98c7699fbfe0d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 7 Feb 2026 17:15:11 +0000 Subject: [PATCH 799/870] chore(deps): update ghcr.io/super-linter/super-linter docker tag to v8.5.0 (#1856) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/super-linter/super-linter](https://redirect.github.com/super-linter/super-linter) | minor | `v8.4.0` → `v8.5.0` | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes

    super-linter/super-linter (ghcr.io/super-linter/super-linter) ### [`v8.5.0`](https://redirect.github.com/super-linter/super-linter/compare/v8.4.0...v8.5.0) [Compare Source](https://redirect.github.com/super-linter/super-linter/compare/v8.4.0...v8.5.0)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index b75e5175f..037bc5ea3 100644 --- a/mise.toml +++ b/mise.toml @@ -7,7 +7,7 @@ protoc = "33.5" [env] # renovate: datasource=docker depName=ghcr.io/super-linter/super-linter -SUPER_LINTER_VERSION="v8.4.0@sha256:c5e3307932203ff9e1e8acfe7e92e894add6266605b5d7fb525fb371a59a26f4" +SUPER_LINTER_VERSION="v8.5.0@sha256:6831c0a801d353b510e4e468a3209a8a48bf0102e193d5c7e94e57667fdf64eb" [tasks.ci] description = "CI Build" From f70b2ebd1afdc8776866278aca8514dcf2483223 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 8 Feb 2026 05:13:29 +0000 Subject: [PATCH 800/870] chore(deps): update eclipse-temurin:25.0.2_10-jre docker digest to ad53b91 (#1857) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | eclipse-temurin | final | digest | `f47c82c` → `ad53b91` | | eclipse-temurin | | digest | `f47c82c` → `ad53b91` | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-custom-buckets/docker-compose.yaml | 2 +- .../example-exporter-opentelemetry/oats-tests/agent/Dockerfile | 2 +- .../example-exporter-opentelemetry/oats-tests/http/Dockerfile | 2 +- examples/example-native-histogram/docker-compose.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/example-custom-buckets/docker-compose.yaml b/examples/example-custom-buckets/docker-compose.yaml index 63ff76f6b..a6f569ce7 100644 --- a/examples/example-custom-buckets/docker-compose.yaml +++ b/examples/example-custom-buckets/docker-compose.yaml @@ -1,7 +1,7 @@ version: "3" services: example-application: - image: eclipse-temurin:25.0.2_10-jre@sha256:f47c82ca0abea08c1c92affd40d2e07976fae85836050e9e4a5702055d5c0e3f + image: eclipse-temurin:25.0.2_10-jre@sha256:ad53b918fedaefd44135a226c5ecaa4828a3d72db2f6d520da96a62979a63ac6 network_mode: host volumes: - ./target/example-custom-buckets.jar:/example-custom-buckets.jar diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile b/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile index 49f971ee6..faaeb5bb4 100644 --- a/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:25.0.2_10-jre@sha256:f47c82ca0abea08c1c92affd40d2e07976fae85836050e9e4a5702055d5c0e3f +FROM eclipse-temurin:25.0.2_10-jre@sha256:ad53b918fedaefd44135a226c5ecaa4828a3d72db2f6d520da96a62979a63ac6 COPY target/example-exporter-opentelemetry.jar ./app.jar # check that the resource attributes from the agent are used, epsecially the service.instance.id should be the same diff --git a/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile b/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile index e2c173239..e89edd29c 100644 --- a/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile +++ b/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:25.0.2_10-jre@sha256:f47c82ca0abea08c1c92affd40d2e07976fae85836050e9e4a5702055d5c0e3f +FROM eclipse-temurin:25.0.2_10-jre@sha256:ad53b918fedaefd44135a226c5ecaa4828a3d72db2f6d520da96a62979a63ac6 COPY target/example-exporter-opentelemetry.jar ./app.jar diff --git a/examples/example-native-histogram/docker-compose.yaml b/examples/example-native-histogram/docker-compose.yaml index e399212a7..337db6acc 100644 --- a/examples/example-native-histogram/docker-compose.yaml +++ b/examples/example-native-histogram/docker-compose.yaml @@ -1,7 +1,7 @@ version: "3" services: example-application: - image: eclipse-temurin:25.0.2_10-jre@sha256:f47c82ca0abea08c1c92affd40d2e07976fae85836050e9e4a5702055d5c0e3f + image: eclipse-temurin:25.0.2_10-jre@sha256:ad53b918fedaefd44135a226c5ecaa4828a3d72db2f6d520da96a62979a63ac6 network_mode: host volumes: - ./target/example-native-histogram.jar:/example-native-histogram.jar From db7bc714db240b9e973a8cbd6c31fa0dcd1b9aab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 8 Feb 2026 20:54:17 +0000 Subject: [PATCH 801/870] chore(deps): update module go:github.com/gohugoio/hugo to v0.155.3 (#1858) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [go:github.com/gohugoio/hugo](https://redirect.github.com/gohugoio/hugo) | `v0.155.2` → `v0.155.3` | ![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgohugoio%2fhugo/v0.155.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgohugoio%2fhugo/v0.155.2/v0.155.3?slim=true) | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes
    gohugoio/hugo (go:github.com/gohugoio/hugo) ### [`v0.155.3`](https://redirect.github.com/gohugoio/hugo/releases/tag/v0.155.3) [Compare Source](https://redirect.github.com/gohugoio/hugo/compare/v0.155.2...v0.155.3) ##### What's Changed - hugolib: Don't render default site redirect for non-primary isHTML output formats [`6ac7d08`](https://redirect.github.com/gohugoio/hugo/commit/6ac7d081) [@​bep](https://redirect.github.com/bep) [#​14482](https://redirect.github.com/gohugoio/hugo/issues/14482) - server: Fix stuck server global error logging [`24eb84f`](https://redirect.github.com/gohugoio/hugo/commit/24eb84f8) [@​bep](https://redirect.github.com/bep) [#​14469](https://redirect.github.com/gohugoio/hugo/issues/14469) - build(deps): bump github.com/evanw/esbuild from 0.27.2 to 0.27.3 [`95a3678`](https://redirect.github.com/gohugoio/hugo/commit/95a36782) [@​dependabot](https://redirect.github.com/dependabot)\[bot] - server: Fix panic when the server browser error handler tried to use a config in a state of flux [`9045797`](https://redirect.github.com/gohugoio/hugo/commit/9045797d) [@​bep](https://redirect.github.com/bep) [#​14470](https://redirect.github.com/gohugoio/hugo/issues/14470)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index 037bc5ea3..8ea1d673e 100644 --- a/mise.toml +++ b/mise.toml @@ -1,5 +1,5 @@ [tools] -"go:github.com/gohugoio/hugo" = "v0.155.2" +"go:github.com/gohugoio/hugo" = "v0.155.3" "go:github.com/grafana/oats" = "0.6.0" java = "temurin-25.0.2+10.0.LTS" lychee = "0.22.0" From 4129f408ec471e5e531e37c8fb6048ef2f9134af Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Feb 2026 02:23:38 +0000 Subject: [PATCH 802/870] chore(deps): update dependency org.apache.maven.plugins:maven-dependency-plugin to v3.10.0 (#1859) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.apache.maven.plugins:maven-dependency-plugin](https://maven.apache.org/plugins/) ([source](https://redirect.github.com/apache/maven-dependency-plugin)) | `3.9.0` → `3.10.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.apache.maven.plugins:maven-dependency-plugin/3.10.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.apache.maven.plugins:maven-dependency-plugin/3.9.0/3.10.0?slim=true) | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 82aa11862..6f9de1657 100644 --- a/pom.xml +++ b/pom.xml @@ -180,7 +180,7 @@ maven-dependency-plugin - 3.9.0 + 3.10.0 maven-javadoc-plugin From 8adc88fb6faca1cf1043c63096e6464fefb1aa98 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 9 Feb 2026 18:44:06 +0100 Subject: [PATCH 803/870] fix(renovate): enable updates for opentelemetry-instrumentation-bom-alpha (#1860) The opentelemetry-instrumentation-bom-alpha dependency was not being updated by Renovate despite newer versions being available (currently on 2.16.0-alpha, but 2.24.0-alpha is available). Root cause: Renovate was detecting the dependency but not creating PRs due to the default ignoreUnstable behavior in the recommended preset. Since this package only publishes alpha versions, we need to explicitly allow unstable version updates. Solution: Added a packageRule with ignoreUnstable: false for this specific package to ensure Renovate will create PRs for newer alpha versions. --------- Signed-off-by: Gregor Zeitlinger --- .github/renovate.json5 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index bcf6643d1..8ded8e186 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -23,6 +23,10 @@ groupName: "java graalvm", additionalBranchPrefix: "graalvm-", }, + { + matchPackageNames: ["io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha"], + ignoreUnstable: false, + }, ], customManagers: [ { From 04bc727fcb2b9ba4da8eb7268c562f5385f5eda4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Feb 2026 17:53:18 +0000 Subject: [PATCH 804/870] fix(deps): update dependency io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha to v2.24.0-alpha (#1863) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://redirect.github.com/open-telemetry/opentelemetry-java-instrumentation) | `2.16.0-alpha` → `2.24.0-alpha` | ![age](https://developer.mend.io/api/mc/badges/age/maven/io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha/2.24.0-alpha?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha/2.16.0-alpha/2.24.0-alpha?slim=true) | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6f9de1657..30ebd46bc 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ 4.33.5 33.5.0-jre 6.0.2 - 2.16.0-alpha + 2.24.0-alpha 8 25 0.70 From e7996b157fe2b4e67746874337893dd5a77e319d Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 10 Feb 2026 07:35:50 +0100 Subject: [PATCH 805/870] ignore internal poms (#1862) Signed-off-by: Gregor Zeitlinger --- .github/renovate.json5 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 8ded8e186..f3bad3c6f 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -27,6 +27,11 @@ matchPackageNames: ["io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha"], ignoreUnstable: false, }, + { + enabled: false, + description: "Ignore internal project modules", + matchPackageNames: ["/^io\\.prometheus:(examples|example-.+|integration-tests|it-.+)$/"], + }, ], customManagers: [ { From 93b352ff420ca367b69f81b8b2a2a588e6bbb836 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 10:09:15 +0000 Subject: [PATCH 806/870] chore(deps): update grafana/k6 docker digest to 1d0ddce (#1864) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | grafana/k6 | digest | `a7c79af` → `1d0ddce` | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index be1257799..c45e029ac 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -68,7 +68,7 @@ services: - ./config/grafana-dashboards.yaml:/etc/grafana/provisioning/dashboards/grafana-dashboards.yaml - ./config/grafana-example-dashboard.json:/etc/grafana/example-dashboard.json k6: - image: grafana/k6@sha256:a7c79af2b374c9a3afa8b0fae9ec2899277d066612029b7b0fcd2fcb724ba86f + image: grafana/k6@sha256:1d0ddceb1550725105e39d246a383a247b8607372ed63d2046cf9d6976487a85 network_mode: host volumes: - ./config/k6-script.js:/k6-script.js From e93cc0fe1e3887124cf774acb78f5729ab7455a3 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Tue, 10 Feb 2026 11:05:27 -0500 Subject: [PATCH 807/870] Remove help text validation (#1866) Resolves #1712 Signed-off-by: Jay DeLuca --- .../prometheus/metrics/expositionformats/TextFormatUtil.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java index 2891d544c..5f5f05e8b 100644 --- a/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java +++ b/prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java @@ -241,11 +241,6 @@ private static MetricSnapshot mergeSnapshots(List snapshots) { first.getMetadata().getPrometheusName(), snapshot.getMetadata().getPrometheusName())) { throw new IllegalArgumentException("Cannot merge snapshots: inconsistent metric name"); } - if (!Objects.equals(first.getMetadata().getHelp(), snapshot.getMetadata().getHelp())) { - throw new IllegalArgumentException( - "Cannot merge snapshots: conflicting help for metric " - + first.getMetadata().getPrometheusName()); - } if (!Objects.equals(first.getMetadata().getUnit(), snapshot.getMetadata().getUnit())) { throw new IllegalArgumentException( "Cannot merge snapshots: conflicting unit for metric " From 09bbeee1225edb7d7e4acb6c4525c9c53fb2e613 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 02:00:59 +0000 Subject: [PATCH 808/870] chore(deps): update eclipse-temurin:25.0.2_10-jre docker digest to 43a7b50 (#1867) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | eclipse-temurin | final | digest | `ad53b91` → `43a7b50` | | eclipse-temurin | | digest | `ad53b91` → `43a7b50` | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-custom-buckets/docker-compose.yaml | 2 +- .../example-exporter-opentelemetry/oats-tests/agent/Dockerfile | 2 +- .../example-exporter-opentelemetry/oats-tests/http/Dockerfile | 2 +- examples/example-native-histogram/docker-compose.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/example-custom-buckets/docker-compose.yaml b/examples/example-custom-buckets/docker-compose.yaml index a6f569ce7..d4c08a614 100644 --- a/examples/example-custom-buckets/docker-compose.yaml +++ b/examples/example-custom-buckets/docker-compose.yaml @@ -1,7 +1,7 @@ version: "3" services: example-application: - image: eclipse-temurin:25.0.2_10-jre@sha256:ad53b918fedaefd44135a226c5ecaa4828a3d72db2f6d520da96a62979a63ac6 + image: eclipse-temurin:25.0.2_10-jre@sha256:43a7b50abf8679d77d6d41d52072402a18312a47b4390864046b393e2570137b network_mode: host volumes: - ./target/example-custom-buckets.jar:/example-custom-buckets.jar diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile b/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile index faaeb5bb4..cc1158e12 100644 --- a/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:25.0.2_10-jre@sha256:ad53b918fedaefd44135a226c5ecaa4828a3d72db2f6d520da96a62979a63ac6 +FROM eclipse-temurin:25.0.2_10-jre@sha256:43a7b50abf8679d77d6d41d52072402a18312a47b4390864046b393e2570137b COPY target/example-exporter-opentelemetry.jar ./app.jar # check that the resource attributes from the agent are used, epsecially the service.instance.id should be the same diff --git a/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile b/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile index e89edd29c..0c7d64e55 100644 --- a/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile +++ b/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:25.0.2_10-jre@sha256:ad53b918fedaefd44135a226c5ecaa4828a3d72db2f6d520da96a62979a63ac6 +FROM eclipse-temurin:25.0.2_10-jre@sha256:43a7b50abf8679d77d6d41d52072402a18312a47b4390864046b393e2570137b COPY target/example-exporter-opentelemetry.jar ./app.jar diff --git a/examples/example-native-histogram/docker-compose.yaml b/examples/example-native-histogram/docker-compose.yaml index 337db6acc..8dd081023 100644 --- a/examples/example-native-histogram/docker-compose.yaml +++ b/examples/example-native-histogram/docker-compose.yaml @@ -1,7 +1,7 @@ version: "3" services: example-application: - image: eclipse-temurin:25.0.2_10-jre@sha256:ad53b918fedaefd44135a226c5ecaa4828a3d72db2f6d520da96a62979a63ac6 + image: eclipse-temurin:25.0.2_10-jre@sha256:43a7b50abf8679d77d6d41d52072402a18312a47b4390864046b393e2570137b network_mode: host volumes: - ./target/example-native-histogram.jar:/example-native-histogram.jar From 64c521b9f8b60c3346a482f33304eb97f5726e6b Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 12 Feb 2026 08:17:21 +0100 Subject: [PATCH 809/870] Add docs and example for OTel JVM runtime metrics (#1861) Alternative for https://github.com/prometheus/client_java/pull/1854 ## Summary - Add documentation for using OpenTelemetry's runtime-telemetry module as an alternative to prometheus-metrics-instrumentation-jvm for JVM metrics following OTel semantic conventions - Add a runnable example project (examples/example-otel-jvm-runtime-metrics) demonstrating combined Prometheus + OTel runtime metrics on a single /metrics endpoint - Document RuntimeMetricsBuilder configuration options (captureGcCause(), emitExperimentalTelemetry()) - Cover standalone setup, combined setup with PrometheusMetricReader, Java 17 JFR support, and OTel-to-Prometheus metric name mapping ## Test plan - mise run build passes - mise run lint:super-linter passes - Manual: java -jar examples/example-otel-jvm-runtime-metrics/target/example-otel-jvm-runtime-metrics.jar then curl localhost:9400/metrics shows both uptime_seconds_total and jvm_* metrics --------- Signed-off-by: Gregor Zeitlinger --- .github/workflows/lint-rest.yml | 18 +- docs/content/instrumentation/jvm.md | 10 + docs/content/otel/jvm-runtime-metrics.md | 238 ++++++++++++++++++ .../README.md | 41 +++ .../example-otel-jvm-runtime-metrics/pom.xml | 82 ++++++ .../examples/otelruntimemetrics/Main.java | 76 ++++++ examples/pom.xml | 1 + 7 files changed, 459 insertions(+), 7 deletions(-) create mode 100644 docs/content/otel/jvm-runtime-metrics.md create mode 100644 examples/example-otel-jvm-runtime-metrics/README.md create mode 100644 examples/example-otel-jvm-runtime-metrics/pom.xml create mode 100644 examples/example-otel-jvm-runtime-metrics/src/main/java/io/prometheus/metrics/examples/otelruntimemetrics/Main.java diff --git a/.github/workflows/lint-rest.yml b/.github/workflows/lint-rest.yml index 89acf1dad..b30c81443 100644 --- a/.github/workflows/lint-rest.yml +++ b/.github/workflows/lint-rest.yml @@ -3,15 +3,13 @@ name: Lint What Super Linter Can't on: pull_request: - push: - branches: - - main -permissions: - contents: read +permissions: {} jobs: lint: + permissions: + contents: read runs-on: ubuntu-24.04 steps: - name: Check out @@ -21,10 +19,16 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + - name: Remap main branch URLs to PR branch for link checking + env: + GITHUB_HEAD_REF: ${{ github.head_ref }} + PR_HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }} + run: | + sed -i "/^remap = \[$/a\ \"https://github.com/prometheus/client_java/blob/main/(.*) https://github.com/${PR_HEAD_REPO}/blob/${GITHUB_HEAD_REF}/\$1\"," .github/config/lychee.toml + sed -i "/^remap = \[$/a\ \"https://github.com/prometheus/client_java/tree/main/(.*) https://github.com/${PR_HEAD_REPO}/tree/${GITHUB_HEAD_REF}/\$1\"," .github/config/lychee.toml + - name: Lint for pull requests - if: github.event_name == 'pull_request' env: GITHUB_TOKEN: ${{ github.token }} - GITHUB_BASE_REF: ${{ github.base_ref }} GITHUB_HEAD_SHA: ${{ github.event.pull_request.head.sha }} run: mise run lint:rest-ci diff --git a/docs/content/instrumentation/jvm.md b/docs/content/instrumentation/jvm.md index 804c1b09b..a9a15341f 100644 --- a/docs/content/instrumentation/jvm.md +++ b/docs/content/instrumentation/jvm.md @@ -3,6 +3,16 @@ title: JVM weight: 1 --- +{{< hint type=note >}} + +Looking for JVM metrics that follow OTel semantic +conventions? See +[OTel JVM Runtime Metrics]({{< relref "../otel/jvm-runtime-metrics.md" >}}) +for an alternative based on OpenTelemetry's +runtime-telemetry module. + +{{< /hint >}} + The JVM instrumentation module provides a variety of out-of-the-box JVM and process metrics. To use it, add the following dependency: diff --git a/docs/content/otel/jvm-runtime-metrics.md b/docs/content/otel/jvm-runtime-metrics.md new file mode 100644 index 000000000..9015f7772 --- /dev/null +++ b/docs/content/otel/jvm-runtime-metrics.md @@ -0,0 +1,238 @@ +--- +title: JVM Runtime Metrics +weight: 4 +--- + +OpenTelemetry's +[runtime-telemetry](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/runtime-telemetry) +module is an alternative to +[prometheus-metrics-instrumentation-jvm]({{< relref "../instrumentation/jvm.md" >}}) +for users who want JVM metrics following OTel semantic conventions. + +Key advantages: + +- Metric names follow + [OTel semantic conventions](https://opentelemetry.io/docs/specs/semconv/runtime/jvm-metrics/) +- Java 17+ JFR support (context switches, network I/O, + lock contention, memory allocation) +- Alignment with the broader OTel ecosystem + +Since OpenTelemetry's `opentelemetry-exporter-prometheus` +already depends on this library's `PrometheusRegistry`, +no additional code is needed in this library — only the +OTel SDK wiring shown below. + +## Dependencies + +{{< tabs "jvm-runtime-deps" >}} +{{< tab "Gradle" >}} + +```groovy +implementation 'io.opentelemetry:opentelemetry-sdk' +implementation 'io.opentelemetry:opentelemetry-exporter-prometheus' + +// Pick ONE of the following: +// Java 8+: +implementation 'io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java8' +// Java 17+ (adds JFR-based metrics): +// implementation 'io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java17' +``` + +{{< /tab >}} +{{< tab "Maven" >}} + +```xml + + io.opentelemetry + opentelemetry-sdk + + + io.opentelemetry + opentelemetry-exporter-prometheus + + + + + + io.opentelemetry.instrumentation + opentelemetry-runtime-telemetry-java8 + + + +``` + +{{< /tab >}} +{{< /tabs >}} + +## Standalone Setup + +If you **only** want OTel runtime metrics exposed as +Prometheus, without any Prometheus Java client metrics: + +```java +import io.opentelemetry.exporter.prometheus.PrometheusHttpServer; +import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetrics; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.metrics.SdkMeterProvider; + +PrometheusHttpServer prometheusServer = + PrometheusHttpServer.builder() + .setPort(9464) + .build(); + +OpenTelemetrySdk openTelemetry = + OpenTelemetrySdk.builder() + .setMeterProvider( + SdkMeterProvider.builder() + .registerMetricReader(prometheusServer) + .build()) + .build(); + +RuntimeMetrics runtimeMetrics = + RuntimeMetrics.builder(openTelemetry).build(); + +// Close on shutdown to stop metric collection and server +Runtime.getRuntime().addShutdownHook(new Thread(() -> { + runtimeMetrics.close(); + prometheusServer.close(); +})); + +// Scrape at http://localhost:9464/metrics +``` + +## Combined with Prometheus Java Client Metrics + +If you already have Prometheus Java client metrics and want to +add OTel runtime metrics to the **same** `/metrics` +endpoint, use `PrometheusMetricReader` to bridge OTel +metrics into a `PrometheusRegistry`: + +```java +import io.prometheus.metrics.core.metrics.Counter; +import io.prometheus.metrics.exporter.httpserver.HTTPServer; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.opentelemetry.exporter.prometheus.PrometheusMetricReader; +import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetrics; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.metrics.SdkMeterProvider; + +PrometheusRegistry registry = + new PrometheusRegistry(); + +// Register Prometheus metrics as usual +Counter myCounter = Counter.builder() + .name("my_requests_total") + .register(registry); + +// Bridge OTel metrics into the same registry +PrometheusMetricReader reader = + PrometheusMetricReader.create(); +registry.register(reader); + +OpenTelemetrySdk openTelemetry = + OpenTelemetrySdk.builder() + .setMeterProvider( + SdkMeterProvider.builder() + .registerMetricReader(reader) + .build()) + .build(); + +RuntimeMetrics runtimeMetrics = + RuntimeMetrics.builder(openTelemetry).build(); +Runtime.getRuntime() + .addShutdownHook(new Thread(runtimeMetrics::close)); + +// Expose everything on one endpoint +HTTPServer.builder() + .port(9400) + .registry(registry) + .buildAndStart(); +``` + +The [examples/example-otel-jvm-runtime-metrics](https://github.com/prometheus/client_java/tree/main/examples/example-otel-jvm-runtime-metrics) +directory has a complete runnable example. + +## Configuration + +The `RuntimeMetricsBuilder` supports two configuration +options: + +### `captureGcCause()` + +Adds a `jvm.gc.cause` attribute to the `jvm.gc.duration` +metric, indicating why the garbage collection occurred +(e.g. `G1 Evacuation Pause`, `System.gc()`): + +```java +RuntimeMetrics.builder(openTelemetry) + .captureGcCause() + .build(); +``` + +### `emitExperimentalTelemetry()` + +Enables additional experimental metrics beyond the stable +set. These are not yet part of the OTel semantic conventions +and may change in future releases: + +- Buffer pool metrics (direct and mapped byte buffers) +- Extended CPU metrics +- Extended memory pool metrics +- File descriptor metrics + +```java +RuntimeMetrics.builder(openTelemetry) + .emitExperimentalTelemetry() + .build(); +``` + +Both options can be combined: + +```java +RuntimeMetrics.builder(openTelemetry) + .captureGcCause() + .emitExperimentalTelemetry() + .build(); +``` + +Selective per-metric registration is not supported by the +runtime-telemetry API — it is all-or-nothing with these +two toggles. + +## Java 17 JFR Support + +The `opentelemetry-runtime-telemetry-java17` variant adds +JFR-based metrics. You can selectively enable features: + +```java +import io.opentelemetry.instrumentation.runtimemetrics.java17.JfrFeature; +import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetrics; + +RuntimeMetrics.builder(openTelemetry) + .enableFeature(JfrFeature.BUFFER_METRICS) + .enableFeature(JfrFeature.NETWORK_IO_METRICS) + .enableFeature(JfrFeature.LOCK_METRICS) + .enableFeature(JfrFeature.CONTEXT_SWITCH_METRICS) + .build(); +``` + +## Metric Names + +OTel metric names are converted to Prometheus format by +the exporter. Examples: + +| OTel name | Prometheus name | +| ---------------------------- | ---------------------------------- | +| `jvm.memory.used` | `jvm_memory_used_bytes` | +| `jvm.gc.duration` | `jvm_gc_duration_seconds` | +| `jvm.thread.count` | `jvm_thread_count` | +| `jvm.class.loaded` | `jvm_class_loaded` | +| `jvm.cpu.recent_utilization` | `jvm_cpu_recent_utilization_ratio` | + +See [Names]({{< relref "names.md" >}}) for full details on +how OTel names map to Prometheus names. diff --git a/examples/example-otel-jvm-runtime-metrics/README.md b/examples/example-otel-jvm-runtime-metrics/README.md new file mode 100644 index 000000000..a58584694 --- /dev/null +++ b/examples/example-otel-jvm-runtime-metrics/README.md @@ -0,0 +1,41 @@ +# OTel JVM Runtime Metrics with Prometheus HTTPServer + +## Build + +This example is built as part of the `client_java` project. + +```shell +./mvnw package +``` + +## Run + +The build creates a JAR file with the example application in +`./examples/example-otel-jvm-runtime-metrics/target/`. + +```shell +java -jar ./examples/example-otel-jvm-runtime-metrics/target/example-otel-jvm-runtime-metrics.jar +``` + +## Manually Testing the Metrics Endpoint + +Accessing +[http://localhost:9400/metrics](http://localhost:9400/metrics) +with a Web browser should yield both a Prometheus counter metric +and OTel JVM runtime metrics on the same endpoint. + +Prometheus counter: + +```text +# HELP uptime_seconds_total total number of seconds since this application was started +# TYPE uptime_seconds_total counter +uptime_seconds_total 42.0 +``` + +OTel JVM runtime metrics (excerpt): + +```text +# HELP jvm_memory_used_bytes Measure of memory used. +# TYPE jvm_memory_used_bytes gauge +jvm_memory_used_bytes{jvm_memory_pool_name="G1 Eden Space",jvm_memory_type="heap"} 4194304.0 +``` diff --git a/examples/example-otel-jvm-runtime-metrics/pom.xml b/examples/example-otel-jvm-runtime-metrics/pom.xml new file mode 100644 index 000000000..276a58f2f --- /dev/null +++ b/examples/example-otel-jvm-runtime-metrics/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + + io.prometheus + examples + 1.5.0-SNAPSHOT + + + example-otel-jvm-runtime-metrics + + Example - OTel JVM Runtime Metrics + + Example of combining Prometheus metrics with OpenTelemetry JVM runtime metrics on one endpoint + + + + + + io.opentelemetry.instrumentation + opentelemetry-instrumentation-bom-alpha + ${otel.instrumentation.version} + pom + import + + + + + + + io.prometheus + prometheus-metrics-core + ${project.version} + + + io.prometheus + prometheus-metrics-exporter-httpserver + ${project.version} + + + io.opentelemetry + opentelemetry-sdk + + + io.opentelemetry + opentelemetry-exporter-prometheus + + + io.opentelemetry.instrumentation + opentelemetry-runtime-telemetry-java8 + + + + + ${project.artifactId} + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + + + io.prometheus.metrics.examples.otelruntimemetrics.Main + + + + + + + + + diff --git a/examples/example-otel-jvm-runtime-metrics/src/main/java/io/prometheus/metrics/examples/otelruntimemetrics/Main.java b/examples/example-otel-jvm-runtime-metrics/src/main/java/io/prometheus/metrics/examples/otelruntimemetrics/Main.java new file mode 100644 index 000000000..49a608651 --- /dev/null +++ b/examples/example-otel-jvm-runtime-metrics/src/main/java/io/prometheus/metrics/examples/otelruntimemetrics/Main.java @@ -0,0 +1,76 @@ +package io.prometheus.metrics.examples.otelruntimemetrics; + +import io.opentelemetry.exporter.prometheus.PrometheusMetricReader; +import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetrics; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.metrics.SdkMeterProvider; +import io.prometheus.metrics.core.metrics.Counter; +import io.prometheus.metrics.exporter.httpserver.HTTPServer; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.prometheus.metrics.model.snapshots.Unit; +import java.io.IOException; + +/** + * Example combining Prometheus metrics with OpenTelemetry JVM runtime metrics on a single endpoint. + * + *

    This demonstrates: + * + *

      + *
    • Registering a Prometheus counter metric + *
    • Bridging OTel runtime metrics into the same PrometheusRegistry + *
    • Exposing everything via the built-in HTTPServer on /metrics + *
    + */ +public class Main { + + public static void main(String[] args) throws IOException, InterruptedException { + + PrometheusRegistry registry = new PrometheusRegistry(); + + // 1. Register a Prometheus counter metric + Counter counter = + Counter.builder() + .name("uptime_seconds_total") + .help("total number of seconds since this application was started") + .unit(Unit.SECONDS) + .register(registry); + + // 2. Create a PrometheusMetricReader and register it with the same registry. + // This bridges OTel metrics into the Prometheus registry. + PrometheusMetricReader reader = PrometheusMetricReader.create(); + registry.register(reader); + + // 3. Build the OTel SDK with the reader. + OpenTelemetrySdk openTelemetry = + OpenTelemetrySdk.builder() + .setMeterProvider(SdkMeterProvider.builder().registerMetricReader(reader).build()) + .build(); + + // 4. Start OTel JVM runtime metrics collection. + // - captureGcCause() adds a jvm.gc.cause attribute to jvm.gc.duration + // - emitExperimentalTelemetry() enables buffer pools, extended CPU, + // extended memory pools, and file descriptor metrics + RuntimeMetrics runtimeMetrics = + RuntimeMetrics.builder(openTelemetry).captureGcCause().emitExperimentalTelemetry().build(); + + // 5. Expose both Prometheus and OTel metrics on a single endpoint. + HTTPServer server = HTTPServer.builder().port(9400).registry(registry).buildAndStart(); + + // 6. Close RuntimeMetrics and server on shutdown to stop JMX metric collection. + Runtime.getRuntime() + .addShutdownHook( + new Thread( + () -> { + runtimeMetrics.close(); + server.close(); + })); + + System.out.println( + "HTTPServer listening on port http://localhost:" + server.getPort() + "/metrics"); + + while (true) { + Thread.sleep(1000); + counter.inc(); + } + } +} diff --git a/examples/pom.xml b/examples/pom.xml index d0c364067..1b0059655 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -32,6 +32,7 @@ example-native-histogram example-custom-buckets example-prometheus-properties + example-otel-jvm-runtime-metrics From dd26eac74d370564c954fec9d5116ad36c177c11 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Feb 2026 18:58:59 +0000 Subject: [PATCH 810/870] chore(deps): update module go:github.com/grafana/oats to v0.6.1 (#1869) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [go:github.com/grafana/oats](https://redirect.github.com/grafana/oats) | `0.6.0` → `0.6.1` | ![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgrafana%2foats/v0.6.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgrafana%2foats/v0.6.0/v0.6.1?slim=true) | --- ### Release Notes
    grafana/oats (go:github.com/grafana/oats) ### [`v0.6.1`](https://redirect.github.com/grafana/oats/releases/tag/v0.6.1) [Compare Source](https://redirect.github.com/grafana/oats/compare/v0.6.0...v0.6.1) #### What's Changed - add warning by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​197](https://redirect.github.com/grafana/oats/pull/197) - Update CODEOWNERS by [@​martincostello](https://redirect.github.com/martincostello) in [#​219](https://redirect.github.com/grafana/oats/pull/219) - Allow docker-compose files to override the LGTM service by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​223](https://redirect.github.com/grafana/oats/pull/223) **Full Changelog**:
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index 8ea1d673e..222a3a5fb 100644 --- a/mise.toml +++ b/mise.toml @@ -1,6 +1,6 @@ [tools] "go:github.com/gohugoio/hugo" = "v0.155.3" -"go:github.com/grafana/oats" = "0.6.0" +"go:github.com/grafana/oats" = "0.6.1" java = "temurin-25.0.2+10.0.LTS" lychee = "0.22.0" protoc = "33.5" From d50be827046c0547e0e534569480bf349e0c3376 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Feb 2026 23:56:58 +0000 Subject: [PATCH 811/870] chore(deps): update grafana/grafana docker tag to v12.3.3 (#1870) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [grafana/grafana](https://redirect.github.com/grafana/grafana) | patch | `12.3.2` → `12.3.3` | --- ### Release Notes
    grafana/grafana (grafana/grafana) ### [`v12.3.3`](https://redirect.github.com/grafana/grafana/compare/v12.3.2...v12.3.3) [Compare Source](https://redirect.github.com/grafana/grafana/compare/v12.3.2...v12.3.3)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-custom-buckets/docker-compose.yaml | 2 +- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- examples/example-native-histogram/docker-compose.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/example-custom-buckets/docker-compose.yaml b/examples/example-custom-buckets/docker-compose.yaml index d4c08a614..2afcf5b98 100644 --- a/examples/example-custom-buckets/docker-compose.yaml +++ b/examples/example-custom-buckets/docker-compose.yaml @@ -18,7 +18,7 @@ services: - --enable-feature=native-histograms - --config.file=/prometheus.yml grafana: - image: grafana/grafana:12.3.2@sha256:ba93c9d192e58b23e064c7f501d453426ccf4a85065bf25b705ab1e98602bfb1 + image: grafana/grafana:12.3.3@sha256:9e1e77ade304069aee3196e9a4f210830e96e80ce9a2640891eccc324b152faf network_mode: host volumes: - ./docker-compose/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/grafana-datasources.yaml diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index c45e029ac..6c20e3999 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -59,7 +59,7 @@ services: command: - --config.file=/config.yaml grafana: - image: grafana/grafana:12.3.2@sha256:ba93c9d192e58b23e064c7f501d453426ccf4a85065bf25b705ab1e98602bfb1 + image: grafana/grafana:12.3.3@sha256:9e1e77ade304069aee3196e9a4f210830e96e80ce9a2640891eccc324b152faf network_mode: host ports: - "3000:3000" diff --git a/examples/example-native-histogram/docker-compose.yaml b/examples/example-native-histogram/docker-compose.yaml index 8dd081023..b2f849844 100644 --- a/examples/example-native-histogram/docker-compose.yaml +++ b/examples/example-native-histogram/docker-compose.yaml @@ -18,7 +18,7 @@ services: - --enable-feature=native-histograms - --config.file=/prometheus.yml grafana: - image: grafana/grafana:12.3.2@sha256:ba93c9d192e58b23e064c7f501d453426ccf4a85065bf25b705ab1e98602bfb1 + image: grafana/grafana:12.3.3@sha256:9e1e77ade304069aee3196e9a4f210830e96e80ce9a2640891eccc324b152faf network_mode: host volumes: - ./docker-compose/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/grafana-datasources.yaml From 7e472c7c9c9b4b49339cc95162b67c1b10cb3ba7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Feb 2026 01:59:22 +0000 Subject: [PATCH 812/870] fix(deps): update dependency io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha to v2.25.0-alpha (#1871) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://redirect.github.com/open-telemetry/opentelemetry-java-instrumentation) | `2.24.0-alpha` → `2.25.0-alpha` | ![age](https://developer.mend.io/api/mc/badges/age/maven/io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha/2.25.0-alpha?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha/2.24.0-alpha/2.25.0-alpha?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 30ebd46bc..c789a4b41 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ 4.33.5 33.5.0-jre 6.0.2 - 2.24.0-alpha + 2.25.0-alpha 8 25 0.70 From 35381750488ad1e3348e6ed0a88379dd47384810 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 13 Feb 2026 13:53:17 +0100 Subject: [PATCH 813/870] Add OTel support module and make examples standalone (#1868) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Inspired by https://github.com/prometheus/client_java/pull/1854#issuecomment-3885982843 ## Summary - Add `prometheus-metrics-otel-support` POM module that bundles the OTel SDK and Prometheus exporter as a single dependency, with the OTel instrumentation BOM imported for automatic version management - Add `prometheus-metrics-otel-support` to the BOM so users can manage it via `dependencyManagement` - Make all example projects standalone (no parent POM) — each example has its own `groupId`, `version`, and imports `prometheus-metrics-bom` directly, so users can copy-paste an example and build it without the parent chain - Add docs page for the OTel Support module (`docs/content/otel/support.md`) - Replace hardcoded `1.5.0` versions in OTel docs with `$version` placeholder and update `set-release-version-github-pages.sh` to process all markdown files under `docs/content` ## Test plan - [ ] `mise run build` passes - [ ] `mise run lint:super-linter` passes - [ ] `mise run test` passes - [ ] Verify `set-release-version-github-pages.sh` replaces `$version` in both `quickstart.md` and OTel docs --------- Signed-off-by: Gregor Zeitlinger --- .../tasks/set-release-version-github-pages.sh | 9 ++-- CLAUDE.md | 6 +++ docs/content/otel/jvm-runtime-metrics.md | 31 ++++++----- docs/content/otel/support.md | 47 +++++++++++++++++ examples/example-custom-buckets/pom.xml | 28 ++++++---- .../example-greeting-service/pom.xml | 30 ++++++----- .../example-hello-world-app/pom.xml | 30 ++++++----- .../example-exemplars-tail-sampling/pom.xml | 12 +---- examples/example-exporter-httpserver/pom.xml | 28 ++++++---- .../example-exporter-multi-target/pom.xml | 28 ++++++---- .../example-exporter-opentelemetry/pom.xml | 28 ++++++---- .../example-exporter-servlet-tomcat/pom.xml | 30 ++++++----- examples/example-native-histogram/pom.xml | 28 ++++++---- .../example-otel-jvm-runtime-metrics/pom.xml | 33 ++++++------ .../example-prometheus-properties/pom.xml | 28 ++++++---- examples/example-simpleclient-bridge/pom.xml | 27 +++++++--- pom.xml | 1 + prometheus-metrics-bom/pom.xml | 6 +++ prometheus-metrics-otel-support/pom.xml | 52 +++++++++++++++++++ 19 files changed, 342 insertions(+), 140 deletions(-) create mode 100644 docs/content/otel/support.md create mode 100644 prometheus-metrics-otel-support/pom.xml diff --git a/.mise/tasks/set-release-version-github-pages.sh b/.mise/tasks/set-release-version-github-pages.sh index 142d0eb82..2016373c8 100755 --- a/.mise/tasks/set-release-version-github-pages.sh +++ b/.mise/tasks/set-release-version-github-pages.sh @@ -1,9 +1,12 @@ #!/usr/bin/env bash -#MISE description="Set release version in GitHub Pages quickstart.md" +#MISE description="Set release version in all GitHub Pages docs" set -euox pipefail version=$(git tag -l | grep 'v' | sort | tail -1 | sed 's/v//') -marker="\$version" -sed -i "s/$marker/$version/g" docs/content/getting-started/quickstart.md +otelVersion=$(grep -oP '\K[^<]+' pom.xml | sed 's/-alpha$//') + +find ./docs/content -name '*.md' \ + -exec sed -i "s/\$version/$version/g" {} + \ + -exec sed -i "s/\$otelVersion/$otelVersion/g" {} + diff --git a/CLAUDE.md b/CLAUDE.md index 9c1c60571..406194944 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -119,6 +119,12 @@ mise run lint:super-linter - Integration tests are in `integration-tests/` and run during `verify` phase - Acceptance tests use OATs framework: `mise run acceptance-test` +## Documentation + +- Docs live under `docs/content/` and use `$version` as a placeholder for the library version +- When publishing GitHub Pages, `mise run set-release-version-github-pages` replaces `$version` with the latest git tag across all `docs/content/**/*.md` files (the published site is not versioned) +- Use `$version` for the Prometheus client version and `$otelVersion-alpha` for the OTel instrumentation version — never hardcode them + ## Java Version Source compatibility: Java 8. Tests run on Java 25 (configured in `mise.toml`). diff --git a/docs/content/otel/jvm-runtime-metrics.md b/docs/content/otel/jvm-runtime-metrics.md index 9015f7772..d61da1861 100644 --- a/docs/content/otel/jvm-runtime-metrics.md +++ b/docs/content/otel/jvm-runtime-metrics.md @@ -24,18 +24,21 @@ OTel SDK wiring shown below. ## Dependencies +Use the [OTel Support]({{< relref "support.md" >}}) module +to pull in the OTel SDK and Prometheus exporter, then add +the runtime-telemetry instrumentation: + {{< tabs "jvm-runtime-deps" >}} {{< tab "Gradle" >}} ```groovy -implementation 'io.opentelemetry:opentelemetry-sdk' -implementation 'io.opentelemetry:opentelemetry-exporter-prometheus' - -// Pick ONE of the following: -// Java 8+: -implementation 'io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java8' -// Java 17+ (adds JFR-based metrics): -// implementation 'io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java17' +implementation 'io.prometheus:prometheus-metrics-otel-support:$version' + +// Use opentelemetry-runtime-telemetry-java8 (Java 8+) +// or opentelemetry-runtime-telemetry-java17 (Java 17+, JFR-based) +implementation( + 'io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java8:$otelVersion-alpha' +) ``` {{< /tab >}} @@ -43,12 +46,10 @@ implementation 'io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry ```xml - io.opentelemetry - opentelemetry-sdk - - - io.opentelemetry - opentelemetry-exporter-prometheus + io.prometheus + prometheus-metrics-otel-support + $version + pom @@ -56,12 +57,14 @@ implementation 'io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry io.opentelemetry.instrumentation opentelemetry-runtime-telemetry-java8 + $otelVersion-alpha ``` diff --git a/docs/content/otel/support.md b/docs/content/otel/support.md new file mode 100644 index 000000000..e3b8cbe3a --- /dev/null +++ b/docs/content/otel/support.md @@ -0,0 +1,47 @@ +--- +title: OTel Support +weight: 2 +--- + +The `prometheus-metrics-otel-support` module bundles the +OpenTelemetry SDK and the Prometheus exporter into a single +POM dependency. + +Use this module when you want to combine OpenTelemetry +instrumentations (e.g. JVM runtime metrics) with the +Prometheus Java client on one `/metrics` endpoint. + +## Dependencies + +{{< tabs "otel-support-deps" >}} +{{< tab "Gradle" >}} + +```groovy +implementation 'io.prometheus:prometheus-metrics-otel-support:$version' +``` + +{{< /tab >}} +{{< tab "Maven" >}} + +```xml + + io.prometheus + prometheus-metrics-otel-support + $version + pom + +``` + +{{< /tab >}} +{{< /tabs >}} + +This single dependency replaces: + +- `io.opentelemetry:opentelemetry-sdk` +- `io.opentelemetry:opentelemetry-exporter-prometheus` + +## Use Cases + +See [JVM Runtime Metrics]({{< relref "jvm-runtime-metrics.md" >}}) +for a concrete example of combining OTel JVM metrics with +the Prometheus Java client. diff --git a/examples/example-custom-buckets/pom.xml b/examples/example-custom-buckets/pom.xml index b7e104e5a..52ae60627 100644 --- a/examples/example-custom-buckets/pom.xml +++ b/examples/example-custom-buckets/pom.xml @@ -3,34 +3,44 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - examples - 1.5.0-SNAPSHOT - - + io.prometheus example-custom-buckets + 1.0-SNAPSHOT + + + 8 + UTF-8 + Example - Custom Buckets End-to-End example of Native Histograms with Custom Buckets (NHCB): Java app -> Prometheus -> Grafana + + + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + + + + io.prometheus prometheus-metrics-core - ${project.version} io.prometheus prometheus-metrics-instrumentation-jvm - ${project.version} io.prometheus prometheus-metrics-exporter-httpserver - ${project.version} diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index b2e1006a4..532b7290b 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -4,13 +4,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - example-exemplars-tail-sampling - 1.5.0-SNAPSHOT - - + io.prometheus example-greeting-service + 1.0-SNAPSHOT + + + 17 + UTF-8 + Example - OpenTelemetry Exemplars - Greeting Service @@ -18,25 +19,30 @@ tracing - - 25 - + + + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + + + io.prometheus prometheus-metrics-core - ${project.version} io.prometheus prometheus-metrics-instrumentation-jvm - ${project.version} io.prometheus prometheus-metrics-exporter-servlet-jakarta - ${project.version} org.apache.tomcat.embed diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index bccd6cb43..4c1702bbe 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -4,13 +4,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - example-exemplars-tail-sampling - 1.5.0-SNAPSHOT - - + io.prometheus example-hello-world-app + 1.0-SNAPSHOT + + + 17 + UTF-8 + Example - OpenTelemetry Exemplars - Hello World App @@ -18,25 +19,30 @@ tracing - - 25 - + + + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + + + io.prometheus prometheus-metrics-core - ${project.version} io.prometheus prometheus-metrics-instrumentation-jvm - ${project.version} io.prometheus prometheus-metrics-exporter-servlet-jakarta - ${project.version} org.apache.tomcat.embed diff --git a/examples/example-exemplars-tail-sampling/pom.xml b/examples/example-exemplars-tail-sampling/pom.xml index 49b168955..ac4c6ccf5 100644 --- a/examples/example-exemplars-tail-sampling/pom.xml +++ b/examples/example-exemplars-tail-sampling/pom.xml @@ -4,13 +4,9 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - examples - 1.5.0-SNAPSHOT - - + io.prometheus example-exemplars-tail-sampling + 1.0-SNAPSHOT pom Example - Exemplars with OpenTelemetry's Tail Sampling @@ -18,10 +14,6 @@ Example project showing Exemplars with OpenTelemetry's Tail Sampling. - - 11 - - example-greeting-service example-hello-world-app diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index f9ee206f0..ac9ed5e10 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -4,34 +4,44 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - examples - 1.5.0-SNAPSHOT - - + io.prometheus example-exporter-httpserver + 1.0-SNAPSHOT + + + 8 + UTF-8 + Example - HTTPServer Exporter Prometheus Metrics Example using the HTTPServer for exposing the metrics endpoint + + + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + + + + io.prometheus prometheus-metrics-core - ${project.version} io.prometheus prometheus-metrics-instrumentation-jvm - ${project.version} io.prometheus prometheus-metrics-exporter-httpserver - ${project.version} diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index ac13ff2a1..3b736ae36 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -4,34 +4,44 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - examples - 1.5.0-SNAPSHOT - - + io.prometheus example-exporter-multi-target + 1.0-SNAPSHOT + + + 8 + UTF-8 + Example - HTTPServer Exporter Multi Target Prometheus Metrics Example for multi-target pattern implementation + + + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + + + + io.prometheus prometheus-metrics-core - ${project.version} io.prometheus prometheus-metrics-instrumentation-jvm - ${project.version} io.prometheus prometheus-metrics-exporter-httpserver - ${project.version} diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index 8e8fa6891..a94e82ce4 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -4,34 +4,44 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - examples - 1.5.0-SNAPSHOT - - + io.prometheus example-exporter-opentelemetry + 1.0-SNAPSHOT + + + 8 + UTF-8 + Example - OpenTelemetry Metrics Exporter Example of exposing metrics in OpenTelemetry format and pushing them to an OpenTelemetry collector + + + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + + + + io.prometheus prometheus-metrics-core - ${project.version} io.prometheus prometheus-metrics-instrumentation-jvm - ${project.version} io.prometheus prometheus-metrics-exporter-opentelemetry - ${project.version} diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 26da0ae97..65b91b5ed 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -3,38 +3,44 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - examples - 1.5.0-SNAPSHOT - - + io.prometheus example-exporter-servlet-tomcat + 1.0-SNAPSHOT + + + 17 + UTF-8 + Example - Servlet Exporter with Tomcat Prometheus Metrics Example using Embedded Tomcat and the Exporter Servlet - - 25 - + + + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + + + io.prometheus prometheus-metrics-core - ${project.version} io.prometheus prometheus-metrics-instrumentation-jvm - ${project.version} io.prometheus prometheus-metrics-exporter-servlet-jakarta - ${project.version} org.apache.tomcat.embed diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index 5324ffb91..eedadf6fe 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -3,34 +3,44 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - examples - 1.5.0-SNAPSHOT - - + io.prometheus example-native-histogram + 1.0-SNAPSHOT + + + 8 + UTF-8 + Example - Native Histogram End-to-End example of a Native histogram: Java app -> Prometheus -> Grafana + + + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + + + + io.prometheus prometheus-metrics-core - ${project.version} io.prometheus prometheus-metrics-instrumentation-jvm - ${project.version} io.prometheus prometheus-metrics-exporter-httpserver - ${project.version} diff --git a/examples/example-otel-jvm-runtime-metrics/pom.xml b/examples/example-otel-jvm-runtime-metrics/pom.xml index 276a58f2f..6e7ad8213 100644 --- a/examples/example-otel-jvm-runtime-metrics/pom.xml +++ b/examples/example-otel-jvm-runtime-metrics/pom.xml @@ -4,13 +4,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - examples - 1.5.0-SNAPSHOT - - + io.prometheus example-otel-jvm-runtime-metrics + 1.0-SNAPSHOT + + + 8 + UTF-8 + Example - OTel JVM Runtime Metrics @@ -19,10 +20,17 @@ + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + io.opentelemetry.instrumentation opentelemetry-instrumentation-bom-alpha - ${otel.instrumentation.version} + 2.24.0-alpha pom import @@ -33,20 +41,15 @@ io.prometheus prometheus-metrics-core - ${project.version} io.prometheus prometheus-metrics-exporter-httpserver - ${project.version} - - - io.opentelemetry - opentelemetry-sdk - io.opentelemetry - opentelemetry-exporter-prometheus + io.prometheus + prometheus-metrics-otel-support + pom io.opentelemetry.instrumentation diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index b02b8fa03..ac0279853 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -3,34 +3,44 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - examples - 1.5.0-SNAPSHOT - - + io.prometheus example-prometheus-properties + 1.0-SNAPSHOT + + + 8 + UTF-8 + Example - prometheus.properties Example of runtime configuration with prometheus.properties + + + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + + + + io.prometheus prometheus-metrics-core - ${project.version} io.prometheus prometheus-metrics-instrumentation-jvm - ${project.version} io.prometheus prometheus-metrics-exporter-httpserver - ${project.version} diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index f6d2c4207..82459eb0c 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -3,19 +3,32 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - io.prometheus - examples - 1.5.0-SNAPSHOT - - + io.prometheus example-simpleclient-bridge + 1.0-SNAPSHOT + + + 8 + UTF-8 + Example - Simpleclient Bridge Prometheus Metrics Example of the Simpleclient Backwards Compatibility module + + + + io.prometheus + prometheus-metrics-bom + 1.5.0-SNAPSHOT + pom + import + + + + io.prometheus @@ -25,12 +38,10 @@ io.prometheus prometheus-metrics-simpleclient-bridge - ${project.version} io.prometheus prometheus-metrics-exporter-httpserver - ${project.version} diff --git a/pom.xml b/pom.xml index c789a4b41..7373a2cdb 100644 --- a/pom.xml +++ b/pom.xml @@ -60,6 +60,7 @@ prometheus-metrics-instrumentation-dropwizard prometheus-metrics-instrumentation-guava prometheus-metrics-simpleclient-bridge + prometheus-metrics-otel-support diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index a13398228..d8e9d7ada 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -119,6 +119,12 @@ prometheus-metrics-model ${project.version} + + io.prometheus + prometheus-metrics-otel-support + ${project.version} + pom + io.prometheus prometheus-metrics-simpleclient-bridge diff --git a/prometheus-metrics-otel-support/pom.xml b/prometheus-metrics-otel-support/pom.xml new file mode 100644 index 000000000..bea2ce649 --- /dev/null +++ b/prometheus-metrics-otel-support/pom.xml @@ -0,0 +1,52 @@ + + + 4.0.0 + + + io.prometheus + client_java + 1.5.0-SNAPSHOT + + + prometheus-metrics-otel-support + pom + + Prometheus Metrics OpenTelemetry Support + + Bundles the OpenTelemetry SDK and Prometheus exporter so that users + who want to combine OTel instrumentations with the Prometheus Java + client only need a single dependency. + + + + true + true + true + true + + + + + + io.opentelemetry.instrumentation + opentelemetry-instrumentation-bom-alpha + ${otel.instrumentation.version} + pom + import + + + + + + + io.opentelemetry + opentelemetry-sdk + + + io.opentelemetry + opentelemetry-exporter-prometheus + + + From 246c956d3a54efecf12f5ded2098e489d1e73866 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Feb 2026 13:02:18 +0000 Subject: [PATCH 814/870] fix(deps): update dependency io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha to v2.25.0-alpha (#1872) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://redirect.github.com/open-telemetry/opentelemetry-java-instrumentation) | `2.24.0-alpha` → `2.25.0-alpha` | ![age](https://developer.mend.io/api/mc/badges/age/maven/io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha/2.25.0-alpha?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha/2.24.0-alpha/2.25.0-alpha?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-otel-jvm-runtime-metrics/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/example-otel-jvm-runtime-metrics/pom.xml b/examples/example-otel-jvm-runtime-metrics/pom.xml index 6e7ad8213..17aa53a99 100644 --- a/examples/example-otel-jvm-runtime-metrics/pom.xml +++ b/examples/example-otel-jvm-runtime-metrics/pom.xml @@ -30,7 +30,7 @@ io.opentelemetry.instrumentation opentelemetry-instrumentation-bom-alpha - 2.24.0-alpha + 2.25.0-alpha pom import From 229e2e003bd639f3744566940f503d05e8b9ba18 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 13 Feb 2026 17:35:37 +0100 Subject: [PATCH 815/870] Add stable Metrics class to decouple consumers from protobuf version (#1873) ## Summary - Introduce a stable `Metrics.java` in the version-free `...generated` package that extends the versioned generated class, so consumer code no longer needs import updates on protobuf upgrades. - Update `generate-protobuf.sh` to make the generated class extensible (`final` removed, constructor `protected`) and read the old package from the stable class's `extends` clause. - Update all consumer imports to use the stable package, with `@SuppressWarnings("NonCanonicalType")` for Error Prone compatibility. ## Test plan - [x] `mise run build` passes (all 54 modules) - [x] `mise run test -pl prometheus-metrics-exposition-formats` passes (47 tests) - [x] `mise run lint:super-linter` passes Signed-off-by: Gregor Zeitlinger --- CONTRIBUTING.md | 15 ++++++++++++++- .../generate-protobuf.sh | 6 +++++- .../com_google_protobuf_4_33_5/Metrics.java | 4 ++-- .../expositionformats/generated/Metrics.java | 6 ++++++ .../internal/PrometheusProtobufWriterImpl.java | 3 ++- .../DuplicateNamesProtobufTest.java | 3 ++- .../ProtobufExpositionFormatsTest.java | 3 ++- 7 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 164879f28..922aa5336 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -58,10 +58,23 @@ mise run compile ## Updating the Protobuf Java Classes +The generated protobuf `Metrics.java` lives in a versioned package +(e.g., `...generated.com_google_protobuf_4_33_5`) that changes with each +protobuf release. A stable extending class at +`...generated/Metrics.java` reexports all types so that consumer code +only imports from the version-free package. On protobuf upgrades only +the `extends` clause in the stable class changes. + In the failing PR from renovate, run: ```shell mise run generate ``` -Add the new `Metrics.java` to Git and commit it. +The script will: + +1. Re-generate the protobuf sources with the new version. +2. Update the versioned package name in all Java files + (including the stable `Metrics.java` extends clause). + +Add the updated files to Git and commit them. diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index 9bd222241..323cf033c 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -18,7 +18,7 @@ mkdir -p "$TARGET_DIR" rm -rf $PROTO_DIR || true mkdir -p $PROTO_DIR -OLD_PACKAGE=$(sed -nE 's/import (io.prometheus.metrics.expositionformats.generated.*).Metrics;/\1/p' src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java) +OLD_PACKAGE=$(sed -nE 's/.*extends (io\.prometheus\.metrics\.expositionformats\.generated\.[^ ]*?)\.Metrics.*/\1/p' src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java) PACKAGE="io.prometheus.metrics.expositionformats.generated.com_google_protobuf_${PROTOBUF_VERSION_STRING}" if [[ $OLD_PACKAGE != "$PACKAGE" ]]; then @@ -33,6 +33,10 @@ protoc --java_out "$TARGET_DIR" $PROTO_DIR/metrics.proto sed -i '1 i\//CHECKSTYLE:OFF: checkstyle' "$(find src/main/generated/io -type f)" sed -i -e $'$a\\\n//CHECKSTYLE:ON: checkstyle' "$(find src/main/generated/io -type f)" +GENERATED_FILE="$TARGET_DIR/${PACKAGE//\.//}/Metrics.java" +sed -i 's/public final class Metrics/public class Metrics/' "$GENERATED_FILE" +sed -i 's/private Metrics() {}/protected Metrics() {}/' "$GENERATED_FILE" + GENERATED_WITH=$(grep -oP '\/\/ Protobuf Java Version: \K.*' "$TARGET_DIR/${PACKAGE//\.//}"/Metrics.java) function help() { diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_33_5/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_33_5/Metrics.java index eeab733f1..5f4788c14 100644 --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_33_5/Metrics.java +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_33_5/Metrics.java @@ -7,8 +7,8 @@ package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5; @com.google.protobuf.Generated -public final class Metrics extends com.google.protobuf.GeneratedFile { - private Metrics() {} +public class Metrics extends com.google.protobuf.GeneratedFile { + protected Metrics() {} static { com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java new file mode 100644 index 000000000..605aa4cd7 --- /dev/null +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java @@ -0,0 +1,6 @@ +package io.prometheus.metrics.expositionformats.generated; + +public final class Metrics + extends io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics { + private Metrics() {} +} diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java index b552fa486..d714fb5cd 100644 --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java @@ -7,7 +7,7 @@ import io.prometheus.metrics.config.EscapingScheme; import io.prometheus.metrics.expositionformats.ExpositionFormatWriter; import io.prometheus.metrics.expositionformats.TextFormatUtil; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.CounterSnapshot.CounterDataPointSnapshot; @@ -30,6 +30,7 @@ import java.io.OutputStream; import javax.annotation.Nullable; +@SuppressWarnings("NonCanonicalType") public class PrometheusProtobufWriterImpl implements ExpositionFormatWriter { @Override diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/DuplicateNamesProtobufTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/DuplicateNamesProtobufTest.java index 9b1caa8f6..c5fc7bf34 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/DuplicateNamesProtobufTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/DuplicateNamesProtobufTest.java @@ -3,7 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.metrics.config.EscapingScheme; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.model.registry.Collector; import io.prometheus.metrics.model.registry.PrometheusRegistry; @@ -19,6 +19,7 @@ import java.util.List; import org.junit.jupiter.api.Test; +@SuppressWarnings("NonCanonicalType") class DuplicateNamesProtobufTest { private static PrometheusRegistry getPrometheusRegistry() { diff --git a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java index 9aa88744a..5f871c585 100644 --- a/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java +++ b/prometheus-metrics-exposition-formats/src/test/java/io/prometheus/metrics/expositionformats/ProtobufExpositionFormatsTest.java @@ -3,11 +3,12 @@ import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.metrics.config.EscapingScheme; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.MetricSnapshot; +@SuppressWarnings("NonCanonicalType") class ProtobufExpositionFormatsTest extends ExpositionFormatsTest { @Override From 4e2d6b85df690c296a17a84a89e1b49671977833 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Feb 2026 16:46:06 +0000 Subject: [PATCH 816/870] chore(deps): update dependency lychee to v0.23.0 (#1874) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [lychee](https://redirect.github.com/lycheeverse/lychee) | minor | `0.22.0` → `0.23.0` | --- ### Release Notes
    lycheeverse/lychee (lychee) ### [`v0.23.0`](https://redirect.github.com/lycheeverse/lychee/releases/tag/lychee-v0.23.0) [Compare Source](https://redirect.github.com/lycheeverse/lychee/compare/lychee-v0.22.0...lychee-v0.23.0) ##### Added - per-host caching ([#​1974](https://redirect.github.com/lycheeverse/lychee/pull/1974)) - implement per-host rate limiting and statistics ([#​1929](https://redirect.github.com/lycheeverse/lychee/pull/1929)) ##### Fixed - CacheableResponse should only download file when needed ([#​2035](https://redirect.github.com/lycheeverse/lychee/pull/2035)) - Combine host stats with response stats ([#​1975](https://redirect.github.com/lycheeverse/lychee/pull/1975)) ##### Other - delete leftover openssl sentence in readme - Speed up slow tests ([#​2019](https://redirect.github.com/lycheeverse/lychee/pull/2019)) - *(deps)* bump the dependencies group with 2 updates - Improve README.md UX ([#​2029](https://redirect.github.com/lycheeverse/lychee/pull/2029)) - Replace OpenSSL with rustls ([#​1928](https://redirect.github.com/lycheeverse/lychee/pull/1928)) - Replace check-if-email-exists with mailify ([#​1985](https://redirect.github.com/lycheeverse/lychee/pull/1985)) - Redirect hint ([#​2020](https://redirect.github.com/lycheeverse/lychee/pull/2020)) - Update to reqwest 0.13.1 & cargo update - *(deps)* bump the dependencies group across 1 directory with 4 updates - Use absolute instead of canonicalize for relative root-dir ([#​2008](https://redirect.github.com/lycheeverse/lychee/pull/2008)) - Log successful responses only for Debug and Trace - Only show redirect details in verbose mode - Show status code in redirect list - Use u8 instead of i8 for log level values - Update comparison table ([#​1997](https://redirect.github.com/lycheeverse/lychee/pull/1997)) - Rejected urls ([#​1990](https://redirect.github.com/lycheeverse/lychee/pull/1990)) - Accept ranges ([#​1989](https://redirect.github.com/lycheeverse/lychee/pull/1989)) - *(deps)* bump the dependencies group with 5 updates ([#​1988](https://redirect.github.com/lycheeverse/lychee/pull/1988)) - *(deps)* bump the dependencies group with 4 updates ([#​1978](https://redirect.github.com/lycheeverse/lychee/pull/1978)) - *(deps)* bump the dependencies group with 4 updates ([#​1973](https://redirect.github.com/lycheeverse/lychee/pull/1973)) - *(docs)* update TOC - Improve wikilink parsing and checking ([#​1799](https://redirect.github.com/lycheeverse/lychee/pull/1799)) - Specify that Scoop installation is for Windows ([#​1969](https://redirect.github.com/lycheeverse/lychee/pull/1969)) - Extract record\_cache\_event & skip mail caching - Add tldr-pages link to README ([#​1963](https://redirect.github.com/lycheeverse/lychee/pull/1963)) - *(deps)* bump the dependencies group across 1 directory with 3 updates ([#​1961](https://redirect.github.com/lycheeverse/lychee/pull/1961)) - Extract URLs from CSS ([#​1956](https://redirect.github.com/lycheeverse/lychee/pull/1956))
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index 222a3a5fb..f539b797e 100644 --- a/mise.toml +++ b/mise.toml @@ -2,7 +2,7 @@ "go:github.com/gohugoio/hugo" = "v0.155.3" "go:github.com/grafana/oats" = "0.6.1" java = "temurin-25.0.2+10.0.LTS" -lychee = "0.22.0" +lychee = "0.23.0" protoc = "33.5" [env] From 54d63423e39a23c02e158d9414f639d50199be5a Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 13 Feb 2026 21:22:31 +0100 Subject: [PATCH 817/870] Add bump-snapshot mise task to automate version bumps After a release, the snapshot version must be updated across ~57 files. This was previously a manual find-and-replace. The new `mise run bump-snapshot` task automates it by extracting the current version from the parent pom.xml and replacing it everywhere via git grep. Also makes set-version.sh and build-release.sh dynamic so they no longer hard-code the snapshot version. Signed-off-by: Gregor Zeitlinger --- .mise/tasks/build-release.sh | 11 ++++- .mise/tasks/bump_snapshot.py | 86 ++++++++++++++++++++++++++++++++++++ .mise/tasks/set-version.sh | 12 +++-- RELEASING.md | 13 ++++-- 4 files changed, 113 insertions(+), 9 deletions(-) create mode 100755 .mise/tasks/bump_snapshot.py diff --git a/.mise/tasks/build-release.sh b/.mise/tasks/build-release.sh index 448dd3d5f..b7c18d513 100755 --- a/.mise/tasks/build-release.sh +++ b/.mise/tasks/build-release.sh @@ -1,11 +1,20 @@ #!/usr/bin/env bash #MISE description="Build release package" -#USAGE arg "" env="TAG" default="1.5.0-SNAPSHOT" +#USAGE arg "[tag]" env="TAG" set -euo pipefail # shellcheck disable=SC2154 # is set by mise +if [[ -z "${usage_tag:-}" ]]; then + PARENT_POM="prometheus-metrics-parent/pom.xml" + usage_tag=$(sed -n 's/.*\(.*-SNAPSHOT\)<\/version>.*/\1/p' "$PARENT_POM" | head -1) + if [[ -z "$usage_tag" ]]; then + echo "ERROR: could not find SNAPSHOT version in $PARENT_POM" >&2 + exit 1 + fi +fi + VERSION=${usage_tag#v} mise run set-version "$VERSION" diff --git a/.mise/tasks/bump_snapshot.py b/.mise/tasks/bump_snapshot.py new file mode 100755 index 000000000..31db06a04 --- /dev/null +++ b/.mise/tasks/bump_snapshot.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 + +# [MISE] description="Bump the snapshot version in all pom.xml files" +# [MISE] alias="bump-snapshot" + +""" +Bump the SNAPSHOT version in all pom.xml files. + +By default, increments the minor version (e.g. X.Y.0 -> X.(Y+1).0). +An explicit version can be passed as argument: + mise run bump-snapshot 2.0.0-SNAPSHOT +""" + +import re +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] # repo root +PARENT_POM = ROOT / "prometheus-metrics-parent" / "pom.xml" + + +def current_snapshot() -> str: + """Extract the current SNAPSHOT version from the parent pom.xml.""" + text = PARENT_POM.read_text(encoding="utf-8") + m = re.search( + r"io\.prometheus\s*" + r"client_java_parent\s*" + r"(\S+)", + text, + ) + if not m: + sys.exit("Could not find version in " + str(PARENT_POM)) + version = m.group(1) + if not version.endswith("-SNAPSHOT"): + sys.exit(f"Current version '{version}' is not a SNAPSHOT version") + return version + + +def next_minor(version: str) -> str: + """Increment the minor version: 1.5.0-SNAPSHOT -> 1.6.0-SNAPSHOT.""" + base = version.removesuffix("-SNAPSHOT") + parts = base.split(".") + if len(parts) != 3: + sys.exit(f"Expected three-part version, got '{base}'") + parts[1] = str(int(parts[1]) + 1) + parts[2] = "0" + return ".".join(parts) + "-SNAPSHOT" + + +def find_pom_files() -> list[Path]: + """Find all pom.xml files in the repository.""" + return sorted(ROOT.rglob("pom.xml")) + + +def main() -> None: + old_version = current_snapshot() + + if len(sys.argv) > 1: + new_version = sys.argv[1] + if not new_version.endswith("-SNAPSHOT"): + sys.exit(f"New version must end with -SNAPSHOT, got '{new_version}'") + else: + new_version = next_minor(old_version) + + if old_version == new_version: + sys.exit(f"Old and new version are the same: {old_version}") + + print(f"Bumping {old_version} -> {new_version}") + + updated_count = 0 + for pom in find_pom_files(): + content = pom.read_text(encoding="utf-8") + updated = content.replace(old_version, new_version) + if content != updated: + pom.write_text(updated, encoding="utf-8") + print(f" updated {pom.relative_to(ROOT)}") + updated_count += 1 + + if updated_count == 0: + sys.exit(f"No pom.xml files contain '{old_version}'") + + print(f"\nDone. {updated_count} pom.xml file(s) updated to {new_version}.") + + +if __name__ == "__main__": + main() diff --git a/.mise/tasks/set-version.sh b/.mise/tasks/set-version.sh index 2309976ce..a5947e453 100755 --- a/.mise/tasks/set-version.sh +++ b/.mise/tasks/set-version.sh @@ -5,10 +5,14 @@ set -euo pipefail -# replace all occurrences '1.5.0-SNAPSHOT' with -# '$usage_version' in all pom.xml files in the current directory and -# subdirectories +PARENT_POM="prometheus-metrics-parent/pom.xml" +CURRENT_VERSION=$(sed -n 's/.*\(.*-SNAPSHOT\)<\/version>.*/\1/p' "$PARENT_POM" | head -1) + +if [[ -z "$CURRENT_VERSION" ]]; then + echo "ERROR: could not find SNAPSHOT version in $PARENT_POM" >&2 + exit 1 +fi # shellcheck disable=SC2154 # is set by mise find . -name 'pom.xml' -exec \ - sed -i "s/1.5.0-SNAPSHOT<\/version>/$usage_version<\/version>/g" {} + + sed -i "s/${CURRENT_VERSION}<\/version>/$usage_version<\/version>/g" {} + diff --git a/RELEASING.md b/RELEASING.md index 601034d01..35a2e3185 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -19,11 +19,16 @@ mise run update-benchmarks ## Major or minor release -After the release is created, do a text replace everywhere in the repository to update the -snapshot version in the `pom.xml` files (and some other files) to the next version. -For example, if the last release was `1.4.0`, the next snapshot version should be `1.5.0-SNAPSHOT`. +After the release is created, bump the snapshot version in all +`pom.xml` files: -Replace `1.4.0-SNAPSHOT` with `1.5.0-SNAPSHOT` in all following files. +```shell +# Auto-increment the minor version (e.g. 1.5.0-SNAPSHOT -> 1.6.0-SNAPSHOT) +mise run bump-snapshot + +# Or specify an explicit version (e.g. for a major bump) +mise run bump-snapshot 2.0.0-SNAPSHOT +``` ## If the GPG key expired From b1f7ee0b69cbac084dc1a8b1ee2c6d16da61bbcf Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 13 Feb 2026 21:52:21 +0100 Subject: [PATCH 818/870] bump snapshot Signed-off-by: Gregor Zeitlinger --- benchmarks/pom.xml | 2 +- examples/example-custom-buckets/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-multi-target/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-otel-jvm-runtime-metrics/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- examples/pom.xml | 2 +- integration-tests/it-common/pom.xml | 2 +- .../it-exporter/it-exporter-duplicate-metrics-sample/pom.xml | 2 +- .../it-exporter/it-exporter-httpserver-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- .../it-exporter/it-exporter-servlet-tomcat-sample/pom.xml | 2 +- integration-tests/it-exporter/it-exporter-test/pom.xml | 2 +- integration-tests/it-exporter/it-no-protobuf-test/pom.xml | 2 +- integration-tests/it-exporter/pom.xml | 2 +- integration-tests/it-pushgateway/pom.xml | 2 +- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- integration-tests/pom.xml | 2 +- pom.xml | 2 +- prometheus-metrics-bom/pom.xml | 2 +- prometheus-metrics-config/pom.xml | 2 +- prometheus-metrics-core/pom.xml | 2 +- prometheus-metrics-exporter-common/pom.xml | 2 +- prometheus-metrics-exporter-httpserver/pom.xml | 2 +- .../pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry-shaded/pom.xml | 2 +- prometheus-metrics-exporter-opentelemetry/pom.xml | 2 +- prometheus-metrics-exporter-pushgateway/pom.xml | 2 +- prometheus-metrics-exporter-servlet-jakarta/pom.xml | 2 +- prometheus-metrics-exporter-servlet-javax/pom.xml | 2 +- prometheus-metrics-exposition-formats-shaded/pom.xml | 2 +- prometheus-metrics-exposition-formats/pom.xml | 2 +- prometheus-metrics-exposition-textformats/pom.xml | 2 +- prometheus-metrics-instrumentation-caffeine/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard/pom.xml | 2 +- prometheus-metrics-instrumentation-dropwizard5/pom.xml | 2 +- prometheus-metrics-instrumentation-guava/pom.xml | 2 +- prometheus-metrics-instrumentation-jvm/pom.xml | 2 +- prometheus-metrics-model/pom.xml | 2 +- prometheus-metrics-otel-support/pom.xml | 2 +- prometheus-metrics-parent/pom.xml | 2 +- prometheus-metrics-simpleclient-bridge/pom.xml | 2 +- prometheus-metrics-tracer/pom.xml | 2 +- .../prometheus-metrics-tracer-common/pom.xml | 2 +- .../prometheus-metrics-tracer-initializer/pom.xml | 2 +- .../prometheus-metrics-tracer-otel-agent/pom.xml | 2 +- .../prometheus-metrics-tracer-otel/pom.xml | 2 +- 54 files changed, 54 insertions(+), 54 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 96a6c740a..7c211006b 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -8,7 +8,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT benchmarks diff --git a/examples/example-custom-buckets/pom.xml b/examples/example-custom-buckets/pom.xml index 52ae60627..209e03862 100644 --- a/examples/example-custom-buckets/pom.xml +++ b/examples/example-custom-buckets/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 532b7290b..bf7de8f71 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -24,7 +24,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 4c1702bbe..68d2894bd 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -24,7 +24,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index ac9ed5e10..351520d51 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -23,7 +23,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index 3b736ae36..f9db2fb1a 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -23,7 +23,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index a94e82ce4..c0f9d78fd 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -23,7 +23,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 65b91b5ed..fe602e203 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index eedadf6fe..df9fec94e 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/example-otel-jvm-runtime-metrics/pom.xml b/examples/example-otel-jvm-runtime-metrics/pom.xml index 17aa53a99..6d1fac5d0 100644 --- a/examples/example-otel-jvm-runtime-metrics/pom.xml +++ b/examples/example-otel-jvm-runtime-metrics/pom.xml @@ -23,7 +23,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index ac0279853..0cf6e5da4 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index 82459eb0c..3c1022dbc 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT pom import diff --git a/examples/pom.xml b/examples/pom.xml index 1b0059655..e033a3d1e 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT examples diff --git a/integration-tests/it-common/pom.xml b/integration-tests/it-common/pom.xml index 2faac1769..9ae86303c 100644 --- a/integration-tests/it-common/pom.xml +++ b/integration-tests/it-common/pom.xml @@ -6,7 +6,7 @@ io.prometheus integration-tests - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT it-common diff --git a/integration-tests/it-exporter/it-exporter-duplicate-metrics-sample/pom.xml b/integration-tests/it-exporter/it-exporter-duplicate-metrics-sample/pom.xml index ca982769b..13364ec5d 100644 --- a/integration-tests/it-exporter/it-exporter-duplicate-metrics-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-duplicate-metrics-sample/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT it-exporter-duplicate-metrics-sample diff --git a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml index f52c8434e..3dfa05f07 100644 --- a/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT it-exporter-httpserver-sample diff --git a/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml b/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml index f75c398a5..6bfd7c5cb 100644 --- a/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml +++ b/integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT it-exporter-no-protobuf diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index 9a1722f5f..ed5285769 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT it-exporter-servlet-jetty-sample diff --git a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml index b71a90b3b..be9c7704d 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT it-exporter-servlet-tomcat-sample diff --git a/integration-tests/it-exporter/it-exporter-test/pom.xml b/integration-tests/it-exporter/it-exporter-test/pom.xml index 1929a9c6d..027631fbd 100644 --- a/integration-tests/it-exporter/it-exporter-test/pom.xml +++ b/integration-tests/it-exporter/it-exporter-test/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT it-exporter-test diff --git a/integration-tests/it-exporter/it-no-protobuf-test/pom.xml b/integration-tests/it-exporter/it-no-protobuf-test/pom.xml index 6321799db..1a17b83dc 100644 --- a/integration-tests/it-exporter/it-no-protobuf-test/pom.xml +++ b/integration-tests/it-exporter/it-no-protobuf-test/pom.xml @@ -6,7 +6,7 @@ io.prometheus it-exporter - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT it-no-protobuf-test diff --git a/integration-tests/it-exporter/pom.xml b/integration-tests/it-exporter/pom.xml index c4a29fe74..08386d8b0 100644 --- a/integration-tests/it-exporter/pom.xml +++ b/integration-tests/it-exporter/pom.xml @@ -6,7 +6,7 @@ io.prometheus integration-tests - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT it-exporter diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index cf3e68169..a70ea5458 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -6,7 +6,7 @@ io.prometheus integration-tests - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT it-pushgateway diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 631d0ac32..52f43eae7 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -14,7 +14,7 @@ io.prometheus it-spring-boot-smoke-test - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT Integration Test - Spring Smoke Tests diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 49880c484..f0ab29299 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT integration-tests diff --git a/pom.xml b/pom.xml index 7373a2cdb..d6f5612e7 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.prometheus client_java_parent - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-parent/pom.xml diff --git a/prometheus-metrics-bom/pom.xml b/prometheus-metrics-bom/pom.xml index d8e9d7ada..167ea522e 100644 --- a/prometheus-metrics-bom/pom.xml +++ b/prometheus-metrics-bom/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java_parent - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT ../prometheus-metrics-parent/pom.xml diff --git a/prometheus-metrics-config/pom.xml b/prometheus-metrics-config/pom.xml index a07c83f0b..494282cc7 100644 --- a/prometheus-metrics-config/pom.xml +++ b/prometheus-metrics-config/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-config diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index b3a043574..b64c5db54 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-core diff --git a/prometheus-metrics-exporter-common/pom.xml b/prometheus-metrics-exporter-common/pom.xml index d5a9ef2ef..a471c0b9b 100644 --- a/prometheus-metrics-exporter-common/pom.xml +++ b/prometheus-metrics-exporter-common/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exporter-common diff --git a/prometheus-metrics-exporter-httpserver/pom.xml b/prometheus-metrics-exporter-httpserver/pom.xml index 01fc2dab5..d2843b51a 100644 --- a/prometheus-metrics-exporter-httpserver/pom.xml +++ b/prometheus-metrics-exporter-httpserver/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exporter-httpserver diff --git a/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml b/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml index 16fd43422..40ce26a57 100644 --- a/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry-otel-agent-resources diff --git a/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml b/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml index c08919d13..a30a16847 100644 --- a/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry-shaded/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry diff --git a/prometheus-metrics-exporter-opentelemetry/pom.xml b/prometheus-metrics-exporter-opentelemetry/pom.xml index acae00e0a..7d427d96b 100644 --- a/prometheus-metrics-exporter-opentelemetry/pom.xml +++ b/prometheus-metrics-exporter-opentelemetry/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exporter-opentelemetry-no-otel diff --git a/prometheus-metrics-exporter-pushgateway/pom.xml b/prometheus-metrics-exporter-pushgateway/pom.xml index 6d59b2b4d..c466c8552 100644 --- a/prometheus-metrics-exporter-pushgateway/pom.xml +++ b/prometheus-metrics-exporter-pushgateway/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exporter-pushgateway diff --git a/prometheus-metrics-exporter-servlet-jakarta/pom.xml b/prometheus-metrics-exporter-servlet-jakarta/pom.xml index 247c3dfb9..6dd93f190 100644 --- a/prometheus-metrics-exporter-servlet-jakarta/pom.xml +++ b/prometheus-metrics-exporter-servlet-jakarta/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exporter-servlet-jakarta diff --git a/prometheus-metrics-exporter-servlet-javax/pom.xml b/prometheus-metrics-exporter-servlet-javax/pom.xml index 1239b96fb..9d78816f0 100644 --- a/prometheus-metrics-exporter-servlet-javax/pom.xml +++ b/prometheus-metrics-exporter-servlet-javax/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exporter-servlet-javax diff --git a/prometheus-metrics-exposition-formats-shaded/pom.xml b/prometheus-metrics-exposition-formats-shaded/pom.xml index 64e033366..d3e02eb2b 100644 --- a/prometheus-metrics-exposition-formats-shaded/pom.xml +++ b/prometheus-metrics-exposition-formats-shaded/pom.xml @@ -7,7 +7,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exposition-formats diff --git a/prometheus-metrics-exposition-formats/pom.xml b/prometheus-metrics-exposition-formats/pom.xml index bb780f0c2..5cb35db2e 100644 --- a/prometheus-metrics-exposition-formats/pom.xml +++ b/prometheus-metrics-exposition-formats/pom.xml @@ -7,7 +7,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exposition-formats-no-protobuf diff --git a/prometheus-metrics-exposition-textformats/pom.xml b/prometheus-metrics-exposition-textformats/pom.xml index 1f34a5dde..16e7b73b6 100644 --- a/prometheus-metrics-exposition-textformats/pom.xml +++ b/prometheus-metrics-exposition-textformats/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-exposition-textformats diff --git a/prometheus-metrics-instrumentation-caffeine/pom.xml b/prometheus-metrics-instrumentation-caffeine/pom.xml index f1fb57c6c..355bea276 100644 --- a/prometheus-metrics-instrumentation-caffeine/pom.xml +++ b/prometheus-metrics-instrumentation-caffeine/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-instrumentation-caffeine diff --git a/prometheus-metrics-instrumentation-dropwizard/pom.xml b/prometheus-metrics-instrumentation-dropwizard/pom.xml index 1c58efd78..e25368513 100644 --- a/prometheus-metrics-instrumentation-dropwizard/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-instrumentation-dropwizard diff --git a/prometheus-metrics-instrumentation-dropwizard5/pom.xml b/prometheus-metrics-instrumentation-dropwizard5/pom.xml index 14704695b..bb14196b4 100644 --- a/prometheus-metrics-instrumentation-dropwizard5/pom.xml +++ b/prometheus-metrics-instrumentation-dropwizard5/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-instrumentation-dropwizard5 diff --git a/prometheus-metrics-instrumentation-guava/pom.xml b/prometheus-metrics-instrumentation-guava/pom.xml index b086151b6..cb333eacd 100644 --- a/prometheus-metrics-instrumentation-guava/pom.xml +++ b/prometheus-metrics-instrumentation-guava/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-instrumentation-guava diff --git a/prometheus-metrics-instrumentation-jvm/pom.xml b/prometheus-metrics-instrumentation-jvm/pom.xml index 2aaf675ad..f60b55a49 100644 --- a/prometheus-metrics-instrumentation-jvm/pom.xml +++ b/prometheus-metrics-instrumentation-jvm/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-instrumentation-jvm diff --git a/prometheus-metrics-model/pom.xml b/prometheus-metrics-model/pom.xml index 1919ee95c..ff07241ce 100644 --- a/prometheus-metrics-model/pom.xml +++ b/prometheus-metrics-model/pom.xml @@ -7,7 +7,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-model diff --git a/prometheus-metrics-otel-support/pom.xml b/prometheus-metrics-otel-support/pom.xml index bea2ce649..18328637e 100644 --- a/prometheus-metrics-otel-support/pom.xml +++ b/prometheus-metrics-otel-support/pom.xml @@ -7,7 +7,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-otel-support diff --git a/prometheus-metrics-parent/pom.xml b/prometheus-metrics-parent/pom.xml index 84fab6b9d..f70317154 100644 --- a/prometheus-metrics-parent/pom.xml +++ b/prometheus-metrics-parent/pom.xml @@ -7,7 +7,7 @@ io.prometheus client_java_parent - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT Prometheus Metrics Library Parent http://github.com/prometheus/client_java diff --git a/prometheus-metrics-simpleclient-bridge/pom.xml b/prometheus-metrics-simpleclient-bridge/pom.xml index e15a5631c..80ae0b6e4 100644 --- a/prometheus-metrics-simpleclient-bridge/pom.xml +++ b/prometheus-metrics-simpleclient-bridge/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-simpleclient-bridge diff --git a/prometheus-metrics-tracer/pom.xml b/prometheus-metrics-tracer/pom.xml index 15ea09307..a97ae0a54 100644 --- a/prometheus-metrics-tracer/pom.xml +++ b/prometheus-metrics-tracer/pom.xml @@ -6,7 +6,7 @@ io.prometheus client_java - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-tracer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml index 573e78801..11d4fcc80 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml @@ -6,7 +6,7 @@ io.prometheus prometheus-metrics-tracer - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-tracer-common diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml index 2d15be029..07dc768f5 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml @@ -6,7 +6,7 @@ io.prometheus prometheus-metrics-tracer - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-tracer-initializer diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml index be140167d..4db6ea530 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml @@ -7,7 +7,7 @@ io.prometheus prometheus-metrics-tracer - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-tracer-otel-agent diff --git a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml index 3dda51c6b..955d1cf34 100644 --- a/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml +++ b/prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml @@ -6,7 +6,7 @@ io.prometheus prometheus-metrics-tracer - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT prometheus-metrics-tracer-otel From 043fc5742752fdc2f67f0219418030a190c53bde Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Feb 2026 21:05:38 +0000 Subject: [PATCH 819/870] fix(deps): update dependency io.prometheus:prometheus-metrics-bom to v1.5.0 (#1877) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [io.prometheus:prometheus-metrics-bom](https://redirect.github.com/prometheus/client_java) | `1.5.0-SNAPSHOT` → `1.5.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/io.prometheus:prometheus-metrics-bom/1.5.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.prometheus:prometheus-metrics-bom/1.5.0-SNAPSHOT/1.5.0?slim=true) | --- ### Release Notes
    prometheus/client_java (io.prometheus:prometheus-metrics-bom) ### [`v1.5.0`](https://redirect.github.com/prometheus/client_java/releases/tag/v1.5.0) [Compare Source](https://redirect.github.com/prometheus/client_java/compare/v1.4.3...v1.5.0) ##### Highlights ##### Performance - **Improve histogram/summary performance under contention** ([#​1794](https://redirect.github.com/prometheus/client_java/pull/1794)) by [@​jack-berg](https://redirect.github.com/jack-berg) — Significant throughput improvements for high-contention scenarios by striping `observationCount` across multiple instances. Benchmarks show prometheusClassic improving from \~5,126 ops/s to \~14,624 ops/s (\~185% improvement) and prometheusNative from \~3,854 ops/s to \~7,406 ops/s (\~92% improvement). ##### Configuration - **Support environment variables in properties** ([#​1828](https://redirect.github.com/prometheus/client_java/pull/1828)) by [@​zeitlinger](https://redirect.github.com/zeitlinger) — Adds environment variable support for configuration (e.g., `IO_PROMETHEUS_EXPORTER_HTTP_SERVER_PORT`) while maintaining full backward compatibility. Also introduces snake\_case property naming (recommended) while keeping camelCase working. ##### API - **Allow metrics with the same name but different labels** ([#​1800](https://redirect.github.com/prometheus/client_java/pull/1800)) by [@​jaydeluca](https://redirect.github.com/jaydeluca) — Enables registration of metrics with the same name, with validation at both registration and scrape time. - **Add stable Metrics class to decouple consumers from protobuf version** ([#​1873](https://redirect.github.com/prometheus/client_java/pull/1873)) by [@​zeitlinger](https://redirect.github.com/zeitlinger) — Introduces a stable `Metrics` class so consumer code no longer needs import updates on protobuf upgrades. ##### OpenTelemetry - **Add OTel support module and make examples standalone** ([#​1868](https://redirect.github.com/prometheus/client_java/pull/1868)) by [@​zeitlinger](https://redirect.github.com/zeitlinger) — New `prometheus-metrics-otel-support` module that bundles the OTel SDK and Prometheus exporter as a single dependency. Examples are now standalone and can be copy-pasted directly. - **Add docs and example for OTel JVM runtime metrics** ([#​1861](https://redirect.github.com/prometheus/client_java/pull/1861)) by [@​zeitlinger](https://redirect.github.com/zeitlinger) ##### Exporters - **Add metricsHandlerPath and registerHealthHandler configuration options to HTTPServer** ([#​1735](https://redirect.github.com/prometheus/client_java/pull/1735)) by [@​Donnerbart](https://redirect.github.com/Donnerbart) - **Disable compression in PrometheusScrapeHandler** ([#​1691](https://redirect.github.com/prometheus/client_java/pull/1691)) by [@​Myllyenko](https://redirect.github.com/Myllyenko) — Adds ability to disable compression in `PrometheusScrapeHandler`. - **Prevent exception in HttpServer exporter when using custom root metrics path** ([#​1772](https://redirect.github.com/prometheus/client_java/pull/1772)) by [@​Donnerbart](https://redirect.github.com/Donnerbart) ##### Instrumentation - **Add custom tags to JVM metrics** ([#​1769](https://redirect.github.com/prometheus/client_java/pull/1769)) by [@​sibasispadhi](https://redirect.github.com/sibasispadhi) - **Verify and document native histograms with custom buckets (NHCB) support** ([#​1846](https://redirect.github.com/prometheus/client_java/pull/1846)) by [@​zeitlinger](https://redirect.github.com/zeitlinger) *** ##### What's Changed ##### 🏕 Features - Adding ability to disable compression in PrometheusScrapeHandler by [@​Myllyenko](https://redirect.github.com/Myllyenko) in [#​1691](https://redirect.github.com/prometheus/client_java/pull/1691) - Add metricsHandlerPath and registerHealthHandler configuration options to HTTPServer by [@​Donnerbart](https://redirect.github.com/Donnerbart) in [#​1735](https://redirect.github.com/prometheus/client_java/pull/1735) - Add custom tags to JVM metrics by [@​sibasispadhi](https://redirect.github.com/sibasispadhi) in [#​1769](https://redirect.github.com/prometheus/client_java/pull/1769) - Prevent exception in HttpServer exporter when using custom root metrics path by [@​Donnerbart](https://redirect.github.com/Donnerbart) in [#​1772](https://redirect.github.com/prometheus/client_java/pull/1772) - Allow metrics with the same name different labels by [@​jaydeluca](https://redirect.github.com/jaydeluca) in [#​1800](https://redirect.github.com/prometheus/client_java/pull/1800) - Improve histogram, summary performance under contention by striping observationCount by [@​jack-berg](https://redirect.github.com/jack-berg) in [#​1794](https://redirect.github.com/prometheus/client_java/pull/1794) - support environment variables in properties by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1828](https://redirect.github.com/prometheus/client_java/pull/1828) - Verify and document native histograms with custom buckets (NHCB) support by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1846](https://redirect.github.com/prometheus/client_java/pull/1846) - Remove help text validation by [@​jaydeluca](https://redirect.github.com/jaydeluca) in [#​1866](https://redirect.github.com/prometheus/client_java/pull/1866) - Add docs and example for OTel JVM runtime metrics by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1861](https://redirect.github.com/prometheus/client_java/pull/1861) - Add OTel support module and make examples standalone by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1868](https://redirect.github.com/prometheus/client_java/pull/1868) - Add stable Metrics class to decouple consumers from protobuf version by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1873](https://redirect.github.com/prometheus/client_java/pull/1873) ##### 🔧 Maintenance - fix native test by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1729](https://redirect.github.com/prometheus/client_java/pull/1729) - use graalvm version that renovate can update by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1733](https://redirect.github.com/prometheus/client_java/pull/1733) - fix: update build command to include 'clean' for benchmarks by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1762](https://redirect.github.com/prometheus/client_java/pull/1762) - fix blog post url by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1787](https://redirect.github.com/prometheus/client_java/pull/1787) - Add test matrix for different java versions by [@​jaydeluca](https://redirect.github.com/jaydeluca) in [#​1781](https://redirect.github.com/prometheus/client_java/pull/1781) - fix javadoc by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1809](https://redirect.github.com/prometheus/client_java/pull/1809) - pom cleanup by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1810](https://redirect.github.com/prometheus/client_java/pull/1810) - separate java update as graal is not working by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1811](https://redirect.github.com/prometheus/client_java/pull/1811) - pin super linter by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1814](https://redirect.github.com/prometheus/client_java/pull/1814) - improve code quality, part 1 by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1808](https://redirect.github.com/prometheus/client_java/pull/1808) - make tests not public by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1818](https://redirect.github.com/prometheus/client_java/pull/1818) - Make super-linter ARM friendly by [@​jaydeluca](https://redirect.github.com/jaydeluca) in [#​1817](https://redirect.github.com/prometheus/client_java/pull/1817) - Run integration tests in matrix by [@​jaydeluca](https://redirect.github.com/jaydeluca) in [#​1802](https://redirect.github.com/prometheus/client_java/pull/1802) - lint only modified links by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1819](https://redirect.github.com/prometheus/client_java/pull/1819) - Run nightly benchmarks by [@​jaydeluca](https://redirect.github.com/jaydeluca) in [#​1803](https://redirect.github.com/prometheus/client_java/pull/1803) - bundle renovate updates by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1829](https://redirect.github.com/prometheus/client_java/pull/1829) - refactor: update exception handling to use specific exception types by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1843](https://redirect.github.com/prometheus/client_java/pull/1843) - Reduce flakyness of testExemplarsClassicHistogram by [@​jaydeluca](https://redirect.github.com/jaydeluca) in [#​1842](https://redirect.github.com/prometheus/client_java/pull/1842) - fix and test gh pages by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1845](https://redirect.github.com/prometheus/client_java/pull/1845) - address todos by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1832](https://redirect.github.com/prometheus/client_java/pull/1832) - re-use super linter script by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1847](https://redirect.github.com/prometheus/client_java/pull/1847) - clean up link checking by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1850](https://redirect.github.com/prometheus/client_java/pull/1850) - add branch coverage, better javadoc lints by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1851](https://redirect.github.com/prometheus/client_java/pull/1851) - fix(renovate): enable updates for opentelemetry-instrumentation-bom-alpha by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1860](https://redirect.github.com/prometheus/client_java/pull/1860) - ignore internal poms by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1862](https://redirect.github.com/prometheus/client_java/pull/1862) ##### 🧹 Chore - add IDEA icon by [@​zeitlinger](https://redirect.github.com/zeitlinger) in [#​1676](https://redirect.github.com/prometheus/client_java/pull/1676) ##### 👒 Dependencies - fix(deps): update dependency commons-io:commons-io to v2.21.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1670](https://redirect.github.com/prometheus/client_java/pull/1670) - chore(deps): update eclipse-temurin:25-jre docker digest to [`4a26dfc`](https://redirect.github.com/prometheus/client_java/commit/4a26dfc) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1671](https://redirect.github.com/prometheus/client_java/pull/1671) - chore(deps): update eclipse-temurin:25-jre docker digest to [`dbfb525`](https://redirect.github.com/prometheus/client_java/commit/dbfb525) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1673](https://redirect.github.com/prometheus/client_java/pull/1673) - chore(deps): update eclipse-temurin docker tag to v25.0.1\_8-jre by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1672](https://redirect.github.com/prometheus/client_java/pull/1672) - chore(deps): update dependency mise to v2025.11.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1674](https://redirect.github.com/prometheus/client_java/pull/1674) - chore(deps): update eclipse-temurin:25.0.1\_8-jre docker digest to [`31fb090`](https://redirect.github.com/prometheus/client_java/commit/31fb090) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1675](https://redirect.github.com/prometheus/client_java/pull/1675) - chore(deps): update grafana/k6 docker digest to [`ef816d9`](https://redirect.github.com/prometheus/client_java/commit/ef816d9) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1677](https://redirect.github.com/prometheus/client_java/pull/1677) - fix(deps): update dependency org.apache.tomcat.embed:tomcat-embed-core to v11.0.14 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1678](https://redirect.github.com/prometheus/client_java/pull/1678) - chore(deps): update eclipse-temurin:25.0.1\_8-jre docker digest to [`ac6ce08`](https://redirect.github.com/prometheus/client_java/commit/ac6ce08) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1679](https://redirect.github.com/prometheus/client_java/pull/1679) - fix(deps): update jetty monorepo to v12.1.4 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1680](https://redirect.github.com/prometheus/client_java/pull/1680) - chore(deps): update jdx/mise-action action to v3.4.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1682](https://redirect.github.com/prometheus/client_java/pull/1682) - chore(deps): update eclipse-temurin:25.0.1\_8-jre docker digest to [`daeb27e`](https://redirect.github.com/prometheus/client_java/commit/daeb27e) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1683](https://redirect.github.com/prometheus/client_java/pull/1683) - fix(deps): update protobuf monorepo by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1681](https://redirect.github.com/prometheus/client_java/pull/1681) - chore(deps): update dependency org.wiremock:wiremock to v3.13.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1685](https://redirect.github.com/prometheus/client_java/pull/1685) - chore(deps): update eclipse-temurin:25.0.1\_8-jre docker digest to [`73fe03b`](https://redirect.github.com/prometheus/client_java/commit/73fe03b) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1687](https://redirect.github.com/prometheus/client_java/pull/1687) - chore(deps): update dependency mise to v2025.11.5 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1688](https://redirect.github.com/prometheus/client_java/pull/1688) - chore(deps): update dependency org.apache.maven.plugins:maven-jar-plugin to v3.5.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1686](https://redirect.github.com/prometheus/client_java/pull/1686) - chore(deps): update actions/checkout digest to [`93cb6ef`](https://redirect.github.com/prometheus/client_java/commit/93cb6ef) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1689](https://redirect.github.com/prometheus/client_java/pull/1689) - chore(deps): update actions/checkout action to v5.0.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1690](https://redirect.github.com/prometheus/client_java/pull/1690) - chore(deps): update grafana/grafana docker tag to v12.3.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1693](https://redirect.github.com/prometheus/client_java/pull/1693) - chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.1.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1692](https://redirect.github.com/prometheus/client_java/pull/1692) - chore(deps): update otel/opentelemetry-collector-contrib docker tag to v0.140.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1695](https://redirect.github.com/prometheus/client_java/pull/1695) - fix(deps): update dependency org.springframework.boot:spring-boot-starter-parent to v3.5.8 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1696](https://redirect.github.com/prometheus/client_java/pull/1696) - chore(deps): update grafana/k6 docker digest to [`d8e305a`](https://redirect.github.com/prometheus/client_java/commit/d8e305a) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1697](https://redirect.github.com/prometheus/client_java/pull/1697) - chore(deps): update actions/checkout action to v6 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1698](https://redirect.github.com/prometheus/client_java/pull/1698) - fix(deps): update dependency org.springframework.boot:spring-boot-starter-parent to v4 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1699](https://redirect.github.com/prometheus/client_java/pull/1699) - chore(deps): update jdx/mise-action action to v3.5.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1700](https://redirect.github.com/prometheus/client_java/pull/1700) - chore(deps): update dependency org.codehaus.mojo:versions-maven-plugin to v2.20.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1701](https://redirect.github.com/prometheus/client_java/pull/1701) - chore(deps): update dependency mise to v2025.11.7 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1702](https://redirect.github.com/prometheus/client_java/pull/1702) - chore(deps): update jdx/mise-action action to v3.5.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1703](https://redirect.github.com/prometheus/client_java/pull/1703) - chore(deps): update grafana/k6 docker digest to [`16bc234`](https://redirect.github.com/prometheus/client_java/commit/16bc234) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1704](https://redirect.github.com/prometheus/client_java/pull/1704) - chore(deps): update dependency org.codehaus.mojo:versions-maven-plugin to v2.20.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1705](https://redirect.github.com/prometheus/client_java/pull/1705) - chore(deps): update dependency com.google.errorprone:error\_prone\_core to v2.45.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1706](https://redirect.github.com/prometheus/client_java/pull/1706) - chore(deps): update module go:github.com/grafana/oats to v0.5.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1707](https://redirect.github.com/prometheus/client_java/pull/1707) - chore(deps): update dependency org.apache.maven.plugins:maven-resources-plugin to v3.4.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1709](https://redirect.github.com/prometheus/client_java/pull/1709) - chore(deps): update dependency org.apache.maven.plugins:maven-source-plugin to v3.4.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1710](https://redirect.github.com/prometheus/client_java/pull/1710) - chore(deps): update dependency mise to v2025.11.11 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1711](https://redirect.github.com/prometheus/client_java/pull/1711) - chore(deps): update dependency com.uber.nullaway:nullaway to v0.12.13 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1713](https://redirect.github.com/prometheus/client_java/pull/1713) - chore(deps): update module go:github.com/grafana/oats to v0.6.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1714](https://redirect.github.com/prometheus/client_java/pull/1714) - chore(deps): update otel/opentelemetry-collector-contrib docker tag to v0.141.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1715](https://redirect.github.com/prometheus/client_java/pull/1715) - chore(deps): update actions/checkout digest to [`8e8c483`](https://redirect.github.com/prometheus/client_java/commit/8e8c483) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1717](https://redirect.github.com/prometheus/client_java/pull/1717) - chore(deps): update actions/checkout action to v6.0.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1718](https://redirect.github.com/prometheus/client_java/pull/1718) - chore(deps): update prom/prometheus docker tag to v3.8.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1716](https://redirect.github.com/prometheus/client_java/pull/1716) - chore(deps): update otel/opentelemetry-collector-contrib:0.141.0 docker digest to [`b14234c`](https://redirect.github.com/prometheus/client_java/commit/b14234c) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1719](https://redirect.github.com/prometheus/client_java/pull/1719) - chore(deps): update actions/setup-java digest to [`f2beeb2`](https://redirect.github.com/prometheus/client_java/commit/f2beeb2) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1720](https://redirect.github.com/prometheus/client_java/pull/1720) - chore(deps): update dependency com.uber.nullaway:nullaway to v0.12.14 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1721](https://redirect.github.com/prometheus/client_java/pull/1721) - fix(deps): update jetty monorepo to v12.1.5 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1722](https://redirect.github.com/prometheus/client_java/pull/1722) - chore(deps): update dependency lychee to v0.22.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1723](https://redirect.github.com/prometheus/client_java/pull/1723) - chore(deps): update dependency mise to v2025.12.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1725](https://redirect.github.com/prometheus/client_java/pull/1725) - fix(deps): update protobuf monorepo by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1724](https://redirect.github.com/prometheus/client_java/pull/1724) - fix(deps): update dependency org.apache.tomcat.embed:tomcat-embed-core to v11.0.15 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1726](https://redirect.github.com/prometheus/client_java/pull/1726) - chore(deps): update dependency org.mockito:mockito-core to v5.21.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1731](https://redirect.github.com/prometheus/client_java/pull/1731) - chore(deps): update eclipse-temurin:25.0.1\_8-jre docker digest to [`f6b0925`](https://redirect.github.com/prometheus/client_java/commit/f6b0925) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1732](https://redirect.github.com/prometheus/client_java/pull/1732) - chore(deps): update actions/cache action to v5 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1736](https://redirect.github.com/prometheus/client_java/pull/1736) - chore(deps): update actions/cache digest to [`9255dc7`](https://redirect.github.com/prometheus/client_java/commit/9255dc7) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1737](https://redirect.github.com/prometheus/client_java/pull/1737) - chore(deps): update dependency mise to v2025.12.7 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1739](https://redirect.github.com/prometheus/client_java/pull/1739) - chore(deps): update dependency org.testcontainers:junit-jupiter to v1.21.4 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1740](https://redirect.github.com/prometheus/client_java/pull/1740) - chore(deps): update super-linter/super-linter action to v8.3.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1743](https://redirect.github.com/prometheus/client_java/pull/1743) - chore(deps): update prom/prometheus docker tag to v3.8.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1742](https://redirect.github.com/prometheus/client_java/pull/1742) - chore(deps): update otel/opentelemetry-collector-contrib docker tag to v0.142.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1741](https://redirect.github.com/prometheus/client_java/pull/1741) - chore(deps): update grafana/grafana docker tag to v12.3.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1745](https://redirect.github.com/prometheus/client_java/pull/1745) - chore(deps): update dependency maven to v3.9.12 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1744](https://redirect.github.com/prometheus/client_java/pull/1744) - fix(deps): update dependency org.springframework.boot:spring-boot-starter-parent to v4.0.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1746](https://redirect.github.com/prometheus/client_java/pull/1746) - chore(deps): update grafana/grafana:12.3.1 docker digest to [`2175aaa`](https://redirect.github.com/prometheus/client_java/commit/2175aaa) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1747](https://redirect.github.com/prometheus/client_java/pull/1747) - chore(deps): update module go:github.com/gohugoio/hugo to v0.153.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1748](https://redirect.github.com/prometheus/client_java/pull/1748) - chore(deps): update dependency com.uber.nullaway:nullaway to v0.12.15 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1749](https://redirect.github.com/prometheus/client_java/pull/1749) - chore(deps): update module go:github.com/gohugoio/hugo to v0.153.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1750](https://redirect.github.com/prometheus/client_java/pull/1750) - chore(deps): update dependency org.codehaus.mojo:exec-maven-plugin to v3.6.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1751](https://redirect.github.com/prometheus/client_java/pull/1751) - chore(deps): update dependency mise to v2025.12.12 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1752](https://redirect.github.com/prometheus/client_java/pull/1752) - chore(deps): update module go:github.com/gohugoio/hugo to v0.153.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1753](https://redirect.github.com/prometheus/client_java/pull/1753) - chore(deps): update super-linter/super-linter action to v8.3.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1754](https://redirect.github.com/prometheus/client_java/pull/1754) - chore(deps): update module go:github.com/gohugoio/hugo to v0.153.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1756](https://redirect.github.com/prometheus/client_java/pull/1756) - chore(deps): update module go:github.com/gohugoio/hugo to v0.153.4 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1757](https://redirect.github.com/prometheus/client_java/pull/1757) - chore(deps): update module go:github.com/gohugoio/hugo to v0.153.5 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1758](https://redirect.github.com/prometheus/client_java/pull/1758) - chore(deps): update module go:github.com/gohugoio/hugo to v0.154.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1759](https://redirect.github.com/prometheus/client_java/pull/1759) - chore(deps): update module go:github.com/gohugoio/hugo to v0.154.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1760](https://redirect.github.com/prometheus/client_java/pull/1760) - chore(deps): update dependency mise to v2025.12.13 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1761](https://redirect.github.com/prometheus/client_java/pull/1761) - chore(deps): update grafana/k6 docker digest to [`a7c79af`](https://redirect.github.com/prometheus/client_java/commit/a7c79af) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1763](https://redirect.github.com/prometheus/client_java/pull/1763) - chore(deps): update otel/opentelemetry-collector-contrib docker tag to v0.143.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1765](https://redirect.github.com/prometheus/client_java/pull/1765) - chore(deps): update otel/opentelemetry-collector-contrib docker tag to v0.143.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1767](https://redirect.github.com/prometheus/client_java/pull/1767) - fix(deps): update junit-framework monorepo to v6.0.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1764](https://redirect.github.com/prometheus/client_java/pull/1764) - chore(deps): update prom/prometheus docker tag to v3.9.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1768](https://redirect.github.com/prometheus/client_java/pull/1768) - chore(deps): update module go:github.com/gohugoio/hugo to v0.154.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1766](https://redirect.github.com/prometheus/client_java/pull/1766) - chore(deps): update prom/prometheus docker tag to v3.9.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1770](https://redirect.github.com/prometheus/client_java/pull/1770) - chore(deps): update dependency org.sonatype.central:central-publishing-maven-plugin to v0.10.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1771](https://redirect.github.com/prometheus/client_java/pull/1771) - chore(deps): update dependency com.google.errorprone:error\_prone\_core to v2.46.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1773](https://redirect.github.com/prometheus/client_java/pull/1773) - chore(deps): update module go:github.com/gohugoio/hugo to v0.154.4 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1775](https://redirect.github.com/prometheus/client_java/pull/1775) - chore(deps): update dependency mise to v2026 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1777](https://redirect.github.com/prometheus/client_java/pull/1777) - chore(deps): update module go:github.com/gohugoio/hugo to v0.154.5 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1776](https://redirect.github.com/prometheus/client_java/pull/1776) - fix(deps): update protobuf monorepo by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1774](https://redirect.github.com/prometheus/client_java/pull/1774) - chore(deps): update eclipse-temurin:25.0.1\_8-jre docker digest to [`968f191`](https://redirect.github.com/prometheus/client_java/commit/968f191) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1779](https://redirect.github.com/prometheus/client_java/pull/1779) - fix(deps): update protobuf monorepo by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1778](https://redirect.github.com/prometheus/client_java/pull/1778) - chore(deps): update eclipse-temurin:25.0.1\_8-jre docker digest to [`96bccca`](https://redirect.github.com/prometheus/client_java/commit/96bccca) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1782](https://redirect.github.com/prometheus/client_java/pull/1782) - chore(deps): update dependency org.codehaus.mojo:versions-maven-plugin to v2.21.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1786](https://redirect.github.com/prometheus/client_java/pull/1786) - chore(deps): update dependency mise to v2026.1.4 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1785](https://redirect.github.com/prometheus/client_java/pull/1785) - chore(deps): update jdx/mise-action action to v3.6.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1784](https://redirect.github.com/prometheus/client_java/pull/1784) - chore(deps): update actions/cache action to v5.0.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1788](https://redirect.github.com/prometheus/client_java/pull/1788) - chore(deps): update grafana/tempo docker tag to v2.9.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1789](https://redirect.github.com/prometheus/client_java/pull/1789) - chore(deps): update eclipse-temurin:25.0.1\_8-jre docker digest to [`9d1d306`](https://redirect.github.com/prometheus/client_java/commit/9d1d306) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1790](https://redirect.github.com/prometheus/client_java/pull/1790) - chore(deps): update jdx/mise-action action to v3.6.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1791](https://redirect.github.com/prometheus/client_java/pull/1791) - chore(deps): update dependency com.uber.nullaway:nullaway to v0.13.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1792](https://redirect.github.com/prometheus/client_java/pull/1792) - chore(deps): update otel/opentelemetry-collector-contrib docker tag to v0.144.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1793](https://redirect.github.com/prometheus/client_java/pull/1793) - chore(deps): update actions/setup-java digest to [`be666c2`](https://redirect.github.com/prometheus/client_java/commit/be666c2) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1796](https://redirect.github.com/prometheus/client_java/pull/1796) - fix(deps): update dependency org.springframework.boot:spring-boot-starter-parent to v4.0.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1797](https://redirect.github.com/prometheus/client_java/pull/1797) - chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.2.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1799](https://redirect.github.com/prometheus/client_java/pull/1799) - chore(deps): update actions/checkout action to v6.0.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1798](https://redirect.github.com/prometheus/client_java/pull/1798) - chore(deps): update dependency org.assertj:assertj-core to v3.27.7 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1801](https://redirect.github.com/prometheus/client_java/pull/1801) - fix(deps): update dependency io.dropwizard.metrics:metrics-core to v4.2.38 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1805](https://redirect.github.com/prometheus/client_java/pull/1805) - chore(deps): update dependency mise to v2026.1.7 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1804](https://redirect.github.com/prometheus/client_java/pull/1804) - fix(deps): update dependency io.dropwizard.metrics5:metrics-core to v5.0.6 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1806](https://redirect.github.com/prometheus/client_java/pull/1806) - chore(deps): update dependency org.assertj:assertj-core to v3.27.7 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1807](https://redirect.github.com/prometheus/client_java/pull/1807) - chore(deps): update dependency java to v25.0.2+10.0.lts by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1813](https://redirect.github.com/prometheus/client_java/pull/1813) - chore(config): migrate Renovate config by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1815](https://redirect.github.com/prometheus/client_java/pull/1815) - fix(deps): update dependency org.apache.tomcat.embed:tomcat-embed-core to v11.0.18 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1820](https://redirect.github.com/prometheus/client_java/pull/1820) - chore(deps): update grafana/tempo docker tag to v2.10.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1821](https://redirect.github.com/prometheus/client_java/pull/1821) - chore(deps): update dependency com.uber.nullaway:nullaway to v0.13.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1822](https://redirect.github.com/prometheus/client_java/pull/1822) - chore(deps): update grafana/grafana docker tag to v12.3.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1824](https://redirect.github.com/prometheus/client_java/pull/1824) - chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.2.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1825](https://redirect.github.com/prometheus/client_java/pull/1825) - chore(deps): update ghcr.io/super-linter/super-linter docker tag to v8.4.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1826](https://redirect.github.com/prometheus/client_java/pull/1826) - chore(deps): update module go:github.com/gohugoio/hugo to v0.155.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1831](https://redirect.github.com/prometheus/client_java/pull/1831) - chore(deps): update super-linter to v8.4.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1830](https://redirect.github.com/prometheus/client_java/pull/1830) - chore(deps): update actions/cache action to v5.0.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1833](https://redirect.github.com/prometheus/client_java/pull/1833) - fix(deps): update jetty monorepo to v12.1.6 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1837](https://redirect.github.com/prometheus/client_java/pull/1837) - chore(deps): update module go:github.com/gohugoio/hugo to v0.155.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1836](https://redirect.github.com/prometheus/client_java/pull/1836) - chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.15.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1839](https://redirect.github.com/prometheus/client_java/pull/1839) - chore(deps): update dependency mise to v2026.2.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1840](https://redirect.github.com/prometheus/client_java/pull/1840) - chore(deps): update module go:github.com/gohugoio/hugo to v0.155.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1841](https://redirect.github.com/prometheus/client_java/pull/1841) - chore(deps): update actions/checkout digest to [`de0fac2`](https://redirect.github.com/prometheus/client_java/commit/de0fac2) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1844](https://redirect.github.com/prometheus/client_java/pull/1844) - fix(deps): update protobuf monorepo by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1835](https://redirect.github.com/prometheus/client_java/pull/1835) - chore(deps): update otel/opentelemetry-collector-contrib docker tag to v0.145.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1849](https://redirect.github.com/prometheus/client_java/pull/1849) - chore(deps): update dependency com.google.errorprone:error\_prone\_core to v2.47.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1848](https://redirect.github.com/prometheus/client_java/pull/1848) - chore(deps): update eclipse-temurin docker tag to v25.0.2\_10-jre by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1853](https://redirect.github.com/prometheus/client_java/pull/1853) - chore(deps): update ghcr.io/super-linter/super-linter docker tag to v8.5.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1856](https://redirect.github.com/prometheus/client_java/pull/1856) - chore(deps): update eclipse-temurin:25.0.2\_10-jre docker digest to [`ad53b91`](https://redirect.github.com/prometheus/client_java/commit/ad53b91) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1857](https://redirect.github.com/prometheus/client_java/pull/1857) - chore(deps): update module go:github.com/gohugoio/hugo to v0.155.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1858](https://redirect.github.com/prometheus/client_java/pull/1858) - chore(deps): update dependency org.apache.maven.plugins:maven-dependency-plugin to v3.10.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1859](https://redirect.github.com/prometheus/client_java/pull/1859) - fix(deps): update dependency io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha to v2.24.0-alpha by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1863](https://redirect.github.com/prometheus/client_java/pull/1863) - chore(deps): update grafana/k6 docker digest to [`1d0ddce`](https://redirect.github.com/prometheus/client_java/commit/1d0ddce) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1864](https://redirect.github.com/prometheus/client_java/pull/1864) - chore(deps): update eclipse-temurin:25.0.2\_10-jre docker digest to [`43a7b50`](https://redirect.github.com/prometheus/client_java/commit/43a7b50) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1867](https://redirect.github.com/prometheus/client_java/pull/1867) - chore(deps): update module go:github.com/grafana/oats to v0.6.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1869](https://redirect.github.com/prometheus/client_java/pull/1869) - chore(deps): update grafana/grafana docker tag to v12.3.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1870](https://redirect.github.com/prometheus/client_java/pull/1870) - fix(deps): update dependency io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha to v2.25.0-alpha by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1871](https://redirect.github.com/prometheus/client_java/pull/1871) - fix(deps): update dependency io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha to v2.25.0-alpha by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​1872](https://redirect.github.com/prometheus/client_java/pull/1872) ##### New Contributors - [@​Myllyenko](https://redirect.github.com/Myllyenko) made their first contribution in [#​1691](https://redirect.github.com/prometheus/client_java/pull/1691) - [@​Donnerbart](https://redirect.github.com/Donnerbart) made their first contribution in [#​1735](https://redirect.github.com/prometheus/client_java/pull/1735) - [@​sibasispadhi](https://redirect.github.com/sibasispadhi) made their first contribution in [#​1769](https://redirect.github.com/prometheus/client_java/pull/1769) - [@​jack-berg](https://redirect.github.com/jack-berg) made their first contribution in [#​1794](https://redirect.github.com/prometheus/client_java/pull/1794) **Full Changelog**:
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-custom-buckets/pom.xml | 2 +- .../example-greeting-service/pom.xml | 2 +- .../example-hello-world-app/pom.xml | 2 +- examples/example-exporter-httpserver/pom.xml | 2 +- examples/example-exporter-multi-target/pom.xml | 2 +- examples/example-exporter-opentelemetry/pom.xml | 2 +- examples/example-exporter-servlet-tomcat/pom.xml | 2 +- examples/example-native-histogram/pom.xml | 2 +- examples/example-otel-jvm-runtime-metrics/pom.xml | 2 +- examples/example-prometheus-properties/pom.xml | 2 +- examples/example-simpleclient-bridge/pom.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/example-custom-buckets/pom.xml b/examples/example-custom-buckets/pom.xml index 52ae60627..ca4c52843 100644 --- a/examples/example-custom-buckets/pom.xml +++ b/examples/example-custom-buckets/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import diff --git a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml index 532b7290b..8621a7e19 100644 --- a/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-greeting-service/pom.xml @@ -24,7 +24,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import diff --git a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml index 4c1702bbe..df861667f 100644 --- a/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml +++ b/examples/example-exemplars-tail-sampling/example-hello-world-app/pom.xml @@ -24,7 +24,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import diff --git a/examples/example-exporter-httpserver/pom.xml b/examples/example-exporter-httpserver/pom.xml index ac9ed5e10..7160339ad 100644 --- a/examples/example-exporter-httpserver/pom.xml +++ b/examples/example-exporter-httpserver/pom.xml @@ -23,7 +23,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import diff --git a/examples/example-exporter-multi-target/pom.xml b/examples/example-exporter-multi-target/pom.xml index 3b736ae36..e5ee1bf83 100644 --- a/examples/example-exporter-multi-target/pom.xml +++ b/examples/example-exporter-multi-target/pom.xml @@ -23,7 +23,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import diff --git a/examples/example-exporter-opentelemetry/pom.xml b/examples/example-exporter-opentelemetry/pom.xml index a94e82ce4..7c7501a57 100644 --- a/examples/example-exporter-opentelemetry/pom.xml +++ b/examples/example-exporter-opentelemetry/pom.xml @@ -23,7 +23,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import diff --git a/examples/example-exporter-servlet-tomcat/pom.xml b/examples/example-exporter-servlet-tomcat/pom.xml index 65b91b5ed..ab5ba0198 100644 --- a/examples/example-exporter-servlet-tomcat/pom.xml +++ b/examples/example-exporter-servlet-tomcat/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import diff --git a/examples/example-native-histogram/pom.xml b/examples/example-native-histogram/pom.xml index eedadf6fe..7d799cc52 100644 --- a/examples/example-native-histogram/pom.xml +++ b/examples/example-native-histogram/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import diff --git a/examples/example-otel-jvm-runtime-metrics/pom.xml b/examples/example-otel-jvm-runtime-metrics/pom.xml index 17aa53a99..58869bfd7 100644 --- a/examples/example-otel-jvm-runtime-metrics/pom.xml +++ b/examples/example-otel-jvm-runtime-metrics/pom.xml @@ -23,7 +23,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import diff --git a/examples/example-prometheus-properties/pom.xml b/examples/example-prometheus-properties/pom.xml index ac0279853..bedd517f7 100644 --- a/examples/example-prometheus-properties/pom.xml +++ b/examples/example-prometheus-properties/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import diff --git a/examples/example-simpleclient-bridge/pom.xml b/examples/example-simpleclient-bridge/pom.xml index 82459eb0c..d0edb60cf 100644 --- a/examples/example-simpleclient-bridge/pom.xml +++ b/examples/example-simpleclient-bridge/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-metrics-bom - 1.5.0-SNAPSHOT + 1.5.0 pom import From bcec4c72721c03f05b5999e208f51ad6af4c6df7 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Sat, 14 Feb 2026 10:22:45 +0100 Subject: [PATCH 820/870] Pin super-linter script to specific commit (#1879) ## Summary - Pin the remote `super-linter.sh` URL to commit `f5d39ffaf01b5bbe815b3821e4e3257db32f49e7` to avoid unexpected breakage from upstream changes ## Test plan - [ ] Verify `mise run lint:super-linter` still works correctly Signed-off-by: Gregor Zeitlinger --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index f539b797e..97c7d96a7 100644 --- a/mise.toml +++ b/mise.toml @@ -49,7 +49,7 @@ run = "./mvnw install -DskipTests -Dcoverage.skip=true" [tasks."lint:super-linter"] description = "Run Super-Linter with auto-fix on the repository" -file = "https://raw.githubusercontent.com/grafana/docker-otel-lgtm/main/.mise/tasks/lint/super-linter.sh" +file = "https://raw.githubusercontent.com/grafana/docker-otel-lgtm/f5d39ffaf01b5bbe815b3821e4e3257db32f49e7/.mise/tasks/lint/super-linter.sh" [tasks."lint:links"] file = "https://raw.githubusercontent.com/open-telemetry/opentelemetry-java-contrib/refs/heads/main/.mise/tasks/lint/links.sh" From 05ad751a40053f11eae90b9e6cbd741814ca71a7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 15 Feb 2026 14:09:14 +0000 Subject: [PATCH 821/870] fix(deps): update junit-framework monorepo to v6.0.3 (#1880) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.junit:junit-bom](https://junit.org/) ([source](https://redirect.github.com/junit-team/junit-framework)) | `6.0.2` → `6.0.3` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.junit:junit-bom/6.0.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.junit:junit-bom/6.0.2/6.0.3?slim=true) | | [org.junit.jupiter:junit-jupiter-params](https://junit.org/) ([source](https://redirect.github.com/junit-team/junit-framework)) | `6.0.2` → `6.0.3` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.junit.jupiter:junit-jupiter-params/6.0.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.junit.jupiter:junit-jupiter-params/6.0.2/6.0.3?slim=true) | | [org.junit.jupiter:junit-jupiter](https://junit.org/) ([source](https://redirect.github.com/junit-team/junit-framework)) | `6.0.2` → `6.0.3` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.junit.jupiter:junit-jupiter/6.0.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.junit.jupiter:junit-jupiter/6.0.2/6.0.3?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 631d0ac32..e8092cce8 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -22,7 +22,7 @@
    25 - 6.0.2 + 6.0.3 diff --git a/pom.xml b/pom.xml index 7373a2cdb..5b6bd34fc 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ --module-name-need-to-be-overridden-- 4.33.5 33.5.0-jre - 6.0.2 + 6.0.3 2.25.0-alpha 8 25 From 4b7cca3248fb2254d70678d7a8e7dabd200ba469 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 16 Feb 2026 07:33:27 +0100 Subject: [PATCH 822/870] Add release-please to automate releases Set up release-please with java release type and always-bump-patch versioning. This replaces the manual release process: release-please maintains a release PR, and merging it creates a tag that triggers the existing Maven Central deploy workflow. Remove bump_snapshot.py and set-version.sh scripts as release-please handles SNAPSHOT version bumps automatically. Signed-off-by: Gregor Zeitlinger --- .github/workflows/release-please.yml | 20 +++++++ .mise/tasks/bump_snapshot.py | 86 ---------------------------- .mise/tasks/set-version.sh | 18 ------ .release-please-config.json | 13 +++++ .release-please-manifest.json | 3 + CONTRIBUTING.md | 9 +++ RELEASING.md | 72 +++++++++++++---------- 7 files changed, 88 insertions(+), 133 deletions(-) create mode 100644 .github/workflows/release-please.yml delete mode 100755 .mise/tasks/bump_snapshot.py delete mode 100755 .mise/tasks/set-version.sh create mode 100644 .release-please-config.json create mode 100644 .release-please-manifest.json diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 000000000..f523b0d2d --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,20 @@ +--- +name: Release Please + +on: + push: + branches: + - main + +permissions: + contents: write + pull-requests: write + +jobs: + release-please: + if: ${{ github.repository == 'prometheus/client_java' }} + runs-on: ubuntu-24.04 + steps: + - uses: googleapis/release-please-action@16a9c90856f42705d54a6fda1823352bdc62cf38 # v4.4.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.mise/tasks/bump_snapshot.py b/.mise/tasks/bump_snapshot.py deleted file mode 100755 index 31db06a04..000000000 --- a/.mise/tasks/bump_snapshot.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python3 - -# [MISE] description="Bump the snapshot version in all pom.xml files" -# [MISE] alias="bump-snapshot" - -""" -Bump the SNAPSHOT version in all pom.xml files. - -By default, increments the minor version (e.g. X.Y.0 -> X.(Y+1).0). -An explicit version can be passed as argument: - mise run bump-snapshot 2.0.0-SNAPSHOT -""" - -import re -import sys -from pathlib import Path - -ROOT = Path(__file__).resolve().parents[2] # repo root -PARENT_POM = ROOT / "prometheus-metrics-parent" / "pom.xml" - - -def current_snapshot() -> str: - """Extract the current SNAPSHOT version from the parent pom.xml.""" - text = PARENT_POM.read_text(encoding="utf-8") - m = re.search( - r"io\.prometheus\s*" - r"client_java_parent\s*" - r"(\S+)", - text, - ) - if not m: - sys.exit("Could not find version in " + str(PARENT_POM)) - version = m.group(1) - if not version.endswith("-SNAPSHOT"): - sys.exit(f"Current version '{version}' is not a SNAPSHOT version") - return version - - -def next_minor(version: str) -> str: - """Increment the minor version: 1.5.0-SNAPSHOT -> 1.6.0-SNAPSHOT.""" - base = version.removesuffix("-SNAPSHOT") - parts = base.split(".") - if len(parts) != 3: - sys.exit(f"Expected three-part version, got '{base}'") - parts[1] = str(int(parts[1]) + 1) - parts[2] = "0" - return ".".join(parts) + "-SNAPSHOT" - - -def find_pom_files() -> list[Path]: - """Find all pom.xml files in the repository.""" - return sorted(ROOT.rglob("pom.xml")) - - -def main() -> None: - old_version = current_snapshot() - - if len(sys.argv) > 1: - new_version = sys.argv[1] - if not new_version.endswith("-SNAPSHOT"): - sys.exit(f"New version must end with -SNAPSHOT, got '{new_version}'") - else: - new_version = next_minor(old_version) - - if old_version == new_version: - sys.exit(f"Old and new version are the same: {old_version}") - - print(f"Bumping {old_version} -> {new_version}") - - updated_count = 0 - for pom in find_pom_files(): - content = pom.read_text(encoding="utf-8") - updated = content.replace(old_version, new_version) - if content != updated: - pom.write_text(updated, encoding="utf-8") - print(f" updated {pom.relative_to(ROOT)}") - updated_count += 1 - - if updated_count == 0: - sys.exit(f"No pom.xml files contain '{old_version}'") - - print(f"\nDone. {updated_count} pom.xml file(s) updated to {new_version}.") - - -if __name__ == "__main__": - main() diff --git a/.mise/tasks/set-version.sh b/.mise/tasks/set-version.sh deleted file mode 100755 index a5947e453..000000000 --- a/.mise/tasks/set-version.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -#MISE description="Update version in all pom.xml files" -#USAGE arg "" help="new version" - -set -euo pipefail - -PARENT_POM="prometheus-metrics-parent/pom.xml" -CURRENT_VERSION=$(sed -n 's/.*\(.*-SNAPSHOT\)<\/version>.*/\1/p' "$PARENT_POM" | head -1) - -if [[ -z "$CURRENT_VERSION" ]]; then - echo "ERROR: could not find SNAPSHOT version in $PARENT_POM" >&2 - exit 1 -fi - -# shellcheck disable=SC2154 # is set by mise -find . -name 'pom.xml' -exec \ - sed -i "s/${CURRENT_VERSION}<\/version>/$usage_version<\/version>/g" {} + diff --git a/.release-please-config.json b/.release-please-config.json new file mode 100644 index 000000000..131941946 --- /dev/null +++ b/.release-please-config.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "java", + "versioning": "always-bump-patch", + "extra-files": [ + "prometheus-metrics-parent/pom.xml", + "integration-tests/it-spring-boot-smoke-test/pom.xml" + ] + } + } +} diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 000000000..dd8fde779 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "1.5.0" +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 922aa5336..f27fdc257 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -56,6 +56,15 @@ or simply mise run compile ``` +## Version Numbers in Examples + +Example `pom.xml` files (under `examples/`) should reference the latest +**released** version, not a SNAPSHOT. After each release, Renovate +updates these versions automatically. + +Only use a SNAPSHOT version in an example when it demonstrates a new +feature that has not been released yet. + ## Updating the Protobuf Java Classes The generated protobuf `Metrics.java` lives in a versioned package diff --git a/RELEASING.md b/RELEASING.md index 35a2e3185..25f2d59a5 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,44 +1,58 @@ # Releasing Instructions for Prometheus Java Client -## Before the Release +Releases are automated via +[release-please](https://github.com/googleapis/release-please). -If there have been significant changes since the last release, update the -benchmarks before creating a new release: +## How It Works -```shell -mise run update-benchmarks -``` +1. Commits to `main` using + [Conventional Commits](https://www.conventionalcommits.org/) are + tracked by release-please. +2. Release-please maintains a release PR that accumulates changes and + updates the changelog. +3. When the release PR is merged, release-please creates a GitHub + release and a `vX.Y.Z` tag. +4. The tag triggers the existing `release.yml` workflow, which deploys + to Maven Central. +5. After tagging, release-please opens a follow-up PR to bump the + SNAPSHOT version in all `pom.xml` files. -## Create a Release +## Patch Release (default) -1. Go to -2. Click on "Choose a tag", enter the tag name (e.g. `v0.1.0`), and click "Create a new tag". -3. Click on "Generate release notes" to auto-generate the release notes based on the commits since - the last release. -4. Click on "Publish release". +Simply merge the release PR — release-please bumps the patch version +by default (e.g. `1.5.0` -> `1.5.1`). -## Major or minor release +## Minor or Major Release -After the release is created, bump the snapshot version in all -`pom.xml` files: +Add a `release-as: X.Y.0` footer to any commit on `main`: -```shell -# Auto-increment the minor version (e.g. 1.5.0-SNAPSHOT -> 1.6.0-SNAPSHOT) -mise run bump-snapshot +```text +feat: add new feature + +release-as: 1.6.0 +``` -# Or specify an explicit version (e.g. for a major bump) -mise run bump-snapshot 2.0.0-SNAPSHOT +Alternatively, edit the release PR title to +`chore(main): release 1.6.0`. + +## Before the Release + +If there have been significant changes since the last release, update +the benchmarks before merging the release PR: + +```shell +mise run update-benchmarks ``` -## If the GPG key expired +## If the GPG Key Expired 1. Generate a new key: -2. Distribute the - key: -3. use `gpg --armor --export-secret-keys YOUR_ID` to - export ([docs](https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#gpg)) -4. Update the - passphrase: -5. Update the GPG - key: +2. Distribute the key: + +3. Use `gpg --armor --export-secret-keys YOUR_ID` to export + ([docs](https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#gpg)) +4. Update the passphrase: + +5. Update the GPG key: + From c050435a4153046c72d158991c4c8e064dfb24ec Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 16 Feb 2026 18:27:07 +0100 Subject: [PATCH 823/870] fix: inline set-version logic in build-release.sh (#1884) ## Summary - `set-version.sh` was deleted in 4b7cca32 but `build-release.sh` still called `mise run set-version`, breaking `mise run build-release` and the `test-release-build.yml` CI workflow - Inlines the version-setting logic (find+sed across all pom.xml files) directly into `build-release.sh` ## Test plan - [x] `mise run build` passes - [x] `mise run build-release` passes (previously failed with missing task error) Signed-off-by: Gregor Zeitlinger --- .mise/tasks/build-release.sh | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/.mise/tasks/build-release.sh b/.mise/tasks/build-release.sh index b7c18d513..9ddb48e53 100755 --- a/.mise/tasks/build-release.sh +++ b/.mise/tasks/build-release.sh @@ -5,17 +5,18 @@ set -euo pipefail -# shellcheck disable=SC2154 # is set by mise -if [[ -z "${usage_tag:-}" ]]; then - PARENT_POM="prometheus-metrics-parent/pom.xml" - usage_tag=$(sed -n 's/.*\(.*-SNAPSHOT\)<\/version>.*/\1/p' "$PARENT_POM" | head -1) - if [[ -z "$usage_tag" ]]; then - echo "ERROR: could not find SNAPSHOT version in $PARENT_POM" >&2 - exit 1 - fi +PARENT_POM="prometheus-metrics-parent/pom.xml" +CURRENT_VERSION=$(sed -n 's/.*\(.*-SNAPSHOT\)<\/version>.*/\1/p' "$PARENT_POM" | head -1) + +if [[ -z "$CURRENT_VERSION" ]]; then + echo "ERROR: could not find SNAPSHOT version in $PARENT_POM" >&2 + exit 1 fi -VERSION=${usage_tag#v} +# shellcheck disable=SC2154 # is set by mise +VERSION=${usage_tag:-$CURRENT_VERSION} +VERSION=${VERSION#v} -mise run set-version "$VERSION" +find . -name 'pom.xml' -exec \ + sed -i "s/${CURRENT_VERSION}<\/version>/${VERSION}<\/version>/g" {} + mvn -B package -P 'release,!default,!examples-and-integration-tests' -Dmaven.test.skip=true -Dgpg.skip=true From 4931b55aa9e6f8eca221bc433d4eb8714e3c24fc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 17:36:29 +0000 Subject: [PATCH 824/870] chore(deps): update grafana/k6 docker digest to 5e937f4 (#1881) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | grafana/k6 | digest | `1d0ddce` → `5e937f4` | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index 6c20e3999..c7d8979c0 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -68,7 +68,7 @@ services: - ./config/grafana-dashboards.yaml:/etc/grafana/provisioning/dashboards/grafana-dashboards.yaml - ./config/grafana-example-dashboard.json:/etc/grafana/example-dashboard.json k6: - image: grafana/k6@sha256:1d0ddceb1550725105e39d246a383a247b8607372ed63d2046cf9d6976487a85 + image: grafana/k6@sha256:5e937f439684142ba7803722b42e3c9ac9233cfa01d561de0596c1c2794fd680 network_mode: host volumes: - ./config/k6-script.js:/k6-script.js From 1b8f56d3f45188829752e0bf3a3558a9228999a5 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 16 Feb 2026 20:43:51 +0100 Subject: [PATCH 825/870] ci: replace linting setup with flint (#1883) ## Summary - Replace the custom super-linter setup with [flint](https://github.com/grafana/flint) v0.4.0, which provides shared, maintained lint tasks (super-linter, link checking, renovate-deps) - Use flint's Renovate shareable preset for custom managers instead of inline config - Remove manual URL remap step from lint workflow (now handled by flint's links.sh) - Add `lint:renovate-deps` task to verify tracked Renovate dependencies - Move release-please config and manifest into `.github/config/` - Add PR title linting workflow (`action-semantic-pull-request`) ## Test plan - [ ] CI passes (lint, build, tests) - [ ] Release-please workflow still triggers correctly with moved config - [ ] PR title lint workflow runs on new PRs --------- Signed-off-by: Gregor Zeitlinger --- .editorconfig | 4 +- .../config/.release-please-manifest.json | 0 .../config/release-please-config.json | 0 .github/renovate-tracked-deps.json | 560 ++++++++++++++++++ .github/renovate.json5 | 11 +- .github/workflows/lint-rest.yml | 34 -- .github/workflows/lint.yml | 31 + .github/workflows/pr-title.yml | 18 + .github/workflows/release-please.yml | 3 + .github/workflows/super-linter.yml | 23 - .mise/tasks/lint/bom.py | 3 - CLAUDE.md | 7 +- CONTRIBUTING.md | 6 +- mise.toml | 43 +- 14 files changed, 643 insertions(+), 100 deletions(-) rename .release-please-manifest.json => .github/config/.release-please-manifest.json (100%) rename .release-please-config.json => .github/config/release-please-config.json (100%) create mode 100644 .github/renovate-tracked-deps.json delete mode 100644 .github/workflows/lint-rest.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/pr-title.yml delete mode 100644 .github/workflows/super-linter.yml diff --git a/.editorconfig b/.editorconfig index 8bf486f51..80219f95e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,7 +7,7 @@ indent_size = 2 [{version-rules.xml,maven-wrapper.properties,checkstyle.xml,docker-compose.yaml,docker-compose.yml,Dockerfile,example_target_info.json,mise.toml,mvnm,mvnw.cmd,generate-protobuf.sh,.gitleaksignore,prometheus.properties}] max_line_length = 200 -[{grafana-dashboard-*.json,.editorconfig,super-linter.env,renovate.json5}] +[{grafana-dashboard-*.json,.editorconfig,super-linter.env,lychee.toml,renovate.json5}] max_line_length = 300 [pom.xml] @@ -18,5 +18,5 @@ max_line_length = 120 indent_size = 4 max_line_length = 120 -[{.mise/tasks/build-release.sh,.mise/tasks/lint/super-linter.sh,.mise/tasks/lint/links-in-modified-files.sh,.github/workflows/multi-version-test.yml,.github/workflows/lint-rest.yml}] +[{.mise/tasks/build-release.sh,.github/workflows/multi-version-test.yml}] max_line_length = 200 diff --git a/.release-please-manifest.json b/.github/config/.release-please-manifest.json similarity index 100% rename from .release-please-manifest.json rename to .github/config/.release-please-manifest.json diff --git a/.release-please-config.json b/.github/config/release-please-config.json similarity index 100% rename from .release-please-config.json rename to .github/config/release-please-config.json diff --git a/.github/renovate-tracked-deps.json b/.github/renovate-tracked-deps.json new file mode 100644 index 000000000..d3089ecb7 --- /dev/null +++ b/.github/renovate-tracked-deps.json @@ -0,0 +1,560 @@ +{ + ".github/renovate.json5": { + "renovate-config-presets": ["grafana/flint"] + }, + ".mise/envs/native/mise.toml": { + "mise": ["java"] + }, + ".mvn/wrapper/maven-wrapper.properties": { + "maven-wrapper": ["maven"] + }, + "benchmarks/pom.xml": { + "maven": [ + "com.codahale.metrics:metrics-core", + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exposition-textformats", + "io.prometheus:simpleclient", + "org.openjdk.jmh:jmh-core", + "org.openjdk.jmh:jmh-generator-annprocess" + ] + }, + "integration-tests/it-common/pom.xml": { + "maven": [ + "io.prometheus:integration-tests", + "io.prometheus:prometheus-metrics-exposition-formats" + ] + }, + "integration-tests/it-exporter/it-exporter-duplicate-metrics-sample/pom.xml": { + "maven": [ + "io.prometheus:it-exporter", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-httpserver" + ] + }, + "integration-tests/it-exporter/it-exporter-httpserver-sample/pom.xml": { + "maven": [ + "io.prometheus:it-exporter", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-httpserver" + ] + }, + "integration-tests/it-exporter/it-exporter-no-protobuf/pom.xml": { + "maven": [ + "io.prometheus:it-exporter", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-httpserver" + ] + }, + "integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml": { + "maven": [ + "io.prometheus:it-exporter", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-servlet-jakarta", + "org.eclipse.jetty.ee10:jetty-ee10-servlet", + "org.eclipse.jetty:jetty-server" + ] + }, + "integration-tests/it-exporter/it-exporter-servlet-tomcat-sample/pom.xml": { + "maven": [ + "io.prometheus:it-exporter", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-servlet-jakarta", + "org.apache.tomcat.embed:tomcat-embed-core" + ] + }, + "integration-tests/it-exporter/it-exporter-test/pom.xml": { + "maven": ["io.prometheus:it-common", "io.prometheus:it-exporter"] + }, + "integration-tests/it-exporter/it-no-protobuf-test/pom.xml": { + "maven": ["io.prometheus:it-common", "io.prometheus:it-exporter"] + }, + "integration-tests/it-exporter/pom.xml": { + "maven": ["io.prometheus:integration-tests"] + }, + "integration-tests/it-pushgateway/pom.xml": { + "maven": [ + "com.jayway.jsonpath:json-path", + "com.squareup.okhttp:okhttp", + "io.prometheus:integration-tests", + "io.prometheus:it-common", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-pushgateway" + ] + }, + "integration-tests/it-spring-boot-smoke-test/pom.xml": { + "maven": [ + "com.diffplug.spotless:spotless-maven-plugin", + "io.prometheus:it-common", + "io.prometheus:prometheus-metrics-bom", + "org.junit:junit-bom", + "org.springframework.boot:spring-boot-starter-parent" + ] + }, + "integration-tests/pom.xml": { + "maven": [ + "commons-io:commons-io", + "io.prometheus:client_java", + "org.testcontainers:junit-jupiter" + ] + }, + "mise.toml": { + "mise": [ + "go:github.com/gohugoio/hugo", + "go:github.com/grafana/oats", + "java", + "lychee", + "node", + "npm:renovate", + "protoc" + ], + "regex": ["ghcr.io/super-linter/super-linter", "grafana/flint"] + }, + "mvnw": { + "maven-wrapper": ["maven-wrapper"] + }, + "mvnw.cmd": { + "maven-wrapper": ["maven-wrapper"] + }, + "pom.xml": { + "maven": [ + "com.google.code.findbugs:jsr305", + "com.google.errorprone:error_prone_core", + "com.google.guava:guava", + "com.google.protobuf:protobuf-java", + "com.uber.nullaway:nullaway", + "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha", + "io.opentelemetry:opentelemetry-proto", + "io.prometheus:client_java_parent", + "org.apache.felix:maven-bundle-plugin", + "org.apache.maven.plugins:maven-checkstyle-plugin", + "org.apache.maven.plugins:maven-clean-plugin", + "org.apache.maven.plugins:maven-compiler-plugin", + "org.apache.maven.plugins:maven-dependency-plugin", + "org.apache.maven.plugins:maven-deploy-plugin", + "org.apache.maven.plugins:maven-enforcer-plugin", + "org.apache.maven.plugins:maven-failsafe-plugin", + "org.apache.maven.plugins:maven-install-plugin", + "org.apache.maven.plugins:maven-jar-plugin", + "org.apache.maven.plugins:maven-javadoc-plugin", + "org.apache.maven.plugins:maven-resources-plugin", + "org.apache.maven.plugins:maven-shade-plugin", + "org.apache.maven.plugins:maven-site-plugin", + "org.apache.maven.plugins:maven-surefire-plugin", + "org.assertj:assertj-core", + "org.awaitility:awaitility", + "org.codehaus.mojo:build-helper-maven-plugin", + "org.codehaus.mojo:exec-maven-plugin", + "org.codehaus.mojo:versions-maven-plugin", + "org.jacoco:jacoco-maven-plugin", + "org.junit-pioneer:junit-pioneer", + "org.junit.jupiter:junit-jupiter", + "org.junit.jupiter:junit-jupiter-params", + "org.junit:junit-bom", + "org.mockito:mockito-core", + "org.slf4j:slf4j-simple", + "org.wiremock:wiremock" + ] + }, + "prometheus-metrics-bom/pom.xml": { + "maven": [ + "io.prometheus:client_java_parent", + "io.prometheus:prometheus-metrics-config", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-common", + "io.prometheus:prometheus-metrics-exporter-httpserver", + "io.prometheus:prometheus-metrics-exporter-opentelemetry", + "io.prometheus:prometheus-metrics-exporter-opentelemetry-no-otel", + "io.prometheus:prometheus-metrics-exporter-opentelemetry-otel-agent-resources", + "io.prometheus:prometheus-metrics-exporter-pushgateway", + "io.prometheus:prometheus-metrics-exporter-servlet-jakarta", + "io.prometheus:prometheus-metrics-exporter-servlet-javax", + "io.prometheus:prometheus-metrics-exposition-formats", + "io.prometheus:prometheus-metrics-exposition-formats-no-protobuf", + "io.prometheus:prometheus-metrics-exposition-textformats", + "io.prometheus:prometheus-metrics-instrumentation-caffeine", + "io.prometheus:prometheus-metrics-instrumentation-dropwizard", + "io.prometheus:prometheus-metrics-instrumentation-dropwizard5", + "io.prometheus:prometheus-metrics-instrumentation-guava", + "io.prometheus:prometheus-metrics-instrumentation-jvm", + "io.prometheus:prometheus-metrics-model", + "io.prometheus:prometheus-metrics-otel-support", + "io.prometheus:prometheus-metrics-simpleclient-bridge", + "io.prometheus:prometheus-metrics-tracer", + "io.prometheus:prometheus-metrics-tracer-common", + "io.prometheus:prometheus-metrics-tracer-initializer", + "io.prometheus:prometheus-metrics-tracer-otel", + "io.prometheus:prometheus-metrics-tracer-otel-agent" + ] + }, + "prometheus-metrics-config/pom.xml": { + "maven": ["io.prometheus:client_java"] + }, + "prometheus-metrics-core/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-config", + "io.prometheus:prometheus-metrics-exposition-formats-no-protobuf", + "io.prometheus:prometheus-metrics-model", + "io.prometheus:prometheus-metrics-tracer-initializer", + "org.apache.commons:commons-math3" + ] + }, + "prometheus-metrics-exporter-common/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exposition-formats", + "io.prometheus:prometheus-metrics-exposition-textformats", + "io.prometheus:prometheus-metrics-model" + ] + }, + "prometheus-metrics-exporter-httpserver/pom.xml": { + "maven": ["io.prometheus:client_java", "io.prometheus:prometheus-metrics-exporter-common"] + }, + "prometheus-metrics-exporter-opentelemetry-otel-agent-resources/pom.xml": { + "maven": [ + "io.opentelemetry:opentelemetry-api", + "io.opentelemetry:opentelemetry-context", + "io.prometheus:client_java" + ] + }, + "prometheus-metrics-exporter-opentelemetry-shaded/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-opentelemetry-otel-agent-resources" + ] + }, + "prometheus-metrics-exporter-opentelemetry/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-opentelemetry-otel-agent-resources" + ] + }, + "prometheus-metrics-exporter-pushgateway/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-common", + "org.mock-server:mockserver-netty-no-dependencies" + ] + }, + "prometheus-metrics-exporter-servlet-jakarta/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-common", + "jakarta.servlet:jakarta.servlet-api" + ] + }, + "prometheus-metrics-exporter-servlet-javax/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-common", + "javax.servlet:javax.servlet-api" + ] + }, + "prometheus-metrics-exposition-formats-shaded/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-exposition-textformats" + ] + }, + "prometheus-metrics-exposition-formats/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-exposition-textformats" + ] + }, + "prometheus-metrics-exposition-textformats/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-config", + "io.prometheus:prometheus-metrics-model" + ] + }, + "prometheus-metrics-instrumentation-caffeine/pom.xml": { + "maven": [ + "com.github.ben-manes.caffeine:caffeine", + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exposition-textformats" + ] + }, + "prometheus-metrics-instrumentation-dropwizard/pom.xml": { + "maven": [ + "io.dropwizard.metrics:metrics-core", + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-httpserver", + "io.prometheus:prometheus-metrics-exposition-textformats", + "io.prometheus:prometheus-metrics-instrumentation-dropwizard5" + ] + }, + "prometheus-metrics-instrumentation-dropwizard5/pom.xml": { + "maven": [ + "io.dropwizard.metrics5:metrics-core", + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-httpserver", + "io.prometheus:prometheus-metrics-exposition-textformats" + ] + }, + "prometheus-metrics-instrumentation-guava/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exposition-textformats" + ] + }, + "prometheus-metrics-instrumentation-jvm/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-core", + "io.prometheus:prometheus-metrics-exporter-httpserver", + "io.prometheus:prometheus-metrics-exposition-textformats" + ] + }, + "prometheus-metrics-model/pom.xml": { + "maven": ["io.prometheus:client_java", "io.prometheus:prometheus-metrics-config"] + }, + "prometheus-metrics-otel-support/pom.xml": { + "maven": ["io.prometheus:client_java"] + }, + "prometheus-metrics-parent/pom.xml": { + "maven": [ + "com.diffplug.spotless:spotless-maven-plugin", + "org.apache.maven.plugins:maven-gpg-plugin", + "org.apache.maven.plugins:maven-source-plugin", + "org.sonatype.central:central-publishing-maven-plugin" + ] + }, + "prometheus-metrics-simpleclient-bridge/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:prometheus-metrics-config", + "io.prometheus:prometheus-metrics-exposition-textformats", + "io.prometheus:prometheus-metrics-model", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_common" + ] + }, + "prometheus-metrics-tracer/pom.xml": { + "maven": ["io.prometheus:client_java"] + }, + "prometheus-metrics-tracer/prometheus-metrics-tracer-common/pom.xml": { + "maven": ["io.prometheus:prometheus-metrics-tracer"] + }, + "prometheus-metrics-tracer/prometheus-metrics-tracer-initializer/pom.xml": { + "maven": [ + "io.prometheus:prometheus-metrics-tracer", + "io.prometheus:prometheus-metrics-tracer-common", + "io.prometheus:prometheus-metrics-tracer-otel", + "io.prometheus:prometheus-metrics-tracer-otel-agent" + ] + }, + "prometheus-metrics-tracer/prometheus-metrics-tracer-otel-agent/pom.xml": { + "maven": [ + "io.prometheus:prometheus-metrics-tracer", + "io.prometheus:prometheus-metrics-tracer-common" + ] + }, + "prometheus-metrics-tracer/prometheus-metrics-tracer-otel/pom.xml": { + "maven": [ + "io.prometheus:prometheus-metrics-tracer", + "io.prometheus:prometheus-metrics-tracer-common" + ] + }, + "simpleclient-archive/integration_tests/it_common/pom.xml": { + "maven": ["io.prometheus:integration_tests"] + }, + "simpleclient-archive/integration_tests/it_exemplars_otel_agent/pom.xml": { + "maven": [ + "ch.qos.logback:logback-classic", + "io.prometheus:integration_tests", + "io.prometheus:it_common", + "io.prometheus:simpleclient_bom", + "io.prometheus:simpleclient_hotspot", + "io.prometheus:simpleclient_servlet", + "org.springframework.boot:spring-boot-dependencies", + "org.springframework.boot:spring-boot-maven-plugin" + ] + }, + "simpleclient-archive/integration_tests/it_exemplars_otel_sdk/pom.xml": { + "maven": [ + "io.opentelemetry:opentelemetry-api", + "io.opentelemetry:opentelemetry-sdk", + "io.prometheus:integration_tests", + "io.prometheus:it_common", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_httpserver" + ] + }, + "simpleclient-archive/integration_tests/it_java_versions/pom.xml": { + "maven": [ + "io.prometheus:integration_tests", + "io.prometheus:it_common", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_hotspot", + "io.prometheus:simpleclient_httpserver" + ] + }, + "simpleclient-archive/integration_tests/it_log4j2/pom.xml": { + "maven": [ + "io.prometheus:integration_tests", + "io.prometheus:it_common", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_httpserver", + "io.prometheus:simpleclient_log4j2", + "org.apache.logging.log4j:log4j-api", + "org.apache.logging.log4j:log4j-core" + ] + }, + "simpleclient-archive/integration_tests/it_pushgateway/pom.xml": { + "maven": [ + "ch.qos.logback:logback-classic", + "com.squareup.okhttp3:okhttp", + "io.prometheus:integration_tests", + "io.prometheus:it_common", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_pushgateway" + ] + }, + "simpleclient-archive/integration_tests/it_servlet_jakarta_exporter_webxml/pom.xml": { + "maven": [ + "ch.qos.logback:logback-classic", + "com.squareup.okhttp3:okhttp", + "io.prometheus:integration_tests", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_hotspot", + "io.prometheus:simpleclient_servlet_jakarta", + "jakarta.servlet:jakarta.servlet-api", + "org.apache.maven.plugins:maven-war-plugin" + ] + }, + "simpleclient-archive/integration_tests/pom.xml": { + "maven": [ + "ch.qos.logback:logback-classic", + "com.squareup.okhttp3:okhttp", + "io.prometheus:client_java", + "org.testcontainers:testcontainers" + ] + }, + "simpleclient-archive/simpleclient_graphite_bridge/pom.xml": { + "maven": ["io.prometheus:client_java", "io.prometheus:simpleclient"] + }, + "simpleclient-archive/simpleclient_hibernate/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "org.hibernate:hibernate-core" + ] + }, + "simpleclient-archive/simpleclient_httpserver/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_common", + "javax.xml.bind:jaxb-api" + ] + }, + "simpleclient-archive/simpleclient_jetty/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "org.eclipse.jetty:jetty-server", + "org.eclipse.jetty:jetty-servlet", + "org.hamcrest:hamcrest-all" + ] + }, + "simpleclient-archive/simpleclient_jetty_jdk8/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "org.eclipse.jetty:jetty-server", + "org.eclipse.jetty:jetty-servlet", + "org.hamcrest:hamcrest-all" + ] + }, + "simpleclient-archive/simpleclient_log4j/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "org.apache.logging.log4j:log4j-1.2-api", + "org.apache.logging.log4j:log4j-core" + ] + }, + "simpleclient-archive/simpleclient_log4j2/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "org.apache.logging.log4j:log4j-core" + ] + }, + "simpleclient-archive/simpleclient_logback/pom.xml": { + "maven": [ + "ch.qos.logback:logback-classic", + "io.prometheus:client_java", + "io.prometheus:simpleclient" + ] + }, + "simpleclient-archive/simpleclient_servlet/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_common", + "io.prometheus:simpleclient_servlet_common", + "javax.servlet:javax.servlet-api", + "org.eclipse.jetty:jetty-servlet" + ] + }, + "simpleclient-archive/simpleclient_servlet_common/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_common" + ] + }, + "simpleclient-archive/simpleclient_servlet_jakarta/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_common", + "io.prometheus:simpleclient_servlet_common", + "jakarta.servlet:jakarta.servlet-api", + "org.eclipse.jetty:jetty-servlet" + ] + }, + "simpleclient-archive/simpleclient_spring_web/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_common", + "org.apache.commons:commons-lang3", + "org.aspectj:aspectjweaver", + "org.springframework:spring-aop", + "org.springframework:spring-context", + "org.springframework:spring-test", + "org.springframework:spring-web" + ] + }, + "simpleclient-archive/simpleclient_vertx/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_common", + "io.vertx:vertx-web" + ] + }, + "simpleclient-archive/simpleclient_vertx4/pom.xml": { + "maven": [ + "io.prometheus:client_java", + "io.prometheus:simpleclient", + "io.prometheus:simpleclient_common", + "io.vertx:vertx-web" + ] + } +} diff --git a/.github/renovate.json5 b/.github/renovate.json5 index f3bad3c6f..ff4363ba5 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -1,6 +1,6 @@ { $schema: "https://docs.renovatebot.com/renovate-schema.json", - extends: ["config:best-practices", "config:recommended"], + extends: ["config:best-practices", "config:recommended", "github>grafana/flint"], platformCommit: "enabled", automerge: true, ignorePaths: [ @@ -33,12 +33,5 @@ matchPackageNames: ["/^io\\.prometheus:(examples|example-.+|integration-tests|it-.+)$/"], }, ], - customManagers: [ - { - customType: "regex", - description: "Update _VERSION variables in mise.toml", - managerFilePatterns: ["/^mise\\.toml$/"], - matchStrings: ['# renovate: datasource=(?[a-z-]+?)(?: depName=(?.+?))?(?: packageName=(?.+?))?(?: versioning=(?[a-z-]+?))?\\s.+?_VERSION="?(?[^@"]+?)(?:@(?sha256:[a-f0-9]+))?"?\\s'], - }, - ], + customManagers: [], } diff --git a/.github/workflows/lint-rest.yml b/.github/workflows/lint-rest.yml deleted file mode 100644 index b30c81443..000000000 --- a/.github/workflows/lint-rest.yml +++ /dev/null @@ -1,34 +0,0 @@ ---- -name: Lint What Super Linter Can't - -on: - pull_request: - -permissions: {} - -jobs: - lint: - permissions: - contents: read - runs-on: ubuntu-24.04 - steps: - - name: Check out - with: - persist-credentials: false - fetch-depth: 0 # needed for merge-base used in lint:links-in-modified-files - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 - - - name: Remap main branch URLs to PR branch for link checking - env: - GITHUB_HEAD_REF: ${{ github.head_ref }} - PR_HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }} - run: | - sed -i "/^remap = \[$/a\ \"https://github.com/prometheus/client_java/blob/main/(.*) https://github.com/${PR_HEAD_REPO}/blob/${GITHUB_HEAD_REF}/\$1\"," .github/config/lychee.toml - sed -i "/^remap = \[$/a\ \"https://github.com/prometheus/client_java/tree/main/(.*) https://github.com/${PR_HEAD_REPO}/tree/${GITHUB_HEAD_REF}/\$1\"," .github/config/lychee.toml - - - name: Lint for pull requests - env: - GITHUB_TOKEN: ${{ github.token }} - GITHUB_HEAD_SHA: ${{ github.event.pull_request.head.sha }} - run: mise run lint:rest-ci diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..c6a2575c1 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,31 @@ +--- +name: Lint + +on: + pull_request: + +permissions: {} + +jobs: + lint: + runs-on: ubuntu-24.04 + + permissions: + contents: read + + steps: + - name: Checkout code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + fetch-depth: 0 # needed for git diff --merge-base in lint:links + + - name: Setup mise + uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + + - name: Lint + env: + GITHUB_TOKEN: ${{ github.token }} + GITHUB_HEAD_SHA: ${{ github.event.pull_request.head.sha }} + PR_HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }} + run: mise run lint diff --git a/.github/workflows/pr-title.yml b/.github/workflows/pr-title.yml new file mode 100644 index 000000000..76a13e3df --- /dev/null +++ b/.github/workflows/pr-title.yml @@ -0,0 +1,18 @@ +--- +name: PR Title + +on: + pull_request: + types: + - opened + - edited +permissions: + pull-requests: read + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1 + env: + GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index f523b0d2d..75cf34f16 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -16,5 +16,8 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: googleapis/release-please-action@16a9c90856f42705d54a6fda1823352bdc62cf38 # v4.4.0 + id: release-please with: token: ${{ secrets.GITHUB_TOKEN }} + config-file: .github/config/release-please-config.json + manifest-file: .github/config/.release-please-manifest.json diff --git a/.github/workflows/super-linter.yml b/.github/workflows/super-linter.yml deleted file mode 100644 index 332221bf7..000000000 --- a/.github/workflows/super-linter.yml +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: Lint - -on: [pull_request] - -jobs: - lint: - runs-on: ubuntu-24.04 - - permissions: - contents: read - - steps: - - name: Checkout code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - persist-credentials: false - fetch-depth: 0 - - - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 - - - name: Super-linter - run: mise run lint:super-linter --no-fix diff --git a/.mise/tasks/lint/bom.py b/.mise/tasks/lint/bom.py index bada5bc9f..d77b88e23 100755 --- a/.mise/tasks/lint/bom.py +++ b/.mise/tasks/lint/bom.py @@ -36,7 +36,6 @@ def add_dir(dir_path: Path, want: List[str]): raise FileNotFoundError(f"Directory {dir_path} does not exist.") if any(dir_path.name == ig for ig in IGNORE_DIRS): - print(f"Skipping {dir_path}") return pom = dir_path / "pom.xml" @@ -47,7 +46,6 @@ def add_dir(dir_path: Path, want: List[str]): if not artifact_id: raise RuntimeError(f"No artifactId found in {pom}") - print(f"Found artifactId '{artifact_id}' in {pom}") want.append(artifact_id) @@ -108,7 +106,6 @@ def main() -> int: sys.stdout.writelines(diff) return 1 else: - print("BOM file is up to date.") return 0 except Exception as e: diff --git a/CLAUDE.md b/CLAUDE.md index 406194944..3e5ed1592 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -91,7 +91,9 @@ Pre-built instrumentations: `prometheus-metrics-instrumentation-jvm`, `-caffeine ### Non-Java Files (Markdown, YAML, JSON, shell scripts, etc.) -- **ALWAYS** run `mise run lint:super-linter` after modifying non-Java files +- **ALWAYS** run `mise run lint` after modifying non-Java files + (runs super-linter + link checking + BOM check) +- `mise run fix` auto-fixes lint issues - Super-linter will **auto-fix** many issues (formatting, trailing whitespace, etc.) - It only reports ERROR-level issues (configured via `LOG_LEVEL=ERROR` in `.github/super-linter.env`) - Common issues caught: @@ -107,7 +109,8 @@ Pre-built instrumentations: `prometheus-metrics-instrumentation-jvm`, `-caffeine mise run build # After modifying non-Java files (run BEFORE committing) -mise run lint:super-linter +mise run lint +# or to auto-fix: mise run fix ``` ## Testing diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f27fdc257..2abbd91e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,11 @@ Run `./mvnw spotless:apply` to format the code (only changed files) before commi Or run all the linters: -`mise run lint:super-linter` +`mise run lint` + +To autofix linting issues: + +`mise run fix` ## Running Tests diff --git a/mise.toml b/mise.toml index 97c7d96a7..604ff36e2 100644 --- a/mise.toml +++ b/mise.toml @@ -3,9 +3,12 @@ "go:github.com/grafana/oats" = "0.6.1" java = "temurin-25.0.2+10.0.LTS" lychee = "0.23.0" +node = "24.13.1" +"npm:renovate" = "43.8.5" protoc = "33.5" [env] +RENOVATE_TRACKED_DEPS_EXCLUDE="github-actions,github-runners" # renovate: datasource=docker depName=ghcr.io/super-linter/super-linter SUPER_LINTER_VERSION="v8.5.0@sha256:6831c0a801d353b510e4e468a3209a8a48bf0102e193d5c7e94e57667fdf64eb" @@ -47,38 +50,26 @@ run = "./mvnw verify" description = "build all modules without tests" run = "./mvnw install -DskipTests -Dcoverage.skip=true" +# Shared lint tasks from flint (https://github.com/grafana/flint) [tasks."lint:super-linter"] -description = "Run Super-Linter with auto-fix on the repository" -file = "https://raw.githubusercontent.com/grafana/docker-otel-lgtm/f5d39ffaf01b5bbe815b3821e4e3257db32f49e7/.mise/tasks/lint/super-linter.sh" +description = "Run Super-Linter on the repository" +file = "https://raw.githubusercontent.com/grafana/flint/986a4ca33894e67ac54363fe9c814432ffd6dd9b/tasks/lint/super-linter.sh" # v0.4.0 [tasks."lint:links"] -file = "https://raw.githubusercontent.com/open-telemetry/opentelemetry-java-contrib/refs/heads/main/.mise/tasks/lint/links.sh" +description = "Lint links" +file = "https://raw.githubusercontent.com/grafana/flint/986a4ca33894e67ac54363fe9c814432ffd6dd9b/tasks/lint/links.sh" # v0.4.0 -[tasks."lint:local-links"] -file = "https://raw.githubusercontent.com/open-telemetry/opentelemetry-java-contrib/refs/heads/main/.mise/tasks/lint/local-links.sh" +[tasks."lint:renovate-deps"] +description = "Verify renovate-tracked-deps.json is up to date" +file = "https://raw.githubusercontent.com/grafana/flint/986a4ca33894e67ac54363fe9c814432ffd6dd9b/tasks/lint/renovate-deps.py" # v0.4.0 -[tasks."lint:links-in-modified-files"] -file = "https://raw.githubusercontent.com/open-telemetry/opentelemetry-java-contrib/refs/heads/main/.mise/tasks/lint/links-in-modified-files.sh" +[tasks."lint"] +description = "Run all lints" +depends = ["lint:super-linter", "lint:links", "lint:bom", "lint:renovate-deps"] -[tasks."lint:links-in-modified-files-ci"] -description = "Lint links in modified files (CI configuration)" -run = "mise run lint:links-in-modified-files --base origin/$GITHUB_BASE_REF --head $GITHUB_HEAD_SHA" - -[tasks."lint:links-in-modified-files-local"] -description = "Lint links in modified files (local configuration)" -run = "mise run lint:links-in-modified-files --base origin/main --head HEAD" - -[tasks."lint:rest"] -description = "All lints not covered by super linter" -depends = ["lint:bom", "lint:local-links", "lint:links-in-modified-files-local"] - -[tasks."lint:rest-ci"] -description = "All lints not covered by super linter (CI configuration)" -depends = ["lint:bom", "lint:local-links", "lint:links-in-modified-files-ci"] - -[tasks."lint:all"] -description = "All lints" -depends = ["lint:rest", "lint:super-linter"] +[tasks.fix] +description = "Auto-fix lint issues" +run = "AUTOFIX=true mise run lint" [tasks.acceptance-test] description = "Run OATs acceptance tests" From 3d5494dc88404845d3fa672d42eefafe73a8dc76 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 12:37:19 +0000 Subject: [PATCH 826/870] chore(deps): update grafana/tempo docker tag to v2.10.1 (#1888) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | grafana/tempo | patch | `2.10.0` → `2.10.1` | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index c7d8979c0..cb9326e40 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -52,7 +52,7 @@ services: - --enable-feature=native-histograms - --config.file=/prometheus.yaml tempo: - image: grafana/tempo:2.10.0@sha256:d7f4c72e0bad2b42b4e7263b0addaf3f5bbc105cec6b1917eba0aae3b9b70364 + image: grafana/tempo:2.10.1@sha256:9371af1b75b4e057eb77f22dc4dd4d9176cd6985e29f181527be6723b7f29c41 network_mode: host volumes: - ./config/tempo-config.yaml:/config.yaml From ca02dffde2405fdbe6142311eede38131d3f2e34 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 17 Feb 2026 13:37:41 +0100 Subject: [PATCH 827/870] chore(deps): update flint to v0.5.0 and use slim super-linter (#1887) ## Summary - Update flint from v0.4.0 to v0.5.0 - Switch from full Super-Linter image to the slim variant (~2 GB smaller), which excludes Rust, .NET/C#, PowerShell, and ARM template linters that this project doesn't use ## Test plan - [x] `mise run lint` passes locally Signed-off-by: Gregor Zeitlinger --- mise.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mise.toml b/mise.toml index 604ff36e2..44ce631a6 100644 --- a/mise.toml +++ b/mise.toml @@ -10,7 +10,7 @@ protoc = "33.5" [env] RENOVATE_TRACKED_DEPS_EXCLUDE="github-actions,github-runners" # renovate: datasource=docker depName=ghcr.io/super-linter/super-linter -SUPER_LINTER_VERSION="v8.5.0@sha256:6831c0a801d353b510e4e468a3209a8a48bf0102e193d5c7e94e57667fdf64eb" +SUPER_LINTER_VERSION="slim-v8.5.0@sha256:857dcc3f0bf5dd065fdeed1ace63394bb2004238a5ef02910ea23d9bcd8fd2b8" [tasks.ci] description = "CI Build" @@ -53,15 +53,15 @@ run = "./mvnw install -DskipTests -Dcoverage.skip=true" # Shared lint tasks from flint (https://github.com/grafana/flint) [tasks."lint:super-linter"] description = "Run Super-Linter on the repository" -file = "https://raw.githubusercontent.com/grafana/flint/986a4ca33894e67ac54363fe9c814432ffd6dd9b/tasks/lint/super-linter.sh" # v0.4.0 +file = "https://raw.githubusercontent.com/grafana/flint/79215390bdc8aa92f2c01e350062aa4bbbbf1858/tasks/lint/super-linter.sh" # v0.5.0 [tasks."lint:links"] description = "Lint links" -file = "https://raw.githubusercontent.com/grafana/flint/986a4ca33894e67ac54363fe9c814432ffd6dd9b/tasks/lint/links.sh" # v0.4.0 +file = "https://raw.githubusercontent.com/grafana/flint/79215390bdc8aa92f2c01e350062aa4bbbbf1858/tasks/lint/links.sh" # v0.5.0 [tasks."lint:renovate-deps"] description = "Verify renovate-tracked-deps.json is up to date" -file = "https://raw.githubusercontent.com/grafana/flint/986a4ca33894e67ac54363fe9c814432ffd6dd9b/tasks/lint/renovate-deps.py" # v0.4.0 +file = "https://raw.githubusercontent.com/grafana/flint/79215390bdc8aa92f2c01e350062aa4bbbbf1858/tasks/lint/renovate-deps.py" # v0.5.0 [tasks."lint"] description = "Run all lints" From 50937500b4cfa35825a4441860b256df819c918c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 12:39:22 +0000 Subject: [PATCH 828/870] chore(deps): update dependency grafana/flint to v0.5.0 (#1889) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [grafana/flint](https://redirect.github.com/grafana/flint) | minor | `v0.4.0` → `v0.5.0` | --- ### Release Notes
    grafana/flint (grafana/flint) ### [`v0.5.0`](https://redirect.github.com/grafana/flint/releases/tag/v0.5.0) [Compare Source](https://redirect.github.com/grafana/flint/compare/v0.4.0...v0.5.0) ##### Features - **super-linter:** default to slim image ([#​24](https://redirect.github.com/grafana/flint/issues/24)) ([c8eeab8](https://redirect.github.com/grafana/flint/commit/c8eeab82e5db39f0cf8b57a5ee7ac1fc7106a1b0))
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 4c19c7ec10f54370a5abde6ce734a5764fbe31d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 09:32:37 +0000 Subject: [PATCH 829/870] chore(deps): update eclipse-temurin:25.0.2_10-jre docker digest to 0a9c973 (#1890) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | eclipse-temurin | final | digest | `43a7b50` → `0a9c973` | | eclipse-temurin | | digest | `43a7b50` → `0a9c973` | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-custom-buckets/docker-compose.yaml | 2 +- .../example-exporter-opentelemetry/oats-tests/agent/Dockerfile | 2 +- .../example-exporter-opentelemetry/oats-tests/http/Dockerfile | 2 +- examples/example-native-histogram/docker-compose.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/example-custom-buckets/docker-compose.yaml b/examples/example-custom-buckets/docker-compose.yaml index 2afcf5b98..b024481af 100644 --- a/examples/example-custom-buckets/docker-compose.yaml +++ b/examples/example-custom-buckets/docker-compose.yaml @@ -1,7 +1,7 @@ version: "3" services: example-application: - image: eclipse-temurin:25.0.2_10-jre@sha256:43a7b50abf8679d77d6d41d52072402a18312a47b4390864046b393e2570137b + image: eclipse-temurin:25.0.2_10-jre@sha256:0a9c973778b03b88f39ccae4f8cc26022d84a3237a818cb98770369eb6c5daf9 network_mode: host volumes: - ./target/example-custom-buckets.jar:/example-custom-buckets.jar diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile b/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile index cc1158e12..bc1adac60 100644 --- a/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:25.0.2_10-jre@sha256:43a7b50abf8679d77d6d41d52072402a18312a47b4390864046b393e2570137b +FROM eclipse-temurin:25.0.2_10-jre@sha256:0a9c973778b03b88f39ccae4f8cc26022d84a3237a818cb98770369eb6c5daf9 COPY target/example-exporter-opentelemetry.jar ./app.jar # check that the resource attributes from the agent are used, epsecially the service.instance.id should be the same diff --git a/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile b/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile index 0c7d64e55..763ba191f 100644 --- a/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile +++ b/examples/example-exporter-opentelemetry/oats-tests/http/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:25.0.2_10-jre@sha256:43a7b50abf8679d77d6d41d52072402a18312a47b4390864046b393e2570137b +FROM eclipse-temurin:25.0.2_10-jre@sha256:0a9c973778b03b88f39ccae4f8cc26022d84a3237a818cb98770369eb6c5daf9 COPY target/example-exporter-opentelemetry.jar ./app.jar diff --git a/examples/example-native-histogram/docker-compose.yaml b/examples/example-native-histogram/docker-compose.yaml index b2f849844..492ce015f 100644 --- a/examples/example-native-histogram/docker-compose.yaml +++ b/examples/example-native-histogram/docker-compose.yaml @@ -1,7 +1,7 @@ version: "3" services: example-application: - image: eclipse-temurin:25.0.2_10-jre@sha256:43a7b50abf8679d77d6d41d52072402a18312a47b4390864046b393e2570137b + image: eclipse-temurin:25.0.2_10-jre@sha256:0a9c973778b03b88f39ccae4f8cc26022d84a3237a818cb98770369eb6c5daf9 network_mode: host volumes: - ./target/example-native-histogram.jar:/example-native-histogram.jar From 18a8768946b58b8b840bb128ef63f1ccd3aea86b Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 18 Feb 2026 11:19:27 +0100 Subject: [PATCH 830/870] chore(deps): update dependency grafana/flint to v0.6.0 (#1891) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Update flint from v0.5.0 to v0.6.0 - Remove lychee `remap` workaround for [lychee#1729](https://github.com/lycheeverse/lychee/issues/1729) — flint v0.6.0 now handles GitHub fragment URL remaps natively in `links.sh` ## Test plan - [ ] CI lint checks pass with updated flint tasks - [ ] Link checking works correctly without the local remap rule Signed-off-by: Gregor Zeitlinger --- .github/config/lychee.toml | 5 ----- mise.toml | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/config/lychee.toml b/.github/config/lychee.toml index 9ba423471..864350fb5 100644 --- a/.github/config/lychee.toml +++ b/.github/config/lychee.toml @@ -12,11 +12,6 @@ include_fragments = true base_url = "https://prometheus.github.io" exclude_path = ["docs/themes"] -remap = [ - # workaround for https://github.com/lycheeverse/lychee/issues/1729 - "https://github.com/(.*?)/(.*?)/blob/(.*?)/(.*#.*)$ https://raw.githubusercontent.com/$1/$2/$3/$4" -] - exclude = [ # excluding links to pull requests and issues is done for performance "^https://github.com/prometheus/client_java/(issues|pull)/\\d+$", diff --git a/mise.toml b/mise.toml index 44ce631a6..a61bbb9dd 100644 --- a/mise.toml +++ b/mise.toml @@ -53,15 +53,15 @@ run = "./mvnw install -DskipTests -Dcoverage.skip=true" # Shared lint tasks from flint (https://github.com/grafana/flint) [tasks."lint:super-linter"] description = "Run Super-Linter on the repository" -file = "https://raw.githubusercontent.com/grafana/flint/79215390bdc8aa92f2c01e350062aa4bbbbf1858/tasks/lint/super-linter.sh" # v0.5.0 +file = "https://raw.githubusercontent.com/grafana/flint/5bb3726cfe3305072457c0c4fa85dce5ca154680/tasks/lint/super-linter.sh" # v0.6.0 [tasks."lint:links"] description = "Lint links" -file = "https://raw.githubusercontent.com/grafana/flint/79215390bdc8aa92f2c01e350062aa4bbbbf1858/tasks/lint/links.sh" # v0.5.0 +file = "https://raw.githubusercontent.com/grafana/flint/5bb3726cfe3305072457c0c4fa85dce5ca154680/tasks/lint/links.sh" # v0.6.0 [tasks."lint:renovate-deps"] description = "Verify renovate-tracked-deps.json is up to date" -file = "https://raw.githubusercontent.com/grafana/flint/79215390bdc8aa92f2c01e350062aa4bbbbf1858/tasks/lint/renovate-deps.py" # v0.5.0 +file = "https://raw.githubusercontent.com/grafana/flint/5bb3726cfe3305072457c0c4fa85dce5ca154680/tasks/lint/renovate-deps.py" # v0.6.0 [tasks."lint"] description = "Run all lints" From 93e2b6da48abc03ba7d96ffff5020ab73c1ee8c1 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 18 Feb 2026 11:35:18 +0100 Subject: [PATCH 831/870] fix: remove version manipulation from build-release.sh (#1886) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Remove redundant sed-based SNAPSHOT version replacement from `build-release.sh` — release-please already sets the correct versions in pom.xml at the tagged commit - Remove `TAG` env var from `release.yml` and `test-release-build.yml` workflows ## Test plan - [x] `mise run build-release` succeeds locally - [x] `mise run lint` passes - [ ] CI passes on PR Signed-off-by: Gregor Zeitlinger --- .github/workflows/release.yml | 2 -- .github/workflows/test-release-build.yml | 3 --- .mise/tasks/build-release.sh | 18 ++---------------- 3 files changed, 2 insertions(+), 21 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e950b4b36..93d32c188 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,8 +30,6 @@ jobs: - name: Build release version run: mise run build-release - env: - TAG: ${{ github.ref_name }} - name: Set up Apache Maven Central uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 diff --git a/.github/workflows/test-release-build.yml b/.github/workflows/test-release-build.yml index 2d7d27ef3..f8de00d8c 100644 --- a/.github/workflows/test-release-build.yml +++ b/.github/workflows/test-release-build.yml @@ -32,6 +32,3 @@ jobs: BASE_URL: "/client_java" - name: Build release version run: mise run build-release - env: - # don't use the current snapshot version, to test a more realistic release - TAG: ${{ github.run_number }} diff --git a/.mise/tasks/build-release.sh b/.mise/tasks/build-release.sh index 9ddb48e53..620dca77a 100755 --- a/.mise/tasks/build-release.sh +++ b/.mise/tasks/build-release.sh @@ -1,22 +1,8 @@ #!/usr/bin/env bash #MISE description="Build release package" -#USAGE arg "[tag]" env="TAG" set -euo pipefail -PARENT_POM="prometheus-metrics-parent/pom.xml" -CURRENT_VERSION=$(sed -n 's/.*\(.*-SNAPSHOT\)<\/version>.*/\1/p' "$PARENT_POM" | head -1) - -if [[ -z "$CURRENT_VERSION" ]]; then - echo "ERROR: could not find SNAPSHOT version in $PARENT_POM" >&2 - exit 1 -fi - -# shellcheck disable=SC2154 # is set by mise -VERSION=${usage_tag:-$CURRENT_VERSION} -VERSION=${VERSION#v} - -find . -name 'pom.xml' -exec \ - sed -i "s/${CURRENT_VERSION}<\/version>/${VERSION}<\/version>/g" {} + -mvn -B package -P 'release,!default,!examples-and-integration-tests' -Dmaven.test.skip=true -Dgpg.skip=true +mvn -B package -P 'release,!default,!examples-and-integration-tests' \ + -Dmaven.test.skip=true -Dgpg.skip=true From ce811d0e656ea3c917f24f128957799b00ce0c10 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 18 Feb 2026 11:45:51 +0100 Subject: [PATCH 832/870] ci(release-please): add footer to release PRs with CI trigger reminder (#1893) ## Summary - Adds a `pull-request-footer` to release-please config with an `[!IMPORTANT]` callout reminding maintainers to close and reopen the PR to trigger CI checks ## Test plan - [ ] Verify the next release-please PR includes the footer text --- .github/config/release-please-config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/config/release-please-config.json b/.github/config/release-please-config.json index 131941946..0182b5204 100644 --- a/.github/config/release-please-config.json +++ b/.github/config/release-please-config.json @@ -1,5 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "pull-request-footer": "> [!IMPORTANT]\n> Close and reopen this PR to trigger CI checks.", "packages": { ".": { "release-type": "java", From af1f7f2f6c286740697a44dbfb30d7c5fbc23812 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 22:37:16 +0000 Subject: [PATCH 833/870] chore(deps): update otel/opentelemetry-collector-contrib docker tag to v0.146.1 (#1895) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [otel/opentelemetry-collector-contrib](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases) | minor | `0.145.0` → `0.146.1` | --- ### Release Notes
    open-telemetry/opentelemetry-collector-releases (otel/opentelemetry-collector-contrib) ### [`v0.146.1`](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/blob/HEAD/CHANGELOG.md#v01461) [Compare Source](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/compare/v0.146.0...v0.146.1) ##### 🛑 Breaking changes 🛑 - `bigipreceiver`: Removing unmaintained component ([#​46039](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/issues/46039)) ### [`v0.146.0`](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/compare/v0.145.0...v0.146.0) [Compare Source](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/compare/v0.145.0...v0.146.0)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- examples/example-exporter-opentelemetry/docker-compose.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index cb9326e40..dee885885 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -36,7 +36,7 @@ services: - -jar - /example-greeting-service.jar collector: - image: otel/opentelemetry-collector-contrib:0.145.0@sha256:a7343f01869071ea3f4c5e1e97df1bb1b3c4d5c77247db80e053a80b9df530c4 + image: otel/opentelemetry-collector-contrib:0.146.1@sha256:f6e429c1052ab50f85a7afa5f7e32f25931697751622b0e1f453d10f79a1df3c network_mode: host volumes: - ./config/otelcol-config.yaml:/config.yaml diff --git a/examples/example-exporter-opentelemetry/docker-compose.yaml b/examples/example-exporter-opentelemetry/docker-compose.yaml index 7cb140247..97bc9ab9b 100644 --- a/examples/example-exporter-opentelemetry/docker-compose.yaml +++ b/examples/example-exporter-opentelemetry/docker-compose.yaml @@ -13,7 +13,7 @@ services: #- -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 - /example-exporter-opentelemetry.jar collector: - image: otel/opentelemetry-collector-contrib:0.145.0@sha256:a7343f01869071ea3f4c5e1e97df1bb1b3c4d5c77247db80e053a80b9df530c4 + image: otel/opentelemetry-collector-contrib:0.146.1@sha256:f6e429c1052ab50f85a7afa5f7e32f25931697751622b0e1f453d10f79a1df3c network_mode: host volumes: - ./config/otelcol-config.yaml:/config.yaml From 9776bc9ce102e5eff974b337fd6c44d97be0b8dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 22:38:56 +0000 Subject: [PATCH 834/870] chore(deps): update module go:github.com/gohugoio/hugo to v0.156.0 (#1894) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [go:github.com/gohugoio/hugo](https://redirect.github.com/gohugoio/hugo) | `v0.155.3` → `v0.156.0` | ![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgohugoio%2fhugo/v0.156.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgohugoio%2fhugo/v0.155.3/v0.156.0?slim=true) | --- ### Release Notes
    gohugoio/hugo (go:github.com/gohugoio/hugo) ### [`v0.156.0`](https://redirect.github.com/gohugoio/hugo/compare/v0.155.3...v0.156.0) [Compare Source](https://redirect.github.com/gohugoio/hugo/compare/v0.155.3...v0.156.0)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index a61bbb9dd..ebf962bc4 100644 --- a/mise.toml +++ b/mise.toml @@ -1,5 +1,5 @@ [tools] -"go:github.com/gohugoio/hugo" = "v0.155.3" +"go:github.com/gohugoio/hugo" = "v0.156.0" "go:github.com/grafana/oats" = "0.6.1" java = "temurin-25.0.2+10.0.LTS" lychee = "0.23.0" From 0d800d0a91578e48f34909472c183174fdf1d83e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 16:47:55 +0000 Subject: [PATCH 835/870] fix(deps): update dependency org.springframework.boot:spring-boot-starter-parent to v4.0.3 (#1900) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.springframework.boot:spring-boot-starter-parent](https://spring.io/projects/spring-boot) ([source](https://redirect.github.com/spring-projects/spring-boot)) | `4.0.2` → `4.0.3` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.springframework.boot:spring-boot-starter-parent/4.0.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.springframework.boot:spring-boot-starter-parent/4.0.2/4.0.3?slim=true) | --- ### Release Notes
    spring-projects/spring-boot (org.springframework.boot:spring-boot-starter-parent) ### [`v4.0.3`](https://redirect.github.com/spring-projects/spring-boot/compare/v4.0.2...v4.0.3) [Compare Source](https://redirect.github.com/spring-projects/spring-boot/compare/v4.0.2...v4.0.3)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index 56b5f91bb..ee653fbb4 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -8,7 +8,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.2 + 4.0.3 From 59c8552f3d67c06d82344383b45e07fea8ed88b9 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Fri, 20 Feb 2026 10:38:49 -0500 Subject: [PATCH 836/870] fix: Handle empty datapoints in otel exporter (#1898) From @dhoard on slack, There was an error in the jmx-exporter project smoke tests: > time=2026-02-16T15:49:03.466Z level=ERROR source=write_handler.go:652 msg="Error appending remote write" component=web err="empty data points. jvm_memory_pool_allocated_bytes is dropped" > 2026-02-16 15:49:03.482 | OkHttp http://prometheus:9090/... | WARNING | e1723a08afd7bca35570fd31a7656f59.io.prometheus.metrics.shaded.io_opentelemetry_2_25_0_alpha.exporter.internal.http.HttpExporter | Failed to export metrics. Server responded with HTTP status code 500. Error message: Unable to parse response body, HTTP status message: Internal Server Error > Looking at the documentation for `jvm_memory_pool_allocated_bytes`... "Only updated after GC, not continuously." Most likely GC hasn't happened, yet the OTel exporter is trying to write the data. I updated the method to return null when the data points are empty, which is then handled via the [addUnlessNull](https://github.com/prometheus/client_java/blob/main/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java#L136) method. After applying this change locally, I ran the [quick test](https://github.com/prometheus/jmx_exporter/blob/main/run-quick-test.sh) a few times and the error was no longer present. --------- Signed-off-by: Jay DeLuca --- .../otelmodel/MetricDataFactory.java | 24 +++++++++++++++++++ .../exporter/opentelemetry/ExportTest.java | 22 ++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java index 4c75d2622..78ecb0ebe 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java +++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/otelmodel/MetricDataFactory.java @@ -27,7 +27,11 @@ public MetricDataFactory( this.currentTimeMillis = currentTimeMillis; } + @Nullable public MetricData create(CounterSnapshot snapshot) { + if (snapshot.getDataPoints().isEmpty()) { + return null; + } return new PrometheusMetricData<>( snapshot.getMetadata(), new PrometheusCounter(snapshot, currentTimeMillis), @@ -35,7 +39,11 @@ public MetricData create(CounterSnapshot snapshot) { resource); } + @Nullable public MetricData create(GaugeSnapshot snapshot) { + if (snapshot.getDataPoints().isEmpty()) { + return null; + } return new PrometheusMetricData<>( snapshot.getMetadata(), new PrometheusGauge(snapshot, currentTimeMillis), @@ -64,7 +72,11 @@ public MetricData create(HistogramSnapshot snapshot) { return null; } + @Nullable public MetricData create(SummarySnapshot snapshot) { + if (snapshot.getDataPoints().isEmpty()) { + return null; + } return new PrometheusMetricData<>( snapshot.getMetadata(), new PrometheusSummary(snapshot, currentTimeMillis), @@ -72,7 +84,11 @@ public MetricData create(SummarySnapshot snapshot) { resource); } + @Nullable public MetricData create(InfoSnapshot snapshot) { + if (snapshot.getDataPoints().isEmpty()) { + return null; + } return new PrometheusMetricData<>( snapshot.getMetadata(), new PrometheusInfo(snapshot, currentTimeMillis), @@ -80,7 +96,11 @@ public MetricData create(InfoSnapshot snapshot) { resource); } + @Nullable public MetricData create(StateSetSnapshot snapshot) { + if (snapshot.getDataPoints().isEmpty()) { + return null; + } return new PrometheusMetricData<>( snapshot.getMetadata(), new PrometheusStateSet(snapshot, currentTimeMillis), @@ -88,7 +108,11 @@ public MetricData create(StateSetSnapshot snapshot) { resource); } + @Nullable public MetricData create(UnknownSnapshot snapshot) { + if (snapshot.getDataPoints().isEmpty()) { + return null; + } return new PrometheusMetricData<>( snapshot.getMetadata(), new PrometheusUnknown(snapshot, currentTimeMillis), diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java index 5ec213563..e134b2373 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java @@ -33,7 +33,7 @@ class ExportTest { private static final Attributes ATTRIBUTES = Attributes.of(AttributeKey.stringKey("label"), "val", AttributeKey.stringKey("key"), "value"); - @RegisterExtension OpenTelemetryExtension testing = OpenTelemetryExtension.create(); + @RegisterExtension static OpenTelemetryExtension testing = OpenTelemetryExtension.create(); private final PrometheusRegistry registry = new PrometheusRegistry(); @@ -304,6 +304,26 @@ void unknown() { .hasAttributes(Attributes.of(AttributeKey.stringKey("label"), "val")))); } + @Test + void metricsWithoutDataPointsAreNotExported() { + // Register metrics with labels but don't create any data points + // This simulates the jvm_memory_pool_allocated_bytes scenario where a metric + // is registered with label names, but no data points are created until GC happens + Counter.builder().name("counter_no_data").labelNames("pool").register(registry); + Gauge.builder().name("gauge_no_data").labelNames("pool").register(registry); + Summary.builder().name("summary_no_data").labelNames("pool").register(registry); + Histogram.builder().name("histogram_no_data").labelNames("pool").register(registry); + StateSet.builder() + .name("stateset_no_data") + .states("state") + .labelNames("pool") + .register(registry); + Info.builder().name("info_no_data").labelNames("pool").register(registry); + + List metrics = testing.getMetrics(); + assertThat(metrics).isEmpty(); + } + private MetricAssert metricAssert() { List metrics = testing.getMetrics(); assertThat(metrics).hasSize(1); From a4835397c5fe237a534bd9c3259827d7e3e38d31 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 20 Feb 2026 18:11:11 +0100 Subject: [PATCH 837/870] ci(release-please): fix footer not appearing on release PRs (#1902) ## Summary - `pull-request-footer` was not being applied to release PRs because release-please defaults `separatePullRequests` to `true` for single-package configs, which skips the Merge plugin responsible for applying the footer - Setting `separate-pull-requests: false` forces the Merge plugin to run ## Context - This is a workaround for an upstream bug in release-please where `pull-request-footer` is silently ignored for single-package repos - Affects both regular release PRs and Java SNAPSHOT PRs - Same issue exists in grafana/flint and likely any single-package repo using `pull-request-footer` ## Test plan - [ ] After merging, verify PR #1896 gets updated with the footer on the next release-please run Signed-off-by: Gregor Zeitlinger --- .github/config/release-please-config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/config/release-please-config.json b/.github/config/release-please-config.json index 0182b5204..1953ed529 100644 --- a/.github/config/release-please-config.json +++ b/.github/config/release-please-config.json @@ -1,5 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "separate-pull-requests": false, "pull-request-footer": "> [!IMPORTANT]\n> Close and reopen this PR to trigger CI checks.", "packages": { ".": { From 6b8c8c32aff43015d1105daf0dfeebaedda8430b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 21 Feb 2026 13:06:54 +0000 Subject: [PATCH 838/870] chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.5.5 (#1906) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.apache.maven.plugins:maven-surefire-plugin](https://maven.apache.org/surefire/) ([source](https://redirect.github.com/apache/maven-surefire)) | `3.5.4` → `3.5.5` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.apache.maven.plugins:maven-surefire-plugin/3.5.5?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.apache.maven.plugins:maven-surefire-plugin/3.5.4/3.5.5?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c166f0648..9bab84dc3 100644 --- a/pom.xml +++ b/pom.xml @@ -152,7 +152,7 @@
    maven-surefire-plugin - 3.5.4 + 3.5.5 maven-jar-plugin From f645a80f239985098f703c3a542ba534e28e04de Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 21 Feb 2026 13:06:56 +0000 Subject: [PATCH 839/870] chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.5.5 (#1905) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.apache.maven.plugins:maven-failsafe-plugin](https://maven.apache.org/surefire/) ([source](https://redirect.github.com/apache/maven-surefire)) | `3.5.4` → `3.5.5` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.apache.maven.plugins:maven-failsafe-plugin/3.5.5?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.apache.maven.plugins:maven-failsafe-plugin/3.5.4/3.5.5?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9bab84dc3..fd4e1487a 100644 --- a/pom.xml +++ b/pom.xml @@ -177,7 +177,7 @@ maven-failsafe-plugin - 3.5.4 + 3.5.5 maven-dependency-plugin From 95e8e8b14cb4379211cea10b7d3708454eecd3b9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 22 Feb 2026 22:00:41 +0000 Subject: [PATCH 840/870] chore(deps): update dependency com.jayway.jsonpath:json-path to v3 (#1908) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [com.jayway.jsonpath:json-path](https://redirect.github.com/jayway/JsonPath) | `2.10.0` → `3.0.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.jayway.jsonpath:json-path/3.0.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.jayway.jsonpath:json-path/2.10.0/3.0.0?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- integration-tests/it-pushgateway/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-pushgateway/pom.xml b/integration-tests/it-pushgateway/pom.xml index a70ea5458..d0efd393c 100644 --- a/integration-tests/it-pushgateway/pom.xml +++ b/integration-tests/it-pushgateway/pom.xml @@ -48,7 +48,7 @@ com.jayway.jsonpath json-path - 2.10.0 + 3.0.0 test From 7cc774c336efb38e38a1bedc834a9b03afad5259 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 02:12:11 +0000 Subject: [PATCH 841/870] chore(deps): update dependency npm:renovate to v43.26.4 (#1909) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [npm:renovate](https://renovatebot.com) ([source](https://redirect.github.com/renovatebot/renovate)) | `43.8.5` → `43.26.4` | ![age](https://developer.mend.io/api/mc/badges/age/npm/renovate/43.26.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/renovate/43.8.5/43.26.4?slim=true) | --- ### Release Notes
    renovatebot/renovate (npm:renovate) ### [`v43.26.4`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.26.4) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.26.3...43.26.4) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.10.5 (main) ([#​41329](https://redirect.github.com/renovatebot/renovate/issues/41329)) ([2ca9af9](https://redirect.github.com/renovatebot/renovate/commit/2ca9af92507b92b91cef25e29fd2965ece14e111)) ### [`v43.26.3`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.26.3) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.26.2...43.26.3) ##### Build System - **deps:** update dependency [@​renovatebot/osv-offline](https://redirect.github.com/renovatebot/osv-offline) to v2.1.0 (main) ([#​41339](https://redirect.github.com/renovatebot/renovate/issues/41339)) ([d9a1a70](https://redirect.github.com/renovatebot/renovate/commit/d9a1a70859c9a7ef17f88453929f2a656fed2f60)) ### [`v43.26.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.26.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.26.1...43.26.2) ##### Build System - use `@redis/client` instad of `redis` ([#​41326](https://redirect.github.com/renovatebot/renovate/issues/41326)) ([5bdd564](https://redirect.github.com/renovatebot/renovate/commit/5bdd5640c4f95882fd34cd133fa77dbae11896d3)) ### [`v43.26.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.26.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.26.0...43.26.1) ##### Build System - **deps:** update dependency glob to v13.0.3 (main) ([#​41335](https://redirect.github.com/renovatebot/renovate/issues/41335)) ([d955edf](https://redirect.github.com/renovatebot/renovate/commit/d955edf7943d1b41f61517012d22d06d6b0078e6)) ### [`v43.26.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.26.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.11...43.26.0) ##### Features - add `commitHourlyLimit` ([#​36226](https://redirect.github.com/renovatebot/renovate/issues/36226)) ([7ebba26](https://redirect.github.com/renovatebot/renovate/commit/7ebba2623615f008933277a885104c8aa1b9b2f5)) - **manager/nuget:** Support single file package directives ([#​40040](https://redirect.github.com/renovatebot/renovate/issues/40040)) ([5505b52](https://redirect.github.com/renovatebot/renovate/commit/5505b52d75183e5d8efc2e0a09e9fcec493f0fab)) ##### Bug Fixes - **config:** presets in repositories array are merged in wrong order ([#​40898](https://redirect.github.com/renovatebot/renovate/issues/40898)) ([530d2ef](https://redirect.github.com/renovatebot/renovate/commit/530d2efc3c619c87e93ecacfd2ad108a59669f11)) ##### Miscellaneous Chores - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.4.3 (main) ([#​41328](https://redirect.github.com/renovatebot/renovate/issues/41328)) ([adc4816](https://redirect.github.com/renovatebot/renovate/commit/adc4816feac8e30a4473f2d3682b3321480bf21d)) ##### Tests - **logger:** clarify that `logger.once` doesn't use function parameters ([#​41331](https://redirect.github.com/renovatebot/renovate/issues/41331)) ([ad6dc28](https://redirect.github.com/renovatebot/renovate/commit/ad6dc288e9db4b7b963c07f5990e84c4b6f71c01)) ##### Build System - **deps:** update dependency got to v14 (main) ([#​41302](https://redirect.github.com/renovatebot/renovate/issues/41302)) ([e752a3d](https://redirect.github.com/renovatebot/renovate/commit/e752a3db298ab8fb49836dd7d90e80b8cf0fff05)) ### [`v43.25.11`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.11) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.10...43.25.11) ##### Bug Fixes - **workers/global:** migrate string-based `repositoryCacheForceLocal` ([#​41323](https://redirect.github.com/renovatebot/renovate/issues/41323)) ([2536f53](https://redirect.github.com/renovatebot/renovate/commit/2536f535c004d38601e602e69b43d0766a1b33b2)) ##### Miscellaneous Chores - **deps:** update dependency [@​biomejs/biome](https://redirect.github.com/biomejs/biome) to v2.3.15 (main) ([#​41325](https://redirect.github.com/renovatebot/renovate/issues/41325)) ([47460ac](https://redirect.github.com/renovatebot/renovate/commit/47460acce2d88903833d61e37760b611b078c63f)) - **deps:** update dependency oxlint to v1.47.0 (main) ([#​41322](https://redirect.github.com/renovatebot/renovate/issues/41322)) ([98f90c3](https://redirect.github.com/renovatebot/renovate/commit/98f90c35d4c3e136068d98a5e652312e99292fa4)) - **workers/global:** improve error message on parsing environment vars ([#​41324](https://redirect.github.com/renovatebot/renovate/issues/41324)) ([57f01ae](https://redirect.github.com/renovatebot/renovate/commit/57f01ae0a1cbde530f4d50ba1bf43b0b31d15e1f)), closes [#​41323](https://redirect.github.com/renovatebot/renovate/issues/41323) ##### Tests - full coverage for platforms ([#​41318](https://redirect.github.com/renovatebot/renovate/issues/41318)) ([912c623](https://redirect.github.com/renovatebot/renovate/commit/912c623d6072b7953a19b71ad08cae144df65f48)) ### [`v43.25.10`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.10) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.9...43.25.10) ##### Bug Fixes - **datasource/docker:** don't pass hostrule to http options ([#​41317](https://redirect.github.com/renovatebot/renovate/issues/41317)) ([f05c3ee](https://redirect.github.com/renovatebot/renovate/commit/f05c3eed57e7a39accd7b51d58262bc87019b873)) ### [`v43.25.9`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.9) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.8...43.25.9) ##### Bug Fixes - **got:** set `rejectUnauthorized=false` when `NODE_TLS_REJECT_UNAUTHORIZED=0` is set ([#​41308](https://redirect.github.com/renovatebot/renovate/issues/41308)) ([3ac23ec](https://redirect.github.com/renovatebot/renovate/commit/3ac23ec833c8d50b6efef9b932c59ea67362e5e9)) ### [`v43.25.8`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.8) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.7...43.25.8) ##### Miscellaneous Chores - **deps:** update dependency vite-tsconfig-paths to v6.1.1 (main) ([#​41312](https://redirect.github.com/renovatebot/renovate/issues/41312)) ([5e910ef](https://redirect.github.com/renovatebot/renovate/commit/5e910ef308e1a0701c920835759e306f84052294)) ##### Build System - **deps:** update dependency minimatch to v10.2.1 \[security] (main) ([#​41313](https://redirect.github.com/renovatebot/renovate/issues/41313)) ([44c535b](https://redirect.github.com/renovatebot/renovate/commit/44c535be5ee03cf33e570648e7360e04b1fe1a1f)) ### [`v43.25.7`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.7) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.6...43.25.7) ##### Bug Fixes - **config:** don't allow a platform-specific config filename for `local` platform ([#​41303](https://redirect.github.com/renovatebot/renovate/issues/41303)) ([1f9fbe9](https://redirect.github.com/renovatebot/renovate/commit/1f9fbe9c6c8c31b2e2be55449253345ff3df3f36)) ##### Tests - reset user config filenames before tests ([#​41252](https://redirect.github.com/renovatebot/renovate/issues/41252)) ([c162ae4](https://redirect.github.com/renovatebot/renovate/commit/c162ae4258913f863e54ca9e0856d8f64400beb8)) ##### Continuous Integration - lint GitHub Actions with `actionlint` ([#​41292](https://redirect.github.com/renovatebot/renovate/issues/41292)) ([f9d141f](https://redirect.github.com/renovatebot/renovate/commit/f9d141fef5bc8b8c5871cab3cf27f5fb9e2e7ead)) ### [`v43.25.6`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.6) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.5...43.25.6) ##### Bug Fixes - **deps:** update dependency mkdocs-material to v9.7.2 (main) ([#​41300](https://redirect.github.com/renovatebot/renovate/issues/41300)) ([7074252](https://redirect.github.com/renovatebot/renovate/commit/70742522aa52ba4a5a9f3ebc8a9dd8fbac6791e6)) ##### Styles - fix `actionlint` errors ([#​41296](https://redirect.github.com/renovatebot/renovate/issues/41296)) ([df74ff5](https://redirect.github.com/renovatebot/renovate/commit/df74ff5302dc247baf82ba759b21f2fc77e732f4)) ##### Build System - **deps:** update dependency got to v12 (main) ([#​41284](https://redirect.github.com/renovatebot/renovate/issues/41284)) ([00aeb9d](https://redirect.github.com/renovatebot/renovate/commit/00aeb9d8dcfa41529d361b9b0332e58456ca59c1)) ##### Continuous Integration - lint commit messages for `Closes` actions ([#​41286](https://redirect.github.com/renovatebot/renovate/issues/41286)) ([b67196d](https://redirect.github.com/renovatebot/renovate/commit/b67196d40fe43ae11f23553030986cadd03bfb1a)) ### [`v43.25.5`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.5) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.4...43.25.5) ##### Bug Fixes - drop unused got remove authorization beforeRedirect hook ([#​41299](https://redirect.github.com/renovatebot/renovate/issues/41299)) ([0babee8](https://redirect.github.com/renovatebot/renovate/commit/0babee8a19f3cd4901a2b9f12bdc4f8175a6fca8)) ### [`v43.25.4`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.4) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.3...43.25.4) ##### Bug Fixes - **got:** normalize options ([#​41298](https://redirect.github.com/renovatebot/renovate/issues/41298)) ([99f4a76](https://redirect.github.com/renovatebot/renovate/commit/99f4a76dc9cfdf74ed99193667d175a52d206a43)) ### [`v43.25.3`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.3) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.2...43.25.3) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.10.3 (main) ([#​41297](https://redirect.github.com/renovatebot/renovate/issues/41297)) ([257a242](https://redirect.github.com/renovatebot/renovate/commit/257a2420ce5658a1a1a6bc7fc4a9791670f0ad05)) ##### Miscellaneous Chores - **deps:** update dependency pnpm to v10.29.3 (main) ([#​41295](https://redirect.github.com/renovatebot/renovate/issues/41295)) ([b21acc4](https://redirect.github.com/renovatebot/renovate/commit/b21acc416c8ca4a7b187f5da0651ae0c0a27d022)) ##### Continuous Integration - **build:** ensure that `setup-build` is required for docs build+deploy ([#​41289](https://redirect.github.com/renovatebot/renovate/issues/41289)) ([6a3a6a4](https://redirect.github.com/renovatebot/renovate/commit/6a3a6a4e09c74ca2ba4e98fbed0e203d9d0ef42f)) - don't allow empty `node-version` or `os` ([#​41290](https://redirect.github.com/renovatebot/renovate/issues/41290)) ([8a11937](https://redirect.github.com/renovatebot/renovate/commit/8a1193715014c0bd7ef746c758546fdbe767b56c)), closes [#​41288](https://redirect.github.com/renovatebot/renovate/issues/41288) [#​41289](https://redirect.github.com/renovatebot/renovate/issues/41289) - notify when the docs site build+deploy fails ([#​41288](https://redirect.github.com/renovatebot/renovate/issues/41288)) ([286466d](https://redirect.github.com/renovatebot/renovate/commit/286466df94655ccb53e0dcae656cc1b603930705)) ### [`v43.25.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.1...43.25.2) ##### Build System - bump fast-xml-parser to v5.3.6 ([#​41281](https://redirect.github.com/renovatebot/renovate/issues/41281)) ([bf026c8](https://redirect.github.com/renovatebot/renovate/commit/bf026c89c4a959ce630ed3c8532cdc9d551954e7)) - **deps:** update dependency croner to v10 (main) ([#​41283](https://redirect.github.com/renovatebot/renovate/issues/41283)) ([6f64ce6](https://redirect.github.com/renovatebot/renovate/commit/6f64ce68c9b69f1e4e2c103c1c5b74a0bba2e522)) ### [`v43.25.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.25.0...43.25.1) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.10.2 (main) ([#​41285](https://redirect.github.com/renovatebot/renovate/issues/41285)) ([e8afedc](https://redirect.github.com/renovatebot/renovate/commit/e8afedcbd7d628d9d34ed59909a2f66eb39ef4d6)) ##### Miscellaneous Chores - just reference our deps ([#​41282](https://redirect.github.com/renovatebot/renovate/issues/41282)) ([596c1ad](https://redirect.github.com/renovatebot/renovate/commit/596c1adbacfc9e510734462a592e3e7a1e53c93b)) ##### Code Refactoring - **platform:** programatically mark Platforms as experimental ([#​41220](https://redirect.github.com/renovatebot/renovate/issues/41220)) ([a300036](https://redirect.github.com/renovatebot/renovate/commit/a300036a1cfba12f14ac482fdfbbad43b46806d2)), closes [#​41249](https://redirect.github.com/renovatebot/renovate/issues/41249) ### [`v43.25.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.25.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.24.3...43.25.0) ##### Features - **dependency-dashboard:** hyperlink packages ([#​41116](https://redirect.github.com/renovatebot/renovate/issues/41116)) ([ea8ff66](https://redirect.github.com/renovatebot/renovate/commit/ea8ff660bd077fa284184c119eec51254a99d81b)) ##### Build System - **deps:** update dependency prettier to v3.8.1 (main) ([#​39779](https://redirect.github.com/renovatebot/renovate/issues/39779)) ([645a28c](https://redirect.github.com/renovatebot/renovate/commit/645a28c77c2638af35630a435c53157ccd6570f9)) ### [`v43.24.3`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.24.3) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.24.2...43.24.3) ##### Miscellaneous Chores - **deps:** update dependency [@​yarnpkg/core](https://redirect.github.com/yarnpkg/core)@​4.5.0>tar to v7.5.8 \[security] (main) ([#​41276](https://redirect.github.com/renovatebot/renovate/issues/41276)) ([458719f](https://redirect.github.com/renovatebot/renovate/commit/458719f25ba7c1a2e3647407e3f86b840500bdd5)) - **deps:** update dependency markdownlint-cli2 to v0.21.0 (main) ([#​41275](https://redirect.github.com/renovatebot/renovate/issues/41275)) ([427f724](https://redirect.github.com/renovatebot/renovate/commit/427f72481b47e4808f8c721cb8e1d932f9683811)) - **deps:** update dependency tar to v7.5.8 \[security] (main) ([#​41277](https://redirect.github.com/renovatebot/renovate/issues/41277)) ([fdee19d](https://redirect.github.com/renovatebot/renovate/commit/fdee19d60dfa487d8a3d5c000e61ebf0cecfa2c0)) - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.4.2 (main) ([#​41280](https://redirect.github.com/renovatebot/renovate/issues/41280)) ([4619d2c](https://redirect.github.com/renovatebot/renovate/commit/4619d2cd42798d967aae00274743d7c55f9bd224)) ##### Build System - **deps:** update aws-sdk-js-v3 monorepo to v3.992.0 (main) ([#​41279](https://redirect.github.com/renovatebot/renovate/issues/41279)) ([6b67b24](https://redirect.github.com/renovatebot/renovate/commit/6b67b24b1d1a9a4d62a08fad6d499cc42f7dff2f)) - **deps:** update dependency toml-eslint-parser to v1 (main) ([#​40879](https://redirect.github.com/renovatebot/renovate/issues/40879)) ([22b7ec0](https://redirect.github.com/renovatebot/renovate/commit/22b7ec05673ea0e269874f99e0762c7d2f07e7cb)) - **deps:** update dependency zod to v4 (main) ([#​41225](https://redirect.github.com/renovatebot/renovate/issues/41225)) ([4a2578d](https://redirect.github.com/renovatebot/renovate/commit/4a2578d18d1b682989e844ea870c45447b1c6a4a)) - **deps:** update opentelemetry-js monorepo (main) ([#​41274](https://redirect.github.com/renovatebot/renovate/issues/41274)) ([16e4c96](https://redirect.github.com/renovatebot/renovate/commit/16e4c960486e90eeb975b755de3944f22462bdd0)) ### [`v43.24.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.24.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.24.1...43.24.2) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.10.1 (main) ([#​41271](https://redirect.github.com/renovatebot/renovate/issues/41271)) ([ee86dc0](https://redirect.github.com/renovatebot/renovate/commit/ee86dc052b2158b53f0025b55627f6a6eda4d6a8)) ##### Code Refactoring - **tools:** allow specifying replacement start/end ([#​41250](https://redirect.github.com/renovatebot/renovate/issues/41250)) ([0332bac](https://redirect.github.com/renovatebot/renovate/commit/0332bac9f2204dc668738d6d426e8c638a11ba83)) ### [`v43.24.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.24.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.24.0...43.24.1) ##### Bug Fixes - **mutex:** support per-call-site acquire timeouts ([#​41259](https://redirect.github.com/renovatebot/renovate/issues/41259)) ([628f9a2](https://redirect.github.com/renovatebot/renovate/commit/628f9a28355fe20dc91a20539dac69999afbe9a4)), closes [#​41210](https://redirect.github.com/renovatebot/renovate/issues/41210) ##### Miscellaneous Chores - **deps:** update dependency [@​smithy/util-stream](https://redirect.github.com/smithy/util-stream) to v4.5.12 (main) ([#​41268](https://redirect.github.com/renovatebot/renovate/issues/41268)) ([ad6c40e](https://redirect.github.com/renovatebot/renovate/commit/ad6c40ef3e602a60647bf6d64f4b2b48365c6b6b)) - **deps:** update dependency ajv to v8.18.0 \[security] (main) ([#​41264](https://redirect.github.com/renovatebot/renovate/issues/41264)) ([46b751f](https://redirect.github.com/renovatebot/renovate/commit/46b751f780d4591f0a57e37663af841d6f72f4f2)) - **deps:** update dependency oxlint to v1.45.0 (main) ([#​41265](https://redirect.github.com/renovatebot/renovate/issues/41265)) ([a4e839f](https://redirect.github.com/renovatebot/renovate/commit/a4e839fb89528de72655bec4ca4bde3b83a915b7)) - **deps:** update linters to v1.46.0 (main) ([#​41267](https://redirect.github.com/renovatebot/renovate/issues/41267)) ([e690c3a](https://redirect.github.com/renovatebot/renovate/commit/e690c3a80e64577b4406c0d346a9e5a42f91d0bc)) ### [`v43.24.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.24.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.23.0...43.24.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.10.0 (main) ([#​41262](https://redirect.github.com/renovatebot/renovate/issues/41262)) ([618737e](https://redirect.github.com/renovatebot/renovate/commit/618737e1f0b03518b25a12a90b42bdcced9f1d77)) ##### Documentation - **next-major:** remember to close Milestone ([#​41248](https://redirect.github.com/renovatebot/renovate/issues/41248)) ([4e3c513](https://redirect.github.com/renovatebot/renovate/commit/4e3c51328ffe6f38de7905a70c4bf95a6b8c9440)) ##### Miscellaneous Chores - **deps:** update dependency [@​types/node](https://redirect.github.com/types/node) to v24.10.13 (main) ([#​41255](https://redirect.github.com/renovatebot/renovate/issues/41255)) ([bb8613e](https://redirect.github.com/renovatebot/renovate/commit/bb8613e96f573000a08cd591d25d4c667c972bf9)) - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.4.1 (main) ([#​41256](https://redirect.github.com/renovatebot/renovate/issues/41256)) ([9182160](https://redirect.github.com/renovatebot/renovate/commit/9182160070edb743198d04209758f837cd3f32c6)) ##### Build System - **deps:** update dependency glob to v13.0.2 (main) ([#​41261](https://redirect.github.com/renovatebot/renovate/issues/41261)) ([509f3f4](https://redirect.github.com/renovatebot/renovate/commit/509f3f4cdcfb4620be47608d12ef72a1778c8555)) ### [`v43.23.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.23.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.22.0...43.23.0) ##### Features - **replacements:** add replacement for Terraform/OpenTofu Keycloak provider ([#​40975](https://redirect.github.com/renovatebot/renovate/issues/40975)) ([a45fd76](https://redirect.github.com/renovatebot/renovate/commit/a45fd769405077bde22e6f05a83607f3bb4eec46)) ### [`v43.22.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.22.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.21.0...43.22.0) ##### Features - **managers/bun:** support Host Rules generation from an `.npmrc` ([#​41217](https://redirect.github.com/renovatebot/renovate/issues/41217)) ([29af878](https://redirect.github.com/renovatebot/renovate/commit/29af878ed641c936fd70abb5c0de8c807d97e483)), closes [#​41215](https://redirect.github.com/renovatebot/renovate/issues/41215) [#​40830](https://redirect.github.com/renovatebot/renovate/issues/40830) ##### Code Refactoring - **manager/npm:** extract function for resolving `.npmrc` ([#​41245](https://redirect.github.com/renovatebot/renovate/issues/41245)) ([d9f8972](https://redirect.github.com/renovatebot/renovate/commit/d9f8972156778fbcf4e5e37c2c1af37473964ac7)) ### [`v43.21.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.21.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.20.1...43.21.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.9.0 (main) ([#​41246](https://redirect.github.com/renovatebot/renovate/issues/41246)) ([083b805](https://redirect.github.com/renovatebot/renovate/commit/083b8052fc6cc38c6f0899029d0af4f489114a47)) ### [`v43.20.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.20.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.20.0...43.20.1) ##### Bug Fixes - allow grouping of `lockFileMaintenance` updates ([#​41240](https://redirect.github.com/renovatebot/renovate/issues/41240)) ([fbb564c](https://redirect.github.com/renovatebot/renovate/commit/fbb564c196e58389f435c8944c8d2a158310c68f)) ##### Miscellaneous Chores - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.3.0 (main) ([#​41243](https://redirect.github.com/renovatebot/renovate/issues/41243)) ([a6faed9](https://redirect.github.com/renovatebot/renovate/commit/a6faed9357fae4486f5c8ade025e1a7d42f5ef5b)) ### [`v43.20.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.20.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.19.2...43.20.0) ##### Features - **manager/pre-commit:** add support digest updating ([#​36693](https://redirect.github.com/renovatebot/renovate/issues/36693)) ([2b4c0a2](https://redirect.github.com/renovatebot/renovate/commit/2b4c0a2f4a193f1d10d37234251ab5ae94c80e11)) - **versioning:** add elm versioning support ([#​40999](https://redirect.github.com/renovatebot/renovate/issues/40999)) ([c997287](https://redirect.github.com/renovatebot/renovate/commit/c997287e68868306a07e93ea214cff5ea3f3978d)) ##### Documentation - **upgrade-best-practices:** fix config:best-practices preset list ([#​41239](https://redirect.github.com/renovatebot/renovate/issues/41239)) ([77670db](https://redirect.github.com/renovatebot/renovate/commit/77670db9f3598c82f843384a03b445466f409140)) ##### Miscellaneous Chores - **deps:** update dependency [@​vitest/eslint-plugin](https://redirect.github.com/vitest/eslint-plugin) to v1.6.7 (main) ([#​41238](https://redirect.github.com/renovatebot/renovate/issues/41238)) ([decbaf1](https://redirect.github.com/renovatebot/renovate/commit/decbaf16536f1cdcc5293dd8ef07bd1a048cad4c)) - **deps:** update dependency typescript-eslint to v8.55.0 (main) ([#​41231](https://redirect.github.com/renovatebot/renovate/issues/41231)) ([3852b39](https://redirect.github.com/renovatebot/renovate/commit/3852b3993533ee6dc9f520a86c60e4464ba1ad6d)) ### [`v43.19.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.19.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.19.1...43.19.2) ##### Build System - **deps:** update dependency re2 to v1.23.3 (main) ([#​41236](https://redirect.github.com/renovatebot/renovate/issues/41236)) ([594367c](https://redirect.github.com/renovatebot/renovate/commit/594367c41649610848794af7c7f3e3d9fb8e536d)) ### [`v43.19.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.19.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.19.0...43.19.1) ##### Miscellaneous Chores - **deps:** update dependency nock to v14.0.11 (main) ([#​41235](https://redirect.github.com/renovatebot/renovate/issues/41235)) ([20c9133](https://redirect.github.com/renovatebot/renovate/commit/20c9133d536be7f7901f004e9592032ff879ab90)) ##### Build System - **deps:** update emojibase monorepo to v17 (main) (major) ([#​41226](https://redirect.github.com/renovatebot/renovate/issues/41226)) ([2ccaa53](https://redirect.github.com/renovatebot/renovate/commit/2ccaa538587f4e826f666604bf59b7627258a7b0)) ##### Continuous Integration - **find-issues-with-missing-labels:** add new Issue types ([#​41229](https://redirect.github.com/renovatebot/renovate/issues/41229)) ([6dc9eb5](https://redirect.github.com/renovatebot/renovate/commit/6dc9eb5b05497b8ae5e3fe677b12224734d2486b)) - **find-issues-with-missing-labels:** note author of issues ([#​41228](https://redirect.github.com/renovatebot/renovate/issues/41228)) ([75bb5e2](https://redirect.github.com/renovatebot/renovate/commit/75bb5e2d75df895a427afc31c1314ceaa15bb83a)) ### [`v43.19.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.19.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.18.0...43.19.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.8.0 (main) ([#​41234](https://redirect.github.com/renovatebot/renovate/issues/41234)) ([28c5981](https://redirect.github.com/renovatebot/renovate/commit/28c598155628e17c3314c59a142f77a94632cca1)) ##### Miscellaneous Chores - **deps:** update dependency [@​types/cacache](https://redirect.github.com/types/cacache) to v20.0.1 (main) ([#​41230](https://redirect.github.com/renovatebot/renovate/issues/41230)) ([713d3ee](https://redirect.github.com/renovatebot/renovate/commit/713d3ee9e717f680c6b735b9aa46870fbde7d4a1)) - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.2.0 (main) ([#​41233](https://redirect.github.com/renovatebot/renovate/issues/41233)) ([35ad2aa](https://redirect.github.com/renovatebot/renovate/commit/35ad2aaffd0eb4731b96a0d7051a79c54cbfafe7)) - drop tar types ([#​41224](https://redirect.github.com/renovatebot/renovate/issues/41224)) ([536d877](https://redirect.github.com/renovatebot/renovate/commit/536d877fe3055586bca4b691f36bf56f70e7f7eb)) ##### Code Refactoring - **tools:** migrate to `execa` ([#​41062](https://redirect.github.com/renovatebot/renovate/issues/41062)) ([1778e04](https://redirect.github.com/renovatebot/renovate/commit/1778e0424a71939fc908c463d23149d4defdce4b)) ### [`v43.18.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.18.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.17.1...43.18.0) ##### Features - **presets/monorepos:** add bull-board ([#​41222](https://redirect.github.com/renovatebot/renovate/issues/41222)) ([e1bc6e7](https://redirect.github.com/renovatebot/renovate/commit/e1bc6e7013db8bd5d80f5785a8c137139a19a811)) - **presets/monorepos:** add zxcvbn-ts ([#​41223](https://redirect.github.com/renovatebot/renovate/issues/41223)) ([c6e2a10](https://redirect.github.com/renovatebot/renovate/commit/c6e2a1020864b1742babfa76b88002f18c022a12)) ##### Documentation - don't show multiple `default`s ([#​41219](https://redirect.github.com/renovatebot/renovate/issues/41219)) ([fb14b89](https://redirect.github.com/renovatebot/renovate/commit/fb14b8950534b5cfc4d69e2ea7cafa47d9f447f1)), closes [#​40969](https://redirect.github.com/renovatebot/renovate/issues/40969) ##### Code Refactoring - drop tsx ([#​41221](https://redirect.github.com/renovatebot/renovate/issues/41221)) ([70333c6](https://redirect.github.com/renovatebot/renovate/commit/70333c6b0eff5ef2c7acaeb59c54b91eb6a97f3b)) ### [`v43.17.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.17.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.17.0...43.17.1) ##### Build System - **deps:** update dependency cronstrue to v3.12.0 (main) ([#​41213](https://redirect.github.com/renovatebot/renovate/issues/41213)) ([0aa46b0](https://redirect.github.com/renovatebot/renovate/commit/0aa46b06c5d959724a1ac8d1071021a4e20bb374)) ### [`v43.17.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.17.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.16.0...43.17.0) ##### Features - **presets:** support registryUrl in tfvarsVersions preset ([#​41209](https://redirect.github.com/renovatebot/renovate/issues/41209)) ([d82e88c](https://redirect.github.com/renovatebot/renovate/commit/d82e88c76a55e3a23a70fa20ec412ea50f932a3b)) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.7.4 (main) ([#​41212](https://redirect.github.com/renovatebot/renovate/issues/41212)) ([dca33de](https://redirect.github.com/renovatebot/renovate/commit/dca33dece34dafa36166260bdbb91f3dd4d068ec)) ##### Documentation - **managers:** indicate Lock File Maintenance support ([#​41151](https://redirect.github.com/renovatebot/renovate/issues/41151)) ([56b2d2a](https://redirect.github.com/renovatebot/renovate/commit/56b2d2ab7ac02930c9a1161d92581b33a1cb7873)) ### [`v43.16.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.16.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.15.3...43.16.0) ##### Features - promote `repositoryCacheForceLocal` out of experimental ([#​41207](https://redirect.github.com/renovatebot/renovate/issues/41207)) ([067a194](https://redirect.github.com/renovatebot/renovate/commit/067a19490bffea230491e42e4a05542a162fd074)) ### [`v43.15.3`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.15.3) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.15.2...43.15.3) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.7.3 (main) ([#​41205](https://redirect.github.com/renovatebot/renovate/issues/41205)) ([6cc93ae](https://redirect.github.com/renovatebot/renovate/commit/6cc93ae8134c4f481f0bd904c7058ac640fc891d)) ##### Miscellaneous Chores - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.1.3 (main) ([#​41203](https://redirect.github.com/renovatebot/renovate/issues/41203)) ([392862b](https://redirect.github.com/renovatebot/renovate/commit/392862bbd863051f9267e1adf011c9a50b990fa1)) ### [`v43.15.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.15.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.15.1...43.15.2) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.7.2 (main) ([#​41202](https://redirect.github.com/renovatebot/renovate/issues/41202)) ([242d7b5](https://redirect.github.com/renovatebot/renovate/commit/242d7b5a2c801bebf7e3727b82282e414016cf4a)) ##### Documentation - update references to jaegertracing/jaeger to v2.15.1 (main) ([#​41194](https://redirect.github.com/renovatebot/renovate/issues/41194)) ([f056665](https://redirect.github.com/renovatebot/renovate/commit/f0566659559c855d6b29da6074ba3458a6293379)) - update references to python to [`151ab35`](https://redirect.github.com/renovatebot/renovate/commit/151ab35) (main) ([#​41193](https://redirect.github.com/renovatebot/renovate/issues/41193)) ([3b9d247](https://redirect.github.com/renovatebot/renovate/commit/3b9d2472c233fdae78084f07801f91a7967178fd)) ##### Miscellaneous Chores - **deps:** update containerbase/internal-tools action to v4.1.6 (main) ([#​41195](https://redirect.github.com/renovatebot/renovate/issues/41195)) ([8077a33](https://redirect.github.com/renovatebot/renovate/commit/8077a337da92aa99be0f016a5a35a719e70093a3)) - **deps:** update containerbase/internal-tools action to v4.1.7 (main) ([#​41197](https://redirect.github.com/renovatebot/renovate/issues/41197)) ([9ed0bab](https://redirect.github.com/renovatebot/renovate/commit/9ed0bab303058c58587a186d8929d7ae443db2b7)) - **deps:** update containerbase/internal-tools action to v4.1.9 (main) ([#​41201](https://redirect.github.com/renovatebot/renovate/issues/41201)) ([2cfb9d1](https://redirect.github.com/renovatebot/renovate/commit/2cfb9d128f4584647ecc0e2ad81a6d0e351be2ec)) - **deps:** update dependency [@​containerbase/eslint-plugin](https://redirect.github.com/containerbase/eslint-plugin) to v1.1.32 (main) ([#​41196](https://redirect.github.com/renovatebot/renovate/issues/41196)) ([b336c12](https://redirect.github.com/renovatebot/renovate/commit/b336c125c3b228b51ddd86aad9c24b7ffa065e4f)) - **deps:** update dependency [@​containerbase/istanbul-reports-html](https://redirect.github.com/containerbase/istanbul-reports-html) to v1.1.31 (main) ([#​41198](https://redirect.github.com/renovatebot/renovate/issues/41198)) ([90bdd3a](https://redirect.github.com/renovatebot/renovate/commit/90bdd3a8af43cb165fd07a1865204f6dc0bccf0d)) - **deps:** update dependency [@​containerbase/semantic-release-pnpm](https://redirect.github.com/containerbase/semantic-release-pnpm) to v1.3.21 (main) ([#​41199](https://redirect.github.com/renovatebot/renovate/issues/41199)) ([5464ee3](https://redirect.github.com/renovatebot/renovate/commit/5464ee35471ce7274ebe8cfc7fb85b59e65cbfa2)) - **deps:** update dependency pnpm to v10.29.2 (main) ([#​41200](https://redirect.github.com/renovatebot/renovate/issues/41200)) ([f5f39a0](https://redirect.github.com/renovatebot/renovate/commit/f5f39a0412e314b912dddbdeabe35418d028e1e4)) ### [`v43.15.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.15.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.15.0...43.15.1) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.7.1 (main) ([#​41190](https://redirect.github.com/renovatebot/renovate/issues/41190)) ([9c73e13](https://redirect.github.com/renovatebot/renovate/commit/9c73e130fed47345aed4adda1fcfda82adc1e2ff)) ##### Documentation - autogenerate list of managers supporting `lockfileMaintenance` ([#​41135](https://redirect.github.com/renovatebot/renovate/issues/41135)) ([4005872](https://redirect.github.com/renovatebot/renovate/commit/4005872ff6533a053d38e7e62cc8bdc8d98db0a8)) ##### Miscellaneous Chores - **deps:** update dependency [@​types/node](https://redirect.github.com/types/node) to v24.10.12 (main) ([#​41188](https://redirect.github.com/renovatebot/renovate/issues/41188)) ([2f48d08](https://redirect.github.com/renovatebot/renovate/commit/2f48d08edc88ab87ce338f72983169659fb833a5)) - **deps:** update dependency type-fest to v5.4.4 (main) ([#​41189](https://redirect.github.com/renovatebot/renovate/issues/41189)) ([7423100](https://redirect.github.com/renovatebot/renovate/commit/742310027baa5eee4301da9f8ffe835e1cad9786)) ##### Code Refactoring - **config/inherit:** move `onboardingBranch` to `InheritConfig` ([#​40865](https://redirect.github.com/renovatebot/renovate/issues/40865)) ([7a8dcdb](https://redirect.github.com/renovatebot/renovate/commit/7a8dcdbd01d00552205e79686fb23c36959da747)) - move `bbUseDevelopmentBranch` to `InheritConfig.OPTIONS` ([#​40890](https://redirect.github.com/renovatebot/renovate/issues/40890)) ([26f4fee](https://redirect.github.com/renovatebot/renovate/commit/26f4fee6cc1cbf525355a54133d93a9af072c60e)) ### [`v43.15.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.15.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.14.2...43.15.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.7.0 (main) ([#​41186](https://redirect.github.com/renovatebot/renovate/issues/41186)) ([fec5012](https://redirect.github.com/renovatebot/renovate/commit/fec5012cf06dba3a8cd9407aa06dc962682610bc)) ### [`v43.14.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.14.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.14.1...43.14.2) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.6.2 (main) ([#​41184](https://redirect.github.com/renovatebot/renovate/issues/41184)) ([6162f32](https://redirect.github.com/renovatebot/renovate/commit/6162f3217733fa094db597203213222266c00a42)) ##### Miscellaneous Chores - **deps:** update dependency pnpm to v10.29.1 (main) ([#​41185](https://redirect.github.com/renovatebot/renovate/issues/41185)) ([6c8cc20](https://redirect.github.com/renovatebot/renovate/commit/6c8cc20a4cac1fa6bcd0e545ac885f850e88daaa)) - **deps:** update dependency vite-tsconfig-paths to v6.1.0 (main) ([#​41182](https://redirect.github.com/renovatebot/renovate/issues/41182)) ([6756792](https://redirect.github.com/renovatebot/renovate/commit/6756792c4fadf2201f81ba181cb2f8c8d2805a6d)) - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.1.2 (main) ([#​41183](https://redirect.github.com/renovatebot/renovate/issues/41183)) ([ebff5a7](https://redirect.github.com/renovatebot/renovate/commit/ebff5a72d3ef59c816fcf21fd9e022c907b70b27)) - enforce `lockFileNames` when `supportsLockFileMaintenance=true` ([#​41175](https://redirect.github.com/renovatebot/renovate/issues/41175)) ([91015a7](https://redirect.github.com/renovatebot/renovate/commit/91015a7a30d03e5f129e61d813fe864f09fe3b15)) ### [`v43.14.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.14.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.14.0...43.14.1) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.6.1 (main) ([#​41176](https://redirect.github.com/renovatebot/renovate/issues/41176)) ([57c074f](https://redirect.github.com/renovatebot/renovate/commit/57c074fe7eee95f3907b75f775d1d96bffeeae01)) ### [`v43.14.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.14.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.13.0...43.14.0) ##### Features - **mise:** add support for github backend ([#​40706](https://redirect.github.com/renovatebot/renovate/issues/40706)) ([4b56523](https://redirect.github.com/renovatebot/renovate/commit/4b56523d148451dedc6e42f3720a38e1bffee87e)) ### [`v43.13.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.13.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.12.1...43.13.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.6.0 (main) ([#​41172](https://redirect.github.com/renovatebot/renovate/issues/41172)) ([52f53ab](https://redirect.github.com/renovatebot/renovate/commit/52f53aba0003a2dc87e739fb88722ff3773397eb)) - **presets/monorepos:** add k8s.io repos ([#​41171](https://redirect.github.com/renovatebot/renovate/issues/41171)) ([03020a2](https://redirect.github.com/renovatebot/renovate/commit/03020a29992c91b393295fa29c9cfe283d10c7f4)) ##### Miscellaneous Chores - **deps:** update containerbase/internal-tools action to v4.1.4 (main) ([#​41173](https://redirect.github.com/renovatebot/renovate/issues/41173)) ([85203eb](https://redirect.github.com/renovatebot/renovate/commit/85203eba0e716c033dcd25dd8a038573bde44051)) ### [`v43.12.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.12.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.12.0...43.12.1) ##### Documentation - mirror the helm-charts/index.yaml to the built docs site ([#​41160](https://redirect.github.com/renovatebot/renovate/issues/41160)) ([16aa695](https://redirect.github.com/renovatebot/renovate/commit/16aa695f449b8d43c6bbdeb18c278482350a6a03)), closes [#​39878](https://redirect.github.com/renovatebot/renovate/issues/39878) ##### Build System - **deps:** update dependency markdown-it to v14.1.1 \[security] (main) ([#​41169](https://redirect.github.com/renovatebot/renovate/issues/41169)) ([aeab855](https://redirect.github.com/renovatebot/renovate/commit/aeab85564c53f87b26d8ab3ba193f2956a08655c)) ### [`v43.12.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.12.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.11.1...43.12.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.5.1 (main) ([#​41166](https://redirect.github.com/renovatebot/renovate/issues/41166)) ([9a3fdf7](https://redirect.github.com/renovatebot/renovate/commit/9a3fdf70a39665f749ea262628758d11475bbfcc)) ##### Miscellaneous Chores - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.1.1 (main) ([#​41163](https://redirect.github.com/renovatebot/renovate/issues/41163)) ([92749a7](https://redirect.github.com/renovatebot/renovate/commit/92749a7d0d973498aaf93bc4f108cc63584e7e9c)) ### [`v43.11.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.11.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.11.0...43.11.1) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.4.6 (main) ([#​41154](https://redirect.github.com/renovatebot/renovate/issues/41154)) ([26db162](https://redirect.github.com/renovatebot/renovate/commit/26db16251495becd099a8dbc27cf466bd192f26f)) ##### Miscellaneous Chores - **deps:** update github/codeql-action action to v4.32.3 (main) ([#​41153](https://redirect.github.com/renovatebot/renovate/issues/41153)) ([440e3f3](https://redirect.github.com/renovatebot/renovate/commit/440e3f3882124b2e274e81c6f8caf96bc4ec0dcc)) ##### Tests - **util/exec:** add additional test coverage for GHSA-8wc6-vgrq-x6cf ([#​41150](https://redirect.github.com/renovatebot/renovate/issues/41150)) ([01d2772](https://redirect.github.com/renovatebot/renovate/commit/01d2772b9c769c463654a5331aaba4fece64522a)) ### [`v43.11.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.11.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.10.4...43.11.0) ##### Features - **presets/tsconfigNodeVersions:** support `jsconfig.json` files ([#​41148](https://redirect.github.com/renovatebot/renovate/issues/41148)) ([b826167](https://redirect.github.com/renovatebot/renovate/commit/b826167964002fe7375a88a249d222842d0344f0)) ### [`v43.10.4`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.10.4) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.10.3...43.10.4) ##### Bug Fixes - **deps:** update qs to v6.14.2 ([#​41146](https://redirect.github.com/renovatebot/renovate/issues/41146)) ([aa4b635](https://redirect.github.com/renovatebot/renovate/commit/aa4b635ffa3889ea1f25b68eba2c2574ee23f3c8)) ##### Miscellaneous Chores - **deps:** lock file maintenance (main) ([#​41145](https://redirect.github.com/renovatebot/renovate/issues/41145)) ([20b5280](https://redirect.github.com/renovatebot/renovate/commit/20b5280bc16d1bd88670c3176904953976c97e5b)) - **deps:** update containerbase/internal-tools action to v4.1.3 (main) ([#​41147](https://redirect.github.com/renovatebot/renovate/issues/41147)) ([30a4526](https://redirect.github.com/renovatebot/renovate/commit/30a4526748a066f19cf8ba07c277f63d577ed1e6)) - **deps:** update dependency vite to v8.0.0-beta.13 (main) ([#​41144](https://redirect.github.com/renovatebot/renovate/issues/41144)) ([9dd615f](https://redirect.github.com/renovatebot/renovate/commit/9dd615f3aadb899dd111d761e12c38a19d103733)) ### [`v43.10.3`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.10.3) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.10.2...43.10.3) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.4.5 (main) ([#​41142](https://redirect.github.com/renovatebot/renovate/issues/41142)) ([26fefcb](https://redirect.github.com/renovatebot/renovate/commit/26fefcb344c21ec41565cbb084019d7b8eed9e02)) ##### Documentation - **nuget:** add `supportsLockFileMaintenance` flag ([#​41134](https://redirect.github.com/renovatebot/renovate/issues/41134)) ([5c38220](https://redirect.github.com/renovatebot/renovate/commit/5c38220087d6fbba256a70f70df12d4cbcf8fcd0)) ##### Miscellaneous Chores - **deps:** update aquasecurity/trivy-action action to v0.34.0 (main) ([#​41138](https://redirect.github.com/renovatebot/renovate/issues/41138)) ([fe65732](https://redirect.github.com/renovatebot/renovate/commit/fe65732ef0557598955e2eeb989de8bfb3b32155)) - **deps:** update dependency esbuild to v0.27.3 (main) ([#​41140](https://redirect.github.com/renovatebot/renovate/issues/41140)) ([e6f2c78](https://redirect.github.com/renovatebot/renovate/commit/e6f2c7880febbea9e625b357126afdd68db5c843)) ##### Code Refactoring - add lock file names to manager api ([#​41133](https://redirect.github.com/renovatebot/renovate/issues/41133)) ([d024075](https://redirect.github.com/renovatebot/renovate/commit/d024075d008e1b2ba2faa951df91dd1471d308ee)) ### [`v43.10.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.10.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.10.1...43.10.2) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.4.4 (main) ([#​41136](https://redirect.github.com/renovatebot/renovate/issues/41136)) ([e621a93](https://redirect.github.com/renovatebot/renovate/commit/e621a933ec3241da79dd70684b111297f105269e)) ##### Miscellaneous Chores - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.0.13 (main) ([#​41132](https://redirect.github.com/renovatebot/renovate/issues/41132)) ([a0e193d](https://redirect.github.com/renovatebot/renovate/commit/a0e193d109ea68f292ae9edfc0731c73a6f2695f)) - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.1.0 (main) ([#​41137](https://redirect.github.com/renovatebot/renovate/issues/41137)) ([11f19c2](https://redirect.github.com/renovatebot/renovate/commit/11f19c228331a67761ea537fb02e1f83a5f9c641)) ### [`v43.10.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.10.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.10.0...43.10.1) ##### Build System - **deps:** update dependency semver to v7.7.4 (main) ([#​41131](https://redirect.github.com/renovatebot/renovate/issues/41131)) ([9ee25e9](https://redirect.github.com/renovatebot/renovate/commit/9ee25e9d3a4ed8b472616928f7f52c3a12417aea)) ### [`v43.10.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.10.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.9.0...43.10.0) ##### Features - **presets/monorepos:** Add additional dotnet resources ([#​41123](https://redirect.github.com/renovatebot/renovate/issues/41123)) ([d0ff582](https://redirect.github.com/renovatebot/renovate/commit/d0ff582908bac95532fbd92eb01ef2004a05387f)) ##### Miscellaneous Chores - **deps:** update dependency [@​types/node](https://redirect.github.com/types/node) to v24.10.11 (main) ([#​41125](https://redirect.github.com/renovatebot/renovate/issues/41125)) ([103a765](https://redirect.github.com/renovatebot/renovate/commit/103a76546fc1dc5a6fd353c843378025b5998ad0)) ### [`v43.9.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.9.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.8.5...43.9.0) ##### Features - **presets/monorepos:** add middleapi/orpc ([#​41115](https://redirect.github.com/renovatebot/renovate/issues/41115)) ([17bb3a9](https://redirect.github.com/renovatebot/renovate/commit/17bb3a9c80a5ad8c1192cb3d072501ed69af2d40)) ##### Miscellaneous Chores - **deps:** update dependency tsdown to v0.20.3 (main) ([#​41117](https://redirect.github.com/renovatebot/renovate/issues/41117)) ([b2c4124](https://redirect.github.com/renovatebot/renovate/commit/b2c41246059df04bee75925d7445f903fcdb356c)) - **github:** warn when using default Git author on GitHub.com ([#​41055](https://redirect.github.com/renovatebot/renovate/issues/41055)) ([bad0211](https://redirect.github.com/renovatebot/renovate/commit/bad0211f3003976f71a0047ee37c1987ca51cf22)), closes [#​39309](https://redirect.github.com/renovatebot/renovate/issues/39309) - post 43.x release updates ([#​41124](https://redirect.github.com/renovatebot/renovate/issues/41124)) ([4137682](https://redirect.github.com/renovatebot/renovate/commit/41376822ebb1105976518a9fb5447c0a74c3c0cc))
    --- ### Configuration 📅 **Schedule**: Branch creation - "before 6am on Monday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index ebf962bc4..5596a242b 100644 --- a/mise.toml +++ b/mise.toml @@ -4,7 +4,7 @@ java = "temurin-25.0.2+10.0.LTS" lychee = "0.23.0" node = "24.13.1" -"npm:renovate" = "43.8.5" +"npm:renovate" = "43.26.4" protoc = "33.5" [env] From 122b09cf3af6137354c2925f9054e49271047484 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 12:06:11 +0000 Subject: [PATCH 842/870] chore(deps): update dependency grafana/flint to v0.7.0 (#1911) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [grafana/flint](https://redirect.github.com/grafana/flint) | minor | `v0.6.0` → `v0.7.0` | --- ### Release Notes
    grafana/flint (grafana/flint) ### [`v0.7.0`](https://redirect.github.com/grafana/flint/releases/tag/v0.7.0) [Compare Source](https://redirect.github.com/grafana/flint/compare/v0.6.0...v0.7.0) ##### Features - handle line-number anchors and issue comments globally ([#​56](https://redirect.github.com/grafana/flint/issues/56)) ([cf751df](https://redirect.github.com/grafana/flint/commit/cf751df1093a06d8dfac60c9918ef129944494e4)) ##### Bug Fixes - **release-please:** fix footer not appearing on release PRs ([#​40](https://redirect.github.com/grafana/flint/issues/40)) ([d7a55e4](https://redirect.github.com/grafana/flint/commit/d7a55e4a2ea3754afb84c5c31eeb742b374c21e0)) - use remap instead of exclude for issue comment anchors ([#​58](https://redirect.github.com/grafana/flint/issues/58)) ([656f355](https://redirect.github.com/grafana/flint/commit/656f355db5280a86c885da957f34193d1efc800e))
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mise.toml b/mise.toml index 5596a242b..8c7652517 100644 --- a/mise.toml +++ b/mise.toml @@ -53,15 +53,15 @@ run = "./mvnw install -DskipTests -Dcoverage.skip=true" # Shared lint tasks from flint (https://github.com/grafana/flint) [tasks."lint:super-linter"] description = "Run Super-Linter on the repository" -file = "https://raw.githubusercontent.com/grafana/flint/5bb3726cfe3305072457c0c4fa85dce5ca154680/tasks/lint/super-linter.sh" # v0.6.0 +file = "https://raw.githubusercontent.com/grafana/flint/8822bdc543f28f2c7dd1f697af4df6d89768c507/tasks/lint/super-linter.sh" # v0.7.0 [tasks."lint:links"] description = "Lint links" -file = "https://raw.githubusercontent.com/grafana/flint/5bb3726cfe3305072457c0c4fa85dce5ca154680/tasks/lint/links.sh" # v0.6.0 +file = "https://raw.githubusercontent.com/grafana/flint/8822bdc543f28f2c7dd1f697af4df6d89768c507/tasks/lint/links.sh" # v0.7.0 [tasks."lint:renovate-deps"] description = "Verify renovate-tracked-deps.json is up to date" -file = "https://raw.githubusercontent.com/grafana/flint/5bb3726cfe3305072457c0c4fa85dce5ca154680/tasks/lint/renovate-deps.py" # v0.6.0 +file = "https://raw.githubusercontent.com/grafana/flint/8822bdc543f28f2c7dd1f697af4df6d89768c507/tasks/lint/renovate-deps.py" # v0.7.0 [tasks."lint"] description = "Run all lints" From 53ed2985bc6d208deb750a88da718542d5016f60 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 19:54:46 +0000 Subject: [PATCH 843/870] chore(deps): update grafana/grafana docker tag to v12.4.0 (#1913) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [grafana/grafana](https://redirect.github.com/grafana/grafana) | minor | `12.3.3` → `12.4.0` | --- ### Release Notes
    grafana/grafana (grafana/grafana) ### [`v12.3.4`](https://redirect.github.com/grafana/grafana/compare/v12.3.3...v12.3.4) [Compare Source](https://redirect.github.com/grafana/grafana/compare/v12.3.3...v12.3.4)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-custom-buckets/docker-compose.yaml | 2 +- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- examples/example-native-histogram/docker-compose.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/example-custom-buckets/docker-compose.yaml b/examples/example-custom-buckets/docker-compose.yaml index b024481af..13146de2b 100644 --- a/examples/example-custom-buckets/docker-compose.yaml +++ b/examples/example-custom-buckets/docker-compose.yaml @@ -18,7 +18,7 @@ services: - --enable-feature=native-histograms - --config.file=/prometheus.yml grafana: - image: grafana/grafana:12.3.3@sha256:9e1e77ade304069aee3196e9a4f210830e96e80ce9a2640891eccc324b152faf + image: grafana/grafana:12.4.0@sha256:b0ae311af06228bcfd4a620504b653db80f5b91e94dc3dc2a5b7dab202bcde20 network_mode: host volumes: - ./docker-compose/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/grafana-datasources.yaml diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index dee885885..3c73e7a3f 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -59,7 +59,7 @@ services: command: - --config.file=/config.yaml grafana: - image: grafana/grafana:12.3.3@sha256:9e1e77ade304069aee3196e9a4f210830e96e80ce9a2640891eccc324b152faf + image: grafana/grafana:12.4.0@sha256:b0ae311af06228bcfd4a620504b653db80f5b91e94dc3dc2a5b7dab202bcde20 network_mode: host ports: - "3000:3000" diff --git a/examples/example-native-histogram/docker-compose.yaml b/examples/example-native-histogram/docker-compose.yaml index 492ce015f..a3932a975 100644 --- a/examples/example-native-histogram/docker-compose.yaml +++ b/examples/example-native-histogram/docker-compose.yaml @@ -18,7 +18,7 @@ services: - --enable-feature=native-histograms - --config.file=/prometheus.yml grafana: - image: grafana/grafana:12.3.3@sha256:9e1e77ade304069aee3196e9a4f210830e96e80ce9a2640891eccc324b152faf + image: grafana/grafana:12.4.0@sha256:b0ae311af06228bcfd4a620504b653db80f5b91e94dc3dc2a5b7dab202bcde20 network_mode: host volumes: - ./docker-compose/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/grafana-datasources.yaml From fc219837f90c194962b33dadab179f19738d75b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 19:57:09 +0000 Subject: [PATCH 844/870] chore(deps): update node.js to v24.14.0 (#1914) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) | minor | `24.13.1` → `24.14.0` | --- ### Release Notes
    nodejs/node (node) ### [`v24.14.0`](https://redirect.github.com/nodejs/node/compare/v24.13.1...v24.14.0) [Compare Source](https://redirect.github.com/nodejs/node/compare/v24.13.1...v24.14.0)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index 8c7652517..f331afd51 100644 --- a/mise.toml +++ b/mise.toml @@ -3,7 +3,7 @@ "go:github.com/grafana/oats" = "0.6.1" java = "temurin-25.0.2+10.0.LTS" lychee = "0.23.0" -node = "24.13.1" +node = "24.14.0" "npm:renovate" = "43.26.4" protoc = "33.5" From 28e49dac7fd80d6c83adfb054a23e9e15ce627b6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 22:52:50 +0000 Subject: [PATCH 845/870] chore(deps): update prom/prometheus docker tag to v3.10.0 (#1917) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [prom/prometheus](https://redirect.github.com/prometheus/prometheus) | minor | `v3.9.1` → `v3.10.0` | --- ### Release Notes
    prometheus/prometheus (prom/prometheus) ### [`v3.10.0`](https://redirect.github.com/prometheus/prometheus/compare/v3.9.1...v3.10.0-rc.0) [Compare Source](https://redirect.github.com/prometheus/prometheus/compare/v3.9.1...v3.10.0)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-custom-buckets/docker-compose.yaml | 2 +- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- examples/example-exporter-opentelemetry/docker-compose.yaml | 2 +- examples/example-native-histogram/docker-compose.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/example-custom-buckets/docker-compose.yaml b/examples/example-custom-buckets/docker-compose.yaml index 13146de2b..0a38962d5 100644 --- a/examples/example-custom-buckets/docker-compose.yaml +++ b/examples/example-custom-buckets/docker-compose.yaml @@ -10,7 +10,7 @@ services: - -jar - /example-custom-buckets.jar prometheus: - image: prom/prometheus:v3.9.1@sha256:1f0f50f06acaceb0f5670d2c8a658a599affe7b0d8e78b898c1035653849a702 + image: prom/prometheus:v3.10.0@sha256:4a61322ac1103a0e3aea2a61ef1718422a48fa046441f299d71e660a3bc71ae9 network_mode: host volumes: - ./docker-compose/prometheus.yml:/prometheus.yml diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index 3c73e7a3f..3147b123b 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -43,7 +43,7 @@ services: command: - --config=file:/config.yaml prometheus: - image: prom/prometheus:v3.9.1@sha256:1f0f50f06acaceb0f5670d2c8a658a599affe7b0d8e78b898c1035653849a702 + image: prom/prometheus:v3.10.0@sha256:4a61322ac1103a0e3aea2a61ef1718422a48fa046441f299d71e660a3bc71ae9 network_mode: host volumes: - ./config/prometheus.yaml:/prometheus.yaml diff --git a/examples/example-exporter-opentelemetry/docker-compose.yaml b/examples/example-exporter-opentelemetry/docker-compose.yaml index 97bc9ab9b..45a02a483 100644 --- a/examples/example-exporter-opentelemetry/docker-compose.yaml +++ b/examples/example-exporter-opentelemetry/docker-compose.yaml @@ -20,7 +20,7 @@ services: command: - --config=file:/config.yaml prometheus: - image: prom/prometheus:v3.9.1@sha256:1f0f50f06acaceb0f5670d2c8a658a599affe7b0d8e78b898c1035653849a702 + image: prom/prometheus:v3.10.0@sha256:4a61322ac1103a0e3aea2a61ef1718422a48fa046441f299d71e660a3bc71ae9 network_mode: host volumes: - ./config/prometheus.yaml:/prometheus.yaml diff --git a/examples/example-native-histogram/docker-compose.yaml b/examples/example-native-histogram/docker-compose.yaml index a3932a975..0d54864e8 100644 --- a/examples/example-native-histogram/docker-compose.yaml +++ b/examples/example-native-histogram/docker-compose.yaml @@ -10,7 +10,7 @@ services: - -jar - /example-native-histogram.jar prometheus: - image: prom/prometheus:v3.9.1@sha256:1f0f50f06acaceb0f5670d2c8a658a599affe7b0d8e78b898c1035653849a702 + image: prom/prometheus:v3.10.0@sha256:4a61322ac1103a0e3aea2a61ef1718422a48fa046441f299d71e660a3bc71ae9 network_mode: host volumes: - ./docker-compose/prometheus.yml:/prometheus.yml From e2c691e0b43475e8ca3ee6eacd80ee3c354e1d7c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Feb 2026 03:10:18 +0000 Subject: [PATCH 846/870] chore(deps): update module go:github.com/gohugoio/hugo to v0.157.0 (#1916) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [go:github.com/gohugoio/hugo](https://redirect.github.com/gohugoio/hugo) | `v0.156.0` → `v0.157.0` | ![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgohugoio%2fhugo/v0.157.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgohugoio%2fhugo/v0.156.0/v0.157.0?slim=true) | --- ### Release Notes
    gohugoio/hugo (go:github.com/gohugoio/hugo) ### [`v0.157.0`](https://redirect.github.com/gohugoio/hugo/compare/v0.156.0...v0.157.0) [Compare Source](https://redirect.github.com/gohugoio/hugo/compare/v0.156.0...v0.157.0)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index f331afd51..e545af213 100644 --- a/mise.toml +++ b/mise.toml @@ -1,5 +1,5 @@ [tools] -"go:github.com/gohugoio/hugo" = "v0.156.0" +"go:github.com/gohugoio/hugo" = "v0.157.0" "go:github.com/grafana/oats" = "0.6.1" java = "temurin-25.0.2+10.0.LTS" lychee = "0.23.0" From 78e9e87f2099a327f94bd6fe027a13ca67fa0da3 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 26 Feb 2026 13:02:19 +0100 Subject: [PATCH 847/870] chore: rename CLAUDE.md to AGENTS.md (#1907) ## Summary - Move AI coding agent instructions from CLAUDE.md to AGENTS.md, the open standard ([Linux Foundation / Agentic AI Foundation](https://github.com/anthropics/agents-md)) supported by Cursor, Copilot, Codex, Gemini CLI, and others - CLAUDE.md now imports AGENTS.md via `@AGENTS.md` so Claude Code continues to work ## Test plan - [ ] Open repo in Claude Code and verify instructions are loaded - [ ] Verify AGENTS.md content matches the original CLAUDE.md --------- Signed-off-by: Gregor Zeitlinger --- AGENTS.md | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ CLAUDE.md | 134 +---------------------------------------- 2 files changed, 176 insertions(+), 132 deletions(-) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..e9f7e14c4 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,174 @@ +# AGENTS.md + +This file provides guidance to AI coding agents when working +with code in this repository. + +## Build Commands + +This project uses Maven with mise for task automation. +The Maven wrapper (`./mvnw`) is used for all builds. + +```bash +# Full CI build (clean + install + all checks) +mise run ci + +# Quick compile without tests or checks (fastest) +mise run compile + +# Run unit tests only (skips formatting/coverage/checkstyle) +mise run test + +# Run all tests including integration tests +mise run test-all + +# Format code with Google Java Format +mise run format +# or directly: ./mvnw spotless:apply + +# Run a single test class +./mvnw test -Dtest=CounterTest \ + -Dspotless.check.skip=true \ + -Dcoverage.skip=true -Dcheckstyle.skip=true + +# Run a single test method +./mvnw test -Dtest=CounterTest#testIncrement \ + -Dspotless.check.skip=true \ + -Dcoverage.skip=true -Dcheckstyle.skip=true + +# Run tests in a specific module +./mvnw test -pl prometheus-metrics-core \ + -Dspotless.check.skip=true \ + -Dcoverage.skip=true -Dcheckstyle.skip=true + +# Regenerate protobuf classes (after protobuf dep update) +mise run generate +``` + +## Architecture + +The library follows a layered architecture where metrics +flow from core types through a registry to exporters: + +```text +prometheus-metrics-core (user-facing API) + │ + ▼ collect() +prometheus-metrics-model (immutable snapshots) + │ + ▼ +prometheus-metrics-exposition-formats + │ + ▼ +Exporters (httpserver, servlet, pushgateway, otel) +``` + +### Key Modules + +- **prometheus-metrics-core**: User-facing metric types + (Counter, Gauge, Histogram, Summary, Info, StateSet). + All metrics implement `Collector` with `collect()`. +- **prometheus-metrics-model**: Internal read-only immutable + snapshot types returned by `collect()`. + Contains `PrometheusRegistry` for metric registration. +- **prometheus-metrics-config**: Runtime configuration via + properties files or system properties. +- **prometheus-metrics-exposition-formats**: Converts + snapshots to Prometheus exposition formats. +- **prometheus-metrics-tracer**: Exemplar support with + OpenTelemetry tracing integration. +- **prometheus-metrics-simpleclient-bridge**: Allows legacy + simpleclient 0.16.0 metrics to work with the new registry. + +### Instrumentation Modules + +Pre-built instrumentations: +`prometheus-metrics-instrumentation-jvm`, `-caffeine`, +`-guava`, `-dropwizard`, `-dropwizard5`. + +## Code Style + +- **Formatter**: Google Java Format (enforced via Spotless) +- **Line length**: 100 characters + (enforced for ALL files including Markdown, Java, YAML) +- **Indentation**: 2 spaces +- **Static analysis**: `Error Prone` with NullAway + (`io.prometheus.metrics` package) +- **Logger naming**: Logger fields must be named `logger` + (not `log`, `LOG`, or `LOGGER`) +- **Assertions in tests**: Use static imports from AssertJ + (`import static ...Assertions.assertThat`) +- **Empty catch blocks**: Use `ignored` as the variable name +- **Markdown code blocks**: Always specify language + (e.g., ` ```java`, ` ```bash`, ` ```text`) + +## Linting and Validation + +**CRITICAL**: These checks MUST be run before creating any +commits. CI will fail if these checks fail. + +### Java Files + +- **ALWAYS** run `mise run build` after modifying Java files + to ensure: + - Code formatting (Spotless with Google Java Format) + - Static analysis (`Error Prone` with NullAway) + - Checkstyle validation + - Build succeeds (tests are skipped; + run `mise run test` or `mise run test-all` for tests) + +### Non-Java Files (Markdown, YAML, JSON, shell scripts) + +- **ALWAYS** run `mise run lint` after modifying non-Java + files (runs super-linter + link checking + BOM check) +- `mise run fix` autofixes linting issues +- Super-linter will **autofix** many issues + (formatting, trailing whitespace, etc.) +- It only reports ERROR-level issues + (configured via `LOG_LEVEL=ERROR` in + `.github/super-linter.env`) +- Common issues caught: + - Lines exceeding 100 characters in Markdown files + - Missing language tags in fenced code blocks + - Table formatting issues + - YAML/JSON syntax errors + +### Running Linters + +```bash +# After modifying Java files (run BEFORE committing) +mise run build + +# After modifying non-Java files (run BEFORE committing) +mise run lint +# or to autofix: mise run fix +``` + +## Testing + +- JUnit 5 (Jupiter) with `@Test` annotations +- AssertJ for fluent assertions +- Mockito for mocking +- **Test visibility**: Test classes and test methods must be + package-protected (no `public` modifier) +- Integration tests are in `integration-tests/` and run + during `verify` phase +- Acceptance tests use OATs framework: + `mise run acceptance-test` + +## Documentation + +- Docs live under `docs/content/` and use `$version` as a + placeholder for the library version +- When publishing GitHub Pages, + `mise run set-release-version-github-pages` replaces + `$version` with the latest Git tag across all + `docs/content/**/*.md` files + (the published site is not versioned) +- Use `$version` for the Prometheus client version and + `$otelVersion-alpha` for the OTel instrumentation + version — never hardcode them + +## Java Version + +Source compatibility: Java 8. Tests run on Java 25 +(configured in `mise.toml`). diff --git a/CLAUDE.md b/CLAUDE.md index 3e5ed1592..6b5e23414 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,133 +1,3 @@ -# CLAUDE.md + -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Build Commands - -This project uses Maven with mise for task automation. The Maven wrapper (`./mvnw`) is used for all builds. - -```bash -# Full CI build (clean + install + all checks) -mise run ci - -# Quick compile without tests or checks (fastest for development) -mise run compile - -# Run unit tests only (skips formatting/coverage/checkstyle checks) -mise run test - -# Run all tests including integration tests -mise run test-all - -# Format code with Google Java Format -mise run format -# or directly: ./mvnw spotless:apply - -# Run a single test class -./mvnw test -Dtest=CounterTest -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true - -# Run a single test method -./mvnw test -Dtest=CounterTest#testIncrement -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true - -# Run tests in a specific module -./mvnw test -pl prometheus-metrics-core -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true - -# Regenerate protobuf classes (after protobuf dependency update) -mise run generate -``` - -## Architecture - -The library follows a layered architecture where metrics flow from core types through a registry to exporters: - -``` -prometheus-metrics-core (user-facing API) - │ - ▼ collect() -prometheus-metrics-model (immutable snapshots) - │ - ▼ -prometheus-metrics-exposition-formats (text/protobuf/OpenMetrics) - │ - ▼ -Exporters (httpserver, servlet, pushgateway, opentelemetry) -``` - -### Key Modules - -- **prometheus-metrics-core**: User-facing metric types (Counter, Gauge, Histogram, Summary, Info, StateSet). All metrics implement the `Collector` interface with a `collect()` method. -- **prometheus-metrics-model**: Internal read-only immutable snapshot types returned by `collect()`. Contains `PrometheusRegistry` for metric registration. -- **prometheus-metrics-config**: Runtime configuration via properties files or system properties. -- **prometheus-metrics-exposition-formats**: Converts snapshots to Prometheus exposition formats. -- **prometheus-metrics-tracer**: Exemplar support with OpenTelemetry tracing integration. -- **prometheus-metrics-simpleclient-bridge**: Allows legacy simpleclient 0.16.0 metrics to work with the new registry. - -### Instrumentation Modules - -Pre-built instrumentations: `prometheus-metrics-instrumentation-jvm`, `-caffeine`, `-guava`, `-dropwizard`, `-dropwizard5`. - -## Code Style - -- **Formatter**: Google Java Format (enforced via Spotless) -- **Line length**: 100 characters (enforced for ALL files including Markdown, Java, YAML, etc.) -- **Indentation**: 2 spaces -- **Static analysis**: Error Prone with NullAway (`io.prometheus.metrics` package) -- **Logger naming**: Logger fields must be named `logger` (not `log`, `LOG`, or `LOGGER`) -- **Assertions in tests**: Use static imports from AssertJ (`import static org.assertj.core.api.Assertions.assertThat`) -- **Empty catch blocks**: Use `ignored` as the exception variable name -- **Markdown code blocks**: Always specify language (e.g., ` ```java`, ` ```bash`, ` ```text`) - -## Linting and Validation - -**CRITICAL**: These checks MUST be run before creating any commits. CI will fail if these checks fail. - -### Java Files - -- **ALWAYS** run `mise run build` after modifying Java files to ensure: - - Code formatting (Spotless with Google Java Format) - - Static analysis (Error Prone with NullAway) - - Checkstyle validation - - Build succeeds (tests are skipped; run `mise run test` or `mise run test-all` to execute tests) - -### Non-Java Files (Markdown, YAML, JSON, shell scripts, etc.) - -- **ALWAYS** run `mise run lint` after modifying non-Java files - (runs super-linter + link checking + BOM check) -- `mise run fix` auto-fixes lint issues -- Super-linter will **auto-fix** many issues (formatting, trailing whitespace, etc.) -- It only reports ERROR-level issues (configured via `LOG_LEVEL=ERROR` in `.github/super-linter.env`) -- Common issues caught: - - Lines exceeding 100 characters in Markdown files - - Missing language tags in fenced code blocks - - Table formatting issues - - YAML/JSON syntax errors - -### Running Linters - -```bash -# After modifying Java files (run BEFORE committing) -mise run build - -# After modifying non-Java files (run BEFORE committing) -mise run lint -# or to auto-fix: mise run fix -``` - -## Testing - -- JUnit 5 (Jupiter) with `@Test` annotations -- AssertJ for fluent assertions -- Mockito for mocking -- **Test visibility**: Test classes and test methods must be package-protected (no `public` modifier) -- Integration tests are in `integration-tests/` and run during `verify` phase -- Acceptance tests use OATs framework: `mise run acceptance-test` - -## Documentation - -- Docs live under `docs/content/` and use `$version` as a placeholder for the library version -- When publishing GitHub Pages, `mise run set-release-version-github-pages` replaces `$version` with the latest git tag across all `docs/content/**/*.md` files (the published site is not versioned) -- Use `$version` for the Prometheus client version and `$otelVersion-alpha` for the OTel instrumentation version — never hardcode them - -## Java Version - -Source compatibility: Java 8. Tests run on Java 25 (configured in `mise.toml`). +@AGENTS.md From 35735f9e41c5f1eb7dfbf739cc3e3507eeba15a7 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 26 Feb 2026 21:32:31 +0100 Subject: [PATCH 848/870] ci: add mise version+sha256 pinning to CI (#1904) ## Summary - Pin mise `version` and `sha256` in all workflow files for reproducibility and supply-chain security - Renovate will keep these up to date via the custom manager in [grafana/flint#43](https://github.com/grafana/flint/pull/43) ## Test plan - [ ] CI passes with pinned mise version --------- Signed-off-by: Gregor Zeitlinger --- .github/renovate-tracked-deps.json | 27 +++++++++++++++++++ .github/workflows/acceptance-tests.yml | 3 +++ .github/workflows/build.yml | 3 +++ .github/workflows/github-pages.yaml | 2 ++ .../workflows/java-version-matrix-tests.yml | 3 +++ .github/workflows/lint.yml | 3 +++ .github/workflows/native-tests.yml | 2 ++ .github/workflows/nightly-benchmarks.yml | 3 +++ .github/workflows/release.yml | 2 ++ .github/workflows/test-release-build.yml | 3 +++ 10 files changed, 51 insertions(+) diff --git a/.github/renovate-tracked-deps.json b/.github/renovate-tracked-deps.json index d3089ecb7..0b257110a 100644 --- a/.github/renovate-tracked-deps.json +++ b/.github/renovate-tracked-deps.json @@ -2,6 +2,33 @@ ".github/renovate.json5": { "renovate-config-presets": ["grafana/flint"] }, + ".github/workflows/acceptance-tests.yml": { + "regex": ["mise"] + }, + ".github/workflows/build.yml": { + "regex": ["mise"] + }, + ".github/workflows/github-pages.yaml": { + "regex": ["mise"] + }, + ".github/workflows/java-version-matrix-tests.yml": { + "regex": ["mise"] + }, + ".github/workflows/lint.yml": { + "regex": ["mise"] + }, + ".github/workflows/native-tests.yml": { + "regex": ["mise"] + }, + ".github/workflows/nightly-benchmarks.yml": { + "regex": ["mise"] + }, + ".github/workflows/release.yml": { + "regex": ["mise"] + }, + ".github/workflows/test-release-build.yml": { + "regex": ["mise"] + }, ".mise/envs/native/mise.toml": { "mise": ["java"] }, diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 977973f3b..f37d7d7d6 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -14,5 +14,8 @@ jobs: persist-credentials: false uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + with: + version: v2026.2.11 + sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a - name: Run acceptance tests run: mise run acceptance-test diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e5b1980e8..ab1800900 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,6 +13,9 @@ jobs: with: persist-credentials: false - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + with: + version: v2026.2.11 + sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a - name: Cache local Maven repository uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 37cc39f37..f2fdbdade 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -39,6 +39,8 @@ jobs: fetch-depth: 0 - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: + version: v2026.2.11 + sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a cache: "false" - name: Setup Pages id: pages diff --git a/.github/workflows/java-version-matrix-tests.yml b/.github/workflows/java-version-matrix-tests.yml index d476e7bb7..19ded9a54 100644 --- a/.github/workflows/java-version-matrix-tests.yml +++ b/.github/workflows/java-version-matrix-tests.yml @@ -33,6 +33,9 @@ jobs: - name: Set up mise uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + with: + version: v2026.2.11 + sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a - name: Cache local Maven repository uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c6a2575c1..08d079212 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -22,6 +22,9 @@ jobs: - name: Setup mise uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + with: + version: v2026.2.11 + sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a - name: Lint env: diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index b93edab06..69c36671e 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -15,6 +15,8 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: + version: v2026.2.11 + sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a working_directory: .mise/envs/native - name: Run native tests working-directory: .mise/envs/native diff --git a/.github/workflows/nightly-benchmarks.yml b/.github/workflows/nightly-benchmarks.yml index 4ee4adbc5..0a0e206d9 100644 --- a/.github/workflows/nightly-benchmarks.yml +++ b/.github/workflows/nightly-benchmarks.yml @@ -35,6 +35,9 @@ jobs: - name: Setup mise uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + with: + version: v2026.2.11 + sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a - name: Cache local Maven repository uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 93d32c188..e1b0d4ea0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,6 +26,8 @@ jobs: - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: + version: v2026.2.11 + sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a cache: false - name: Build release version diff --git a/.github/workflows/test-release-build.yml b/.github/workflows/test-release-build.yml index f8de00d8c..791f054e4 100644 --- a/.github/workflows/test-release-build.yml +++ b/.github/workflows/test-release-build.yml @@ -19,6 +19,9 @@ jobs: fetch-tags: "true" fetch-depth: 0 - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + with: + version: v2026.2.11 + sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a - name: Cache local Maven repository uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: From 05b8b5be6583446438a2225c12321255a27f5646 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 11:31:15 +0000 Subject: [PATCH 849/870] chore(deps): update dependency org.apache.felix:maven-bundle-plugin to v6.0.2 (#1921) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.apache.felix:maven-bundle-plugin](http://felix.apache.org/components/bundle-plugin/) ([source](https://gitbox.apache.org/repos/asf?p=felix-dev.git)) | `6.0.0` → `6.0.2` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.apache.felix:maven-bundle-plugin/6.0.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.apache.felix:maven-bundle-plugin/6.0.0/6.0.2?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fd4e1487a..a9551b6ba 100644 --- a/pom.xml +++ b/pom.xml @@ -303,7 +303,7 @@ org.apache.felix maven-bundle-plugin - 6.0.0 + 6.0.2 true From c81b9a6e67bd9c5fdd05eedf89dd438543fd1c85 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 11:31:38 +0000 Subject: [PATCH 850/870] chore(deps): update dependency org.mockito:mockito-core to v5.22.0 (#1922) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.mockito:mockito-core](https://redirect.github.com/mockito/mockito) | `5.21.0` → `5.22.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.mockito:mockito-core/5.22.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.mockito:mockito-core/5.21.0/5.22.0?slim=true) | --- ### Release Notes
    mockito/mockito (org.mockito:mockito-core) ### [`v5.22.0`](https://redirect.github.com/mockito/mockito/compare/v5.21.0...v5.22.0)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a9551b6ba..42b426a64 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ org.mockito mockito-core - 5.21.0 + 5.22.0 test From 69384791685f0e86a28f04191434ecab310365ba Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 13:54:58 +0000 Subject: [PATCH 851/870] chore(deps): update dependency com.google.errorprone:error_prone_core to v2.48.0 (#1923) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [com.google.errorprone:error_prone_core](https://errorprone.info) ([source](https://redirect.github.com/google/error-prone)) | `2.47.0` → `2.48.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.errorprone:error_prone_core/2.48.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.errorprone:error_prone_core/2.47.0/2.48.0?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 42b426a64..cab2680b2 100644 --- a/pom.xml +++ b/pom.xml @@ -457,7 +457,7 @@ com.google.errorprone error_prone_core - 2.47.0 + 2.48.0 com.uber.nullaway From 7fe2528a85574ff6ae35e539039619c4a6db7231 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 01:12:50 +0000 Subject: [PATCH 852/870] chore(deps): update dependency mise to v2026.2.24 (#1924) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [mise](https://redirect.github.com/jdx/mise) | patch | `v2026.2.11` → `v2026.2.24` | --- ### Release Notes
    jdx/mise (mise) ### [`v2026.2.24`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.24): : Hooks get Tera templates, aqua cache cleanup, and better error messages [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.23...v2026.2.24) A bug-fix release that enables Tera template rendering in hooks, eliminates a class of stale PATH bugs with aqua tools, improves error messages for unsupported registry tools, and removes the long-deprecated `python.venv_auto_create` setting. #### Fixed - **Hooks now support Tera template rendering** -- Hook scripts can now use Tera template variables like `{{tools.ripgrep.path}}`, just like tasks. Additionally, the install progress bar is now cleared before postinstall hooks run, so hook output is no longer masked by the progress UI. Preinstall hooks correctly skip `tools=true` env directives since referenced tools may not yet be installed. [#​8385](https://redirect.github.com/jdx/mise/pull/8385) by [@​jdx](https://redirect.github.com/jdx) - **Aqua tool PATH entries no longer go stale** -- The aqua backend's `bin_paths` disk cache (`bin_paths.msgpack.z`) has been removed entirely. This cache provided negligible performance benefit -- reading and decompressing a msgpack file is comparable to parsing the small YAML registry entry -- but was the root cause of stale PATH entries after tool installs (e.g. upgrading `uv` causing its PATH entry to vanish). The previous fix in v2026.2.23 was raceable by concurrent `mise hook-env` calls; removing the cache eliminates this class of bugs completely. [#​8383](https://redirect.github.com/jdx/mise/pull/8383) by [@​jdx](https://redirect.github.com/jdx) - **Better error when a registry tool has no supported backends** -- When a tool exists in the registry but all its backends are filtered out for the current platform or configuration (e.g. `imagemagick` on a platform where only `conda` and `asdf` backends are registered but disabled), the error now clearly explains the situation and lists the registered backends instead of suggesting the user meant the exact tool name they already typed. [#​8388](https://redirect.github.com/jdx/mise/pull/8388) by [@​jdx](https://redirect.github.com/jdx) #### Removed - **Deprecated `python.venv_auto_create` setting removed** -- The `python.venv_auto_create` and `python_venv_auto_create` settings have been fully removed. These were deprecated in favor of the `_.python.venv` configuration. If you were relying on the legacy `virtualenv` tool option to auto-create venvs, mise will now warn and print manual creation instructions instead. Migrate to the newer venv configuration: [#​8384](https://redirect.github.com/jdx/mise/pull/8384) by [@​jdx](https://redirect.github.com/jdx) ```toml [tools] python = { version = "3.12", _.python.venv = { path = ".venv", create = true } } ``` #### Breaking Changes - The `python.venv_auto_create` and `python_venv_auto_create` settings no longer exist. If you still have these in your configuration, they will be silently ignored. Use `_.python.venv = { path = ".venv", create = true }` in your tool configuration instead. [#​8384](https://redirect.github.com/jdx/mise/pull/8384) **Full Changelog**: ### [`v2026.2.23`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.23): : Stricter lockfile enforcement and vfox backend options [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.22...v2026.2.23) This release tightens lockfile behavior in `--locked` mode, fixes a stale PATH cache issue with aqua-based tools, resolves intermittent panics with remote git tasks, and adds the ability to pass custom options to vfox backend plugins. #### Added - **Custom options for vfox backend plugins** -- Options defined in `mise.toml` tool entries are now passed through to vfox backend plugins in both `BackendInstall` and `BackendExecEnv` contexts, accessible in Lua via `ctx.options`. This enables custom plugin use cases like controlling build parameters. [#​8369](https://redirect.github.com/jdx/mise/pull/8369) by [@​Attempt3035](https://redirect.github.com/Attempt3035) ```toml [tools] "llvm:clang" = { version = "latest", build_cores = "22" } ``` ```lua function PLUGIN:BackendInstall(ctx) local cores = ctx.options.build_cores -- use cores in your build logic end ``` - **Registry: porter** -- Added [Porter](https://porter.sh), a CNAB bundle authoring and management tool (`github:getporter/porter`). [#​8380](https://redirect.github.com/jdx/mise/pull/8380) by [@​lbergnehr](https://redirect.github.com/lbergnehr) - **Registry: entire** -- Added entire CLI (`aqua:entireio/cli`). [#​8378](https://redirect.github.com/jdx/mise/pull/8378) by [@​TyceHerrman](https://redirect.github.com/TyceHerrman) - **Registry: topgrade** -- Added topgrade (`aqua:topgrade-rs/topgrade`), an all-in-one system upgrade tool. [#​8377](https://redirect.github.com/jdx/mise/pull/8377) by [@​TyceHerrman](https://redirect.github.com/TyceHerrman) #### Fixed - **`--locked` mode now strictly enforces the lockfile** -- Previously, `mise lock` could still run while `--locked` was active, `mise use tool@latest` could bypass the lockfile, and tools missing from the lockfile would silently fall through to remote resolution. Now `mise lock` refuses to run in locked mode with a clear error and hint, `mise use tool@latest` respects the lockfile when locked, and missing tools fail fast with an actionable message instead of resolving remotely. [#​8362](https://redirect.github.com/jdx/mise/pull/8362) by [@​jdx](https://redirect.github.com/jdx) - **Aqua tool PATH entries no longer go missing after install** -- The `list_bin_paths()` cache could be populated with stale (empty) data before extraction finished, or by a concurrent `mise hook-env` call during installation. The in-memory and on-disk `bin_paths` caches are now cleared after an aqua tool install completes so paths are recomputed from the freshly installed files. Fixes an issue where upgrading tools like `uv` caused their PATH entry to vanish. [#​8374](https://redirect.github.com/jdx/mise/pull/8374) by [@​jdx](https://redirect.github.com/jdx) - **Remote git task cache no longer panics or corrupts on concurrent access** -- Replaced `println!`/`eprintln!` with non-panicking `writeln!` to handle EPIPE gracefully, and added file locking with clone-to-temp-then-rename to prevent concurrent cache corruption when multiple mise processes fetch the same remote git task simultaneously. [#​8375](https://redirect.github.com/jdx/mise/pull/8375) by [@​vmaleze](https://redirect.github.com/vmaleze) #### New Contributors - [@​Attempt3035](https://redirect.github.com/Attempt3035) made their first contribution in [#​8369](https://redirect.github.com/jdx/mise/pull/8369) - [@​lbergnehr](https://redirect.github.com/lbergnehr) made their first contribution in [#​8380](https://redirect.github.com/jdx/mise/pull/8380) **Full Changelog**: ### [`v2026.2.22`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.22): : Outdated plugins, rename_exe fixes, and smoother installs [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.21...v2026.2.22) A small release adding a new way to check for outdated plugins, along with three bug fixes for archive installs, tool environment resolution, and cross-platform Ruby lockfiles. #### Added - **`mise plugins ls --outdated` flag** -- A new `-o`/`--outdated` flag checks remote git refs in parallel and displays only plugins where the local SHA differs from the remote. Shows a table with plugin name, URL, ref, local SHA, and remote SHA. Prints "All plugins are up to date" when everything is current. [#​8360](https://redirect.github.com/jdx/mise/pull/8360) by [@​jdx](https://redirect.github.com/jdx) ```sh $ mise plugins ls --outdated Plugin Url Ref Local Remote tiny https://github.com/mise-plugins/rtx-tiny.git main abc1234 def5678 ``` #### Fixed - **`rename_exe` works with archives containing a `bin/` subdirectory** -- When an archive extracts to a layout like `prefix/bin/binary`, the `rename_exe` option was silently skipped because it searched the extraction root non-recursively instead of the `bin/` subdirectory where the binary actually lives. Both the GitHub-style backend and the HTTP backend now auto-detect the `bin/` subdirectory as the search directory, matching the same logic used by `discover_bin_paths()` for PATH construction. [#​8358](https://redirect.github.com/jdx/mise/pull/8358) by [@​jdx](https://redirect.github.com/jdx) - **Installing cargo/npm/pipx tools no longer crashes with `tools = true` env directives** -- When `[env]` contained entries like `NODE_VERSION = { value = "{{ tools.node.version }}", tools = true }`, installing npm/cargo/pipx tools would fail with "Variable not found in context" because the referenced tools might not be installed yet. The cargo, npm, and pipx backends now skip `tools = true` env directive resolution during installation while still including tool paths in PATH. [#​8356](https://redirect.github.com/jdx/mise/pull/8356) by [@​jdx](https://redirect.github.com/jdx) - **Ruby lockfile resolves correct Windows checksums** -- Running `mise lock` on macOS/Linux now correctly resolves RubyInstaller2 binary URLs and checksums for Windows platform entries, instead of incorrectly using the MRI source tarball checksum. The lockfile generator now fetches the correct `.7z` asset from the `oneclick/rubyinstaller2` GitHub releases for Windows targets. [#​8357](https://redirect.github.com/jdx/mise/pull/8357) by [@​jdx](https://redirect.github.com/jdx) #### Changed - **Registry: terradozer switched to GitHub fork** -- The terradozer registry entry now points to `github:chenrui333/terradozer` (replacing the archived asdf plugin and unavailable aqua backend), and is restricted to Linux and macOS. [#​8365](https://redirect.github.com/jdx/mise/pull/8365) by [@​chenrui333](https://redirect.github.com/chenrui333) #### New Contributors - [@​chenrui333](https://redirect.github.com/chenrui333) made their first contribution in [#​8365](https://redirect.github.com/jdx/mise/pull/8365) **Full Changelog**: ### [`v2026.2.21`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.21): : Bug fix roundup for monorepo tasks, conda noarch, and exec PATH handling [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.20...v2026.2.21) A bug-fix release addressing several regressions and long-standing issues: monorepo task variables and glob dependencies now resolve correctly, the conda backend can install Python noarch packages, `mise x` respects virtualenv PATH ordering again, and nested task execution no longer hangs. #### Fixed - **`mise x` respects virtualenv PATH order again** -- A pre-resolution step added in v2026.2.17 ([#​8276](https://redirect.github.com/jdx/mise/pull/8276)) resolved bare command names directly to mise-managed tool paths, bypassing PATH entirely. This broke `_.python.venv` and similar configs where a virtualenv binary should take precedence over the mise-managed install. The pre-resolution is removed; shim stripping in `exec_program` (also from [#​8276](https://redirect.github.com/jdx/mise/issues/8276)) is sufficient to prevent recursion. [#​8342](https://redirect.github.com/jdx/mise/pull/8342) by [@​jdx](https://redirect.github.com/jdx) - **Conda noarch Python packages install correctly** -- Installing noarch Python packages via the conda backend (e.g. `mise use conda:ruff`) failed because the linker didn't know the Python version needed to compute `site-packages` paths. The solver's resolved Python version is now extracted and passed through to `link_package`, fixing the error. [#​8349](https://redirect.github.com/jdx/mise/pull/8349) by [@​wolfv](https://redirect.github.com/wolfv) - **Nested mise tasks no longer hang** -- The process group isolation (`setpgid`/`killpg`) introduced in v2026.2.18 and refined in v2026.2.19 has been fully reverted. When tools like Playwright use process-group-based kills (`kill(-pid, SIGKILL)`) to tear down a server subprocess tree, grandchild processes in a separate group (created by mise's `setpgid`) survived and held pipes open, causing indefinite hangs. mise now sends signals directly to child PIDs instead. [#​8347](https://redirect.github.com/jdx/mise/pull/8347) by [@​jdx](https://redirect.github.com/jdx) - **Monorepo tasks resolve `[vars]` from subdirectory configs** -- Running a monorepo task like `mise run //infra/stacks/gcp:greet` failed to pick up `[vars]` defined in subdirectory `.mise.toml` files, causing template rendering errors. Variables are now resolved from the task's full config hierarchy (including `mise..toml` overlays) and threaded through script rendering. [#​8343](https://redirect.github.com/jdx/mise/pull/8343) by [@​jdx](https://redirect.github.com/jdx) - **Monorepo glob dependencies trigger subdirectory prepare steps** -- When a root task depended on a monorepo glob pattern like `//...:check`, the prepare phase only collected configs from top-level tasks, missing subdirectory tasks entirely. Dependencies are now resolved before prepare runs, so transitive subdirectory tasks and their prepare providers are properly discovered. [#​8353](https://redirect.github.com/jdx/mise/pull/8353) by [@​jdx](https://redirect.github.com/jdx) #### New Contributors - [@​wolfv](https://redirect.github.com/wolfv) made their first contribution in [#​8349](https://redirect.github.com/jdx/mise/pull/8349) **Full Changelog**: ### [`v2026.2.20`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.20): : Conda rewrite, .NET SDK core plugin, and per-task timeouts [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.19...v2026.2.20) A feature-packed release that replaces the conda backend with production-grade internals, adds a native .NET SDK plugin, and finally enforces per-task timeouts. Several lockfile and environment-handling fixes round things out. #### Highlights - **Conda backend rewritten with rattler** -- The experimental conda backend has been completely rewritten to use the [rattler](https://redirect.github.com/conda/rattler) Rust crates (the same engine behind pixi), replacing \~1,600 lines of custom code that relied on the unsupported anaconda.org API. This brings a proper SAT-based dependency solver, correct binary prefix replacement, and repodata caching via CDN. [#​8325](https://redirect.github.com/jdx/mise/pull/8325) by [@​jdx](https://redirect.github.com/jdx) - **Native .NET SDK management** -- A new core plugin for .NET SDK installs all versions side-by-side under a shared `DOTNET_ROOT`, matching .NET's native multi-version model. It uses Microsoft's official `dotnet-install` script and supports `global.json` for per-project SDK pinning. [#​8326](https://redirect.github.com/jdx/mise/pull/8326) by [@​jdx](https://redirect.github.com/jdx) - **Per-task timeouts are now enforced** -- The `timeout` field on tasks (added in v2025.1.6 but never wired up) now actually kills tasks that exceed their limit. Timeouts send SIGTERM with a 5-second grace period before SIGKILL, and both per-task and global `task_timeout` settings are respected. [#​8250](https://redirect.github.com/jdx/mise/pull/8250) by [@​tvararu](https://redirect.github.com/tvararu) #### Added - **Core .NET SDK plugin** -- `mise use dotnet@8` now installs via a native core plugin with side-by-side version support and `global.json` detection. Configure `DOTNET_ROOT` via the new `dotnet.dotnet_root` setting. [#​8326](https://redirect.github.com/jdx/mise/pull/8326) by [@​jdx](https://redirect.github.com/jdx) - **Per-task timeout enforcement** -- Tasks with a `timeout` field are now killed if they exceed the configured duration. Works with both per-task config and the global `task_timeout`/`--timeout` flag. [#​8250](https://redirect.github.com/jdx/mise/pull/8250) by [@​tvararu](https://redirect.github.com/tvararu) ```toml [tasks.deploy] run = "npm run deploy" timeout = "5m" ``` - **VSIX archive support** -- The HTTP backend now recognizes `.vsix` files as ZIP archives and extracts them correctly, enabling tools distributed as VS Code extensions to be installed via `http:` URLs. [#​8306](https://redirect.github.com/jdx/mise/pull/8306) by [@​sosumappu](https://redirect.github.com/sosumappu) - **Registry: `oxfmt`** -- Added the oxfmt formatter to the tool registry. [#​8316](https://redirect.github.com/jdx/mise/pull/8316) by [@​taoufik07](https://redirect.github.com/taoufik07) #### Changed - **Conda backend rewritten with rattler crates** -- Replaces custom version matching, dependency resolution, archive extraction, and binary patching with the battle-tested rattler ecosystem (`rattler_solve`, `rattler_repodata_gateway`, `rattler::install`). Binary prefix replacement now works correctly (the old code skipped binary files entirely). Since the conda backend is still experimental, this is a non-breaking change. [#​8325](https://redirect.github.com/jdx/mise/pull/8325) by [@​jdx](https://redirect.github.com/jdx) #### Fixed - **Lockfile not modified with `--locked`** -- `mise install --locked` no longer writes to `mise.lock`, matching the semantics of `cargo install --locked` and `uv pip install --locked`. [#​8308](https://redirect.github.com/jdx/mise/pull/8308) by [@​jdx](https://redirect.github.com/jdx) - **Orphan lockfile entries pruned** -- `mise lock` now removes stale tool entries that are no longer present in config, keeping the lockfile aligned with the current toolset. [#​8265](https://redirect.github.com/jdx/mise/pull/8265) by [@​mackwic](https://redirect.github.com/mackwic) - **Contradictory lockfile config caught early** -- Setting `locked=true` alongside `lockfile=false` now produces a clear error instead of silently ignoring the lock. [#​8329](https://redirect.github.com/jdx/mise/pull/8329) by [@​jdx](https://redirect.github.com/jdx) - **`watch_files` triggers on every change** -- The hook-env fast-path now checks `[[watch_files]]` paths, fixing a bug where only the first file change triggered the associated run command. [#​8317](https://redirect.github.com/jdx/mise/pull/8317) by [@​jdx](https://redirect.github.com/jdx) - **Fish alias completions cleaned up** -- Setting or unsetting shell aliases in fish now clears stale completions, preventing tab-complete from offering outdated suggestions. [#​8324](https://redirect.github.com/jdx/mise/pull/8324) by [@​jdx](https://redirect.github.com/jdx) - **JSON schema accepts age-encrypted env values** -- Fixed a `oneOf` ambiguity in the mise schema that rejected `[env]` entries using age encryption. [#​8328](https://redirect.github.com/jdx/mise/pull/8328) by [@​adamliang0](https://redirect.github.com/adamliang0) - **Regal registry updated** -- The regal tool now points to its new home at `open-policy-agent/regal`. [#​8315](https://redirect.github.com/jdx/mise/pull/8315) by [@​charlieegan3](https://redirect.github.com/charlieegan3) - **Conda: locked installs preserve package data** -- `conda_packages` entries are no longer silently dropped during `--locked` installs, and concurrent downloads no longer race on the same temp file. [#​8335](https://redirect.github.com/jdx/mise/pull/8335) by [@​jdx](https://redirect.github.com/jdx) - **Conda: solver no longer fails on Linux** -- Deduplicated repodata records before passing them to the solver, fixing "duplicate records" errors when installing tools like imagemagick. [#​8337](https://redirect.github.com/jdx/mise/pull/8337) by [@​jdx](https://redirect.github.com/jdx) #### New Contributors - [@​tvararu](https://redirect.github.com/tvararu) made their first contribution in [#​8250](https://redirect.github.com/jdx/mise/pull/8250) - [@​sosumappu](https://redirect.github.com/sosumappu) made their first contribution in [#​8306](https://redirect.github.com/jdx/mise/pull/8306) - [@​charlieegan3](https://redirect.github.com/charlieegan3) made their first contribution in [#​8315](https://redirect.github.com/jdx/mise/pull/8315) - [@​taoufik07](https://redirect.github.com/taoufik07) made their first contribution in [#​8316](https://redirect.github.com/jdx/mise/pull/8316) - [@​adamliang0](https://redirect.github.com/adamliang0) made their first contribution in [#​8328](https://redirect.github.com/jdx/mise/pull/8328) - [@​mackwic](https://redirect.github.com/mackwic) made their first contribution in [#​8265](https://redirect.github.com/jdx/mise/pull/8265) **Full Changelog**: ### [`v2026.2.19`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.19): : Fixes for interactive tasks and failed install cleanup [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.18...v2026.2.19) A small patch release with two targeted bug fixes: a regression fix for interactive task execution and better cleanup after failed installs. ##### Bug Fixes - **Interactive tasks no longer hang** -- The process group isolation added in v2026.2.18 ([#​8279](https://redirect.github.com/jdx/mise/pull/8279)) inadvertently broke interactive tools like Tilt that read from stdin. When a child process was moved to its own process group, the terminal wouldn't deliver keyboard input to it, causing `SIGTTIN` and a silent hang. mise now checks whether stdin is a TTY before calling `setpgid` -- interactive tasks stay in the terminal's foreground process group for proper keyboard I/O, while non-interactive tasks still get their own process group for clean signal teardown. [#​8301](https://redirect.github.com/jdx/mise/pull/8301) by [@​jdx](https://redirect.github.com/jdx) - **Failed installs clean up properly** -- When an install fails (e.g. a 404 for a non-existent version or a 403 from GitHub rate limiting), mise now removes the empty parent directory (e.g. `installs/tilt/`) and the stale incomplete marker from cache, instead of leaving them behind. [#​8302](https://redirect.github.com/jdx/mise/pull/8302) by [@​jdx](https://redirect.github.com/jdx) ##### Documentation - Fixed the ripgrep command in the getting-started guide to use the correct binary name `rg` instead of `ripgrep`. [#​8299](https://redirect.github.com/jdx/mise/pull/8299) by [@​nguyenvulong](https://redirect.github.com/nguyenvulong) **Full Changelog**: ### [`v2026.2.18`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.18): : Task Reliability & Developer Experience [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.17...v2026.2.18) A bug-fix-heavy release focused on task execution reliability, with a new feature for cross-platform tool locking. ##### Highlights - **Auto-lock all platforms after install** — When you install a tool, mise now automatically locks versions for all platforms (not just the current one). This means your `mise.lock` stays complete for teammates on different OSes without needing to run `mise lock` separately. [#​8277](https://redirect.github.com/jdx/mise/pull/8277) - **Process group cleanup for tasks** — Task child processes are now managed via Unix process groups, so killing a task reliably takes down the entire process tree instead of leaving orphaned children. [#​8279](https://redirect.github.com/jdx/mise/pull/8279) - **`depends_post` tasks run even on failure** — Post-dependency tasks (cleanup, notifications, etc.) now execute even when the parent task fails, matching the expected behavior for teardown-style hooks. [#​8274](https://redirect.github.com/jdx/mise/pull/8274) ##### Bug Fixes - **Infinite shim recursion on Unix** — `mise exec` now strips its own shims from `PATH` before spawning subprocesses, preventing infinite recursion when a shimmed tool calls itself. [#​8276](https://redirect.github.com/jdx/mise/pull/8276) - **`--yes` flag now works for config trust prompts** — The `--yes`/`-y` flag is now properly respected when mise prompts to trust a config file. [#​8288](https://redirect.github.com/jdx/mise/pull/8288) - **`--locked --dry-run` validation order** — `mise install --locked` now validates the lock requirement before the `--dry-run` short-circuit, so you get a proper error instead of silent success. [#​8290](https://redirect.github.com/jdx/mise/pull/8290) by [@​altendky](https://redirect.github.com/altendky) - **JSON Schema compatibility** — Replaced `unevaluatedProperties` with `additionalProperties` in the mise JSON schema for broader validator support. [#​8285](https://redirect.github.com/jdx/mise/pull/8285) - **Duplicate stderr on task failure** — Fixed tasks in replacing output mode printing error output twice on failure. [#​8275](https://redirect.github.com/jdx/mise/pull/8275) - **Did-you-mean for task commands** — Mistyping a CLI subcommand now suggests similar task names. [#​8286](https://redirect.github.com/jdx/mise/pull/8286) - **Monorepo prepare steps** — Prepare steps for subdirectory configs now execute from the repository root as expected. [#​8291](https://redirect.github.com/jdx/mise/pull/8291) - **`mise upgrade` no longer force-reinstalls** — Previously installed versions are skipped during upgrade instead of being redundantly reinstalled. [#​8282](https://redirect.github.com/jdx/mise/pull/8282) - **Terminal restore after `mise watch`** — `watchexec` no longer leaves the terminal in a broken state on exit. [#​8273](https://redirect.github.com/jdx/mise/pull/8273) ##### Documentation - Clarified that `MISE_CEILING_PATHS` excludes the ceiling directory itself. [#​8283](https://redirect.github.com/jdx/mise/pull/8283) ##### New Contributors - [@​altendky](https://redirect.github.com/altendky) made their first contribution in [#​8290](https://redirect.github.com/jdx/mise/pull/8290) ##### 📦 Aqua Registry Updates ##### New Packages (4) - [`Skarlso/crd-to-sample-yaml`](https://redirect.github.com/Skarlso/crd-to-sample-yaml) - [`kunobi-ninja/kunobi-releases`](https://redirect.github.com/kunobi-ninja/kunobi-releases) - [`swanysimon/markdownlint-rs`](https://redirect.github.com/swanysimon/markdownlint-rs) - [`tmux/tmux-builds`](https://redirect.github.com/tmux/tmux-builds) ##### Updated Packages (2) - [`firecow/gitlab-ci-local`](https://redirect.github.com/firecow/gitlab-ci-local) - [`k1LoW/runn`](https://redirect.github.com/k1LoW/runn) ### [`v2026.2.17`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.17): : Freshly Prepared [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.16...v2026.2.17) A moderate release with a handful of bug fixes and a new feature for the `prepare` system. ##### Highlights - **Prepare: auto-touch stale outputs** — When tools like `uv sync` skip work because dependencies are already satisfied, output files don't get updated, causing mise to consider them stale on the next run. Prepare providers now automatically touch output files after a successful command, keeping staleness checks accurate. This is controlled by a new `touch_outputs` config option (defaults to true). [#​8243](https://redirect.github.com/jdx/mise/pull/8243) by [@​halms](https://redirect.github.com/halms) - **Settings reorganization: `task_*` → `task.*`** — Nine flat `task_*` settings have been consolidated into a nested `task.*` namespace (e.g., `task_output` → `task.output`). The old names still work with no breaking changes — deprecation warnings won't appear until `2026.8.0`. [#​8239](https://redirect.github.com/jdx/mise/pull/8239) ##### Bug Fixes - **Postinstall hooks now use correct bin paths** — Per-tool postinstall hooks were hardcoding `$install_path/bin` on `PATH`, which broke backends like aqua where binaries live in non-standard subdirectories. Hooks now use each backend's actual binary paths. [#​8234](https://redirect.github.com/jdx/mise/pull/8234) - **`mise use` writes to the correct config file** — When both `config.toml` and `config.local.toml` exist, `mise use` was incorrectly writing to `config.local.toml`. It now properly targets `config.toml`. [#​8240](https://redirect.github.com/jdx/mise/pull/8240) - **Legacy `.mise.backend` installs no longer block auto-migration** — Legacy backend files were defaulting to `explicit_backend = true`, which prevented auto-migration to updated registry backends. They now default to non-explicit, allowing tools like `glab` to resolve correctly through the current registry. [#​8245](https://redirect.github.com/jdx/mise/pull/8245) by [@​jean-humann](https://redirect.github.com/jean-humann) ##### 📦 Aqua Registry Updates ##### Updated Packages (1) - [`namespacelabs/foundation/nsc`](https://redirect.github.com/namespacelabs/foundation/nsc) ### [`v2026.2.16`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.16): : MCP Gets Its Hands Dirty [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.15...v2026.2.16) This release brings MCP task execution support, better Node.js flavor guidance, and a solid round of bug fixes across several backends. ##### Highlights - **MCP `run_task` tool** — You can now execute mise tasks directly through the [MCP](https://mise.jdx.dev/) interface. The new `run_task` tool runs tasks via subprocess with full stdout/stderr capture, timeout support, and hardened execution. An `install_tool` stub is also included for future expansion. [#​8179](https://redirect.github.com/jdx/mise/pull/8179) by [@​joaommartins](https://redirect.github.com/joaommartins) - **Node flavor suggestions** — When a Node.js version isn't found in the configured mirror, mise now suggests setting `node.flavor` to help you get to the right download faster. [#​8206](https://redirect.github.com/jdx/mise/pull/8206) by [@​risu729](https://redirect.github.com/risu729) - **Registry stack overflow fix** — The registry `BTreeMap` is now built directly on the heap, eliminating a stack overflow that could occur with large registries. [#​8214](https://redirect.github.com/jdx/mise/pull/8214) by [@​risu729](https://redirect.github.com/risu729) ##### Bug Fixes - **Java version sorting** — Shorthand Java versions (e.g., `21`, `17`) now sort correctly. [#​8197](https://redirect.github.com/jdx/mise/pull/8197) by [@​roele](https://redirect.github.com/roele) - **Node env var migration** — Node-related environment variables have been properly migrated to the settings system. [#​8200](https://redirect.github.com/jdx/mise/pull/8200) by [@​risu729](https://redirect.github.com/risu729) - **Registry overrides in shims** — Registry overrides are now correctly applied when running tools through shims. [#​8199](https://redirect.github.com/jdx/mise/pull/8199) by [@​risu729](https://redirect.github.com/risu729) - **Rust outdated duplication** — Fixed `mise outdated` showing Rust versions twice. [#​8209](https://redirect.github.com/jdx/mise/pull/8209) by [@​roele](https://redirect.github.com/roele) - **GitHub aliased backend resolution** — Version lookups no longer break for tools aliased to a different backend than the registry default. [#​8221](https://redirect.github.com/jdx/mise/pull/8221) - **GitHub attestation output** — Attestation verification success is now shown in progress output. [#​8230](https://redirect.github.com/jdx/mise/pull/8230) - **Cargo binstall setting migration** — `MISE_CARGO_BINSTALL_ONLY` has been migrated to the settings system. [#​8202](https://redirect.github.com/jdx/mise/pull/8202) by [@​risu729](https://redirect.github.com/risu729) ##### New Tools - **typst** — GitHub backend added. [#​8210](https://redirect.github.com/jdx/mise/pull/8210) by [@​3w36zj6](https://redirect.github.com/3w36zj6) - **cargo-dist** — Now available via aqua registry. [#​8153](https://redirect.github.com/jdx/mise/pull/8153) by [@​risu729](https://redirect.github.com/risu729) - **release-plz** — Now available via aqua registry. [#​8150](https://redirect.github.com/jdx/mise/pull/8150) by [@​risu729](https://redirect.github.com/risu729) ### [`v2026.2.15`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.15): : Streaming in Order [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.14...v2026.2.15) This release brings a nice quality-of-life improvement to task execution along with a solid batch of bug fixes across several subsystems. ##### Highlights - **Real-time streaming for keep-order tasks** — The `keep_order` task output mode now streams the active task's output in real-time instead of buffering everything until completion. Other parallel tasks buffer quietly and flush in definition order as they finish, so you get live feedback without sacrificing deterministic output ordering. [#​8164](https://redirect.github.com/jdx/mise/pull/8164) - **npm backend performance** — `npm view` is now called only once per package lookup instead of multiple times, speeding up npm-based tool resolution. Thanks [@​risu729](https://redirect.github.com/risu729)! [#​8181](https://redirect.github.com/jdx/mise/pull/8181) ##### Bug Fixes - **Recursive shim execution on Windows** — `mise exec` now strips the shims directory from PATH during executable lookup, preventing infinite recursion when shims call back into `mise x`. [#​8189](https://redirect.github.com/jdx/mise/pull/8189) - **PATH reordering after activation** — `hook-env` now preserves any PATH reordering done after `mise activate` (e.g., by `~/.zlogin`), instead of silently reverting to the original order. [#​8190](https://redirect.github.com/jdx/mise/pull/8190) - **Cross-platform lockfile resolution** — The aqua backend now correctly resolves lockfile artifacts for the target platform instead of leaking host-specific overrides into `mise lock --platform`. Thanks [@​mackwic](https://redirect.github.com/mackwic)! [#​8183](https://redirect.github.com/jdx/mise/pull/8183) - **Version alias lockfile lookup** — Version aliases (like `lts`) are now resolved before lockfile lookup, so locked versions are matched correctly. [#​8194](https://redirect.github.com/jdx/mise/pull/8194) - **Task source freshness checks** — Freshness checks now work correctly with dynamic task directories. Thanks [@​rooperuu](https://redirect.github.com/rooperuu)! [#​8169](https://redirect.github.com/jdx/mise/pull/8169) - **Global tasks in monorepos** — Global tasks are now properly resolved when running from a monorepo root. [#​8192](https://redirect.github.com/jdx/mise/pull/8192) - **Wildcard glob matching** — `test:*` no longer incorrectly matches the parent `test` task. [#​8165](https://redirect.github.com/jdx/mise/pull/8165) - **task\_config.includes paths** — Include paths in task config are now resolved relative to the config root, not the working directory. [#​8193](https://redirect.github.com/jdx/mise/pull/8193) - **Upgrade safety** — `mise upgrade` now skips untrusted tracked configs instead of failing. [#​8195](https://redirect.github.com/jdx/mise/pull/8195) - **helm-diff registry entry** — Fixed the archive binary name for helm-diff. Thanks [@​jean-humann](https://redirect.github.com/jean-humann)! [#​8173](https://redirect.github.com/jdx/mise/pull/8173) ##### New Contributors Welcome [@​jean-humann](https://redirect.github.com/jean-humann), [@​mackwic](https://redirect.github.com/mackwic), and [@​rooperuu](https://redirect.github.com/rooperuu)! ##### 📦 Aqua Registry Updates ##### New Packages (2) - [`BetterDiscord/cli`](https://redirect.github.com/BetterDiscord/cli) - [`glossia.ai/cli`](https://redirect.github.com/glossia.ai/cli) ### [`v2026.2.14`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.14) [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.13...v2026.2.14) A feature-focused release adding vfox plugin env redaction, Deno devEngines support, and a new Rust default\_host setting. ##### Highlights - **Vfox env var redaction** — Vfox plugins can now request that specific environment variables be redacted from logs and debug output by returning a `redact` field in `MiseEnvResult`. Useful for plugins that inject secrets or tokens. [#​8166](https://redirect.github.com/jdx/mise/pull/8166) - **Deno devEngines.runtime support** — Mise now reads the `devEngines.runtime` field from `package.json` to auto-detect the desired Deno version, matching the same convention already supported for Node. Thanks [@​risu729](https://redirect.github.com/risu729)! [#​8144](https://redirect.github.com/jdx/mise/pull/8144) - **`default_host` setting for Rust** — A new `rust.default_host` setting lets you override the Rust target triple used during installation, useful for cross-compilation setups. Thanks [@​aacebedo](https://redirect.github.com/aacebedo)! [#​8154](https://redirect.github.com/jdx/mise/pull/8154) - **Aqua `github_content` package support** — The aqua backend now supports packages hosted via GitHub content downloads (not just releases). Thanks [@​risu729](https://redirect.github.com/risu729)! [#​8147](https://redirect.github.com/jdx/mise/pull/8147) ##### Bug Fixes - **`mise edit` whitespace** — TOML values edited via `mise edit` no longer retain extra formatting whitespace. [#​8162](https://redirect.github.com/jdx/mise/pull/8162) - **`--locked` for python/ubi** — The `--locked` flag now works correctly with python and ubi backends. [#​8163](https://redirect.github.com/jdx/mise/pull/8163) - **npm update notifier** — The npm update notifier is now suppressed during `npm install`, preventing spurious output. Thanks [@​risu729](https://redirect.github.com/risu729)! [#​8152](https://redirect.github.com/jdx/mise/pull/8152) - **Asset matcher vsix penalty** — `.vsix` files are now deprioritized in asset matching, preventing incorrect downloads. Thanks [@​risu729](https://redirect.github.com/risu729)! [#​8151](https://redirect.github.com/jdx/mise/pull/8151) - **JSON schema updates** — Added missing `task_templates`, `extends`, and `timeout` fields to the mise.json schema. Thanks [@​risu729](https://redirect.github.com/risu729)! [#​8145](https://redirect.github.com/jdx/mise/pull/8145) ##### New Contributors Welcome [@​joaommartins](https://redirect.github.com/joaommartins)! [#​8133](https://redirect.github.com/jdx/mise/pull/8133) *** > **Note:** This release has no attached binary assets. The v2026.2.14 tag was created successfully but the GitHub Actions workflow that publishes release artifacts did not trigger for the tag push. The binaries for this version are functionally identical to v2026.2.15 minus the additional fixes in that release. Use v2026.2.15 instead. ### [`v2026.2.13`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.13): : Fix GitHub attestation verification failures [Compare Source](https://redirect.github.com/jdx/mise/compare/v2026.2.12...v2026.2.13) This release partially mitigates GitHub attestation verification failures that were causing tool installations to fail (e.g., `gh`, and other aqua-backed tools with attestations enabled). See [#​8142](https://redirect.github.com/jdx/mise/discussions/8142) for details. ##### What happened GitHub silently changed their attestations API to externalize bundle storage to Azure Blob Storage (`tmaproduction.blob.core.windows.net`) using [Snappy compression](https://google.github.io/snappy/), rather than returning bundles inline as JSON. The `gh` CLI had already been updated to handle this ([cli/cli#10185](https://redirect.github.com/cli/cli/pull/10185)), but third-party tools like mise were not yet aware of the new format, causing `"error decoding response body"` failures. ##### What this release does Bumps `sigstore-verification` to 0.2, which splits the reqwest dependency version from mise's (0.13 vs 0.12). This avoids Cargo feature unification that was causing mise's `gzip` feature to be applied to attestation requests, interfering with the Snappy-compressed responses. **Note:** A full fix with proper Snappy decompression support and auth token scoping landed in [sigstore-verification v0.2.1](https://redirect.github.com/jdx/sigstore-verification/releases/tag/v0.2.1) ([#​22](https://redirect.github.com/jdx/sigstore-verification/pull/22), [#​23](https://redirect.github.com/jdx/sigstore-verification/pull/23)) — expect a follow-up mise release with that bump. If you are still hitting issues, set `settings.aqua.github_attestations = false` as a workaround. ##### Dependency Updates - **Bumped `sigstore-verification` to 0.2** ([e8897c9](https://redirect.github.com/jdx/mise/commit/e8897c9fbc873fe272495a65e5a88b04b97f3b6d)) ##### 📦 Aqua Registry Updates ##### New Packages (1) - [`k1LoW/tcmux`](https://redirect.github.com/k1LoW/tcmux) ##### Updated Packages (1) - [`jdx/usage`](https://redirect.github.com/jdx/usage) ### [`v2026.2.12`](https://redirect.github.com/jdx/mise/releases/tag/v2026.2.12) [Compare Source](https://redirect.github.com/jdx/mise/compare/aqua-registry-v2026.2.11...v2026.2.12) A small release adding a new Java configuration option. ##### Highlights - **`java.shorthand_vendor` setting** — A new setting that lets you configure which vendor is used when specifying shorthand Java versions (e.g., `21` instead of `temurin-21`). Thanks [@​roele](https://redirect.github.com/roele)! [#​8134](https://redirect.github.com/jdx/mise/pull/8134) *** > **Note:** This release has no attached binary assets. The v2026.2.12 tag was created but the GitHub Actions workflow that publishes release artifacts did not trigger for the tag push. Use v2026.2.13 or later instead.
    --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/acceptance-tests.yml | 4 ++-- .github/workflows/build.yml | 4 ++-- .github/workflows/github-pages.yaml | 4 ++-- .github/workflows/java-version-matrix-tests.yml | 4 ++-- .github/workflows/lint.yml | 4 ++-- .github/workflows/native-tests.yml | 4 ++-- .github/workflows/nightly-benchmarks.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- .github/workflows/test-release-build.yml | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index f37d7d7d6..80ba94261 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -15,7 +15,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: - version: v2026.2.11 - sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a + version: v2026.2.24 + sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 - name: Run acceptance tests run: mise run acceptance-test diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ab1800900..7c7859ce0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,8 +14,8 @@ jobs: persist-credentials: false - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: - version: v2026.2.11 - sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a + version: v2026.2.24 + sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 - name: Cache local Maven repository uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index f2fdbdade..141279145 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -39,8 +39,8 @@ jobs: fetch-depth: 0 - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: - version: v2026.2.11 - sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a + version: v2026.2.24 + sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 cache: "false" - name: Setup Pages id: pages diff --git a/.github/workflows/java-version-matrix-tests.yml b/.github/workflows/java-version-matrix-tests.yml index 19ded9a54..93416b56b 100644 --- a/.github/workflows/java-version-matrix-tests.yml +++ b/.github/workflows/java-version-matrix-tests.yml @@ -34,8 +34,8 @@ jobs: - name: Set up mise uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: - version: v2026.2.11 - sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a + version: v2026.2.24 + sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 - name: Cache local Maven repository uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 08d079212..2a112e074 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -23,8 +23,8 @@ jobs: - name: Setup mise uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: - version: v2026.2.11 - sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a + version: v2026.2.24 + sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 - name: Lint env: diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 69c36671e..c21752f98 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -15,8 +15,8 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: - version: v2026.2.11 - sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a + version: v2026.2.24 + sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 working_directory: .mise/envs/native - name: Run native tests working-directory: .mise/envs/native diff --git a/.github/workflows/nightly-benchmarks.yml b/.github/workflows/nightly-benchmarks.yml index 0a0e206d9..fe8cc8a1f 100644 --- a/.github/workflows/nightly-benchmarks.yml +++ b/.github/workflows/nightly-benchmarks.yml @@ -36,8 +36,8 @@ jobs: - name: Setup mise uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: - version: v2026.2.11 - sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a + version: v2026.2.24 + sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 - name: Cache local Maven repository uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e1b0d4ea0..045ebc0be 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,8 +26,8 @@ jobs: - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: - version: v2026.2.11 - sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a + version: v2026.2.24 + sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 cache: false - name: Build release version diff --git a/.github/workflows/test-release-build.yml b/.github/workflows/test-release-build.yml index 791f054e4..d6f7be773 100644 --- a/.github/workflows/test-release-build.yml +++ b/.github/workflows/test-release-build.yml @@ -20,8 +20,8 @@ jobs: fetch-depth: 0 - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 with: - version: v2026.2.11 - sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a + version: v2026.2.24 + sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 - name: Cache local Maven repository uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: From 3b94da1b07a593e2a9438f03c21552f4a2b558d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 16:45:37 +0000 Subject: [PATCH 853/870] chore(deps): update dependency npm:renovate to v43.45.1 (#1925) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [npm:renovate](https://renovatebot.com) ([source](https://redirect.github.com/renovatebot/renovate)) | `43.26.4` → `43.45.1` | ![age](https://developer.mend.io/api/mc/badges/age/npm/renovate/43.45.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/renovate/43.26.4/43.45.1?slim=true) | --- ### Release Notes
    renovatebot/renovate (npm:renovate) ### [`v43.45.1`](https://redirect.github.com/renovatebot/renovate/compare/43.45.0...43.45.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.45.0...43.45.1) ### [`v43.45.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.45.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.44.0...43.45.0) ##### Features - **datasource/hex:** Add V2 registry protocol support ([#​40983](https://redirect.github.com/renovatebot/renovate/issues/40983)) ([44a0755](https://redirect.github.com/renovatebot/renovate/commit/44a0755b3bdd0559e861b0866927138fbc694762)) ### [`v43.44.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.44.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.43.3...43.44.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.14.0 (main) ([#​41549](https://redirect.github.com/renovatebot/renovate/issues/41549)) ([e0112da](https://redirect.github.com/renovatebot/renovate/commit/e0112dac2a30b5eb561e4ca20f73cdcad4740a06)) ##### Miscellaneous Chores - **logger:** serialize `DateTime` to ISO strings ([#​41363](https://redirect.github.com/renovatebot/renovate/issues/41363)) ([f963528](https://redirect.github.com/renovatebot/renovate/commit/f963528d488c93e25121d6931926083cac7ad807)), closes [#​41360](https://redirect.github.com/renovatebot/renovate/issues/41360) ### [`v43.43.3`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.43.3) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.43.2...43.43.3) ##### Bug Fixes - **instrumentation:** ignore docker api auth check ([#​41548](https://redirect.github.com/renovatebot/renovate/issues/41548)) ([242068d](https://redirect.github.com/renovatebot/renovate/commit/242068db8075501fd44589c8a563c54e335166e4)) ### [`v43.43.2`](https://redirect.github.com/renovatebot/renovate/compare/43.43.1...43.43.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.43.1...43.43.2) ### [`v43.43.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.43.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.43.0...43.43.1) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.13.2 (main) ([#​41541](https://redirect.github.com/renovatebot/renovate/issues/41541)) ([0c16a9f](https://redirect.github.com/renovatebot/renovate/commit/0c16a9f0648d924281a155bc5f9cc5e9813a5111)) ##### Miscellaneous Chores - **deps:** update dependency [@​biomejs/biome](https://redirect.github.com/biomejs/biome) to v2.4.3 (main) ([#​41535](https://redirect.github.com/renovatebot/renovate/issues/41535)) ([1a5667f](https://redirect.github.com/renovatebot/renovate/commit/1a5667fd7b29758373b098442314af17b276a99c)) - **deps:** update dependency pnpm to v10.30.1 (main) ([#​41540](https://redirect.github.com/renovatebot/renovate/issues/41540)) ([f98ad6c](https://redirect.github.com/renovatebot/renovate/commit/f98ad6ce8fd5ff3002fe5a46aa2595353a80ff2c)) - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.4.8 (main) ([#​41538](https://redirect.github.com/renovatebot/renovate/issues/41538)) ([7be5491](https://redirect.github.com/renovatebot/renovate/commit/7be5491d0aa93d52913a407f1667c50b44e0065b)) ##### Code Refactoring - cleanup ae-cvss-calculator import ([#​41525](https://redirect.github.com/renovatebot/renovate/issues/41525)) ([d98ad0b](https://redirect.github.com/renovatebot/renovate/commit/d98ad0b4623de44d9bc3279901a6a2bf68510011)) - move `onboardingConfigFileName` to `InheritConfig` ([#​41383](https://redirect.github.com/renovatebot/renovate/issues/41383)) ([d1fa243](https://redirect.github.com/renovatebot/renovate/commit/d1fa243a0851c3ae2e9077ac1ce88a6940dfe84a)) ##### Build System - **deps:** update dependency minimatch to v10.2.3 \[security] (main) ([#​41542](https://redirect.github.com/renovatebot/renovate/issues/41542)) ([63312ba](https://redirect.github.com/renovatebot/renovate/commit/63312ba6263c63eaffe62ac818d9cb730529469b)) ### [`v43.43.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.43.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.42.1...43.43.0) ##### Features - **gradle:** set `toolSettings`' JVM limits when invoking `./gradlew` ([#​41514](https://redirect.github.com/renovatebot/renovate/issues/41514)) ([b251027](https://redirect.github.com/renovatebot/renovate/commit/b25102789e5f39fb469f43c2c0b7536eb0a191e4)), closes [#​39559](https://redirect.github.com/renovatebot/renovate/issues/39559) ##### Build System - **deps:** update dependency glob to v13.0.6 (main) ([#​41531](https://redirect.github.com/renovatebot/renovate/issues/41531)) ([5745745](https://redirect.github.com/renovatebot/renovate/commit/5745745053cfe02ab9dead42704df98a2d4cf09a)) - **deps:** update dependency minimatch to v10.2.2 (main) ([#​41532](https://redirect.github.com/renovatebot/renovate/issues/41532)) ([3ca57e1](https://redirect.github.com/renovatebot/renovate/commit/3ca57e118b580edf9ea52b2491d060747016faae)) ### [`v43.42.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.42.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.42.0...43.42.1) ##### Bug Fixes - **presets/cache:** do not cache internal presets ([#​41524](https://redirect.github.com/renovatebot/renovate/issues/41524)) ([e06b74e](https://redirect.github.com/renovatebot/renovate/commit/e06b74e9c6d7ced6c8e81295f3265499deffab55)) ### [`v43.42.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.42.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.41.0...43.42.0) ##### Features - **github:** Make PR cache sync max pages configurable ([#​41493](https://redirect.github.com/renovatebot/renovate/issues/41493)) ([000c2f9](https://redirect.github.com/renovatebot/renovate/commit/000c2f936bcdef7b54e301bcf9eca13cb4a82bda)) ### [`v43.41.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.41.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.40.2...43.41.0) ##### Features - **manager/cake:** Support extracting nuget packages from `InstallTools` helper methods ([#​40070](https://redirect.github.com/renovatebot/renovate/issues/40070)) ([ccd99d9](https://redirect.github.com/renovatebot/renovate/commit/ccd99d9119e606d06811b0515a73abc6050388ac)) - **platform:** add support for the SCM-manager ([#​26866](https://redirect.github.com/renovatebot/renovate/issues/26866)) ([ddc4622](https://redirect.github.com/renovatebot/renovate/commit/ddc46220b943d1a0104468c2cde24fd1416740c3)) ##### Bug Fixes - **gomod:** skip placeholder pseudo versions ([#​41521](https://redirect.github.com/renovatebot/renovate/issues/41521)) ([dcabd52](https://redirect.github.com/renovatebot/renovate/commit/dcabd52332de620e93436592918c54552c69e472)), closes [#​41517](https://redirect.github.com/renovatebot/renovate/issues/41517) [#​41517](https://redirect.github.com/renovatebot/renovate/issues/41517) - **gomod:** support local module paths in `replace` directives ([#​41520](https://redirect.github.com/renovatebot/renovate/issues/41520)) ([59de755](https://redirect.github.com/renovatebot/renovate/commit/59de755283d87accca959a9801296474098a6f08)), closes [#​41518](https://redirect.github.com/renovatebot/renovate/issues/41518) ##### Miscellaneous Chores - use a stable sort for `manager extract durations (ms)` ([#​41509](https://redirect.github.com/renovatebot/renovate/issues/41509)) ([da5b7c3](https://redirect.github.com/renovatebot/renovate/commit/da5b7c3a6767ceb435d6ce4f83205c673016c3da)), closes [#​40091](https://redirect.github.com/renovatebot/renovate/issues/40091) ##### Code Refactoring - **gradle:** move `gradleJvmArg` to `util/exec` ([#​41511](https://redirect.github.com/renovatebot/renovate/issues/41511)) ([12ea4f2](https://redirect.github.com/renovatebot/renovate/commit/12ea4f28318e7636d67f21dfcb15d6556e1159e9)) - **logger:** use `safe-stable-stringify` instead of `bunyan.safeCycles` ([#​41526](https://redirect.github.com/renovatebot/renovate/issues/41526)) ([331cb50](https://redirect.github.com/renovatebot/renovate/commit/331cb509b80e7cc7ebae1cc8fd16518973c5bc9e)) ##### Tests - **manager/gomod:** use real hostRules implementation in tests ([#​41515](https://redirect.github.com/renovatebot/renovate/issues/41515)) ([dda653f](https://redirect.github.com/renovatebot/renovate/commit/dda653f55a8107e167bbcaedf0405c6482ada9a6)) ### [`v43.40.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.40.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.40.1...43.40.2) ##### Build System - **deps:** update dependency [@​renovatebot/osv-offline](https://redirect.github.com/renovatebot/osv-offline) to v2.1.2 (main) ([#​41516](https://redirect.github.com/renovatebot/renovate/issues/41516)) ([977ec5c](https://redirect.github.com/renovatebot/renovate/commit/977ec5cfe00c77c1042772ddee5f52efbfc0f413)) ### [`v43.40.1`](https://redirect.github.com/renovatebot/renovate/compare/43.40.0...43.40.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.40.0...43.40.1) ### [`v43.40.0`](https://redirect.github.com/renovatebot/renovate/compare/43.39.2...43.40.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.39.2...43.40.0) ### [`v43.39.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.39.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.39.0...43.39.2) ##### Build System - **deps:** update dependency [@​renovatebot/pep440](https://redirect.github.com/renovatebot/pep440) to v4.2.2 (main) ([#​41504](https://redirect.github.com/renovatebot/renovate/issues/41504)) ([73faaed](https://redirect.github.com/renovatebot/renovate/commit/73faaedf6248413d2b13bddc7cadc6e03bce2dff)) ### [`v43.39.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.39.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.38.1...43.39.0) ##### Features - **replacements:** add express-response-middleware ([#​39890](https://redirect.github.com/renovatebot/renovate/issues/39890)) ([fe8921f](https://redirect.github.com/renovatebot/renovate/commit/fe8921fa212be4ff6fd492e2e2b4b7ab1267ff62)) ##### Documentation - clarify `registryAliases` with a pull-through cache ([#​41500](https://redirect.github.com/renovatebot/renovate/issues/41500)) ([1a129bf](https://redirect.github.com/renovatebot/renovate/commit/1a129bf2310330430f3a3c276214144a3ee76010)) ##### Miscellaneous Chores - **github:** instrument the `getPrCache` method ([#​41490](https://redirect.github.com/renovatebot/renovate/issues/41490)) ([7a75ea8](https://redirect.github.com/renovatebot/renovate/commit/7a75ea87d2654334ae82f801e605ad390ca487a1)) ##### Code Refactoring - **libyears:** clarify log messages are LibYear related ([#​41489](https://redirect.github.com/renovatebot/renovate/issues/41489)) ([c9fec45](https://redirect.github.com/renovatebot/renovate/commit/c9fec45276bda81f30970316de8de246398ee1c1)) ##### Tests - **vendir:** avoid hard-to-test branches ([#​41449](https://redirect.github.com/renovatebot/renovate/issues/41449)) ([2be6a71](https://redirect.github.com/renovatebot/renovate/commit/2be6a7128e848e3fa06974cd2d47f3210702184a)), closes [#​41443](https://redirect.github.com/renovatebot/renovate/issues/41443) ##### Continuous Integration - allow triggering "find issues with missing labels" manually ([#​41494](https://redirect.github.com/renovatebot/renovate/issues/41494)) ([d53c860](https://redirect.github.com/renovatebot/renovate/commit/d53c8607464192fae691b407fbcfca16ae8bac02)) - only run scheduled jobs on main repo ([#​41501](https://redirect.github.com/renovatebot/renovate/issues/41501)) ([e9c536f](https://redirect.github.com/renovatebot/renovate/commit/e9c536f302c1a447f47bafb587b8ca828bf3e649)) ### [`v43.38.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.38.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.38.0...43.38.1) ##### Bug Fixes - **libyear:** skip disabled dependencies ([#​41244](https://redirect.github.com/renovatebot/renovate/issues/41244)) ([ed825d5](https://redirect.github.com/renovatebot/renovate/commit/ed825d52a1304e7ca5a45d823cf8cf672d4c6dd8)) ##### Miscellaneous Chores - run more linter on pre-commit ([#​41482](https://redirect.github.com/renovatebot/renovate/issues/41482)) ([235cc20](https://redirect.github.com/renovatebot/renovate/commit/235cc209553da6d1eceb437454d96dcbc1e9deda)) ##### Tests - **libyears:** clarify existing behaviour with `enabled: false` ([#​41488](https://redirect.github.com/renovatebot/renovate/issues/41488)) ([1b7e5b2](https://redirect.github.com/renovatebot/renovate/commit/1b7e5b2106d76111d18012704102a716d475f2b0)), closes [#​41244](https://redirect.github.com/renovatebot/renovate/issues/41244) ### [`v43.38.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.38.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.37.0...43.38.0) ##### Features - Log PR labels on PR creation ([#​41450](https://redirect.github.com/renovatebot/renovate/issues/41450)) ([bd7214d](https://redirect.github.com/renovatebot/renovate/commit/bd7214d04be0cc5ea7a4ddd8f6b214d5af19b707)) ### [`v43.37.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.37.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.36.3...43.37.0) ##### Features - **terraform:** extract provider registry url from lockfile ([#​41487](https://redirect.github.com/renovatebot/renovate/issues/41487)) ([c5f0700](https://redirect.github.com/renovatebot/renovate/commit/c5f0700e18de3b853dbf188adf4316d68d0e74e0)) ### [`v43.36.3`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.36.3) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.36.2...43.36.3) ##### Bug Fixes - **terraform:** respect provider registry from lockfile ([#​41484](https://redirect.github.com/renovatebot/renovate/issues/41484)) ([d0b7ca9](https://redirect.github.com/renovatebot/renovate/commit/d0b7ca9d69971d1f9df4c4db3a6b659a9f5000fb)) ### [`v43.36.2`](https://redirect.github.com/renovatebot/renovate/compare/43.36.1...43.36.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.36.1...43.36.2) ### [`v43.36.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.36.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.36.0...43.36.1) ##### Bug Fixes - **util:** don't log "Hidden Unicode" warning when reading a binary file ([#​41470](https://redirect.github.com/renovatebot/renovate/issues/41470)) ([c985ca2](https://redirect.github.com/renovatebot/renovate/commit/c985ca29dd0c10a270bed161bba4090ac95ec11f)) ### [`v43.36.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.36.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.35.1...43.36.0) ##### Features - **instrumentation:** allow disabling cloud detectors ([#​41401](https://redirect.github.com/renovatebot/renovate/issues/41401)) ([f7efd7d](https://redirect.github.com/renovatebot/renovate/commit/f7efd7d426c6ec0d3c8c09b0194564692c6cbdd7)) ### [`v43.35.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.35.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.35.0...43.35.1) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.13.1 (main) ([#​41479](https://redirect.github.com/renovatebot/renovate/issues/41479)) ([08bcec4](https://redirect.github.com/renovatebot/renovate/commit/08bcec4e5a2df1c50126eccf6e48247a65675052)) ##### Miscellaneous Chores - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.4.7 (main) ([#​41478](https://redirect.github.com/renovatebot/renovate/issues/41478)) ([38b9442](https://redirect.github.com/renovatebot/renovate/commit/38b94429747111301ae926f6ecaaaf49e88fd2a1)) ### [`v43.35.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.35.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.34.0...43.35.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.13.0 (main) ([#​41476](https://redirect.github.com/renovatebot/renovate/issues/41476)) ([b5ad989](https://redirect.github.com/renovatebot/renovate/commit/b5ad9896e0dbd7fe599e4c5e239244961494f449)) - **presets:** add Error Prone dependency group ([#​40992](https://redirect.github.com/renovatebot/renovate/issues/40992)) ([445cd89](https://redirect.github.com/renovatebot/renovate/commit/445cd897d8496c0242a35fda5863aa669c00bc12)) ### [`v43.34.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.34.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.33.2...43.34.0) ##### Features - **versioning:** add Deno versioning support ([#​40968](https://redirect.github.com/renovatebot/renovate/issues/40968)) ([f990e71](https://redirect.github.com/renovatebot/renovate/commit/f990e7181e67672aa9751791c2a0e58701a3896e)) ##### Bug Fixes - **gomod:** support major version on `replace`s with the same Go module ([#​41359](https://redirect.github.com/renovatebot/renovate/issues/41359)) ([d04b07f](https://redirect.github.com/renovatebot/renovate/commit/d04b07f89bb02c021d71e3a19428df764d6f05fa)), closes [#​41260](https://redirect.github.com/renovatebot/renovate/issues/41260) - **util:** don't log duplicate "hidden Unicode" characters ([#​41469](https://redirect.github.com/renovatebot/renovate/issues/41469)) ([8f16b44](https://redirect.github.com/renovatebot/renovate/commit/8f16b4442ee1d9a1b8dbc96e904e188dc7b82925)) - **util:** don't treat Zero Width Joiner as "hidden Unicode" ([#​41471](https://redirect.github.com/renovatebot/renovate/issues/41471)) ([165d88f](https://redirect.github.com/renovatebot/renovate/commit/165d88f4b33a59b138456a5d68e7d6a8f0301985)) - **vulnerability:** handle alerts with null or missing `firstPatchedVersion` ([#​41338](https://redirect.github.com/renovatebot/renovate/issues/41338)) ([f52ed03](https://redirect.github.com/renovatebot/renovate/commit/f52ed0396398639e736f22c4f4669ec1ff1556e5)) - **workers-repository:** don't allow `<>` in branch names ([#​41406](https://redirect.github.com/renovatebot/renovate/issues/41406)) ([0e1ef6e](https://redirect.github.com/renovatebot/renovate/commit/0e1ef6e0b0500710d87230e0aed9f255905c46e0)) ##### Code Refactoring - move `onboarding` to `InheritConfig` ([#​41377](https://redirect.github.com/renovatebot/renovate/issues/41377)) ([54547c9](https://redirect.github.com/renovatebot/renovate/commit/54547c97fcd8e92ef663869fa79a701ba1f27421)) - move `onboardingNoDeps` to `InheritConfig` ([#​41384](https://redirect.github.com/renovatebot/renovate/issues/41384)) ([af14f83](https://redirect.github.com/renovatebot/renovate/commit/af14f83a0594b56c0000342ebd691082497fdb2e)) ### [`v43.33.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.33.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.33.1...43.33.2) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.12.1 (main) ([#​41474](https://redirect.github.com/renovatebot/renovate/issues/41474)) ([e9fe897](https://redirect.github.com/renovatebot/renovate/commit/e9fe8973fd6113ab415baae4c8299d7f776fc699)) ##### Miscellaneous Chores - **deps:** update dependency node to v24.14.0 (main) ([#​41475](https://redirect.github.com/renovatebot/renovate/issues/41475)) ([7d62b08](https://redirect.github.com/renovatebot/renovate/commit/7d62b08eac7d1309e908d9aa707450c4e24948d3)) - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.4.6 (main) ([#​41473](https://redirect.github.com/renovatebot/renovate/issues/41473)) ([7da2009](https://redirect.github.com/renovatebot/renovate/commit/7da2009c76488c46b3eace51367b7d867fced636)) ##### Tests - **cargo:** add missing assertion ([#​41457](https://redirect.github.com/renovatebot/renovate/issues/41457)) ([3459222](https://redirect.github.com/renovatebot/renovate/commit/3459222537807adc9880a38000a8a796d88b5554)) ### [`v43.33.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.33.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.33.0...43.33.1) ##### Bug Fixes - **util:** don't include filename in "Hidden Unicode" warning ([#​41468](https://redirect.github.com/renovatebot/renovate/issues/41468)) ([5949dd4](https://redirect.github.com/renovatebot/renovate/commit/5949dd4aca71debbc3a7835d4651971c91580a78)), closes [#​41467](https://redirect.github.com/renovatebot/renovate/issues/41467) ### [`v43.33.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.33.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.32.2...43.33.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.12.0 (main) ([#​41464](https://redirect.github.com/renovatebot/renovate/issues/41464)) ([702f8f9](https://redirect.github.com/renovatebot/renovate/commit/702f8f9301628cd6ed525d75ec77a3aabc41d8f2)) - **vendir:** convert Host Rules to Git authentication ([#​41458](https://redirect.github.com/renovatebot/renovate/issues/41458)) ([fdde07c](https://redirect.github.com/renovatebot/renovate/commit/fdde07c09d9c75b3ac1c360f5f6063d595a7bc4b)) ##### Miscellaneous Chores - **platforms:** correct typo in "up-to-date" ([#​41460](https://redirect.github.com/renovatebot/renovate/issues/41460)) ([2eb1e1e](https://redirect.github.com/renovatebot/renovate/commit/2eb1e1e70675c3ae079a7123295303f63f8c3f07)) ##### Build System - **deps:** update dependency glob to v13.0.5 (main) ([#​41463](https://redirect.github.com/renovatebot/renovate/issues/41463)) ([441acb6](https://redirect.github.com/renovatebot/renovate/commit/441acb6ed0b4f4406bac2a59f2e179a87f37a084)) ### [`v43.32.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.32.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.32.1...43.32.2) ##### Miscellaneous Chores - **deps:** update dependency pnpm to v10.30.0 (main) ([#​41459](https://redirect.github.com/renovatebot/renovate/issues/41459)) ([57260e1](https://redirect.github.com/renovatebot/renovate/commit/57260e15b2ab0616d965c3b90f3cd880f4e98b9d)) ##### Build System - **deps:** update node.js to v24.14.0 (main) ([#​41461](https://redirect.github.com/renovatebot/renovate/issues/41461)) ([c5b1ed6](https://redirect.github.com/renovatebot/renovate/commit/c5b1ed64f036d1ceb16f15bfa1e0aa3d72b910e1)) ### [`v43.32.1`](https://redirect.github.com/renovatebot/renovate/compare/43.32.0...43.32.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.32.0...43.32.1) ### [`v43.32.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.32.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.10...43.32.0) ##### Features - **vendir:** support extracting HTTP sources ([#​41443](https://redirect.github.com/renovatebot/renovate/issues/41443)) ([0c6ac63](https://redirect.github.com/renovatebot/renovate/commit/0c6ac635d346ce44ad53051a0a1d838ffb73446b)), closes [#​41435](https://redirect.github.com/renovatebot/renovate/issues/41435) ### [`v43.31.10`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.31.10) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.9...43.31.10) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.11.4 (main) ([#​41448](https://redirect.github.com/renovatebot/renovate/issues/41448)) ([fa98ed1](https://redirect.github.com/renovatebot/renovate/commit/fa98ed13bc2b9143e3fc940448393d710b373344)) ##### Miscellaneous Chores - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.4.5 (main) ([#​41432](https://redirect.github.com/renovatebot/renovate/issues/41432)) ([78ca9ea](https://redirect.github.com/renovatebot/renovate/commit/78ca9eaa6e268b446efced67146e11f3ea46ea74)) ##### Code Refactoring - **cache:** Convert package cache backends to classes ([#​41434](https://redirect.github.com/renovatebot/renovate/issues/41434)) ([6afc6e9](https://redirect.github.com/renovatebot/renovate/commit/6afc6e9e05c6d5d4eea051aa7a4a7cec2df269ff)) - **vendir:** remove nullable return from extraction methods ([#​41446](https://redirect.github.com/renovatebot/renovate/issues/41446)) ([fdd1612](https://redirect.github.com/renovatebot/renovate/commit/fdd1612aa0410d611d6cea9e627057d1d9f87304)) ### [`v43.31.9`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.31.9) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.8...43.31.9) ##### Build System - **deps:** update dependency glob to v13.0.4 (main) ([#​41442](https://redirect.github.com/renovatebot/renovate/issues/41442)) ([bdf7bc6](https://redirect.github.com/renovatebot/renovate/commit/bdf7bc633f5ceb492bfa6d3e28d6c8f15040aec6)) ### [`v43.31.8`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.31.8) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.7...43.31.8) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.11.3 (main) ([#​41441](https://redirect.github.com/renovatebot/renovate/issues/41441)) ([763dd7e](https://redirect.github.com/renovatebot/renovate/commit/763dd7ec2039b155614f86ea85c2922f8ef212a7)) ##### Documentation - use HTML for announcement bar ([#​41437](https://redirect.github.com/renovatebot/renovate/issues/41437)) ([60d75c4](https://redirect.github.com/renovatebot/renovate/commit/60d75c40c0be89e23e63fd82f33d10e692ab70df)) ##### Miscellaneous Chores - **deps:** update dependency [@​biomejs/biome](https://redirect.github.com/biomejs/biome) to v2.4.2 (main) ([#​41440](https://redirect.github.com/renovatebot/renovate/issues/41440)) ([de17f40](https://redirect.github.com/renovatebot/renovate/commit/de17f406cdf840241a27ebdbf758d7a45a1b371a)) ### [`v43.31.7`](https://redirect.github.com/renovatebot/renovate/compare/43.31.6...43.31.7) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.6...43.31.7) ### [`v43.31.6`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.31.6) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.5...43.31.6) ##### Build System - **deps:** update dependency [@​redis/client](https://redirect.github.com/redis/client) to v5.11.0 (main) ([#​41418](https://redirect.github.com/renovatebot/renovate/issues/41418)) ([cce6e16](https://redirect.github.com/renovatebot/renovate/commit/cce6e16977299b4493abe26d7974e18eafefd5f0)) ### [`v43.31.5`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.31.5) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.4...43.31.5) ##### Bug Fixes - **util:** don't warn if a file contains only a Byte Order Mark (BOM) ([#​41416](https://redirect.github.com/renovatebot/renovate/issues/41416)) ([7c7330b](https://redirect.github.com/renovatebot/renovate/commit/7c7330b1628a931df207d5d865dbe029d8d1e882)), closes [#​41381](https://redirect.github.com/renovatebot/renovate/issues/41381) ### [`v43.31.4`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.31.4) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.3...43.31.4) ##### Miscellaneous Chores - **tsdown:** validate and sort entrypoints ([#​41407](https://redirect.github.com/renovatebot/renovate/issues/41407)) ([8cf4171](https://redirect.github.com/renovatebot/renovate/commit/8cf41716377234a3b7234d2b7103b6d5b2b31fd9)) ##### Build System - lazy load initialization modules ([#​41408](https://redirect.github.com/renovatebot/renovate/issues/41408)) ([ea089ac](https://redirect.github.com/renovatebot/renovate/commit/ea089ac660327e9858389f502f2678a3d057777e)) ### [`v43.31.3`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.31.3) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.2...43.31.3) ##### Code Refactoring - **redis:** use destroy instead of disconnect ([#​41397](https://redirect.github.com/renovatebot/renovate/issues/41397)) ([fbde994](https://redirect.github.com/renovatebot/renovate/commit/fbde9945c01e49c8fc8b8865572ba1a0a9ec3419)) ##### Build System - **deps:** update opentelemetry-js-contrib monorepo (main) ([#​41404](https://redirect.github.com/renovatebot/renovate/issues/41404)) ([07b8528](https://redirect.github.com/renovatebot/renovate/commit/07b85289fd5050c170a147830b225e5d310ff6e3)) ### [`v43.31.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.31.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.1...43.31.2) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.11.1 (main) ([#​41398](https://redirect.github.com/renovatebot/renovate/issues/41398)) ([8be0725](https://redirect.github.com/renovatebot/renovate/commit/8be07253309dd363b1dbd1f035b8a73f3295768f)) - resolve cache TTL lazily in `PackageHttpCacheProvider` ([#​41386](https://redirect.github.com/renovatebot/renovate/issues/41386)) ([d1f4f80](https://redirect.github.com/renovatebot/renovate/commit/d1f4f804c7087fb33e4be5436759eecbd2acf907)) ##### Documentation - update references to otel/opentelemetry-collector-contrib to v0.146.1 (main) ([#​41387](https://redirect.github.com/renovatebot/renovate/issues/41387)) ([e904013](https://redirect.github.com/renovatebot/renovate/commit/e9040130b29842520b311c6cdec6e4fc1ff862b5)) - update references to renovate/renovate (main) ([#​41388](https://redirect.github.com/renovatebot/renovate/issues/41388)) ([8e45f4b](https://redirect.github.com/renovatebot/renovate/commit/8e45f4b321336c03cc40a2d325f7b9cdfda9ccb5)) ##### Miscellaneous Chores - **deps:** update containerbase/internal-tools action to v4.1.13 (main) ([#​41389](https://redirect.github.com/renovatebot/renovate/issues/41389)) ([a9f039b](https://redirect.github.com/renovatebot/renovate/commit/a9f039bbd4cd01219ce599b34746849cc52062a4)) - **deps:** update containerbase/internal-tools action to v4.1.15 (main) ([#​41393](https://redirect.github.com/renovatebot/renovate/issues/41393)) ([771563d](https://redirect.github.com/renovatebot/renovate/commit/771563df64df6160c7f62ff5fac0853423916521)) - **deps:** update dependency [@​biomejs/biome](https://redirect.github.com/biomejs/biome) to v2.4.0 (main) ([#​41379](https://redirect.github.com/renovatebot/renovate/issues/41379)) ([48f94fa](https://redirect.github.com/renovatebot/renovate/commit/48f94fa83f2750947bf35830fa5bc3b21d17c890)) - **deps:** update dependency [@​containerbase/eslint-plugin](https://redirect.github.com/containerbase/eslint-plugin) to v1.1.33 (main) ([#​41390](https://redirect.github.com/renovatebot/renovate/issues/41390)) ([11481f4](https://redirect.github.com/renovatebot/renovate/commit/11481f4861d89f3f88cffdf5f93a0c4d761d3a98)) - **deps:** update dependency [@​containerbase/istanbul-reports-html](https://redirect.github.com/containerbase/istanbul-reports-html) to v1.1.32 (main) ([#​41391](https://redirect.github.com/renovatebot/renovate/issues/41391)) ([6d6a991](https://redirect.github.com/renovatebot/renovate/commit/6d6a99121bbc66bdd5c271689ef023a1ce1be2f1)) - **deps:** update dependency [@​containerbase/semantic-release-pnpm](https://redirect.github.com/containerbase/semantic-release-pnpm) to v1.3.22 (main) ([#​41392](https://redirect.github.com/renovatebot/renovate/issues/41392)) ([8f8882c](https://redirect.github.com/renovatebot/renovate/commit/8f8882ccf84768ff2ec619b44fb3f31c604732b7)) - **deps:** update dependency rimraf to v6.1.3 (main) ([#​41394](https://redirect.github.com/renovatebot/renovate/issues/41394)) ([6af5362](https://redirect.github.com/renovatebot/renovate/commit/6af53622fb90722212dc444a2b62e04d3d52fb30)) - **deps:** update dependency tar to v7.5.9 (main) ([#​41395](https://redirect.github.com/renovatebot/renovate/issues/41395)) ([3dc82ce](https://redirect.github.com/renovatebot/renovate/commit/3dc82ce599738f610b2bf3a28034935822e0205f)) - **deps:** update ghcr.io/containerbase/devcontainer docker tag to v14.4.4 (main) ([#​41396](https://redirect.github.com/renovatebot/renovate/issues/41396)) ([b66a452](https://redirect.github.com/renovatebot/renovate/commit/b66a452298f04c25d368bcaef06c22610f70be20)) - update vscode and devcontainer settings ([#​41370](https://redirect.github.com/renovatebot/renovate/issues/41370)) ([3ff1ef4](https://redirect.github.com/renovatebot/renovate/commit/3ff1ef460dcaba702168418bd7b19bf3ac0e3062)) ##### Code Refactoring - move `onboardingPrTitle` to `InheritConfig` ([#​41376](https://redirect.github.com/renovatebot/renovate/issues/41376)) ([da50c75](https://redirect.github.com/renovatebot/renovate/commit/da50c75c49ecffc7fd8e21d42a623fe71a520b95)) ### [`v43.31.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.31.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.31.0...43.31.1) ##### Miscellaneous Chores - **deps:** update dependency [@​vitest/eslint-plugin](https://redirect.github.com/vitest/eslint-plugin) to v1.6.9 (main) ([#​41369](https://redirect.github.com/renovatebot/renovate/issues/41369)) ([dc6c1d8](https://redirect.github.com/renovatebot/renovate/commit/dc6c1d87a6858358ef5e4a9e908528ef294bf57d)) ##### Build System - **deps:** update dependency [@​renovatebot/pgp](https://redirect.github.com/renovatebot/pgp) to v1.3.2 (main) ([#​41373](https://redirect.github.com/renovatebot/renovate/issues/41373)) ([1d44a1e](https://redirect.github.com/renovatebot/renovate/commit/1d44a1e451b9af99ec12a94178d82ca1f0bb36db)) ### [`v43.31.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.31.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.30.1...43.31.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.11.0 (main) ([#​41367](https://redirect.github.com/renovatebot/renovate/issues/41367)) ([c505edb](https://redirect.github.com/renovatebot/renovate/commit/c505edbe728a2f931c35239b771733ea2aabaaa8)) ### [`v43.30.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.30.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.30.0...43.30.1) ##### Build System - **deps:** update dependency simple-git to v3.31.1 (main) ([#​41366](https://redirect.github.com/renovatebot/renovate/issues/41366)) ([46ba035](https://redirect.github.com/renovatebot/renovate/commit/46ba035593b376954ce67ac22fab20f321ab9967)) ### [`v43.30.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.30.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.29.2...43.30.0) ##### Features - **otel:** support diagnostics debugging ([#​41362](https://redirect.github.com/renovatebot/renovate/issues/41362)) ([e34f867](https://redirect.github.com/renovatebot/renovate/commit/e34f867da67ca06e1c01ffee6071070492161a8e)) ##### Miscellaneous Chores - **deps:** update aquasecurity/trivy-action action to v0.34.1 (main) ([#​41364](https://redirect.github.com/renovatebot/renovate/issues/41364)) ([8c1899d](https://redirect.github.com/renovatebot/renovate/commit/8c1899d0c15793116a4956398f3965c0a658d3cf)) ##### Tests - **gomod:** remove duplicated test ([#​41358](https://redirect.github.com/renovatebot/renovate/issues/41358)) ([d992c98](https://redirect.github.com/renovatebot/renovate/commit/d992c988579a7d9bfd703f800bccd78d11868de5)) - **logger:** remove outdated comment ([#​41352](https://redirect.github.com/renovatebot/renovate/issues/41352)) ([388e4f1](https://redirect.github.com/renovatebot/renovate/commit/388e4f1151d8b750f3874243d182198627c19a52)) ### [`v43.29.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.29.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.29.1...43.29.2) ##### Bug Fixes - **util/git:** log date as string ([#​41360](https://redirect.github.com/renovatebot/renovate/issues/41360)) ([2228a79](https://redirect.github.com/renovatebot/renovate/commit/2228a7901593072af3763cf57e5a4270c452bd64)) ### [`v43.29.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.29.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.29.0...43.29.1) ##### Bug Fixes - **datasource/python-version:** gracefully handle python.org 429 rate limiting ([#​41180](https://redirect.github.com/renovatebot/renovate/issues/41180)) ([11f39d5](https://redirect.github.com/renovatebot/renovate/commit/11f39d5106c0f11961ed0db1acfcb0790f75d3cd)) ##### Continuous Integration - bundle Mkdocs site into Releases ([#​41355](https://redirect.github.com/renovatebot/renovate/issues/41355)) ([4a447ce](https://redirect.github.com/renovatebot/renovate/commit/4a447ce1d4b2cd6fdff2ccaeb6939a4dbd4dd508)) ### [`v43.29.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.29.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.28.0...43.29.0) ##### Features - hyperlink warnings to dep dashboard ([#​40395](https://redirect.github.com/renovatebot/renovate/issues/40395)) ([579ff4c](https://redirect.github.com/renovatebot/renovate/commit/579ff4c2ba5d4cbbf815a69fd8fc50075b879fc5)) ##### Miscellaneous Chores - **deps:** update github/codeql-action action to v4.32.4 (main) ([#​41356](https://redirect.github.com/renovatebot/renovate/issues/41356)) ([4b8cd24](https://redirect.github.com/renovatebot/renovate/commit/4b8cd240567b13f49c15c659451c6df990bf0028)) ### [`v43.28.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.28.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.27.0...43.28.0) ##### Features - **nuget:** Also read registry URLs from deps ([#​39134](https://redirect.github.com/renovatebot/renovate/issues/39134)) ([e9da17a](https://redirect.github.com/renovatebot/renovate/commit/e9da17a22fb1c0efbe93b11fafe65ca1d98b873f)) - **util:** log warning if file(s) contain hidden Unicode characters ([#​41353](https://redirect.github.com/renovatebot/renovate/issues/41353)) ([9dcd32d](https://redirect.github.com/renovatebot/renovate/commit/9dcd32dc725e78ec269c699542fe9284e34491d9)) ### [`v43.27.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.27.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.26.5...43.27.0) ##### Features - **logger:** take function parameters into account for deduplication ([#​41333](https://redirect.github.com/renovatebot/renovate/issues/41333)) ([938829d](https://redirect.github.com/renovatebot/renovate/commit/938829d5f492876befe6873d610f0e8931d60f15)) ### [`v43.26.5`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.26.5) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.26.4...43.26.5) ##### Bug Fixes - **got:** only flat copy options ([#​41349](https://redirect.github.com/renovatebot/renovate/issues/41349)) ([0121da5](https://redirect.github.com/renovatebot/renovate/commit/0121da55f013d2aea55bf0041a8c024cfbca823d)) - log renovate version on startup ([#​41346](https://redirect.github.com/renovatebot/renovate/issues/41346)) ([50d8f01](https://redirect.github.com/renovatebot/renovate/commit/50d8f010b4e969409d56090ea34538884609ba96)) ##### Miscellaneous Chores - **deps:** update actions/dependency-review-action action to v4.8.3 (main) ([#​41342](https://redirect.github.com/renovatebot/renovate/issues/41342)) ([e9c655b](https://redirect.github.com/renovatebot/renovate/commit/e9c655ba9abbeb337f7b8a7432d737a33f612b0c))
    --- ### Configuration 📅 **Schedule**: Branch creation - "before 6am on Monday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index e545af213..c9201ab9d 100644 --- a/mise.toml +++ b/mise.toml @@ -4,7 +4,7 @@ java = "temurin-25.0.2+10.0.LTS" lychee = "0.23.0" node = "24.14.0" -"npm:renovate" = "43.26.4" +"npm:renovate" = "43.45.1" protoc = "33.5" [env] From 2a9448bbf5dda8c3782059704926893f78a478b2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 21:54:36 +0000 Subject: [PATCH 854/870] chore(deps): update otel/opentelemetry-collector-contrib docker tag to v0.147.0 (#1929) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [otel/opentelemetry-collector-contrib](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases) | minor | `0.146.1` → `0.147.0` | --- ### Release Notes
    open-telemetry/opentelemetry-collector-releases (otel/opentelemetry-collector-contrib) ### [`v0.147.0`](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/blob/HEAD/CHANGELOG.md#v01470) [Compare Source](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/compare/v0.146.1...v0.147.0) ##### 🛑 Breaking changes 🛑 - `contrib`: Remove SAPM exporter from contrib distribution ([#​1393](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/issues/1393)) ##### 💡 Enhancements 💡 - `otelcol`: Add Windows ARM64 executable to release artifacts ([#​1383](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/issues/1383))
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- examples/example-exporter-opentelemetry/docker-compose.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index 3147b123b..60d42e201 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -36,7 +36,7 @@ services: - -jar - /example-greeting-service.jar collector: - image: otel/opentelemetry-collector-contrib:0.146.1@sha256:f6e429c1052ab50f85a7afa5f7e32f25931697751622b0e1f453d10f79a1df3c + image: otel/opentelemetry-collector-contrib:0.147.0@sha256:e7c92c715f28ff142f3bcaccd4fc5603cf4c71276ef09954a38eb4038500a5a5 network_mode: host volumes: - ./config/otelcol-config.yaml:/config.yaml diff --git a/examples/example-exporter-opentelemetry/docker-compose.yaml b/examples/example-exporter-opentelemetry/docker-compose.yaml index 45a02a483..e48a70529 100644 --- a/examples/example-exporter-opentelemetry/docker-compose.yaml +++ b/examples/example-exporter-opentelemetry/docker-compose.yaml @@ -13,7 +13,7 @@ services: #- -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 - /example-exporter-opentelemetry.jar collector: - image: otel/opentelemetry-collector-contrib:0.146.1@sha256:f6e429c1052ab50f85a7afa5f7e32f25931697751622b0e1f453d10f79a1df3c + image: otel/opentelemetry-collector-contrib:0.147.0@sha256:e7c92c715f28ff142f3bcaccd4fc5603cf4c71276ef09954a38eb4038500a5a5 network_mode: host volumes: - ./config/otelcol-config.yaml:/config.yaml From 680a9fde85ff896aa427d3a8d1fb9fe4b6499c65 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 21:56:26 +0000 Subject: [PATCH 855/870] chore(deps): update jdx/mise-action action to v3.6.2 (#1926) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [jdx/mise-action](https://redirect.github.com/jdx/mise-action) | action | patch | `v3.6.1` → `v3.6.2` | --- ### Release Notes
    jdx/mise-action (jdx/mise-action) ### [`v3.6.2`](https://redirect.github.com/jdx/mise-action/releases/tag/v3.6.2) [Compare Source](https://redirect.github.com/jdx/mise-action/compare/v3.6.1...v3.6.2) ##### What's Changed - chore(deps): update dependency prettier to v3.8.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​368](https://redirect.github.com/jdx/mise-action/pull/368) - chore(deps): update dependency [@​types/node](https://redirect.github.com/types/node) to v24.10.9 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​367](https://redirect.github.com/jdx/mise-action/pull/367) - chore(deps): update github/codeql-action digest to [`439137e`](https://redirect.github.com/jdx/mise-action/commit/439137e) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​370](https://redirect.github.com/jdx/mise-action/pull/370) - chore(deps): lock file maintenance by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​372](https://redirect.github.com/jdx/mise-action/pull/372) - chore(deps): update autofix-ci/action digest to [`7a166d7`](https://redirect.github.com/jdx/mise-action/commit/7a166d7) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​375](https://redirect.github.com/jdx/mise-action/pull/375) - chore(deps): update actions/checkout digest to [`de0fac2`](https://redirect.github.com/jdx/mise-action/commit/de0fac2) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​374](https://redirect.github.com/jdx/mise-action/pull/374) - chore(deps): lock file maintenance by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​377](https://redirect.github.com/jdx/mise-action/pull/377) - chore(deps): update github/codeql-action digest to [`b5ebac6`](https://redirect.github.com/jdx/mise-action/commit/b5ebac6) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​378](https://redirect.github.com/jdx/mise-action/pull/378) - chore(deps): update dependency [@​types/node](https://redirect.github.com/types/node) to v24.10.13 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​379](https://redirect.github.com/jdx/mise-action/pull/379) - chore(deps): update github/codeql-action digest to [`f5c2471`](https://redirect.github.com/jdx/mise-action/commit/f5c2471) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​380](https://redirect.github.com/jdx/mise-action/pull/380) - fix: move file\_hash to end of cache key template to prevent prefix matching by [@​altendky](https://redirect.github.com/altendky) in [#​384](https://redirect.github.com/jdx/mise-action/pull/384) - chore(deps): update dependency [@​types/handlebars](https://redirect.github.com/types/handlebars) to v4.1.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​381](https://redirect.github.com/jdx/mise-action/pull/381) - chore(deps): lock file maintenance by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​386](https://redirect.github.com/jdx/mise-action/pull/386) - chore(deps): update github/codeql-action digest to [`4558047`](https://redirect.github.com/jdx/mise-action/commit/4558047) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​387](https://redirect.github.com/jdx/mise-action/pull/387) - chore(deps): lock file maintenance by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​389](https://redirect.github.com/jdx/mise-action/pull/389) - chore: release v3.6.2 by [@​mise-en-dev](https://redirect.github.com/mise-en-dev) in [#​385](https://redirect.github.com/jdx/mise-action/pull/385) ##### New Contributors - [@​altendky](https://redirect.github.com/altendky) made their first contribution in [#​384](https://redirect.github.com/jdx/mise-action/pull/384) **Full Changelog**:
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/acceptance-tests.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/github-pages.yaml | 2 +- .github/workflows/java-version-matrix-tests.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/native-tests.yml | 2 +- .github/workflows/nightly-benchmarks.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test-release-build.yml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 80ba94261..70a571621 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -13,7 +13,7 @@ jobs: with: persist-credentials: false uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7c7859ce0..8e34ade37 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: persist-credentials: false - - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 141279145..ac2e68b78 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -37,7 +37,7 @@ jobs: persist-credentials: false fetch-tags: "true" fetch-depth: 0 - - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/java-version-matrix-tests.yml b/.github/workflows/java-version-matrix-tests.yml index 93416b56b..9980980c2 100644 --- a/.github/workflows/java-version-matrix-tests.yml +++ b/.github/workflows/java-version-matrix-tests.yml @@ -32,7 +32,7 @@ jobs: persist-credentials: false - name: Set up mise - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 2a112e074..eceb1ae19 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,7 +21,7 @@ jobs: fetch-depth: 0 # needed for git diff --merge-base in lint:links - name: Setup mise - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index c21752f98..926086658 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -13,7 +13,7 @@ jobs: with: persist-credentials: false uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/nightly-benchmarks.yml b/.github/workflows/nightly-benchmarks.yml index fe8cc8a1f..db2f5c2d5 100644 --- a/.github/workflows/nightly-benchmarks.yml +++ b/.github/workflows/nightly-benchmarks.yml @@ -34,7 +34,7 @@ jobs: fetch-depth: 0 - name: Setup mise - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 045ebc0be..437f2fc07 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,7 @@ jobs: with: persist-credentials: false - - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/test-release-build.yml b/.github/workflows/test-release-build.yml index d6f7be773..dbd1354f1 100644 --- a/.github/workflows/test-release-build.yml +++ b/.github/workflows/test-release-build.yml @@ -18,7 +18,7 @@ jobs: persist-credentials: false fetch-tags: "true" fetch-depth: 0 - - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 From a614601f037884b8ae7ca6454f2ffb2b5e1e4003 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 21:57:09 +0000 Subject: [PATCH 856/870] chore(deps): update dependency grafana/flint to v0.7.1 (#1928) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [grafana/flint](https://redirect.github.com/grafana/flint) | patch | `v0.7.0` → `v0.7.1` | --- ### Release Notes
    grafana/flint (grafana/flint) ### [`v0.7.1`](https://redirect.github.com/grafana/flint/releases/tag/v0.7.1) [Compare Source](https://redirect.github.com/grafana/flint/compare/v0.7.0...v0.7.1) ##### Bug Fixes - strip Scroll to Text Fragment anchors in link checks ([#​86](https://redirect.github.com/grafana/flint/issues/86)) ([b630cdf](https://redirect.github.com/grafana/flint/commit/b630cdfdd53c67f2e1f744ff89787fe18342e389))
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mise.toml b/mise.toml index c9201ab9d..94d97af77 100644 --- a/mise.toml +++ b/mise.toml @@ -53,15 +53,15 @@ run = "./mvnw install -DskipTests -Dcoverage.skip=true" # Shared lint tasks from flint (https://github.com/grafana/flint) [tasks."lint:super-linter"] description = "Run Super-Linter on the repository" -file = "https://raw.githubusercontent.com/grafana/flint/8822bdc543f28f2c7dd1f697af4df6d89768c507/tasks/lint/super-linter.sh" # v0.7.0 +file = "https://raw.githubusercontent.com/grafana/flint/0ac131d7832bd8964f6ca9e5af73207dca6a85ba/tasks/lint/super-linter.sh" # v0.7.1 [tasks."lint:links"] description = "Lint links" -file = "https://raw.githubusercontent.com/grafana/flint/8822bdc543f28f2c7dd1f697af4df6d89768c507/tasks/lint/links.sh" # v0.7.0 +file = "https://raw.githubusercontent.com/grafana/flint/0ac131d7832bd8964f6ca9e5af73207dca6a85ba/tasks/lint/links.sh" # v0.7.1 [tasks."lint:renovate-deps"] description = "Verify renovate-tracked-deps.json is up to date" -file = "https://raw.githubusercontent.com/grafana/flint/8822bdc543f28f2c7dd1f697af4df6d89768c507/tasks/lint/renovate-deps.py" # v0.7.0 +file = "https://raw.githubusercontent.com/grafana/flint/0ac131d7832bd8964f6ca9e5af73207dca6a85ba/tasks/lint/renovate-deps.py" # v0.7.1 [tasks."lint"] description = "Run all lints" From b9906c11d6b9125b642ffbe6527dfe727880090b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 02:18:00 +0000 Subject: [PATCH 857/870] chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.3.0 (#1930) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [com.diffplug.spotless:spotless-maven-plugin](https://redirect.github.com/diffplug/spotless) | `3.2.1` → `3.3.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.diffplug.spotless:spotless-maven-plugin/3.3.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.diffplug.spotless:spotless-maven-plugin/3.2.1/3.3.0?slim=true) | --- ### Release Notes
    diffplug/spotless (com.diffplug.spotless:spotless-maven-plugin) ### [`v3.3.0`](https://redirect.github.com/diffplug/spotless/blob/HEAD/CHANGES.md#330---2025-07-20) ##### Added - Allow specifying path to Biome JSON config file directly in `biome` step. Requires biome 2.x. ([#​2548](https://redirect.github.com/diffplug/spotless/pull/2548)) - `GitPrePushHookInstaller`, a reusable library component for installing a Git `pre-push` hook that runs formatter checks. ([#​2553](https://redirect.github.com/diffplug/spotless/pull/2553)) - Allow setting Eclipse XML config from a string, not only from files ([#​2361](https://redirect.github.com/diffplug/spotless/pull/2361))
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- integration-tests/it-spring-boot-smoke-test/pom.xml | 2 +- prometheus-metrics-parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/integration-tests/it-spring-boot-smoke-test/pom.xml b/integration-tests/it-spring-boot-smoke-test/pom.xml index ee653fbb4..d70d1f856 100644 --- a/integration-tests/it-spring-boot-smoke-test/pom.xml +++ b/integration-tests/it-spring-boot-smoke-test/pom.xml @@ -173,7 +173,7 @@ com.diffplug.spotless spotless-maven-plugin - 3.2.1 + 3.3.0 diff --git a/prometheus-metrics-parent/pom.xml b/prometheus-metrics-parent/pom.xml index f70317154..2dfaa1303 100644 --- a/prometheus-metrics-parent/pom.xml +++ b/prometheus-metrics-parent/pom.xml @@ -82,7 +82,7 @@ com.diffplug.spotless spotless-maven-plugin - 3.2.1 + 3.3.0 From 537fb88aae4048ab36041268f902afbbdce54a96 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 4 Mar 2026 07:40:44 +0100 Subject: [PATCH 858/870] fix: exclude standalone examples from `mise run format` (#1931) ## Summary - `mise run format` (i.e. `spotless:apply`) fails on JDK 25+ because standalone example POMs don't inherit the spotless plugin from the project parent, but are pulled into the reactor via the `examples-and-integration-tests` profile - Fix: use the fully-qualified plugin goal with profile deactivation - Add `lint:example-poms` check to catch this class of issue Relates https://github.com/prometheus/client_java/pull/1927#issuecomment-3984540872 ## Test plan - [x] `mise run format` succeeds - [x] `lint:example-poms` passes with the fix - [x] `lint:example-poms` fails when reverting the fix --------- Signed-off-by: Gregor Zeitlinger --- .mise/tasks/lint/example-poms.py | 79 ++++++++++++++++++++++++++++++++ AGENTS.md | 7 ++- mise.toml | 6 ++- 3 files changed, 89 insertions(+), 3 deletions(-) create mode 100755 .mise/tasks/lint/example-poms.py diff --git a/.mise/tasks/lint/example-poms.py b/.mise/tasks/lint/example-poms.py new file mode 100755 index 000000000..f9b5b776b --- /dev/null +++ b/.mise/tasks/lint/example-poms.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 + +# [MISE] description="Verify standalone example POMs won't break spotless" + +"""Check that standalone example modules don't break 'mise run format'. + +Example modules are intentionally standalone (no from the project) +so users can copy them. But they're included in the Maven reactor via the +examples-and-integration-tests profile. If 'mise run format' doesn't +exclude them, spotless:apply fails because the plugin isn't declared. + +This lint verifies that every standalone example POM is excluded from +the format task in mise.toml. +""" + +import re +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[3] +EXAMPLES_DIR = ROOT / "examples" + + +def find_standalone_example_poms() -> list[Path]: + """Find example pom.xml files that don't inherit from the project parent.""" + standalone = [] + for pom in sorted(EXAMPLES_DIR.rglob("pom.xml")): + if "target" in pom.parts: + continue + text = pom.read_text(encoding="utf-8") + # Check if this POM has a with the project's groupId/artifactId + has_project_parent = bool( + re.search( + r"\s*io\.prometheus\s*" + r"client_java", + text, + ) + ) + if not has_project_parent: + standalone.append(pom) + return standalone + + +def format_task_excludes_examples() -> bool: + """Check that the format task in mise.toml excludes standalone examples.""" + mise_toml = ROOT / "mise.toml" + text = mise_toml.read_text(encoding="utf-8") + # Look for the format task run command + match = re.search(r'\[tasks\.format\].*?run\s*=\s*"([^"]*)"', text, re.DOTALL) + if not match: + return False + run_cmd = match.group(1) + # The command should deactivate the examples-and-integration-tests profile + return "!examples-and-integration-tests" in run_cmd + + +def main() -> int: + standalone = find_standalone_example_poms() + if not standalone: + return 0 + + if format_task_excludes_examples(): + return 0 + + print("ERROR: Standalone example POMs found but 'mise run format'") + print("does not exclude the examples-and-integration-tests profile.") + print() + print("Standalone example POMs (no project parent):") + for pom in standalone: + print(f" {pom.relative_to(ROOT)}") + print() + print("Fix: ensure the format task in mise.toml deactivates the") + print("examples-and-integration-tests profile, e.g.:") + print(" -P '!examples-and-integration-tests'") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/AGENTS.md b/AGENTS.md index e9f7e14c4..ba4cab7a9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -23,7 +23,6 @@ mise run test-all # Format code with Google Java Format mise run format -# or directly: ./mvnw spotless:apply # Run a single test class ./mvnw test -Dtest=CounterTest \ @@ -143,6 +142,12 @@ mise run lint # or to autofix: mise run fix ``` +### Before Pushing + +**ALWAYS** run `mise run lint` before pushing to verify +all lints pass. CI runs the same checks and will fail +if any lint is violated. + ## Testing - JUnit 5 (Jupiter) with `@Test` annotations diff --git a/mise.toml b/mise.toml index 94d97af77..f02585ef4 100644 --- a/mise.toml +++ b/mise.toml @@ -20,7 +20,9 @@ env.PROTO_GENERATION = "true" [tasks.format] description = "format source code" -run = "./mvnw spotless:apply" +# Use fully-qualified plugin goal and deactivate the examples-and-integration-tests +# profile because standalone example modules don't inherit the spotless plugin. +run = "./mvnw com.diffplug.spotless:spotless-maven-plugin:apply -P '!examples-and-integration-tests'" [tasks.clean] description = "clean all modules" @@ -65,7 +67,7 @@ file = "https://raw.githubusercontent.com/grafana/flint/0ac131d7832bd8964f6ca9e5 [tasks."lint"] description = "Run all lints" -depends = ["lint:super-linter", "lint:links", "lint:bom", "lint:renovate-deps"] +depends = ["lint:super-linter", "lint:links", "lint:bom", "lint:example-poms", "lint:renovate-deps"] [tasks.fix] description = "Auto-fix lint issues" From 947f5d13c70d37e356732c179e67c4630f719ca0 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Wed, 4 Mar 2026 06:39:37 -0500 Subject: [PATCH 859/870] chore: Add automation for stale issues and PRs (#1927) --- .../issue-management-stale-action.yml | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 .github/workflows/issue-management-stale-action.yml diff --git a/.github/workflows/issue-management-stale-action.yml b/.github/workflows/issue-management-stale-action.yml new file mode 100644 index 000000000..495904d22 --- /dev/null +++ b/.github/workflows/issue-management-stale-action.yml @@ -0,0 +1,59 @@ +--- +name: Issue management - run stale action + +on: + schedule: + # hourly at minute 23 + - cron: "23 6 * * *" + workflow_dispatch: + +permissions: {} + +concurrency: + group: "stale-issues-and-prs" + cancel-in-progress: false + +jobs: + stale: + permissions: + contents: read + actions: write # because actions/stale deletes its old cache before saving new one + issues: write # for actions/stale to close stale issues + pull-requests: write # for actions/stale to close stale PRs + runs-on: ubuntu-latest + steps: + # Handle stale PRs + # - After 120 days inactive: Adds "stale" label + warning comment + # - After 30 more days inactive: Closes + - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0 + with: + days-before-issue-stale: -1 + days-before-issue-close: -1 + days-before-pr-stale: 120 + days-before-pr-close: 30 + stale-pr-label: stale + stale-pr-message: > + This PR has been marked as stale due to 120 days of inactivity. + It will be automatically closed if there is no further activity over the next 30 days. + close-pr-message: > + This PR was automatically closed due to lack of activity after being marked stale. Feel + free to reopen if you would like to continue working on it. + operations-per-run: 1000 + + # Handle stale issues + # - After 360 days (12 months) inactive: Adds "stale" label + warning comment + # - After 30 more days inactive: Closes + - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0 + with: + days-before-issue-stale: 360 + days-before-issue-close: 30 + days-before-pr-stale: -1 + days-before-pr-close: -1 + stale-issue-label: stale + stale-issue-message: > + This issue has been marked as stale due to 12 months of inactivity. + It will be automatically closed if there is no further activity over the next 30 days. + close-issue-message: > + This issue was automatically closed due to lack of activity after being marked stale. + Feel free to reopen if you would like to continue working on it. + operations-per-run: 1000 From 5bd3b7932f454f3ed2cf55f26d6e1e1908d9ad16 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Mar 2026 11:44:42 +0100 Subject: [PATCH 860/870] fix(deps): update jetty monorepo to v12.1.7 (#1932) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.eclipse.jetty.ee10:jetty-ee10-servlet](https://jetty.org) ([source](https://redirect.github.com/jetty/jetty.project)) | `12.1.6` → `12.1.7` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.eclipse.jetty.ee10:jetty-ee10-servlet/12.1.7?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.eclipse.jetty.ee10:jetty-ee10-servlet/12.1.6/12.1.7?slim=true) | | [org.eclipse.jetty:jetty-server](https://jetty.org) ([source](https://redirect.github.com/jetty/jetty.project)) | `12.1.6` → `12.1.7` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.eclipse.jetty:jetty-server/12.1.7?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.eclipse.jetty:jetty-server/12.1.6/12.1.7?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../it-exporter/it-exporter-servlet-jetty-sample/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml index ed5285769..70c3878ac 100644 --- a/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml +++ b/integration-tests/it-exporter/it-exporter-servlet-jetty-sample/pom.xml @@ -16,7 +16,7 @@ Jetty Sample for the Exporter Integration Test - 12.1.6 + 12.1.7 25 From dfdec650b9fb6d7280d1a9c34d799eae195e76a4 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 5 Mar 2026 11:57:28 +0100 Subject: [PATCH 861/870] ci: automate protobuf source generation for Renovate updates (#1920) ## Please don't merge I use this PR to test a new git helper tool ## Summary - Group `protobuf-java` and `protoc` into a single Renovate PR (`separateMajorMinor: false`) - Add workflow that triggers on `renovate/protobuf` branch to regenerate protobuf sources - Remove `mise use --pin protoc@latest` from generate task (no longer needed with grouping) ## Known limitation The workflow pushes with `GITHUB_TOKEN`, which [doesn't trigger CI re-runs](https://docs.github.com/en/actions/security-for-github-actions/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflow). After the generated commit is pushed, **close and reopen the PR** to trigger CI. Follow-up: switch to `PROMBOT_GITHUB_TOKEN` so CI re-runs automatically. ## Test plan - [ ] Close PRs #1918 and #1919, let Renovate re-create as a grouped PR - [ ] Verify the workflow triggers and regenerates protobuf sources - [ ] Verify the generated commit appears on the PR - [ ] Close and reopen the PR, verify CI runs on the generated commit --------- Signed-off-by: Gregor Zeitlinger --- .github/renovate-tracked-deps.json | 3 ++ .github/renovate.json5 | 6 +++ .github/workflows/generate-protobuf.yml | 64 +++++++++++++++++++++++++ mise.toml | 7 +-- 4 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/generate-protobuf.yml diff --git a/.github/renovate-tracked-deps.json b/.github/renovate-tracked-deps.json index 0b257110a..5e0fe8a13 100644 --- a/.github/renovate-tracked-deps.json +++ b/.github/renovate-tracked-deps.json @@ -8,6 +8,9 @@ ".github/workflows/build.yml": { "regex": ["mise"] }, + ".github/workflows/generate-protobuf.yml": { + "regex": ["mise"] + }, ".github/workflows/github-pages.yaml": { "regex": ["mise"] }, diff --git a/.github/renovate.json5 b/.github/renovate.json5 index ff4363ba5..2b6af73f7 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -32,6 +32,12 @@ description: "Ignore internal project modules", matchPackageNames: ["/^io\\.prometheus:(examples|example-.+|integration-tests|it-.+)$/"], }, + { + description: "Group protobuf-java and protoc together so generated code can be updated in one PR", + matchDepNames: ["com.google.protobuf:protobuf-java", "protoc"], + groupName: "protobuf", + separateMajorMinor: false, + }, ], customManagers: [], } diff --git a/.github/workflows/generate-protobuf.yml b/.github/workflows/generate-protobuf.yml new file mode 100644 index 000000000..9bfe252a1 --- /dev/null +++ b/.github/workflows/generate-protobuf.yml @@ -0,0 +1,64 @@ +--- +name: Generate Protobuf + +on: + push: + branches: + - "renovate/protobuf" + +permissions: {} + +jobs: + generate: + runs-on: ubuntu-24.04 + permissions: + contents: write + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + ref: ${{ github.ref }} + # zizmor: ignore[artipacked] -- needs credentials to push + persist-credentials: true + - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + with: + version: v2026.2.11 + sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a + - name: Cache local Maven repository + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Verify both protobuf deps are updated + run: | + git fetch origin main + DIFF_POM=$(git diff origin/main -- pom.xml) + DIFF_MISE=$(git diff origin/main -- mise.toml) + if ! echo "$DIFF_POM" | grep -q 'protobuf-java.version'; then + echo "::error::protobuf-java not updated in pom.xml" + exit 1 + fi + if ! echo "$DIFF_MISE" | grep -q 'protoc'; then + echo "::error::protoc not updated in mise.toml" + exit 1 + fi + - name: Generate protobuf sources + run: mise run generate + - name: Commit and push generated sources + run: | + git diff --quiet && exit 0 + UNEXPECTED=$(git diff --name-only | grep -v '\.java$' || true) + if [[ -n "$UNEXPECTED" ]]; then + echo "::error::Unexpected files changed:" + echo "$UNEXPECTED" + exit 1 + fi + # Note: GITHUB_TOKEN pushes don't trigger CI re-runs. + # Close and reopen the PR to trigger CI after this commit. + # TODO: switch to PROMBOT_GITHUB_TOKEN once it's added to this repo. + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add '*.java' + git commit -m "chore: regenerate protobuf sources" + git push diff --git a/mise.toml b/mise.toml index f02585ef4..1f1426610 100644 --- a/mise.toml +++ b/mise.toml @@ -33,11 +33,8 @@ description = "bare compile, ignoring formatting and linters" run = "./mvnw install -DskipTests -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn" [tasks.generate] -description = "bare compile, ignoring formatting and linters" -run = [ - "mise use --pin protoc@latest", - "./mvnw clean install -DskipTests -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn" -] +description = "regenerate protobuf sources" +run = "./mvnw clean install -DskipTests -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn" env.PROTO_GENERATION = "true" [tasks.test] From 77646eebfa2bc34e66caaf4e50ff3e62614b61dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Mar 2026 13:04:32 +0100 Subject: [PATCH 862/870] chore(deps): update dependency org.apache.maven.plugins:maven-shade-plugin to v3.6.2 (#1933) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.apache.maven.plugins:maven-shade-plugin](https://maven.apache.org/plugins/) ([source](https://redirect.github.com/apache/maven-shade-plugin)) | `3.6.1` → `3.6.2` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.apache.maven.plugins:maven-shade-plugin/3.6.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.apache.maven.plugins:maven-shade-plugin/3.6.1/3.6.2?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cab2680b2..a6639d959 100644 --- a/pom.xml +++ b/pom.xml @@ -173,7 +173,7 @@ maven-shade-plugin - 3.6.1 + 3.6.2 maven-failsafe-plugin From 7b9d2be0ed288bfdc31a3ce0d788cbe4834ea2f8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Mar 2026 13:04:49 +0100 Subject: [PATCH 863/870] chore(deps): update dependency org.apache.maven.plugins:maven-resources-plugin to v3.5.0 (#1935) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.apache.maven.plugins:maven-resources-plugin](https://maven.apache.org/plugins/) ([source](https://redirect.github.com/apache/maven-resources-plugin)) | `3.4.0` → `3.5.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.apache.maven.plugins:maven-resources-plugin/3.5.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.apache.maven.plugins:maven-resources-plugin/3.4.0/3.5.0?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a6639d959..c888b427f 100644 --- a/pom.xml +++ b/pom.xml @@ -144,7 +144,7 @@ maven-resources-plugin - 3.4.0 + 3.5.0 maven-compiler-plugin From e6eb2f91d6da13485a83c4eab5171f510382f800 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:32:38 +0100 Subject: [PATCH 864/870] fix(deps): update protobuf (#1936) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---|---|---| | [protoc](https://redirect.github.com/protocolbuffers/protobuf) | | major | `33.5` → `34.0` | ![age](https://developer.mend.io/api/mc/badges/age/github-releases/protocolbuffers%2fprotobuf/34.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/github-releases/protocolbuffers%2fprotobuf/33.5/34.0?slim=true) | | [com.google.protobuf:protobuf-java](https://developers.google.com/protocol-buffers/) ([source](https://redirect.github.com/protocolbuffers/protobuf)) | compile | minor | `4.33.5` → `4.34.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.protobuf:protobuf-java/4.34.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.protobuf:protobuf-java/4.33.5/4.34.0?slim=true) | --- ### Release Notes
    protocolbuffers/protobuf (protoc) ### [`v34.0`](https://redirect.github.com/protocolbuffers/protobuf/releases/tag/v34.0): Protocol Buffers v34.0 [Compare Source](https://redirect.github.com/protocolbuffers/protobuf/compare/v33.5...v34.0-rc2) ### Announcements - **This version includes potential breaking changes with major version bump to: Objective-C, Python, PHP, C++. Bazel** - \[Objective-C] Remove `-[GPBFieldDescriptor optional]` ([`3414dc1`](https://redirect.github.com/protocolbuffers/protobuf/commit/3414dc151eb4dcbdb2ca952e2589993bf7af75c4)) - \[Objective-C] Fix nullability annotations on some `GPB*Dictionary` types. ([`ea67d6d`](https://redirect.github.com/protocolbuffers/protobuf/commit/ea67d6d26a48478a567c404679e3bb99cf230d50)) - \[Objective-C] Remove `generate_minimal_imports` generation option warning ([`45b1297`](https://redirect.github.com/protocolbuffers/protobuf/commit/45b1297fdaad5a9436d0e207422168c38dc45ac4)) - \[Python] Raise errors in OSS when assign bool to int/enum field in Python Proto. ([`5b116fe`](https://redirect.github.com/protocolbuffers/protobuf/commit/5b116fe2f14f49dd0cc3b76089983717f211025c)) - \[Python] Remove deprecated UseDeprecatedLegacyJsonFieldConflicts() ([`c301c2c`](https://redirect.github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00)) - \[Python] Remove deprecated FieldDescriptor.label ([`0a8ff55`](https://redirect.github.com/protocolbuffers/protobuf/commit/0a8ff55518ea5874478ad5b26515b31d186045a9)) - \[Python] Remove float\_format/double\_format from python proto text\_format ([`e4854a1`](https://redirect.github.com/protocolbuffers/protobuf/commit/e4854a186e0bfa867d5bfa5cd850608a948fd488)) - \[Python] Remove deprecated FieldDescriptor::label() in OSS. Use is\_repeated() or is\_required() instead ([`b76faa9`](https://redirect.github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292)) - \[Python] Raise TypeError when convert non-timedelta to Duration, or convert non-datetime to Timestamp in python proto. (Original code may raise ArributeError) ([`00aaca1`](https://redirect.github.com/protocolbuffers/protobuf/commit/00aaca1b4d98954bc2933d7c8a5379ba6088124c)) - \[Python] Remove float\_precision from python proto json\_format ([`f027f1f`](https://redirect.github.com/protocolbuffers/protobuf/commit/f027f1fcd52b9d080b7ee79f4024f53cf54e0dc5)) - \[PHP] Remove deprecated PHP APIs FieldDescriptor getLabel, use IsRepeated or isRequired instead. ([`4208121`](https://redirect.github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345)) - \[PHP] Remove deprecated PHP APIs ([`9c45014`](https://redirect.github.com/protocolbuffers/protobuf/commit/9c45014099a4f7004fab6dd1278de2f4f2a393c5)) - \[PHP] Add PHP typehints for setters and remove redundant GPBUtil checks ([`aee03b7`](https://redirect.github.com/protocolbuffers/protobuf/commit/aee03b78929c02461a5f9d8e136a2a016359b0cd)) - \[PHP] support default values for editions/proto2 ([`b01099d`](https://redirect.github.com/protocolbuffers/protobuf/commit/b01099d56350551bae3da88b97bf3027274c9f17)) - \[C++] Remove deprecated UseDeprecatedLegacyJsonFieldConflicts() ([`c301c2c`](https://redirect.github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00)) - \[C++] Add a debug check that the target of CopyFrom is not a descendant of the source. ([`7a75898`](https://redirect.github.com/protocolbuffers/protobuf/commit/7a7589823d2cfaaf7994b050e98d5d553bc9b1c1)) - \[C++] Add \[\[nodiscard]] to many APIs. ([`a70115f`](https://redirect.github.com/protocolbuffers/protobuf/commit/a70115f33f9af2c4b2202c800b84837e7fe0d738)) - \[C++] Make generator headers private ([`3a2af35`](https://redirect.github.com/protocolbuffers/protobuf/commit/3a2af3510f0d454dbe3e4dc281674b61c4d20b9e)) - \[C++] Remove deprecated FieldDescriptor::has\_optional\_keyword() in OSS. Use is\_repeated() or has\_presence() instead ([`68346ec`](https://redirect.github.com/protocolbuffers/protobuf/commit/68346ec9348e932664e58c3ecdcd1478f95233a8)) - \[C++] Remove deprecated FieldDescriptor::label() in OSS. Use is\_repeated() or is\_required() instead ([`b76faa9`](https://redirect.github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292)) - \[C++] Remove deprecated FieldDescriptor::is\_optional() in OSS. Use (!is\_required() && !is\_repeated()) instead ([`9dbc5d4`](https://redirect.github.com/protocolbuffers/protobuf/commit/9dbc5d479a8e453921485d8d3de47fb3c005f1af)) - \[C++] Remove AddUnusedImportTrackFile() and ClearUnusedImportTrackFiles(). Remove PROTOBUF\_FUTURE\_RENAME\_ADD\_UNUSED\_IMPORT ([`837a2cd`](https://redirect.github.com/protocolbuffers/protobuf/commit/837a2cd1d6c75402b2503ffe7cd8aeaf25868536)) - \[C++] Removes proto2::util::MessageDifferencer::AddIgnoreCriteria that takes a raw pointer as an argument in favor of the overload that takes a unique\_ptr. Remove macro PROTOBUF\_FUTURE\_REMOVE\_ADD\_IGNORE\_CRITERIA ([`b115358`](https://redirect.github.com/protocolbuffers/protobuf/commit/b115358c64127896fed88b8b5ef5d91d86d8cbae)) - \[C++] Make the arena-enabled constructors of `RepeatedField`, `RepeatedPtrField`, and `Map` private. ([`ef890c3`](https://redirect.github.com/protocolbuffers/protobuf/commit/ef890c3d0c79398c70e047fe5dd893f460ba2336)) - \[C++] All entity names have length limit ([`2afb0dc`](https://redirect.github.com/protocolbuffers/protobuf/commit/2afb0dc390eae546056fb5b3c67b6c015b7b2617)) - \[Other] Remove deprecated flag for enabling MSVC support ([`97c979b`](https://redirect.github.com/protocolbuffers/protobuf/commit/97c979be6e0907e1051bee62584dac4594e73fa7)) - \[Bazel] Remove deprecated ProtoInfo.transitive\_imports. Use equivalent transitive\_sources instead ([`0a5c2f6`](https://redirect.github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb)) - \[Bazel] Change @​protobuf//bazel/flags:prefer\_prebuilt\_proto flag to True. ([`84a30b5`](https://redirect.github.com/protocolbuffers/protobuf/commit/84a30b561f740a1f3458c25bca99b6358c350838)) - \[Bazel] Only respect the Starlark versions of --proto\_toolchain\_for\*([`b5685c4`](https://redirect.github.com/protocolbuffers/protobuf/commit/b5685c48b52eb38b2849a10666ba981bb626fd7a)) - [Protobuf News](https://protobuf.dev/news/) may include additional announcements or pre-announcements for upcoming changes. ### Bazel - Only respect the Starlark versions of --proto\_toolchain\_for\*. This is a breaking change. ([#​26090](https://redirect.github.com/protocolbuffers/protobuf/issues/26090)) ([#​26091](https://redirect.github.com/protocolbuffers/protobuf/issues/26091)) ([`b5685c4`](https://redirect.github.com/protocolbuffers/protobuf/commit/b5685c48b52eb38b2849a10666ba981bb626fd7a)) - Breaking change: Change @​protobuf//bazel/flags:prefer\_prebuilt\_proto flag to True. ([`84a30b5`](https://redirect.github.com/protocolbuffers/protobuf/commit/84a30b561f740a1f3458c25bca99b6358c350838)) - Dropped support for Bazel 7. ([`304c9ba`](https://redirect.github.com/protocolbuffers/protobuf/commit/304c9ba5311db66a3b5dde7ed4ccafe9e0c0c893)) - Don't check for native protobuf flags if the proto fragment doesn't exist. ([#​25803](https://redirect.github.com/protocolbuffers/protobuf/issues/25803)) ([`5975f13`](https://redirect.github.com/protocolbuffers/protobuf/commit/5975f138121c6ae2a48958f2cdece711dc23bd36)) - Fix the prefer\_prebuilt\_protoc alias to use the correct originally announced location ([`732ed49`](https://redirect.github.com/protocolbuffers/protobuf/commit/732ed49b0ae330830ba08d2b761ce0a77b48cb73)) - Actually fix breaking change related to `upb_proto_reflection_library` ([`86d434b`](https://redirect.github.com/protocolbuffers/protobuf/commit/86d434bc3022db3c7069466a967362dc4592a4a2)) - Fix breaking change related to `upb_c_proto_library` and `upb_proto_reflection_library` ([`b0150c0`](https://redirect.github.com/protocolbuffers/protobuf/commit/b0150c0f13bd1467ec8cfedcc521d3b2c7d14e57)) - Add an alias to undo accidental unannounced breaking change ([`e71d379`](https://redirect.github.com/protocolbuffers/protobuf/commit/e71d37900eafaca6f553548ac2e114eaebc4f3ef)) - Moved prebuilt-related Bazel files to standard locations. ([`cfe8991`](https://redirect.github.com/protocolbuffers/protobuf/commit/cfe89912e50db8f6af2f98b30b2f26677abb5aa9)) - Refactored and rearranged Bazel rules. ([`d7dd1e1`](https://redirect.github.com/protocolbuffers/protobuf/commit/d7dd1e1bce613fa4441382e5fc43cb7f7d0ababb)) - Removed the `third_party/upb/upb/bazel` directory. ([`7efbfe1`](https://redirect.github.com/protocolbuffers/protobuf/commit/7efbfe1692cbd4c880d4e870ec8cf4b35a30e447)) - Introduce Starlark versions of Protobuf flags. ([`d1f4b2f`](https://redirect.github.com/protocolbuffers/protobuf/commit/d1f4b2f3640eb809f8413413eb2fd4b0bafb2305)) - Fix: cc\_toolchain should prefer protoc when prebuilt flag is flipped. ([#​25168](https://redirect.github.com/protocolbuffers/protobuf/issues/25168)) ([`8c857c3`](https://redirect.github.com/protocolbuffers/protobuf/commit/8c857c3a1c6a106b0a096f1c9fa504bfaca035a9)) - Breaking change: Remove deprecated ProtoInfo.transitive\_imports. Use equivalent transitive\_sources instead ([`0a5c2f6`](https://redirect.github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb)) - Feat(bazel): wire up prebuilt protoc toolchain ([#​24115](https://redirect.github.com/protocolbuffers/protobuf/issues/24115)) ([`cc23698`](https://redirect.github.com/protocolbuffers/protobuf/commit/cc23698b486e690ea2eb873cc7596a87c74a3ba6)) - Migrate `proto_descriptor_set` ([#​23369](https://redirect.github.com/protocolbuffers/protobuf/issues/23369)) ([`8d4dfdd`](https://redirect.github.com/protocolbuffers/protobuf/commit/8d4dfdd39a7a242a9ed631a6ab2192c57dd9b9c8)) ### Compiler - Removed the `third_party/upb/upb/bazel` directory. ([`7efbfe1`](https://redirect.github.com/protocolbuffers/protobuf/commit/7efbfe1692cbd4c880d4e870ec8cf4b35a30e447)) - Validate Feature Support on Custom Options ([`2985930`](https://redirect.github.com/protocolbuffers/protobuf/commit/29859301bdf0082575b6fbda22ebfb453eb518fd)) - Ruby codegen: support generation of rbs files ([#​15633](https://redirect.github.com/protocolbuffers/protobuf/issues/15633)) ([`6ebdf85`](https://redirect.github.com/protocolbuffers/protobuf/commit/6ebdf851ba78728f0aa145d38454ed9a316fb08d)) - Avoid collision name problems between a message named `Xyz` and a direct sibling enum named `XyzView` ([`eba53e8`](https://redirect.github.com/protocolbuffers/protobuf/commit/eba53e8f172b273d679759a72ce4250131ee3df1)) - Generalizing and implementing ValidateFeatureSupport for both Options and Features during proto parsing ([`ed3c571`](https://redirect.github.com/protocolbuffers/protobuf/commit/ed3c57114d8e2b47cca7697ddaa50c1b3762a6b0)) - Fix a bug with custom features outside of the `pb` package. ([`872d3ce`](https://redirect.github.com/protocolbuffers/protobuf/commit/872d3ce7a4da00d7dcec33ced20cfe45235935e8)) - Fix import option handling when include\_imports isn't set. ([`9ef9e80`](https://redirect.github.com/protocolbuffers/protobuf/commit/9ef9e80afd9bc8379d578fe67e5ab0738728c04e)) - Fix a bug in STRICT check of namespaced enums to properly check for 'reserved 1 to max' ([`1229d4a`](https://redirect.github.com/protocolbuffers/protobuf/commit/1229d4adba24c0952ab85ce96bc7b7f8a1fe6d0f)) - Prevent accidental stripping of `debug_redact` options via import option. ([`f58b098`](https://redirect.github.com/protocolbuffers/protobuf/commit/f58b098bffa7ca4045ef7773b09151a6af5d0c28)) ### C++ - Regenerated files. ([`a9bbf7a`](https://redirect.github.com/protocolbuffers/protobuf/commit/a9bbf7a248d08c57803a300fbf457bf6ded1498a)) - Dropped support for Bazel 7. ([`304c9ba`](https://redirect.github.com/protocolbuffers/protobuf/commit/304c9ba5311db66a3b5dde7ed4ccafe9e0c0c893)) - Remove direct dependency on rules\_apple ([#​25708](https://redirect.github.com/protocolbuffers/protobuf/issues/25708)) ([`e06c026`](https://redirect.github.com/protocolbuffers/protobuf/commit/e06c02619bde66ec04cf793d954c5ef47bb0d7ae)) - Fix broken `field_mask_upb_proto` and `field_mask_upb_reflection_proto` aliases ([`d808a97`](https://redirect.github.com/protocolbuffers/protobuf/commit/d808a97af081620da214b52586ee7bdc8d692463)) - Removed the `third_party/upb/upb/bazel` directory. ([`7efbfe1`](https://redirect.github.com/protocolbuffers/protobuf/commit/7efbfe1692cbd4c880d4e870ec8cf4b35a30e447)) - Validate Feature Support on Custom Options ([`2985930`](https://redirect.github.com/protocolbuffers/protobuf/commit/29859301bdf0082575b6fbda22ebfb453eb518fd)) - Auto-generate files after PR [#​25437](https://redirect.github.com/protocolbuffers/protobuf/issues/25437) ([`8be64ea`](https://redirect.github.com/protocolbuffers/protobuf/commit/8be64ea97c5bc6b3e990cd9939bf8f612b8fd088)) - Update rules\_apple dependency to support rules\_swift 3.x ([#​25437](https://redirect.github.com/protocolbuffers/protobuf/issues/25437)) ([`c0e15f2`](https://redirect.github.com/protocolbuffers/protobuf/commit/c0e15f2b6231d121e027ec07c6da9b4b3ced1adf)) - Fix UTF-8 Validation of string extensions in C++ ([`35ba5cf`](https://redirect.github.com/protocolbuffers/protobuf/commit/35ba5cf151b76079eaf42f2b56c38311284d397b)) - Improve wire compatibility of `TestAllTypes` with `TestAllExtensions`. ([`08355bd`](https://redirect.github.com/protocolbuffers/protobuf/commit/08355bdfcf4acdb61648011b4622fce9a065a5a9)) - Add EnumerateEnumValues function. ([`397d5d9`](https://redirect.github.com/protocolbuffers/protobuf/commit/397d5d99db274b379d1384814074bf7df39d32f7)) - Add conformance tests for utf8 validation. ([`e8923a8`](https://redirect.github.com/protocolbuffers/protobuf/commit/e8923a8ea72d5573f0380030a482ba440b5eb2dc)) - Disable constinit on MSVC for static library builds ([`783da0a`](https://redirect.github.com/protocolbuffers/protobuf/commit/783da0a9407f6bf890455e5ba05e861df11f600f)) - Breaking change: Make generator headers private ([`3a2af35`](https://redirect.github.com/protocolbuffers/protobuf/commit/3a2af3510f0d454dbe3e4dc281674b61c4d20b9e)) - Add bounds checking to ExtractSubrange. ([`5687acc`](https://redirect.github.com/protocolbuffers/protobuf/commit/5687acc54cab007591b60d23e7f055209df03eac)) - This CL starts failing on `[unverified_lazy = true]` on extensions, which have been ([`d2a42e7`](https://redirect.github.com/protocolbuffers/protobuf/commit/d2a42e74b9ee7d7a11c5bca95ab7b49c0d4fea27)) - Refine the conditions for the MSVC constinit workaround ([`38927bf`](https://redirect.github.com/protocolbuffers/protobuf/commit/38927bf2b93a42e2a155b49f9d610c70cc5942ec)) - Add conformance test cases about handling of google.protobuf.Empty inside any Any in JSON. ([`0f3dd06`](https://redirect.github.com/protocolbuffers/protobuf/commit/0f3dd063c6fd301cb73c3148f8ac7b570f773e94)) - Remove PROTOBUF\_CONSTEXPR to unconditionally use constexpr ([`7f431bb`](https://redirect.github.com/protocolbuffers/protobuf/commit/7f431bb54a7659725c1b5668a83c7c400ac90026)) - Add bounds checking to `DeleteSubrange`, create new helper, `RuntimeAssertInBoundsGE`, and modify `LogIndexOutOfBoundsAndAbort` to customize the message being logged. ([`71cc97c`](https://redirect.github.com/protocolbuffers/protobuf/commit/71cc97ce5a81549312d77f62c85024851702b313)) - Breaking change: Remove deprecated UseDeprecatedLegacyJsonFieldConflicts() ([`c301c2c`](https://redirect.github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00)) - Fix issue where BinaryToJson a Skip()'s failure on unknown fields was ignored instead of resulting in a parse failure. ([`2ec322e`](https://redirect.github.com/protocolbuffers/protobuf/commit/2ec322ed576f0610b94f43cc9a98211058a93770)) - Breaking change: Add \[\[nodiscard]] to many APIs. ([`a70115f`](https://redirect.github.com/protocolbuffers/protobuf/commit/a70115f33f9af2c4b2202c800b84837e7fe0d738)) - Abort on out of bounds accesses. ([`3acf23c`](https://redirect.github.com/protocolbuffers/protobuf/commit/3acf23cce5aac088a7c6585484a8b38c48448255)) - Fix JSON printing of Any of an empty message in C++Proto. ([`014f676`](https://redirect.github.com/protocolbuffers/protobuf/commit/014f676e8898e0e47919911cb759094acf607236)) - FieldMaskUtil::TrimMessage: Handle repeated messages. ([`0f109cb`](https://redirect.github.com/protocolbuffers/protobuf/commit/0f109cb7089805c438b9f64a1cc52bfdddb4bd70)) - Breaking change: Remove deprecated FieldDescriptor::label() in OSS. Use is\_repeated() or is\_required() instead ([`b76faa9`](https://redirect.github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292)) - Generalizing and implementing ValidateFeatureSupport for both Options and Features during proto parsing ([`ed3c571`](https://redirect.github.com/protocolbuffers/protobuf/commit/ed3c57114d8e2b47cca7697ddaa50c1b3762a6b0)) - Breaking change: Remove deprecated FieldDescriptor::has\_optional\_keyword() in OSS. Use is\_repeated() or has\_presence() instead ([`68346ec`](https://redirect.github.com/protocolbuffers/protobuf/commit/68346ec9348e932664e58c3ecdcd1478f95233a8)) - Test that all entity names have some limit, and that passing that limit will ([`2afb0dc`](https://redirect.github.com/protocolbuffers/protobuf/commit/2afb0dc390eae546056fb5b3c67b6c015b7b2617)) - Breaking change: Remove deprecated FieldDescriptor::is\_optional() in OSS. Use (!is\_required() && !is\_repeated()) instead ([`9dbc5d4`](https://redirect.github.com/protocolbuffers/protobuf/commit/9dbc5d479a8e453921485d8d3de47fb3c005f1af)) - Breaking change: Remove AddUnusedImportTrackFile() and ClearUnusedImportTrackFiles(). Remove PROTOBUF\_FUTURE\_RENAME\_ADD\_UNUSED\_IMPORT ([`837a2cd`](https://redirect.github.com/protocolbuffers/protobuf/commit/837a2cd1d6c75402b2503ffe7cd8aeaf25868536)) - Breaking change: Removes proto2::util::MessageDifferencer::AddIgnoreCriteria that takes a raw pointer as an argument in favor of the overload that takes a unique\_ptr. Remove macro PROTOBUF\_FUTURE\_REMOVE\_ADD\_IGNORE\_CRITERIA ([`b115358`](https://redirect.github.com/protocolbuffers/protobuf/commit/b115358c64127896fed88b8b5ef5d91d86d8cbae)) - Mark mutable repeated fields/maps as \[\[nodiscard]] ([`bc60e2e`](https://redirect.github.com/protocolbuffers/protobuf/commit/bc60e2e8077867eaf9bcc65e42d6d36a7a959a5d)) - Apply \[\[nodiscard]] to constant, non-message accessors. ([`46575f0`](https://redirect.github.com/protocolbuffers/protobuf/commit/46575f0e8d1e16aec817e77711561a983aa13355)) - Add \[\[nodiscard]] to many const methods of Message/Reflection. ([`8c981b8`](https://redirect.github.com/protocolbuffers/protobuf/commit/8c981b87ac0902c761920e9d3270242afe63ef31)) - Fix a bug with custom features outside of the `pb` package. ([`872d3ce`](https://redirect.github.com/protocolbuffers/protobuf/commit/872d3ce7a4da00d7dcec33ced20cfe45235935e8)) - Delete safe\_boundary\_check as this now supported via build flag, `--//third_party/protobuf:bounds_check_mode`. ([`3079d15`](https://redirect.github.com/protocolbuffers/protobuf/commit/3079d15176586dff25a2ea43c60921404b2dda2a)) - Add \[\[nodiscard]] to `const` message field accessors. ([`60f60d0`](https://redirect.github.com/protocolbuffers/protobuf/commit/60f60d0614fca0787f52484159cc7bf8df321e8a)) - CMake: Stop building tests by default (related to [#​20539](https://redirect.github.com/protocolbuffers/protobuf/issues/20539)) ([#​24373](https://redirect.github.com/protocolbuffers/protobuf/issues/24373)) ([`88261aa`](https://redirect.github.com/protocolbuffers/protobuf/commit/88261aab23498a853d63dfd008545f3ae6cfe86d)) - Optimize TcParser::RepeatedVarint ([`88efe88`](https://redirect.github.com/protocolbuffers/protobuf/commit/88efe88a6bceffa2ec37f172d161a8549f92b133)) - Add nodiscard to has\_*/*\_size accessors. ([`40fe103`](https://redirect.github.com/protocolbuffers/protobuf/commit/40fe103a798b52dc0c3072d249e766063db241ac)) - Enable removed arena pointers from all fields. ([`1f3fe2e`](https://redirect.github.com/protocolbuffers/protobuf/commit/1f3fe2eeb79f79fe16d6e8f870acddbf19a4d8ee)) - Fix a bug in STRICT check of namespaced enums to properly check for 'reserved 1 to max' ([`1229d4a`](https://redirect.github.com/protocolbuffers/protobuf/commit/1229d4adba24c0952ab85ce96bc7b7f8a1fe6d0f)) - Breaking change: Add a debug check that the target of CopyFrom is not a descendant of the source. ([`7a75898`](https://redirect.github.com/protocolbuffers/protobuf/commit/7a7589823d2cfaaf7994b050e98d5d553bc9b1c1)) - Breaking change: Make the arena-enabled constructors of `RepeatedField`, `RepeatedPtrField`, and `Map` private. ([`ef890c3`](https://redirect.github.com/protocolbuffers/protobuf/commit/ef890c3d0c79398c70e047fe5dd893f460ba2336)) - Update AddAlreadyReserved/AddNAlreadyReserved to use the runtime bounds checks. ([`b8e690a`](https://redirect.github.com/protocolbuffers/protobuf/commit/b8e690a381da9d2f1c55ddd044f2e50ac6db5921)) - Use \_\_builtin\_operator\_new to faciliate compiler optimizations of these allocs. ([`4624d81`](https://redirect.github.com/protocolbuffers/protobuf/commit/4624d8120afd4a71f8ada0ff66cceb04d45d5409)) - Add has\_default\_instance() to ImplicitWeakTypeHandler ([`818b8ef`](https://redirect.github.com/protocolbuffers/protobuf/commit/818b8efbaa200bcdbac329930fef4cc3ec70441a)) - Add a macro to make `RepeatedField(Arena*)` constructor private in a future release. ([`b39f10c`](https://redirect.github.com/protocolbuffers/protobuf/commit/b39f10c4a29d1a3d02906750cac889c4b1b5ee7c)) - Use \_\_builtin\_operator\_new to faciliate compiler optimizations of these allocs. ([`195da19`](https://redirect.github.com/protocolbuffers/protobuf/commit/195da19b9617eb8da9716db7408cb987faec9085)) - Change LogIndexOutOfBoundsAndAbort logging message. ([`bc0b635`](https://redirect.github.com/protocolbuffers/protobuf/commit/bc0b635b4bedca2c3e0f55dcce6971db6c024f23)) ### Java - Dropped support for Bazel 7. ([`304c9ba`](https://redirect.github.com/protocolbuffers/protobuf/commit/304c9ba5311db66a3b5dde7ed4ccafe9e0c0c893)) - Optimize TextFormatEscaper to just return the String input if it didn't need any escaping. ([`e536204`](https://redirect.github.com/protocolbuffers/protobuf/commit/e5362043d3938208e5d469e0d2116746eb0b9e09)) - Adding deprecation comment when isInitialized() accessor is deprecated ([`2732c60`](https://redirect.github.com/protocolbuffers/protobuf/commit/2732c601605ef6085ab11e7ca9e5a88531a1f66f)) - Deprecating isInitialized() if there aren't required fields ([`2607595`](https://redirect.github.com/protocolbuffers/protobuf/commit/260759508eced9f0d2a0a6b22734c691c1d834a5)) - Avoid skipping descriptors with option dependencies ([`1bc2c63`](https://redirect.github.com/protocolbuffers/protobuf/commit/1bc2c6352acadf5192c53fce4755553b656360e9)) - Remove PROTOBUF\_CONSTEXPR to unconditionally use constexpr ([`7f431bb`](https://redirect.github.com/protocolbuffers/protobuf/commit/7f431bb54a7659725c1b5668a83c7c400ac90026)) - Correctly apply JSON recursion limit when parsing an Any-of-Any. ([`33b16e8`](https://redirect.github.com/protocolbuffers/protobuf/commit/33b16e8302d9aae1f4838296443bfebbac5b4978)) - Avoid potential exceptions on serialize in the face of malformed lazy extensions. ([`531c644`](https://redirect.github.com/protocolbuffers/protobuf/commit/531c644c7d2dee3e57e25025fcd6be19191eb5c2)) - Remove unused canUseUnsafe() protected method from GeneratedMessage ([`1041d62`](https://redirect.github.com/protocolbuffers/protobuf/commit/1041d6274fa07625f17eb5b574daf624b423c9e9)) - Apply \[\[nodiscard]] to constant, non-message accessors. ([`46575f0`](https://redirect.github.com/protocolbuffers/protobuf/commit/46575f0e8d1e16aec817e77711561a983aa13355)) - Add check if sun.misc.Unsafe is present but throws on use, to use the preexisting no-Unsafe paths if it does. ([`3514901`](https://redirect.github.com/protocolbuffers/protobuf/commit/35149013bfce328da702fee003fff9e69c9e3ba4)) - Fix a bug with custom features outside of the `pb` package. ([`872d3ce`](https://redirect.github.com/protocolbuffers/protobuf/commit/872d3ce7a4da00d7dcec33ced20cfe45235935e8)) - Expose NestedInFileClass naming helpers for Java immutable. ([`0c48552`](https://redirect.github.com/protocolbuffers/protobuf/commit/0c485521586958c5b486954fb4eb1d3028688ea5)) - Add nodiscard to has\_*/*\_size accessors. ([`40fe103`](https://redirect.github.com/protocolbuffers/protobuf/commit/40fe103a798b52dc0c3072d249e766063db241ac)) - Remove defunct protected mergeFromAndMakeImmutableInternal method. This method was planned to be used by gencode but was never used in practice. ([`57770eb`](https://redirect.github.com/protocolbuffers/protobuf/commit/57770eb7b7bc75be576cd980cdd08b8579c75731)) - Fix bugs in Java Large Enums that have aliased values, and improve performance of valueOf / forNumber. ([`57338e8`](https://redirect.github.com/protocolbuffers/protobuf/commit/57338e8c6df24817f4d0fbaa30eb51f45751d59b)) - Remove unused test-only method Protobuf.registerSchemaOverride ([`8e623d1`](https://redirect.github.com/protocolbuffers/protobuf/commit/8e623d185b5ff318279127c267f9d9fad9f44a10)) - Remove unused method com.google.protobuf.Protobuf.mergeFrom(T,Reader) ([`7b6be54`](https://redirect.github.com/protocolbuffers/protobuf/commit/7b6be541e80e54bd8fed61473a806fe1ebbd4752)) - Remove unused method com.google.protobuf.Protobuf.makeImmutable ([`8fa15e9`](https://redirect.github.com/protocolbuffers/protobuf/commit/8fa15e99244e0113276c9c1ebc9654ad8e9e5963)) - Mark com.google.protobuf.Protobuf.registerSchema as private ([`db16bca`](https://redirect.github.com/protocolbuffers/protobuf/commit/db16bca5e83cb81bf75851cdb8e51864c38e2ac7)) - Remove "public" from methods in com.google.protobuf.Protobuf ([`f50c425`](https://redirect.github.com/protocolbuffers/protobuf/commit/f50c425568b1586738f5ed55211b09a2c32250c8)) - Remove unused method com.google.protobuf.Protobuf.getTotalSchemaSize() ([`dead64c`](https://redirect.github.com/protocolbuffers/protobuf/commit/dead64c507f0e5b51d381b6b6bf58af0138a1915)) - Fix large java enums not being honored on lite runtime. ([`ec3c8a7`](https://redirect.github.com/protocolbuffers/protobuf/commit/ec3c8a7856642c692b4685e2e0965d93141651ff)) ### Csharp - Regenerated files. ([`a9bbf7a`](https://redirect.github.com/protocolbuffers/protobuf/commit/a9bbf7a248d08c57803a300fbf457bf6ded1498a)) - Fix: apply recursion limits when parsing JSON well-known types with deep arrays ([`c3ddacb`](https://redirect.github.com/protocolbuffers/protobuf/commit/c3ddacbd2e67af0f7bbd463ebbe3db814bd5291b)) ### Objective-C - Adds support for 3 modes for proto extension generation: ([`0bc4192`](https://redirect.github.com/protocolbuffers/protobuf/commit/0bc41927e92cff886cd306a3545628c713cd27e5)) - Breaking change: Remove `generate_minimal_imports` generation option warning ([`45b1297`](https://redirect.github.com/protocolbuffers/protobuf/commit/45b1297fdaad5a9436d0e207422168c38dc45ac4)) - Emit hassers for oneofs in objectivec. ([`2aae07e`](https://redirect.github.com/protocolbuffers/protobuf/commit/2aae07eafa173b4d0177f11a3ede2ae33e777562)) - Breaking change: Fix nullability annotations on some `GPB*Dictionary` types. ([`ea67d6d`](https://redirect.github.com/protocolbuffers/protobuf/commit/ea67d6d26a48478a567c404679e3bb99cf230d50)) - Breaking change: Remove `-[GPBFieldDescriptor optional]` ([`3414dc1`](https://redirect.github.com/protocolbuffers/protobuf/commit/3414dc151eb4dcbdb2ca952e2589993bf7af75c4)) ### Rust - Rust protobuf: use crate name aliases to disambiguate generated dependencies ([`1f07ec6`](https://redirect.github.com/protocolbuffers/protobuf/commit/1f07ec66e374071f0f58a4a25590a51b3a8a719e)) - Avoid collision name problems between a message named `Xyz` and a direct sibling enum named `XyzView` ([`eba53e8`](https://redirect.github.com/protocolbuffers/protobuf/commit/eba53e8f172b273d679759a72ce4250131ee3df1)) - Mark MessageMut trait as `+ Send` ([`bc517b9`](https://redirect.github.com/protocolbuffers/protobuf/commit/bc517b9b92aa47fd2cf476ae0c246fdbca8e312e)) - Protobuf-rust: adapt for rules\_rust 0.67 ([`eb8d34e`](https://redirect.github.com/protocolbuffers/protobuf/commit/eb8d34e4d244d7a3ee274874dd55159840281212)) - Adapt for rules\_rust 0.66.0. ([`adb1957`](https://redirect.github.com/protocolbuffers/protobuf/commit/adb1957e315c3187fe844b7b31189d0dbd035b96)) - Expose protobuf::message\_eq() free function on the Rust Protobuf runtime api. ([`cfa8f67`](https://redirect.github.com/protocolbuffers/protobuf/commit/cfa8f677592a11651959105b5286c26b4fa76688)) - Protobuf-rust: pass DepVariantInfo's attributes explicitily ([`a42e64f`](https://redirect.github.com/protocolbuffers/protobuf/commit/a42e64f906ef715924dd2d19af3cf6b2fd82d462)) - *See also UPB changes below, which may affect Rust.* ### Python - Updated release builds to use Bazel 8 and platforms. ([`5d4ad45`](https://redirect.github.com/protocolbuffers/protobuf/commit/5d4ad457306b6562d40e43e584c6100d2d06069c)) - Add recursion guards for the following nested messages: ([#​25807](https://redirect.github.com/protocolbuffers/protobuf/issues/25807)) ([`c52dcb4`](https://redirect.github.com/protocolbuffers/protobuf/commit/c52dcb41b0901a9d96bbac6ae1db35994049e68c)) - Use the toolchain protoc by default in internal rules. ([`41ad19a`](https://redirect.github.com/protocolbuffers/protobuf/commit/41ad19a7a4204ff25bd1d37d905d9a11732309a1)) - Removed the `third_party/upb/upb/bazel` directory. ([`7efbfe1`](https://redirect.github.com/protocolbuffers/protobuf/commit/7efbfe1692cbd4c880d4e870ec8cf4b35a30e447)) - Prevent crashes when creating objects during interpreter shutdown ([`46061cb`](https://redirect.github.com/protocolbuffers/protobuf/commit/46061cb99d68d8fc0c46833b0ea8cee410bebbb8)) - Drop Python 3.9 support ([`bbc9dd9`](https://redirect.github.com/protocolbuffers/protobuf/commit/bbc9dd9e8a1bc669c8ca8cd2bd85a42bc4154255)) - Breaking change: Remove deprecated UseDeprecatedLegacyJsonFieldConflicts() ([`c301c2c`](https://redirect.github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00)) - Breaking change: Remove deprecated FieldDescriptor::label() in OSS. Use is\_repeated() or is\_required() instead ([`b76faa9`](https://redirect.github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292)) - Support more chars in type URLs in the Python text-format parser. ([`4459a20`](https://redirect.github.com/protocolbuffers/protobuf/commit/4459a202053881e6e7ab0badd515b124be626ba3)) - Breaking change: Raise errors in OSS when assign bool to int/enum field in Python Proto. ([`5b116fe`](https://redirect.github.com/protocolbuffers/protobuf/commit/5b116fe2f14f49dd0cc3b76089983717f211025c)) - Breaking change: Remove float\_format/double\_format from python proto text\_format ([`e4854a1`](https://redirect.github.com/protocolbuffers/protobuf/commit/e4854a186e0bfa867d5bfa5cd850608a948fd488)) - Two new functions in PyProto\_API to manage DescriptorPools ([`59f2a6e`](https://redirect.github.com/protocolbuffers/protobuf/commit/59f2a6e145065b23ea72039e57a2c7d8a6b04246)) - Breaking change: Remove deprecated FieldDescriptor.label ([`0a8ff55`](https://redirect.github.com/protocolbuffers/protobuf/commit/0a8ff55518ea5874478ad5b26515b31d186045a9)) - Python Proto scalar repeated numpy binding. ([`1eb4e52`](https://redirect.github.com/protocolbuffers/protobuf/commit/1eb4e5290a66ff387914f80925936d275453014f)) - Python Proto Free Threading tests/experimental ([`b8bef14`](https://redirect.github.com/protocolbuffers/protobuf/commit/b8bef14b3c262d48bc9d6458d4de11532dca8247)) - Add Python 3.14 test coverage ([`8e35431`](https://redirect.github.com/protocolbuffers/protobuf/commit/8e3543177ef10c5967daeb12456ca9a1b2638942)) - Put ABSL annotations back in descriptor ([`e2ddebe`](https://redirect.github.com/protocolbuffers/protobuf/commit/e2ddebe709ae045df876a93b0268cf459817a067)) - Free threading compat - Only access interned\_descriptors behind a mutex ([`13fe37f`](https://redirect.github.com/protocolbuffers/protobuf/commit/13fe37f25f187b7a2e79faa962df6a69bdb3d5b8)) - Breaking change: Remove float\_precision from python proto json\_format ([`f027f1f`](https://redirect.github.com/protocolbuffers/protobuf/commit/f027f1fcd52b9d080b7ee79f4024f53cf54e0dc5)) - Breaking change: Raise TypeError when convert non-timedelta to Duration, or convert non-datetime to Timestamp in python proto. (Original code may raise ArributeError) ([`00aaca1`](https://redirect.github.com/protocolbuffers/protobuf/commit/00aaca1b4d98954bc2933d7c8a5379ba6088124c)) - Python: kwargs initialization would silently swallow some errors with repeated fields. ([`412d0a2`](https://redirect.github.com/protocolbuffers/protobuf/commit/412d0a2f07e64d4123d3606b247db8789b0d5967)) - Fix Python cpp memory crash when MergeFrom Oneof. ([`26d08d5`](https://redirect.github.com/protocolbuffers/protobuf/commit/26d08d51b95fcaf8cfea9d1d12fba1ce3725502b)) ### PHP - Bump version dependencies on phpunit/phpunit to ">=11.5.0 <12.0.0" ([`4e82ce4`](https://redirect.github.com/protocolbuffers/protobuf/commit/4e82ce4c14bcdb5e447df40578d1c0d1c1312728)) - Feat(php): Add PHP typehints for setters and remove redundant GPBUtil checks ([#​25296](https://redirect.github.com/protocolbuffers/protobuf/issues/25296)) ([`aee03b7`](https://redirect.github.com/protocolbuffers/protobuf/commit/aee03b78929c02461a5f9d8e136a2a016359b0cd)) - Raise minimum php version to 8.2.0. Drop tests for 8.1. ([`5d29dca`](https://redirect.github.com/protocolbuffers/protobuf/commit/5d29dcaed075be6be00ddf669830fca7e5f0e941)) - Feat(php): support default values for editions/proto2 ([#​25161](https://redirect.github.com/protocolbuffers/protobuf/issues/25161)) ([`b01099d`](https://redirect.github.com/protocolbuffers/protobuf/commit/b01099d56350551bae3da88b97bf3027274c9f17)) - Breaking change: Remove deprecated PHP APIs FieldDescriptor getLabel, use IsRepeated or isRequired instead. ([`4208121`](https://redirect.github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345)) - Automated rollback of commit [`8f569de`](https://redirect.github.com/protocolbuffers/protobuf/commit/8f569de0baec06079a1bb6aa149215d369600975). ([`94fe944`](https://redirect.github.com/protocolbuffers/protobuf/commit/94fe944f49ff40db4a29050e98e184d06cd6cd6c)) - Breaking change: Remove deprecated PHP APIs FieldDescriptor getLabel, use IsRepeated or isRequired instead ([`cd76e67`](https://redirect.github.com/protocolbuffers/protobuf/commit/cd76e675b14d00dda5623b30835d2bc7105fccc6)) - Breaking change: Remove deprecated PHP APIs ([`9c45014`](https://redirect.github.com/protocolbuffers/protobuf/commit/9c45014099a4f7004fab6dd1278de2f4f2a393c5)) - Make PHPDoc for enum getters/setters correspond to enum class. ([#​24515](https://redirect.github.com/protocolbuffers/protobuf/issues/24515)) ([`996e04c`](https://redirect.github.com/protocolbuffers/protobuf/commit/996e04c5efe88c2f12317e70957931ad5211f128)) - Add option for PHP to emit default values for JSON. ([#​23985](https://redirect.github.com/protocolbuffers/protobuf/issues/23985)) ([`6df6c8a`](https://redirect.github.com/protocolbuffers/protobuf/commit/6df6c8aace4d6097100558992b384077811f21e9)) - Implement hasPresence helper in PHP, remove broken hasOptionalKeyword. ([`69efbc6`](https://redirect.github.com/protocolbuffers/protobuf/commit/69efbc67c5a7aac7b2d66d88796895319af799d3)) ##### PHP C-Extension - Regenerated files. ([`a9bbf7a`](https://redirect.github.com/protocolbuffers/protobuf/commit/a9bbf7a248d08c57803a300fbf457bf6ded1498a)) - Raise minimum php version to 8.2.0. Drop tests for 8.1. ([`5d29dca`](https://redirect.github.com/protocolbuffers/protobuf/commit/5d29dcaed075be6be00ddf669830fca7e5f0e941)) - Feat(php): support default values for editions/proto2 ([#​25161](https://redirect.github.com/protocolbuffers/protobuf/issues/25161)) ([`b01099d`](https://redirect.github.com/protocolbuffers/protobuf/commit/b01099d56350551bae3da88b97bf3027274c9f17)) - Breaking change: Remove deprecated PHP APIs FieldDescriptor getLabel, use IsRepeated or isRequired instead. ([`4208121`](https://redirect.github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345)) - Automated rollback of commit [`8f569de`](https://redirect.github.com/protocolbuffers/protobuf/commit/8f569de0baec06079a1bb6aa149215d369600975). ([`94fe944`](https://redirect.github.com/protocolbuffers/protobuf/commit/94fe944f49ff40db4a29050e98e184d06cd6cd6c)) - Add option for PHP to emit default values for JSON. ([#​23985](https://redirect.github.com/protocolbuffers/protobuf/issues/23985)) ([`6df6c8a`](https://redirect.github.com/protocolbuffers/protobuf/commit/6df6c8aace4d6097100558992b384077811f21e9)) - Implement hasPresence helper in PHP, remove broken hasOptionalKeyword. ([`69efbc6`](https://redirect.github.com/protocolbuffers/protobuf/commit/69efbc67c5a7aac7b2d66d88796895319af799d3)) - *See also UPB changes below, which may affect PHP C-Extension.* ### Ruby - Drop references to `x64-mingw32` since we no longer support Ruby 3.0. ([`2b927f1`](https://redirect.github.com/protocolbuffers/protobuf/commit/2b927f17bdac40fbbdb0a84572b3afa6ca278556)) - Bump gem dependencies ([`659e0f3`](https://redirect.github.com/protocolbuffers/protobuf/commit/659e0f36955bbf102d562e151c3e32d36d0cb7f9)) - Ruby codegen: support generation of rbs files ([#​15633](https://redirect.github.com/protocolbuffers/protobuf/issues/15633)) ([`6ebdf85`](https://redirect.github.com/protocolbuffers/protobuf/commit/6ebdf851ba78728f0aa145d38454ed9a316fb08d)) - Support Ruby 4.0 ([#​25051](https://redirect.github.com/protocolbuffers/protobuf/issues/25051)) ([`93f4eba`](https://redirect.github.com/protocolbuffers/protobuf/commit/93f4eba2585a84ed26c29c6120a6d2ae37b68b60)) ##### Ruby C-Extension - Regenerated files. ([`a9bbf7a`](https://redirect.github.com/protocolbuffers/protobuf/commit/a9bbf7a248d08c57803a300fbf457bf6ded1498a)) - Remove direct dependency on rules\_apple ([#​25708](https://redirect.github.com/protocolbuffers/protobuf/issues/25708)) ([`e06c026`](https://redirect.github.com/protocolbuffers/protobuf/commit/e06c02619bde66ec04cf793d954c5ef47bb0d7ae)) - *See also UPB changes below, which may affect Ruby C-Extension.* ### UPB (Python/PHP/Ruby C-Extension) - Add recursion guards for the following nested messages: ([#​25807](https://redirect.github.com/protocolbuffers/protobuf/issues/25807)) ([`c52dcb4`](https://redirect.github.com/protocolbuffers/protobuf/commit/c52dcb41b0901a9d96bbac6ae1db35994049e68c)) - Fix breaking change related to `upb_c_proto_library` and `upb_proto_reflection_library` ([`b0150c0`](https://redirect.github.com/protocolbuffers/protobuf/commit/b0150c0f13bd1467ec8cfedcc521d3b2c7d14e57)) - Removed the `third_party/upb/upb/bazel` directory. ([`7efbfe1`](https://redirect.github.com/protocolbuffers/protobuf/commit/7efbfe1692cbd4c880d4e870ec8cf4b35a30e447)) - Add conformance tests for utf8 validation. ([`e8923a8`](https://redirect.github.com/protocolbuffers/protobuf/commit/e8923a8ea72d5573f0380030a482ba440b5eb2dc)) - Added more validations of `syntax` and `edition` when parsing descriptors. ([`4c5c4b2`](https://redirect.github.com/protocolbuffers/protobuf/commit/4c5c4b2cd0049de2b2baa24b7441d039cf79d56e)) - Fixes a compiler crash when building the Windows arm64 Ruby/Python extension ([`0e84323`](https://redirect.github.com/protocolbuffers/protobuf/commit/0e84323cd6fba27c7834b5596f3ef14b7e69e7b8)) - Add BTI to branch targets when branch protection is enabled. This resolves ([`a3ca522`](https://redirect.github.com/protocolbuffers/protobuf/commit/a3ca522fc5d9e364910dee60e1f30a945ebf6762)) - Enable edition 2024 in upb generators ([`e44d421`](https://redirect.github.com/protocolbuffers/protobuf/commit/e44d4210ba0de96ef5c255ad3d04a74e75802c67)) ### Other - Replace lingering references to cpu with platform equivalents. ([`3dfa37f`](https://redirect.github.com/protocolbuffers/protobuf/commit/3dfa37fbb33ae2cd4b6382ea8c8e4399faf79ff4)) - Internal change ([#​25839](https://redirect.github.com/protocolbuffers/protobuf/issues/25839)) ([`a2ae0e5`](https://redirect.github.com/protocolbuffers/protobuf/commit/a2ae0e5f202b1d53ae1daa535bc3b61ae47bc765)) - Update the path to prebuilt\_tool\_integrity.bzl after refactor. ([`5c2ac46`](https://redirect.github.com/protocolbuffers/protobuf/commit/5c2ac46986af634a4f2e74aaa1153293761c02a7)) - Add missing `timestamp_upb_reflection_proto` alias ([`e9d6bcb`](https://redirect.github.com/protocolbuffers/protobuf/commit/e9d6bcb01f2e948db110a498c58a6f3f4fbdefc3)) - Update Ruby 4.0 test Docker image and enable continuous tests. ([`0ecc6fe`](https://redirect.github.com/protocolbuffers/protobuf/commit/0ecc6fedc99a36b7218b83a371340ae60429096d)) - Auto-generate files after cl/862026607 ([`978b556`](https://redirect.github.com/protocolbuffers/protobuf/commit/978b5566f810075a33c84319d7e2cb8d0506e5c9)) - Roll forward generate\_release\_notes = false ([`b6e3802`](https://redirect.github.com/protocolbuffers/protobuf/commit/b6e3802629594a7861137a6da718e85ebd65f7f1)) - Revert release\_ruleset version ([`88d2062`](https://redirect.github.com/protocolbuffers/protobuf/commit/88d2062ccf5df986b2fdfa6b3539a5adf61b5422)) - Fix generate\_changelog -> generate\_release\_notes ([#​25442](https://redirect.github.com/protocolbuffers/protobuf/issues/25442)) ([`68ac7b9`](https://redirect.github.com/protocolbuffers/protobuf/commit/68ac7b9c88da881c4f51aedec27d8299e4ca3e25)) - Update release\_bazel\_module.yaml ([#​25441](https://redirect.github.com/protocolbuffers/protobuf/issues/25441)) ([`1add73b`](https://redirect.github.com/protocolbuffers/protobuf/commit/1add73b5ff6d19b63f2e4bcb716a8697cdc8dee5)) - Drop Bazel 7 tests for bazel, python, partially java partially cpp. ([`b046c9a`](https://redirect.github.com/protocolbuffers/protobuf/commit/b046c9a30e3c32084dd7732dc776624f9aa8121a)) - Update protobuf's dep on bazel-skylib to version 1.9.0 ([`27e67a7`](https://redirect.github.com/protocolbuffers/protobuf/commit/27e67a7e30811dfe6247de6915abaca9f0848e10)) - Breaking change: Remove deprecated flag for enabling MSVC support ([`97c979b`](https://redirect.github.com/protocolbuffers/protobuf/commit/97c979be6e0907e1051bee62584dac4594e73fa7)) - Protobuf: update php from macos-13 to macos-15-intel ([`7b9feca`](https://redirect.github.com/protocolbuffers/protobuf/commit/7b9fecae659e31dd75e46b38ba422b498f3e4b65)) - Bazel: Remove hardcoded dependency on `//:protoc` from language runtimes ([#​19679](https://redirect.github.com/protocolbuffers/protobuf/issues/19679)) ([`4986a77`](https://redirect.github.com/protocolbuffers/protobuf/commit/4986a7722460e3163f37c98da1cb47f52c6406e1)) - Move ObjC to the next major version to be ready for release in 2026Q1. ([`31cadad`](https://redirect.github.com/protocolbuffers/protobuf/commit/31cadad0ed92060f5405de0f663181b2dc891f94))
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). --------- Signed-off-by: Gregor Zeitlinger Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .../client/it/common/ExporterTest.java | 2 +- .../it/exporter/test/DuplicateMetricsIT.java | 2 +- .../metrics/it/exporter/test/ExporterIT.java | 2 +- .../it/springboot/ApplicationTest.java | 2 +- mise.toml | 2 +- pom.xml | 2 +- .../metrics/core/metrics/CounterTest.java | 2 +- .../metrics/CustomBucketsHistogramTest.java | 2 +- .../metrics/core/metrics/HistogramTest.java | 2 +- .../metrics/core/metrics/InfoTest.java | 2 +- .../generate-protobuf.sh | 5 +- .../Metrics.java | 2006 +++++++++-------- .../expositionformats/generated/Metrics.java | 2 +- 13 files changed, 1067 insertions(+), 966 deletions(-) rename prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/{com_google_protobuf_4_33_5 => com_google_protobuf_4_34_0}/Metrics.java (88%) diff --git a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java index 91a7ed712..449a19186 100644 --- a/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java +++ b/integration-tests/it-common/src/test/java/io/prometheus/client/it/common/ExporterTest.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/DuplicateMetricsIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/DuplicateMetricsIT.java index 7530070ac..abba6ea95 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/DuplicateMetricsIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/DuplicateMetricsIT.java @@ -3,7 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import java.io.IOException; import java.net.URISyntaxException; import java.util.List; diff --git a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java index e9bcc2ee7..b01e6b3a8 100644 --- a/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java +++ b/integration-tests/it-exporter/it-exporter-test/src/test/java/io/prometheus/metrics/it/exporter/test/ExporterIT.java @@ -5,7 +5,7 @@ import com.google.common.io.Resources; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import java.io.IOException; import java.net.URISyntaxException; import java.net.URLEncoder; diff --git a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java index fed9fba6d..357c08edf 100644 --- a/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java +++ b/integration-tests/it-spring-boot-smoke-test/src/test/java/io/prometheus/metrics/it/springboot/ApplicationTest.java @@ -3,7 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.prometheus.client.it.common.ExporterTest; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import java.io.IOException; import java.net.URI; import java.util.List; diff --git a/mise.toml b/mise.toml index 1f1426610..8956116a9 100644 --- a/mise.toml +++ b/mise.toml @@ -5,7 +5,7 @@ java = "temurin-25.0.2+10.0.LTS" lychee = "0.23.0" node = "24.14.0" "npm:renovate" = "43.45.1" -protoc = "33.5" +protoc = "34.0" [env] RENOVATE_TRACKED_DEPS_EXCLUDE="github-actions,github-runners" diff --git a/pom.xml b/pom.xml index c888b427f..096fc42a7 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ UTF-8 --module-name-need-to-be-overridden-- - 4.33.5 + 4.34.0 33.5.0-jre 6.0.3 2.25.0-alpha diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java index b6d6779d7..c104e532a 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CounterTest.java @@ -9,7 +9,7 @@ import io.prometheus.metrics.config.MetricsProperties; import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.registry.PrometheusRegistry; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CustomBucketsHistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CustomBucketsHistogramTest.java index 347f775cf..668135f2e 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CustomBucketsHistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/CustomBucketsHistogramTest.java @@ -5,7 +5,7 @@ import io.prometheus.metrics.config.EscapingScheme; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.model.snapshots.ClassicHistogramBucket; import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java index c67c9dd42..69518205d 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/HistogramTest.java @@ -13,7 +13,7 @@ import io.prometheus.metrics.core.datapoints.DistributionDataPoint; import io.prometheus.metrics.core.exemplars.ExemplarSamplerConfigTestUtil; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.*; diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java index 0681f73e1..61cd38805 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/InfoTest.java @@ -5,7 +5,7 @@ import io.prometheus.metrics.config.EscapingScheme; import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter; -import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics; +import io.prometheus.metrics.expositionformats.generated.Metrics; import io.prometheus.metrics.expositionformats.internal.PrometheusProtobufWriterImpl; import io.prometheus.metrics.expositionformats.internal.ProtobufUtil; import io.prometheus.metrics.model.snapshots.Labels; diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index 323cf033c..f1526fb1c 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -21,9 +21,10 @@ mkdir -p $PROTO_DIR OLD_PACKAGE=$(sed -nE 's/.*extends (io\.prometheus\.metrics\.expositionformats\.generated\.[^ ]*?)\.Metrics.*/\1/p' src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java) PACKAGE="io.prometheus.metrics.expositionformats.generated.com_google_protobuf_${PROTOBUF_VERSION_STRING}" +SUPERCLASS_FILE="src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java" if [[ $OLD_PACKAGE != "$PACKAGE" ]]; then - echo "Replacing package $OLD_PACKAGE with $PACKAGE in all java files" - find .. -type f -name "*.java" -exec sed -i "s/$OLD_PACKAGE/$PACKAGE/g" {} + + echo "Replacing package $OLD_PACKAGE with $PACKAGE in $SUPERCLASS_FILE" + sed -i "s/$OLD_PACKAGE/$PACKAGE/g" "$SUPERCLASS_FILE" fi curl -sL https://raw.githubusercontent.com/prometheus/client_model/master/io/prometheus/client/metrics.proto -o $PROTO_DIR/metrics.proto diff --git a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_33_5/Metrics.java b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_34_0/Metrics.java similarity index 88% rename from prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_33_5/Metrics.java rename to prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_34_0/Metrics.java index 5f4788c14..21fe43af7 100644 --- a/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_33_5/Metrics.java +++ b/prometheus-metrics-exposition-formats/src/main/generated/io/prometheus/metrics/expositionformats/generated/com_google_protobuf_4_34_0/Metrics.java @@ -2,9 +2,9 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: src/main/protobuf/metrics.proto -// Protobuf Java Version: 4.33.5 +// Protobuf Java Version: 4.34.0 -package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5; +package io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0; @com.google.protobuf.Generated public class Metrics extends com.google.protobuf.GeneratedFile { @@ -13,8 +13,8 @@ protected Metrics() {} com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 33, - /* patch= */ 5, + /* minor= */ 34, + /* patch= */ 0, /* suffix= */ "", "Metrics"); } @@ -86,8 +86,8 @@ public enum MetricType com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 33, - /* patch= */ 5, + /* minor= */ 34, + /* patch= */ 0, /* suffix= */ "", "MetricType"); } @@ -185,7 +185,7 @@ public MetricType findValueByNumber(int number) { public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { - return getDescriptor().getValues().get(ordinal()); + return getDescriptor().getValue(ordinal()); } public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { @@ -193,7 +193,7 @@ public MetricType findValueByNumber(int number) { } public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.getDescriptor().getEnumTypes().get(0); + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.getDescriptor().getEnumType(0); } private static final MetricType[] VALUES = values(); @@ -266,8 +266,8 @@ public static final class LabelPair extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 33, - /* patch= */ 5, + /* minor= */ 34, + /* patch= */ 0, /* suffix= */ "", "LabelPair"); } @@ -282,15 +282,20 @@ private LabelPair() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder.class); } private int bitField0_; @@ -437,10 +442,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair) obj; if (hasName() != other.hasName()) return false; if (hasName()) { @@ -476,44 +481,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -521,26 +526,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -553,7 +558,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -574,21 +579,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.newBuilder() private Builder() { } @@ -610,17 +615,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -628,14 +633,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -651,16 +656,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.getDefaultInstance()) return this; if (other.hasName()) { name_ = other.name_; bitField0_ |= 0x00000001; @@ -888,12 +893,12 @@ public Builder setValueBytes( } // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -929,7 +934,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -962,8 +967,8 @@ public static final class Gauge extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 33, - /* patch= */ 5, + /* minor= */ 34, + /* patch= */ 0, /* suffix= */ "", "Gauge"); } @@ -976,15 +981,20 @@ private Gauge() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.Builder.class); } private int bitField0_; @@ -1047,10 +1057,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -1079,44 +1089,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1124,26 +1134,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1156,7 +1166,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1177,21 +1187,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.GaugeOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.GaugeOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.newBuilder() private Builder() { } @@ -1212,17 +1222,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1230,14 +1240,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1249,16 +1259,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -1354,12 +1364,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -1395,7 +1405,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -1425,11 +1435,11 @@ public interface CounterOrBuilder extends * optional .io.prometheus.client.Exemplar exemplar = 2; * @return The exemplar. */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getExemplar(); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getExemplar(); /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder getExemplarOrBuilder(); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder(); /** * optional .google.protobuf.Timestamp created_timestamp = 3; @@ -1458,8 +1468,8 @@ public static final class Counter extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 33, - /* patch= */ 5, + /* minor= */ 34, + /* patch= */ 0, /* suffix= */ "", "Counter"); } @@ -1472,15 +1482,20 @@ private Counter() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.Builder.class); } private int bitField0_; @@ -1504,7 +1519,7 @@ public double getValue() { } public static final int EXEMPLAR_FIELD_NUMBER = 2; - private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar exemplar_; + private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar exemplar_; /** * optional .io.prometheus.client.Exemplar exemplar = 2; * @return Whether the exemplar field is set. @@ -1518,15 +1533,15 @@ public boolean hasExemplar() { * @return The exemplar. */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getExemplar() { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance() : exemplar_; + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getExemplar() { + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance() : exemplar_; + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; } public static final int CREATED_TIMESTAMP_FIELD_NUMBER = 3; @@ -1609,10 +1624,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -1659,44 +1674,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1704,26 +1719,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1736,7 +1751,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1757,21 +1772,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.CounterOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.CounterOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -1809,17 +1824,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Counter_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1827,14 +1842,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1858,16 +1873,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -1979,9 +1994,9 @@ public Builder clearValue() { return this; } - private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar exemplar_; + private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar exemplar_; private com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder> exemplarBuilder_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder> exemplarBuilder_; /** * optional .io.prometheus.client.Exemplar exemplar = 2; * @return Whether the exemplar field is set. @@ -1993,9 +2008,9 @@ public boolean hasExemplar() { * optional .io.prometheus.client.Exemplar exemplar = 2; * @return The exemplar. */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getExemplar() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getExemplar() { if (exemplarBuilder_ == null) { - return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance() : exemplar_; + return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; } else { return exemplarBuilder_.getMessage(); } @@ -2003,7 +2018,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar value) { + public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar value) { if (exemplarBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -2020,7 +2035,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com * optional .io.prometheus.client.Exemplar exemplar = 2; */ public Builder setExemplar( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder builderForValue) { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder builderForValue) { if (exemplarBuilder_ == null) { exemplar_ = builderForValue.build(); } else { @@ -2033,11 +2048,11 @@ public Builder setExemplar( /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar value) { + public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar value) { if (exemplarBuilder_ == null) { if (((bitField0_ & 0x00000002) != 0) && exemplar_ != null && - exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance()) { + exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance()) { getExemplarBuilder().mergeFrom(value); } else { exemplar_ = value; @@ -2067,7 +2082,7 @@ public Builder clearExemplar() { /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder getExemplarBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder getExemplarBuilder() { bitField0_ |= 0x00000002; onChanged(); return internalGetExemplarFieldBuilder().getBuilder(); @@ -2075,23 +2090,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() { if (exemplarBuilder_ != null) { return exemplarBuilder_.getMessageOrBuilder(); } else { return exemplar_ == null ? - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance() : exemplar_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance() : exemplar_; } } /** * optional .io.prometheus.client.Exemplar exemplar = 2; */ private com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder> + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder> internalGetExemplarFieldBuilder() { if (exemplarBuilder_ == null) { exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder>( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder>( getExemplar(), getParentForChildren(), isClean()); @@ -2225,12 +2240,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -2266,7 +2281,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -2310,8 +2325,8 @@ public static final class Quantile extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 33, - /* patch= */ 5, + /* minor= */ 34, + /* patch= */ 0, /* suffix= */ "", "Quantile"); } @@ -2324,15 +2339,20 @@ private Quantile() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder.class); } private int bitField0_; @@ -2421,10 +2441,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile) obj; if (hasQuantile() != other.hasQuantile()) return false; if (hasQuantile()) { @@ -2464,44 +2484,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2509,26 +2529,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2541,7 +2561,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -2562,21 +2582,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.QuantileOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.QuantileOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.newBuilder() private Builder() { } @@ -2598,17 +2618,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -2616,14 +2636,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -2639,16 +2659,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.getDefaultInstance()) return this; if (other.hasQuantile()) { setQuantile(other.getQuantile()); } @@ -2792,12 +2812,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -2833,7 +2853,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -2868,12 +2888,12 @@ public interface SummaryOrBuilder extends /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - java.util.List + java.util.List getQuantileList(); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile getQuantile(int index); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile getQuantile(int index); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @@ -2881,12 +2901,12 @@ public interface SummaryOrBuilder extends /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - java.util.List + java.util.List getQuantileOrBuilderList(); /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.QuantileOrBuilder getQuantileOrBuilder( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index); /** @@ -2916,8 +2936,8 @@ public static final class Summary extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 33, - /* patch= */ 5, + /* minor= */ 34, + /* patch= */ 0, /* suffix= */ "", "Summary"); } @@ -2931,15 +2951,20 @@ private Summary() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.Builder.class); } private int bitField0_; @@ -2983,19 +3008,19 @@ public double getSampleSum() { public static final int QUANTILE_FIELD_NUMBER = 3; @SuppressWarnings("serial") - private java.util.List quantile_; + private java.util.List quantile_; /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public java.util.List getQuantileList() { + public java.util.List getQuantileList() { return quantile_; } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public java.util.List + public java.util.List getQuantileOrBuilderList() { return quantile_; } @@ -3010,14 +3035,14 @@ public int getQuantileCount() { * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile getQuantile(int index) { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile getQuantile(int index) { return quantile_.get(index); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.QuantileOrBuilder getQuantileOrBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index) { return quantile_.get(index); } @@ -3091,10 +3116,15 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeDoubleSize(2, sampleSum_); } - for (int i = 0; i < quantile_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, quantile_.get(i)); - } + + { + final int count = quantile_.size(); + for (int i = 0; i < count; i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSizeNoTag(quantile_.get(i)); + } + size += 1 * count; + } if (((bitField0_ & 0x00000004) != 0)) { size += com.google.protobuf.CodedOutputStream .computeMessageSize(4, getCreatedTimestamp()); @@ -3109,10 +3139,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary) obj; if (hasSampleCount() != other.hasSampleCount()) return false; if (hasSampleCount()) { @@ -3166,44 +3196,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3211,26 +3241,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3243,7 +3273,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -3264,21 +3294,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.SummaryOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.SummaryOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -3319,17 +3349,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Summary_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -3337,15 +3367,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary(this); buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary result) { + private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary result) { if (quantileBuilder_ == null) { if (((bitField0_ & 0x00000004) != 0)) { quantile_ = java.util.Collections.unmodifiableList(quantile_); @@ -3357,7 +3387,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats. } } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -3379,16 +3409,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.getDefaultInstance()) return this; if (other.hasSampleCount()) { setSampleCount(other.getSampleCount()); } @@ -3461,9 +3491,9 @@ public Builder mergeFrom( break; } // case 17 case 26: { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile m = + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile m = input.readMessage( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.parser(), + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.parser(), extensionRegistry); if (quantileBuilder_ == null) { ensureQuantileIsMutable(); @@ -3577,22 +3607,22 @@ public Builder clearSampleSum() { return this; } - private java.util.List quantile_ = + private java.util.List quantile_ = java.util.Collections.emptyList(); private void ensureQuantileIsMutable() { if (!((bitField0_ & 0x00000004) != 0)) { - quantile_ = new java.util.ArrayList(quantile_); + quantile_ = new java.util.ArrayList(quantile_); bitField0_ |= 0x00000004; } } private com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.QuantileOrBuilder> quantileBuilder_; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.QuantileOrBuilder> quantileBuilder_; /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List getQuantileList() { + public java.util.List getQuantileList() { if (quantileBuilder_ == null) { return java.util.Collections.unmodifiableList(quantile_); } else { @@ -3612,7 +3642,7 @@ public int getQuantileCount() { /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile getQuantile(int index) { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile getQuantile(int index) { if (quantileBuilder_ == null) { return quantile_.get(index); } else { @@ -3623,7 +3653,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder setQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile value) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3640,7 +3670,7 @@ public Builder setQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder setQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder builderForValue) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.set(index, builderForValue.build()); @@ -3653,7 +3683,7 @@ public Builder setQuantile( /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile value) { + public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3670,7 +3700,7 @@ public Builder addQuantile(io.prometheus.metrics.expositionformats.generated.com * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile value) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile value) { if (quantileBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -3687,7 +3717,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder builderForValue) { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.add(builderForValue.build()); @@ -3701,7 +3731,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addQuantile( - int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder builderForValue) { + int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder builderForValue) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); quantile_.add(index, builderForValue.build()); @@ -3715,7 +3745,7 @@ public Builder addQuantile( * repeated .io.prometheus.client.Quantile quantile = 3; */ public Builder addAllQuantile( - java.lang.Iterable values) { + java.lang.Iterable values) { if (quantileBuilder_ == null) { ensureQuantileIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( @@ -3755,14 +3785,14 @@ public Builder removeQuantile(int index) { /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder getQuantileBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder getQuantileBuilder( int index) { return internalGetQuantileFieldBuilder().getBuilder(index); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.QuantileOrBuilder getQuantileOrBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.QuantileOrBuilder getQuantileOrBuilder( int index) { if (quantileBuilder_ == null) { return quantile_.get(index); } else { @@ -3772,7 +3802,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List + public java.util.List getQuantileOrBuilderList() { if (quantileBuilder_ != null) { return quantileBuilder_.getMessageOrBuilderList(); @@ -3783,31 +3813,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder addQuantileBuilder() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder addQuantileBuilder() { return internalGetQuantileFieldBuilder().addBuilder( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.getDefaultInstance()); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.getDefaultInstance()); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder addQuantileBuilder( + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder addQuantileBuilder( int index) { return internalGetQuantileFieldBuilder().addBuilder( - index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.getDefaultInstance()); + index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.getDefaultInstance()); } /** * repeated .io.prometheus.client.Quantile quantile = 3; */ - public java.util.List + public java.util.List getQuantileBuilderList() { return internalGetQuantileFieldBuilder().getBuilderList(); } private com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.QuantileOrBuilder> + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.QuantileOrBuilder> internalGetQuantileFieldBuilder() { if (quantileBuilder_ == null) { quantileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.QuantileOrBuilder>( + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Quantile.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.QuantileOrBuilder>( quantile_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), @@ -3942,12 +3972,12 @@ public com.google.protobuf.TimestampOrBuilder getCreatedTimestampOrBuilder() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -3983,7 +4013,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -4016,8 +4046,8 @@ public static final class Untyped extends com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, - /* minor= */ 33, - /* patch= */ 5, + /* minor= */ 34, + /* patch= */ 0, /* suffix= */ "", "Untyped"); } @@ -4030,15 +4060,20 @@ private Untyped() { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.Builder.class); } private int bitField0_; @@ -4101,10 +4136,10 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped)) { + if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped)) { return super.equals(obj); } - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped) obj; + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped) obj; if (hasValue() != other.hasValue()) return false; if (hasValue()) { @@ -4133,44 +4168,44 @@ public int hashCode() { return hash; } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseFrom(byte[] data) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -4178,26 +4213,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseDelimitedFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessage .parseWithIOException(PARSER, input); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped parseFrom( + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -4210,7 +4245,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped prototype) { + public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -4231,21 +4266,21 @@ protected Builder newBuilderForType( public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped) - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.UntypedOrBuilder { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.UntypedOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.Builder.class); + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.Builder.class); } - // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.newBuilder() + // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.newBuilder() private Builder() { } @@ -4266,17 +4301,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped getDefaultInstanceForType() { - return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.getDefaultInstance(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped getDefaultInstanceForType() { + return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.getDefaultInstance(); } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped build() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped result = buildPartial(); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped build() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -4284,14 +4319,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3 } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped buildPartial() { - io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped(this); + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped buildPartial() { + io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped result) { + private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -4303,16 +4338,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped) { - return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped)other); + if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped) { + return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped other) { - if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.getDefaultInstance()) return this; + public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped other) { + if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.getDefaultInstance()) return this; if (other.hasValue()) { setValue(other.getValue()); } @@ -4408,12 +4443,12 @@ public Builder clearValue() { } // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped) - private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped DEFAULT_INSTANCE; + private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped(); + DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped(); } - public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped getDefaultInstance() { + public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped getDefaultInstance() { return DEFAULT_INSTANCE; } @@ -4449,7 +4484,7 @@ public com.google.protobuf.Parser getParserForType() { } @java.lang.Override - public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped getDefaultInstanceForType() { + public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -4507,7 +4542,7 @@ public interface HistogramOrBuilder extends * * repeated .io.prometheus.client.Bucket bucket = 3; */ - java.util.List + java.util.List getBucketList(); /** *
    @@ -4516,7 +4551,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket getBucket(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket getBucket(int index);
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -4532,7 +4567,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    java.util.List 
    +    java.util.List 
             getBucketOrBuilderList();
         /**
          * 
    @@ -4541,7 +4576,7 @@ public interface HistogramOrBuilder extends
          *
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index);
     
         /**
    @@ -4650,7 +4685,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanList();
         /**
          * 
    @@ -4659,7 +4694,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan getNegativeSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan getNegativeSpan(int index);
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -4675,7 +4710,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    java.util.List 
    +    java.util.List 
             getNegativeSpanOrBuilderList();
         /**
          * 
    @@ -4684,7 +4719,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index);
     
         /**
    @@ -4761,7 +4796,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanList();
         /**
          * 
    @@ -4773,7 +4808,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan getPositiveSpan(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan getPositiveSpan(int index);
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -4795,7 +4830,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    java.util.List 
    +    java.util.List 
             getPositiveSpanOrBuilderList();
         /**
          * 
    @@ -4807,7 +4842,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index);
     
         /**
    @@ -4881,7 +4916,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsList();
         /**
          * 
    @@ -4890,7 +4925,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getExemplars(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getExemplars(int index);
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -4906,7 +4941,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    java.util.List 
    +    java.util.List 
             getExemplarsOrBuilderList();
         /**
          * 
    @@ -4915,7 +4950,7 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          *
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index);
       }
       /**
    @@ -4930,8 +4965,8 @@ public static final class Histogram extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 33,
    -        /* patch= */ 5,
    +        /* minor= */ 34,
    +        /* patch= */ 0,
             /* suffix= */ "",
             "Histogram");
         }
    @@ -4952,15 +4987,20 @@ private Histogram() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +    }
    +
    +    @java.lang.Override
    +    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.Builder.class);
         }
     
         private int bitField0_;
    @@ -5031,7 +5071,7 @@ public double getSampleSum() {
     
         public static final int BUCKET_FIELD_NUMBER = 3;
         @SuppressWarnings("serial")
    -    private java.util.List bucket_;
    +    private java.util.List bucket_;
         /**
          * 
          * Buckets for the conventional histogram.
    @@ -5040,7 +5080,7 @@ public double getSampleSum() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List getBucketList() {
    +    public java.util.List getBucketList() {
           return bucket_;
         }
         /**
    @@ -5051,7 +5091,7 @@ public java.util.Listrepeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getBucketOrBuilderList() {
           return bucket_;
         }
    @@ -5074,7 +5114,7 @@ public int getBucketCount() {
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket getBucket(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket getBucket(int index) {
           return bucket_.get(index);
         }
         /**
    @@ -5085,7 +5125,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.Bucket bucket = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketOrBuilder getBucketOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketOrBuilder getBucketOrBuilder(
             int index) {
           return bucket_.get(index);
         }
    @@ -5234,7 +5274,7 @@ public double getZeroCountFloat() {
     
         public static final int NEGATIVE_SPAN_FIELD_NUMBER = 9;
         @SuppressWarnings("serial")
    -    private java.util.List negativeSpan_;
    +    private java.util.List negativeSpan_;
         /**
          * 
          * Negative buckets for the native histogram.
    @@ -5243,7 +5283,7 @@ public double getZeroCountFloat() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List getNegativeSpanList() {
    +    public java.util.List getNegativeSpanList() {
           return negativeSpan_;
         }
         /**
    @@ -5254,7 +5294,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getNegativeSpanOrBuilderList() {
           return negativeSpan_;
         }
    @@ -5277,7 +5317,7 @@ public int getNegativeSpanCount() {
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan getNegativeSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan getNegativeSpan(int index) {
           return negativeSpan_.get(index);
         }
         /**
    @@ -5288,7 +5328,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.BucketSpan negative_span = 9;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
             int index) {
           return negativeSpan_.get(index);
         }
    @@ -5383,7 +5423,7 @@ public double getNegativeCount(int index) {
     
         public static final int POSITIVE_SPAN_FIELD_NUMBER = 12;
         @SuppressWarnings("serial")
    -    private java.util.List positiveSpan_;
    +    private java.util.List positiveSpan_;
         /**
          * 
          * Positive buckets for the native histogram.
    @@ -5395,7 +5435,7 @@ public double getNegativeCount(int index) {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List getPositiveSpanList() {
    +    public java.util.List getPositiveSpanList() {
           return positiveSpan_;
         }
         /**
    @@ -5409,7 +5449,7 @@ public java.util.Listrepeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getPositiveSpanOrBuilderList() {
           return positiveSpan_;
         }
    @@ -5438,7 +5478,7 @@ public int getPositiveSpanCount() {
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan getPositiveSpan(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan getPositiveSpan(int index) {
           return positiveSpan_.get(index);
         }
         /**
    @@ -5452,7 +5492,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.BucketSpan positive_span = 12;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
             int index) {
           return positiveSpan_.get(index);
         }
    @@ -5547,7 +5587,7 @@ public double getPositiveCount(int index) {
     
         public static final int EXEMPLARS_FIELD_NUMBER = 16;
         @SuppressWarnings("serial")
    -    private java.util.List exemplars_;
    +    private java.util.List exemplars_;
         /**
          * 
          * Only used for native histograms. These exemplars MUST have a timestamp.
    @@ -5556,7 +5596,7 @@ public double getPositiveCount(int index) {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List getExemplarsList() {
    +    public java.util.List getExemplarsList() {
           return exemplars_;
         }
         /**
    @@ -5567,7 +5607,7 @@ public java.util.Listrepeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getExemplarsOrBuilderList() {
           return exemplars_;
         }
    @@ -5590,7 +5630,7 @@ public int getExemplarsCount() {
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getExemplars(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getExemplars(int index) {
           return exemplars_.get(index);
         }
         /**
    @@ -5601,7 +5641,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
          * repeated .io.prometheus.client.Exemplar exemplars = 16;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
             int index) {
           return exemplars_.get(index);
         }
    @@ -5685,10 +5725,15 @@ public int getSerializedSize() {
             size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(2, sampleSum_);
           }
    -      for (int i = 0; i < bucket_.size(); i++) {
    -        size += com.google.protobuf.CodedOutputStream
    -          .computeMessageSize(3, bucket_.get(i));
    -      }
    +
    +          {
    +            final int count = bucket_.size();
    +            for (int i = 0; i < count; i++) {
    +              size += com.google.protobuf.CodedOutputStream
    +                .computeMessageSizeNoTag(bucket_.get(i));
    +            }
    +            size += 1 * count;
    +          }
           if (((bitField0_ & 0x00000002) != 0)) {
             size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(4, sampleCountFloat_);
    @@ -5709,10 +5754,15 @@ public int getSerializedSize() {
             size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(8, zeroCountFloat_);
           }
    -      for (int i = 0; i < negativeSpan_.size(); i++) {
    -        size += com.google.protobuf.CodedOutputStream
    -          .computeMessageSize(9, negativeSpan_.get(i));
    -      }
    +
    +          {
    +            final int count = negativeSpan_.size();
    +            for (int i = 0; i < count; i++) {
    +              size += com.google.protobuf.CodedOutputStream
    +                .computeMessageSizeNoTag(negativeSpan_.get(i));
    +            }
    +            size += 1 * count;
    +          }
           {
             int dataSize = 0;
             for (int i = 0; i < negativeDelta_.size(); i++) {
    @@ -5728,10 +5778,15 @@ public int getSerializedSize() {
             size += dataSize;
             size += 1 * getNegativeCountList().size();
           }
    -      for (int i = 0; i < positiveSpan_.size(); i++) {
    -        size += com.google.protobuf.CodedOutputStream
    -          .computeMessageSize(12, positiveSpan_.get(i));
    -      }
    +
    +          {
    +            final int count = positiveSpan_.size();
    +            for (int i = 0; i < count; i++) {
    +              size += com.google.protobuf.CodedOutputStream
    +                .computeMessageSizeNoTag(positiveSpan_.get(i));
    +            }
    +            size += 1 * count;
    +          }
           {
             int dataSize = 0;
             for (int i = 0; i < positiveDelta_.size(); i++) {
    @@ -5751,10 +5806,15 @@ public int getSerializedSize() {
             size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(15, getCreatedTimestamp());
           }
    -      for (int i = 0; i < exemplars_.size(); i++) {
    -        size += com.google.protobuf.CodedOutputStream
    -          .computeMessageSize(16, exemplars_.get(i));
    -      }
    +
    +          {
    +            final int count = exemplars_.size();
    +            for (int i = 0; i < count; i++) {
    +              size += com.google.protobuf.CodedOutputStream
    +                .computeMessageSizeNoTag(exemplars_.get(i));
    +            }
    +            size += 2 * count;
    +          }
           size += getUnknownFields().getSerializedSize();
           memoizedSize = size;
           return size;
    @@ -5765,10 +5825,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram) obj;
     
           if (hasSampleCount() != other.hasSampleCount()) return false;
           if (hasSampleCount()) {
    @@ -5916,44 +5976,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5961,26 +6021,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -5993,7 +6053,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -6014,21 +6074,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.HistogramOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.HistogramOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -6102,17 +6162,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -6120,15 +6180,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram result) {
             if (bucketBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 bucket_ = java.util.Collections.unmodifiableList(bucket_);
    @@ -6167,7 +6227,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -6225,16 +6285,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.getDefaultInstance()) return this;
             if (other.hasSampleCount()) {
               setSampleCount(other.getSampleCount());
             }
    @@ -6444,9 +6504,9 @@ public Builder mergeFrom(
                     break;
                   } // case 17
                   case 26: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.parser(),
                             extensionRegistry);
                     if (bucketBuilder_ == null) {
                       ensureBucketIsMutable();
    @@ -6482,9 +6542,9 @@ public Builder mergeFrom(
                     break;
                   } // case 65
                   case 74: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (negativeSpanBuilder_ == null) {
                       ensureNegativeSpanIsMutable();
    @@ -6528,9 +6588,9 @@ public Builder mergeFrom(
                     break;
                   } // case 90
                   case 98: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.parser(),
                             extensionRegistry);
                     if (positiveSpanBuilder_ == null) {
                       ensurePositiveSpanIsMutable();
    @@ -6581,9 +6641,9 @@ public Builder mergeFrom(
                     break;
                   } // case 122
                   case 130: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.parser(),
                             extensionRegistry);
                     if (exemplarsBuilder_ == null) {
                       ensureExemplarsIsMutable();
    @@ -6746,17 +6806,17 @@ public Builder clearSampleSum() {
             return this;
           }
     
    -      private java.util.List bucket_ =
    +      private java.util.List bucket_ =
             java.util.Collections.emptyList();
           private void ensureBucketIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          bucket_ = new java.util.ArrayList(bucket_);
    +          bucket_ = new java.util.ArrayList(bucket_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketOrBuilder> bucketBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketOrBuilder> bucketBuilder_;
     
           /**
            * 
    @@ -6765,7 +6825,7 @@ private void ensureBucketIsMutable() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List getBucketList() {
    +      public java.util.List getBucketList() {
             if (bucketBuilder_ == null) {
               return java.util.Collections.unmodifiableList(bucket_);
             } else {
    @@ -6793,7 +6853,7 @@ public int getBucketCount() {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket getBucket(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket getBucket(int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);
             } else {
    @@ -6808,7 +6868,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6829,7 +6889,7 @@ public Builder setBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder setBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.set(index, builderForValue.build());
    @@ -6846,7 +6906,7 @@ public Builder setBucket(
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket value) {
    +      public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6867,7 +6927,7 @@ public Builder addBucket(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket value) {
             if (bucketBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -6888,7 +6948,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(builderForValue.build());
    @@ -6906,7 +6966,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addBucket(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder builderForValue) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               bucket_.add(index, builderForValue.build());
    @@ -6924,7 +6984,7 @@ public Builder addBucket(
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
           public Builder addAllBucket(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (bucketBuilder_ == null) {
               ensureBucketIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -6976,7 +7036,7 @@ public Builder removeBucket(int index) {
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder getBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder getBucketBuilder(
               int index) {
             return internalGetBucketFieldBuilder().getBuilder(index);
           }
    @@ -6987,7 +7047,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketOrBuilder getBucketOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketOrBuilder getBucketOrBuilder(
               int index) {
             if (bucketBuilder_ == null) {
               return bucket_.get(index);  } else {
    @@ -7001,7 +7061,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketOrBuilderList() {
             if (bucketBuilder_ != null) {
               return bucketBuilder_.getMessageOrBuilderList();
    @@ -7016,9 +7076,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder addBucketBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder addBucketBuilder() {
             return internalGetBucketFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7027,10 +7087,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder addBucketBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder addBucketBuilder(
               int index) {
             return internalGetBucketFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.getDefaultInstance());
           }
           /**
            * 
    @@ -7039,16 +7099,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Bucket bucket = 3;
            */
    -      public java.util.List 
    +      public java.util.List 
                getBucketBuilderList() {
             return internalGetBucketFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketOrBuilder> 
               internalGetBucketFieldBuilder() {
             if (bucketBuilder_ == null) {
               bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketOrBuilder>(
                       bucket_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -7419,17 +7479,17 @@ public Builder clearZeroCountFloat() {
             return this;
           }
     
    -      private java.util.List negativeSpan_ =
    +      private java.util.List negativeSpan_ =
             java.util.Collections.emptyList();
           private void ensureNegativeSpanIsMutable() {
             if (!((bitField0_ & 0x00000200) != 0)) {
    -          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
    +          negativeSpan_ = new java.util.ArrayList(negativeSpan_);
               bitField0_ |= 0x00000200;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder> negativeSpanBuilder_;
     
           /**
            * 
    @@ -7438,7 +7498,7 @@ private void ensureNegativeSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List getNegativeSpanList() {
    +      public java.util.List getNegativeSpanList() {
             if (negativeSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(negativeSpan_);
             } else {
    @@ -7466,7 +7526,7 @@ public int getNegativeSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan getNegativeSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan getNegativeSpan(int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);
             } else {
    @@ -7481,7 +7541,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7502,7 +7562,7 @@ public Builder setNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder setNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.set(index, builderForValue.build());
    @@ -7519,7 +7579,7 @@ public Builder setNegativeSpan(
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan value) {
    +      public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7540,7 +7600,7 @@ public Builder addNegativeSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan value) {
             if (negativeSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -7561,7 +7621,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(builderForValue.build());
    @@ -7579,7 +7639,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addNegativeSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder builderForValue) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               negativeSpan_.add(index, builderForValue.build());
    @@ -7597,7 +7657,7 @@ public Builder addNegativeSpan(
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
           public Builder addAllNegativeSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (negativeSpanBuilder_ == null) {
               ensureNegativeSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -7649,7 +7709,7 @@ public Builder removeNegativeSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder getNegativeSpanBuilder(
               int index) {
             return internalGetNegativeSpanFieldBuilder().getBuilder(index);
           }
    @@ -7660,7 +7720,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder getNegativeSpanOrBuilder(
               int index) {
             if (negativeSpanBuilder_ == null) {
               return negativeSpan_.get(index);  } else {
    @@ -7674,7 +7734,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanOrBuilderList() {
             if (negativeSpanBuilder_ != null) {
               return negativeSpanBuilder_.getMessageOrBuilderList();
    @@ -7689,9 +7749,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder addNegativeSpanBuilder() {
             return internalGetNegativeSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7700,10 +7760,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder addNegativeSpanBuilder(
               int index) {
             return internalGetNegativeSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -7712,16 +7772,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan negative_span = 9;
            */
    -      public java.util.List 
    +      public java.util.List 
                getNegativeSpanBuilderList() {
             return internalGetNegativeSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder> 
               internalGetNegativeSpanFieldBuilder() {
             if (negativeSpanBuilder_ == null) {
               negativeSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder>(
                       negativeSpan_,
                       ((bitField0_ & 0x00000200) != 0),
                       getParentForChildren(),
    @@ -7975,17 +8035,17 @@ public Builder clearNegativeCount() {
             return this;
           }
     
    -      private java.util.List positiveSpan_ =
    +      private java.util.List positiveSpan_ =
             java.util.Collections.emptyList();
           private void ensurePositiveSpanIsMutable() {
             if (!((bitField0_ & 0x00001000) != 0)) {
    -          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
    +          positiveSpan_ = new java.util.ArrayList(positiveSpan_);
               bitField0_ |= 0x00001000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder> positiveSpanBuilder_;
     
           /**
            * 
    @@ -7997,7 +8057,7 @@ private void ensurePositiveSpanIsMutable() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List getPositiveSpanList() {
    +      public java.util.List getPositiveSpanList() {
             if (positiveSpanBuilder_ == null) {
               return java.util.Collections.unmodifiableList(positiveSpan_);
             } else {
    @@ -8031,7 +8091,7 @@ public int getPositiveSpanCount() {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan getPositiveSpan(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan getPositiveSpan(int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);
             } else {
    @@ -8049,7 +8109,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8073,7 +8133,7 @@ public Builder setPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder setPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.set(index, builderForValue.build());
    @@ -8093,7 +8153,7 @@ public Builder setPositiveSpan(
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan value) {
    +      public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8117,7 +8177,7 @@ public Builder addPositiveSpan(io.prometheus.metrics.expositionformats.generated
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan value) {
             if (positiveSpanBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8141,7 +8201,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(builderForValue.build());
    @@ -8162,7 +8222,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addPositiveSpan(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder builderForValue) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               positiveSpan_.add(index, builderForValue.build());
    @@ -8183,7 +8243,7 @@ public Builder addPositiveSpan(
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
           public Builder addAllPositiveSpan(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (positiveSpanBuilder_ == null) {
               ensurePositiveSpanIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8244,7 +8304,7 @@ public Builder removePositiveSpan(int index) {
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder getPositiveSpanBuilder(
               int index) {
             return internalGetPositiveSpanFieldBuilder().getBuilder(index);
           }
    @@ -8258,7 +8318,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder getPositiveSpanOrBuilder(
               int index) {
             if (positiveSpanBuilder_ == null) {
               return positiveSpan_.get(index);  } else {
    @@ -8275,7 +8335,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanOrBuilderList() {
             if (positiveSpanBuilder_ != null) {
               return positiveSpanBuilder_.getMessageOrBuilderList();
    @@ -8293,9 +8353,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder addPositiveSpanBuilder() {
             return internalGetPositiveSpanFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8307,10 +8367,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder addPositiveSpanBuilder(
               int index) {
             return internalGetPositiveSpanFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.getDefaultInstance());
           }
           /**
            * 
    @@ -8322,16 +8382,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.BucketSpan positive_span = 12;
            */
    -      public java.util.List 
    +      public java.util.List 
                getPositiveSpanBuilderList() {
             return internalGetPositiveSpanFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder> 
               internalGetPositiveSpanFieldBuilder() {
             if (positiveSpanBuilder_ == null) {
               positiveSpanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder>(
                       positiveSpan_,
                       ((bitField0_ & 0x00001000) != 0),
                       getParentForChildren(),
    @@ -8585,17 +8645,17 @@ public Builder clearPositiveCount() {
             return this;
           }
     
    -      private java.util.List exemplars_ =
    +      private java.util.List exemplars_ =
             java.util.Collections.emptyList();
           private void ensureExemplarsIsMutable() {
             if (!((bitField0_ & 0x00008000) != 0)) {
    -          exemplars_ = new java.util.ArrayList(exemplars_);
    +          exemplars_ = new java.util.ArrayList(exemplars_);
               bitField0_ |= 0x00008000;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder> exemplarsBuilder_;
     
           /**
            * 
    @@ -8604,7 +8664,7 @@ private void ensureExemplarsIsMutable() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List getExemplarsList() {
    +      public java.util.List getExemplarsList() {
             if (exemplarsBuilder_ == null) {
               return java.util.Collections.unmodifiableList(exemplars_);
             } else {
    @@ -8632,7 +8692,7 @@ public int getExemplarsCount() {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getExemplars(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getExemplars(int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);
             } else {
    @@ -8647,7 +8707,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8668,7 +8728,7 @@ public Builder setExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder setExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.set(index, builderForValue.build());
    @@ -8685,7 +8745,7 @@ public Builder setExemplars(
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar value) {
    +      public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8706,7 +8766,7 @@ public Builder addExemplars(io.prometheus.metrics.expositionformats.generated.co
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar value) {
             if (exemplarsBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -8727,7 +8787,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(builderForValue.build());
    @@ -8745,7 +8805,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addExemplars(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               exemplars_.add(index, builderForValue.build());
    @@ -8763,7 +8823,7 @@ public Builder addExemplars(
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
           public Builder addAllExemplars(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (exemplarsBuilder_ == null) {
               ensureExemplarsIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -8815,7 +8875,7 @@ public Builder removeExemplars(int index) {
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder getExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder getExemplarsBuilder(
               int index) {
             return internalGetExemplarsFieldBuilder().getBuilder(index);
           }
    @@ -8826,7 +8886,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder getExemplarsOrBuilder(
               int index) {
             if (exemplarsBuilder_ == null) {
               return exemplars_.get(index);  } else {
    @@ -8840,7 +8900,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsOrBuilderList() {
             if (exemplarsBuilder_ != null) {
               return exemplarsBuilder_.getMessageOrBuilderList();
    @@ -8855,9 +8915,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder addExemplarsBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder addExemplarsBuilder() {
             return internalGetExemplarsFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8866,10 +8926,10 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder addExemplarsBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder addExemplarsBuilder(
               int index) {
             return internalGetExemplarsFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance());
           }
           /**
            * 
    @@ -8878,16 +8938,16 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            *
            * repeated .io.prometheus.client.Exemplar exemplars = 16;
            */
    -      public java.util.List 
    +      public java.util.List 
                getExemplarsBuilderList() {
             return internalGetExemplarsFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder> 
               internalGetExemplarsFieldBuilder() {
             if (exemplarsBuilder_ == null) {
               exemplarsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder>(
                       exemplars_,
                       ((bitField0_ & 0x00008000) != 0),
                       getParentForChildren(),
    @@ -8901,12 +8961,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -8942,7 +9002,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9018,11 +9078,11 @@ public interface BucketOrBuilder extends
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return The exemplar.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getExemplar();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getExemplar();
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder();
       }
       /**
        * 
    @@ -9041,8 +9101,8 @@ public static final class Bucket extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 33,
    -        /* patch= */ 5,
    +        /* minor= */ 34,
    +        /* patch= */ 0,
             /* suffix= */ "",
             "Bucket");
         }
    @@ -9055,15 +9115,20 @@ private Bucket() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +    }
    +
    +    @java.lang.Override
    +    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder.class);
         }
     
         private int bitField0_;
    @@ -9149,7 +9214,7 @@ public double getUpperBound() {
         }
     
         public static final int EXEMPLAR_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar exemplar_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar exemplar_;
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          * @return Whether the exemplar field is set.
    @@ -9163,15 +9228,15 @@ public boolean hasExemplar() {
          * @return The exemplar.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getExemplar() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getExemplar() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
         /**
          * optional .io.prometheus.client.Exemplar exemplar = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    -      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
         }
     
         private byte memoizedIsInitialized = -1;
    @@ -9235,10 +9300,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket) obj;
     
           if (hasCumulativeCount() != other.hasCumulativeCount()) return false;
           if (hasCumulativeCount()) {
    @@ -9297,44 +9362,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9342,26 +9407,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -9374,7 +9439,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -9400,21 +9465,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -9448,17 +9513,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -9466,14 +9531,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -9499,16 +9564,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket.getDefaultInstance()) return this;
             if (other.hasCumulativeCount()) {
               setCumulativeCount(other.getCumulativeCount());
             }
    @@ -9754,9 +9819,9 @@ public Builder clearUpperBound() {
             return this;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar exemplar_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar exemplar_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder> exemplarBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder> exemplarBuilder_;
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return Whether the exemplar field is set.
    @@ -9768,9 +9833,9 @@ public boolean hasExemplar() {
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            * @return The exemplar.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getExemplar() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getExemplar() {
             if (exemplarBuilder_ == null) {
    -          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +          return exemplar_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             } else {
               return exemplarBuilder_.getMessage();
             }
    @@ -9778,7 +9843,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar value) {
    +      public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -9795,7 +9860,7 @@ public Builder setExemplar(io.prometheus.metrics.expositionformats.generated.com
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           public Builder setExemplar(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder builderForValue) {
             if (exemplarBuilder_ == null) {
               exemplar_ = builderForValue.build();
             } else {
    @@ -9808,11 +9873,11 @@ public Builder setExemplar(
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar value) {
    +      public Builder mergeExemplar(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar value) {
             if (exemplarBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 exemplar_ != null &&
    -            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance()) {
    +            exemplar_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance()) {
                 getExemplarBuilder().mergeFrom(value);
               } else {
                 exemplar_ = value;
    @@ -9842,7 +9907,7 @@ public Builder clearExemplar() {
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder getExemplarBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder getExemplarBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return internalGetExemplarFieldBuilder().getBuilder();
    @@ -9850,23 +9915,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder getExemplarOrBuilder() {
             if (exemplarBuilder_ != null) {
               return exemplarBuilder_.getMessageOrBuilder();
             } else {
               return exemplar_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance() : exemplar_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance() : exemplar_;
             }
           }
           /**
            * optional .io.prometheus.client.Exemplar exemplar = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder> 
               internalGetExemplarFieldBuilder() {
             if (exemplarBuilder_ == null) {
               exemplarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder>(
                       getExemplar(),
                       getParentForChildren(),
                       isClean());
    @@ -9879,12 +9944,12 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9920,7 +9985,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Bucket getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Bucket getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -9989,8 +10054,8 @@ public static final class BucketSpan extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 33,
    -        /* patch= */ 5,
    +        /* minor= */ 34,
    +        /* patch= */ 0,
             /* suffix= */ "",
             "BucketSpan");
         }
    @@ -10003,15 +10068,20 @@ private BucketSpan() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +    }
    +
    +    @java.lang.Override
    +    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder.class);
         }
     
         private int bitField0_;
    @@ -10116,10 +10186,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan) obj;
     
           if (hasOffset() != other.hasOffset()) return false;
           if (hasOffset()) {
    @@ -10155,44 +10225,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10200,26 +10270,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10232,7 +10302,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10262,21 +10332,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.BucketSpan)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpanOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpanOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_BucketSpan_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.newBuilder()
           private Builder() {
     
           }
    @@ -10298,17 +10368,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_BucketSpan_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -10316,14 +10386,14 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan(this);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -10339,16 +10409,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan.getDefaultInstance()) return this;
             if (other.hasOffset()) {
               setOffset(other.getOffset());
             }
    @@ -10524,12 +10594,12 @@ public Builder clearLength() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.BucketSpan)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10565,7 +10635,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.BucketSpan getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.BucketSpan getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -10578,12 +10648,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -10591,12 +10661,12 @@ public interface ExemplarOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -10649,8 +10719,8 @@ public static final class Exemplar extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 33,
    -        /* patch= */ 5,
    +        /* minor= */ 34,
    +        /* patch= */ 0,
             /* suffix= */ "",
             "Exemplar");
         }
    @@ -10664,33 +10734,38 @@ private Exemplar() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +    }
    +
    +    @java.lang.Override
    +    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -10705,14 +10780,14 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
    @@ -10806,10 +10881,15 @@ public int getSerializedSize() {
           if (size != -1) return size;
     
           size = 0;
    -      for (int i = 0; i < label_.size(); i++) {
    -        size += com.google.protobuf.CodedOutputStream
    -          .computeMessageSize(1, label_.get(i));
    -      }
    +
    +          {
    +            final int count = label_.size();
    +            for (int i = 0; i < count; i++) {
    +              size += com.google.protobuf.CodedOutputStream
    +                .computeMessageSizeNoTag(label_.get(i));
    +            }
    +            size += 1 * count;
    +          }
           if (((bitField0_ & 0x00000001) != 0)) {
             size += com.google.protobuf.CodedOutputStream
               .computeDoubleSize(2, value_);
    @@ -10828,10 +10908,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -10875,44 +10955,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10920,26 +11000,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -10952,7 +11032,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -10973,21 +11053,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Exemplar)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.ExemplarOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.ExemplarOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Exemplar_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -11027,17 +11107,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Exemplar_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -11045,15 +11125,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -11065,7 +11145,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -11083,16 +11163,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -11152,9 +11232,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -11193,22 +11273,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -11228,7 +11308,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -11239,7 +11319,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11256,7 +11336,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -11269,7 +11349,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11286,7 +11366,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -11303,7 +11383,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -11317,7 +11397,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -11331,7 +11411,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -11371,14 +11451,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -11388,7 +11468,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -11399,31 +11479,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder addLabelBuilder() {
             return internalGetLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return internalGetLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder> 
               internalGetLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -11634,12 +11714,12 @@ public com.google.protobuf.TimestampOrBuilder getTimestampOrBuilder() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Exemplar)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11675,7 +11755,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Exemplar getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Exemplar getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -11688,12 +11768,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair getLabel(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair getLabel(int index);
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    @@ -11701,12 +11781,12 @@ public interface MetricOrBuilder extends
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    java.util.List 
    +    java.util.List 
             getLabelOrBuilderList();
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index);
     
         /**
    @@ -11718,11 +11798,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return The gauge.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge getGauge();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge getGauge();
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.GaugeOrBuilder getGaugeOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.GaugeOrBuilder getGaugeOrBuilder();
     
         /**
          * optional .io.prometheus.client.Counter counter = 3;
    @@ -11733,11 +11813,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          * optional .io.prometheus.client.Counter counter = 3;
          * @return The counter.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter getCounter();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter getCounter();
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.CounterOrBuilder getCounterOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.CounterOrBuilder getCounterOrBuilder();
     
         /**
          * optional .io.prometheus.client.Summary summary = 4;
    @@ -11748,11 +11828,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          * optional .io.prometheus.client.Summary summary = 4;
          * @return The summary.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary getSummary();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary getSummary();
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.SummaryOrBuilder getSummaryOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.SummaryOrBuilder getSummaryOrBuilder();
     
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
    @@ -11763,11 +11843,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return The untyped.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped getUntyped();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped getUntyped();
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.UntypedOrBuilder getUntypedOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.UntypedOrBuilder getUntypedOrBuilder();
     
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
    @@ -11778,11 +11858,11 @@ io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Met
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return The histogram.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram getHistogram();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram getHistogram();
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.HistogramOrBuilder getHistogramOrBuilder();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.HistogramOrBuilder getHistogramOrBuilder();
     
         /**
          * optional int64 timestamp_ms = 6;
    @@ -11807,8 +11887,8 @@ public static final class Metric extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 33,
    -        /* patch= */ 5,
    +        /* minor= */ 34,
    +        /* patch= */ 0,
             /* suffix= */ "",
             "Metric");
         }
    @@ -11822,33 +11902,38 @@ private Metric() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +    }
    +
    +    @java.lang.Override
    +    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder.class);
         }
     
         private int bitField0_;
         public static final int LABEL_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
    -    private java.util.List label_;
    +    private java.util.List label_;
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List getLabelList() {
    +    public java.util.List getLabelList() {
           return label_;
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getLabelOrBuilderList() {
           return label_;
         }
    @@ -11863,20 +11948,20 @@ public int getLabelCount() {
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair getLabel(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair getLabel(int index) {
           return label_.get(index);
         }
         /**
          * repeated .io.prometheus.client.LabelPair label = 1;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
             int index) {
           return label_.get(index);
         }
     
         public static final int GAUGE_FIELD_NUMBER = 2;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge gauge_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge gauge_;
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          * @return Whether the gauge field is set.
    @@ -11890,19 +11975,19 @@ public boolean hasGauge() {
          * @return The gauge.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge getGauge() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge getGauge() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
         /**
          * optional .io.prometheus.client.Gauge gauge = 2;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    -      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.getDefaultInstance() : gauge_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.getDefaultInstance() : gauge_;
         }
     
         public static final int COUNTER_FIELD_NUMBER = 3;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter counter_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter counter_;
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          * @return Whether the counter field is set.
    @@ -11916,19 +12001,19 @@ public boolean hasCounter() {
          * @return The counter.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter getCounter() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter getCounter() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.getDefaultInstance() : counter_;
         }
         /**
          * optional .io.prometheus.client.Counter counter = 3;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.CounterOrBuilder getCounterOrBuilder() {
    -      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.getDefaultInstance() : counter_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.getDefaultInstance() : counter_;
         }
     
         public static final int SUMMARY_FIELD_NUMBER = 4;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary summary_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary summary_;
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          * @return Whether the summary field is set.
    @@ -11942,19 +12027,19 @@ public boolean hasSummary() {
          * @return The summary.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary getSummary() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary getSummary() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.getDefaultInstance() : summary_;
         }
         /**
          * optional .io.prometheus.client.Summary summary = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    -      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.getDefaultInstance() : summary_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.getDefaultInstance() : summary_;
         }
     
         public static final int UNTYPED_FIELD_NUMBER = 5;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped untyped_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped untyped_;
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          * @return Whether the untyped field is set.
    @@ -11968,19 +12053,19 @@ public boolean hasUntyped() {
          * @return The untyped.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped getUntyped() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped getUntyped() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
         /**
          * optional .io.prometheus.client.Untyped untyped = 5;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    -      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.getDefaultInstance() : untyped_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.getDefaultInstance() : untyped_;
         }
     
         public static final int HISTOGRAM_FIELD_NUMBER = 7;
    -    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram histogram_;
    +    private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram histogram_;
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          * @return Whether the histogram field is set.
    @@ -11994,15 +12079,15 @@ public boolean hasHistogram() {
          * @return The histogram.
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram getHistogram() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram getHistogram() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
         /**
          * optional .io.prometheus.client.Histogram histogram = 7;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    -      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.getDefaultInstance() : histogram_;
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.getDefaultInstance() : histogram_;
         }
     
         public static final int TIMESTAMP_MS_FIELD_NUMBER = 6;
    @@ -12068,10 +12153,15 @@ public int getSerializedSize() {
           if (size != -1) return size;
     
           size = 0;
    -      for (int i = 0; i < label_.size(); i++) {
    -        size += com.google.protobuf.CodedOutputStream
    -          .computeMessageSize(1, label_.get(i));
    -      }
    +
    +          {
    +            final int count = label_.size();
    +            for (int i = 0; i < count; i++) {
    +              size += com.google.protobuf.CodedOutputStream
    +                .computeMessageSizeNoTag(label_.get(i));
    +            }
    +            size += 1 * count;
    +          }
           if (((bitField0_ & 0x00000001) != 0)) {
             size += com.google.protobuf.CodedOutputStream
               .computeMessageSize(2, getGauge());
    @@ -12106,10 +12196,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric) obj;
     
           if (!getLabelList()
               .equals(other.getLabelList())) return false;
    @@ -12188,44 +12278,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12233,26 +12323,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -12265,7 +12355,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -12286,21 +12376,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.newBuilder()
           private Builder() {
             maybeForceBuilderInitialization();
           }
    @@ -12364,17 +12454,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -12382,15 +12472,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric result) {
             if (labelBuilder_ == null) {
               if (((bitField0_ & 0x00000001) != 0)) {
                 label_ = java.util.Collections.unmodifiableList(label_);
    @@ -12402,7 +12492,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000002) != 0)) {
    @@ -12444,16 +12534,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.getDefaultInstance()) return this;
             if (labelBuilder_ == null) {
               if (!other.label_.isEmpty()) {
                 if (label_.isEmpty()) {
    @@ -12525,9 +12615,9 @@ public Builder mergeFrom(
                     done = true;
                     break;
                   case 10: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.parser(),
                             extensionRegistry);
                     if (labelBuilder_ == null) {
                       ensureLabelIsMutable();
    @@ -12594,22 +12684,22 @@ public Builder mergeFrom(
           }
           private int bitField0_;
     
    -      private java.util.List label_ =
    +      private java.util.List label_ =
             java.util.Collections.emptyList();
           private void ensureLabelIsMutable() {
             if (!((bitField0_ & 0x00000001) != 0)) {
    -          label_ = new java.util.ArrayList(label_);
    +          label_ = new java.util.ArrayList(label_);
               bitField0_ |= 0x00000001;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder> labelBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder> labelBuilder_;
     
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List getLabelList() {
    +      public java.util.List getLabelList() {
             if (labelBuilder_ == null) {
               return java.util.Collections.unmodifiableList(label_);
             } else {
    @@ -12629,7 +12719,7 @@ public int getLabelCount() {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair getLabel(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair getLabel(int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);
             } else {
    @@ -12640,7 +12730,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12657,7 +12747,7 @@ public Builder setLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder setLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.set(index, builderForValue.build());
    @@ -12670,7 +12760,7 @@ public Builder setLabel(
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair value) {
    +      public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12687,7 +12777,7 @@ public Builder addLabel(io.prometheus.metrics.expositionformats.generated.com_go
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair value) {
             if (labelBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12704,7 +12794,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(builderForValue.build());
    @@ -12718,7 +12808,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addLabel(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder builderForValue) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               label_.add(index, builderForValue.build());
    @@ -12732,7 +12822,7 @@ public Builder addLabel(
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
           public Builder addAllLabel(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (labelBuilder_ == null) {
               ensureLabelIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -12772,14 +12862,14 @@ public Builder removeLabel(int index) {
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder getLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder getLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder getLabelOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder getLabelOrBuilder(
               int index) {
             if (labelBuilder_ == null) {
               return label_.get(index);  } else {
    @@ -12789,7 +12879,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelOrBuilderList() {
             if (labelBuilder_ != null) {
               return labelBuilder_.getMessageOrBuilderList();
    @@ -12800,31 +12890,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder addLabelBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder addLabelBuilder() {
             return internalGetLabelFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder addLabelBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder addLabelBuilder(
               int index) {
             return internalGetLabelFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.LabelPair label = 1;
            */
    -      public java.util.List 
    +      public java.util.List 
                getLabelBuilderList() {
             return internalGetLabelFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder> 
               internalGetLabelFieldBuilder() {
             if (labelBuilder_ == null) {
               labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.LabelPairOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPair.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.LabelPairOrBuilder>(
                       label_,
                       ((bitField0_ & 0x00000001) != 0),
                       getParentForChildren(),
    @@ -12834,9 +12924,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return labelBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge gauge_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge gauge_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.GaugeOrBuilder> gaugeBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.GaugeOrBuilder> gaugeBuilder_;
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return Whether the gauge field is set.
    @@ -12848,9 +12938,9 @@ public boolean hasGauge() {
            * optional .io.prometheus.client.Gauge gauge = 2;
            * @return The gauge.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge getGauge() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge getGauge() {
             if (gaugeBuilder_ == null) {
    -          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.getDefaultInstance() : gauge_;
    +          return gauge_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.getDefaultInstance() : gauge_;
             } else {
               return gaugeBuilder_.getMessage();
             }
    @@ -12858,7 +12948,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge value) {
    +      public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12875,7 +12965,7 @@ public Builder setGauge(io.prometheus.metrics.expositionformats.generated.com_go
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           public Builder setGauge(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.Builder builderForValue) {
             if (gaugeBuilder_ == null) {
               gauge_ = builderForValue.build();
             } else {
    @@ -12888,11 +12978,11 @@ public Builder setGauge(
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge value) {
    +      public Builder mergeGauge(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge value) {
             if (gaugeBuilder_ == null) {
               if (((bitField0_ & 0x00000002) != 0) &&
                 gauge_ != null &&
    -            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.getDefaultInstance()) {
    +            gauge_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.getDefaultInstance()) {
                 getGaugeBuilder().mergeFrom(value);
               } else {
                 gauge_ = value;
    @@ -12922,7 +13012,7 @@ public Builder clearGauge() {
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.Builder getGaugeBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.Builder getGaugeBuilder() {
             bitField0_ |= 0x00000002;
             onChanged();
             return internalGetGaugeFieldBuilder().getBuilder();
    @@ -12930,23 +13020,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
             if (gaugeBuilder_ != null) {
               return gaugeBuilder_.getMessageOrBuilder();
             } else {
               return gauge_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.getDefaultInstance() : gauge_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.getDefaultInstance() : gauge_;
             }
           }
           /**
            * optional .io.prometheus.client.Gauge gauge = 2;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.GaugeOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.GaugeOrBuilder> 
               internalGetGaugeFieldBuilder() {
             if (gaugeBuilder_ == null) {
               gaugeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.GaugeOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Gauge.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.GaugeOrBuilder>(
                       getGauge(),
                       getParentForChildren(),
                       isClean());
    @@ -12955,9 +13045,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return gaugeBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter counter_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter counter_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.CounterOrBuilder> counterBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.CounterOrBuilder> counterBuilder_;
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            * @return Whether the counter field is set.
    @@ -12969,9 +13059,9 @@ public boolean hasCounter() {
            * optional .io.prometheus.client.Counter counter = 3;
            * @return The counter.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter getCounter() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter getCounter() {
             if (counterBuilder_ == null) {
    -          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.getDefaultInstance() : counter_;
    +          return counter_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.getDefaultInstance() : counter_;
             } else {
               return counterBuilder_.getMessage();
             }
    @@ -12979,7 +13069,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter value) {
    +      public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -12996,7 +13086,7 @@ public Builder setCounter(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Counter counter = 3;
            */
           public Builder setCounter(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.Builder builderForValue) {
             if (counterBuilder_ == null) {
               counter_ = builderForValue.build();
             } else {
    @@ -13009,11 +13099,11 @@ public Builder setCounter(
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter value) {
    +      public Builder mergeCounter(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter value) {
             if (counterBuilder_ == null) {
               if (((bitField0_ & 0x00000004) != 0) &&
                 counter_ != null &&
    -            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.getDefaultInstance()) {
    +            counter_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.getDefaultInstance()) {
                 getCounterBuilder().mergeFrom(value);
               } else {
                 counter_ = value;
    @@ -13043,7 +13133,7 @@ public Builder clearCounter() {
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.Builder getCounterBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.Builder getCounterBuilder() {
             bitField0_ |= 0x00000004;
             onChanged();
             return internalGetCounterFieldBuilder().getBuilder();
    @@ -13051,23 +13141,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.CounterOrBuilder getCounterOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.CounterOrBuilder getCounterOrBuilder() {
             if (counterBuilder_ != null) {
               return counterBuilder_.getMessageOrBuilder();
             } else {
               return counter_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.getDefaultInstance() : counter_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.getDefaultInstance() : counter_;
             }
           }
           /**
            * optional .io.prometheus.client.Counter counter = 3;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.CounterOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.CounterOrBuilder> 
               internalGetCounterFieldBuilder() {
             if (counterBuilder_ == null) {
               counterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.CounterOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Counter.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.CounterOrBuilder>(
                       getCounter(),
                       getParentForChildren(),
                       isClean());
    @@ -13076,9 +13166,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return counterBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary summary_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary summary_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.SummaryOrBuilder> summaryBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.SummaryOrBuilder> summaryBuilder_;
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            * @return Whether the summary field is set.
    @@ -13090,9 +13180,9 @@ public boolean hasSummary() {
            * optional .io.prometheus.client.Summary summary = 4;
            * @return The summary.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary getSummary() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary getSummary() {
             if (summaryBuilder_ == null) {
    -          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.getDefaultInstance() : summary_;
    +          return summary_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.getDefaultInstance() : summary_;
             } else {
               return summaryBuilder_.getMessage();
             }
    @@ -13100,7 +13190,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary value) {
    +      public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13117,7 +13207,7 @@ public Builder setSummary(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Summary summary = 4;
            */
           public Builder setSummary(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.Builder builderForValue) {
             if (summaryBuilder_ == null) {
               summary_ = builderForValue.build();
             } else {
    @@ -13130,11 +13220,11 @@ public Builder setSummary(
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary value) {
    +      public Builder mergeSummary(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary value) {
             if (summaryBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0) &&
                 summary_ != null &&
    -            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.getDefaultInstance()) {
    +            summary_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.getDefaultInstance()) {
                 getSummaryBuilder().mergeFrom(value);
               } else {
                 summary_ = value;
    @@ -13164,7 +13254,7 @@ public Builder clearSummary() {
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.Builder getSummaryBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.Builder getSummaryBuilder() {
             bitField0_ |= 0x00000008;
             onChanged();
             return internalGetSummaryFieldBuilder().getBuilder();
    @@ -13172,23 +13262,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
             if (summaryBuilder_ != null) {
               return summaryBuilder_.getMessageOrBuilder();
             } else {
               return summary_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.getDefaultInstance() : summary_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.getDefaultInstance() : summary_;
             }
           }
           /**
            * optional .io.prometheus.client.Summary summary = 4;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.SummaryOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.SummaryOrBuilder> 
               internalGetSummaryFieldBuilder() {
             if (summaryBuilder_ == null) {
               summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.SummaryOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Summary.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.SummaryOrBuilder>(
                       getSummary(),
                       getParentForChildren(),
                       isClean());
    @@ -13197,9 +13287,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return summaryBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped untyped_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped untyped_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.UntypedOrBuilder> untypedBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.UntypedOrBuilder> untypedBuilder_;
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return Whether the untyped field is set.
    @@ -13211,9 +13301,9 @@ public boolean hasUntyped() {
            * optional .io.prometheus.client.Untyped untyped = 5;
            * @return The untyped.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped getUntyped() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped getUntyped() {
             if (untypedBuilder_ == null) {
    -          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.getDefaultInstance() : untyped_;
    +          return untyped_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.getDefaultInstance() : untyped_;
             } else {
               return untypedBuilder_.getMessage();
             }
    @@ -13221,7 +13311,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped value) {
    +      public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13238,7 +13328,7 @@ public Builder setUntyped(io.prometheus.metrics.expositionformats.generated.com_
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           public Builder setUntyped(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.Builder builderForValue) {
             if (untypedBuilder_ == null) {
               untyped_ = builderForValue.build();
             } else {
    @@ -13251,11 +13341,11 @@ public Builder setUntyped(
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped value) {
    +      public Builder mergeUntyped(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped value) {
             if (untypedBuilder_ == null) {
               if (((bitField0_ & 0x00000010) != 0) &&
                 untyped_ != null &&
    -            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.getDefaultInstance()) {
    +            untyped_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.getDefaultInstance()) {
                 getUntypedBuilder().mergeFrom(value);
               } else {
                 untyped_ = value;
    @@ -13285,7 +13375,7 @@ public Builder clearUntyped() {
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.Builder getUntypedBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.Builder getUntypedBuilder() {
             bitField0_ |= 0x00000010;
             onChanged();
             return internalGetUntypedFieldBuilder().getBuilder();
    @@ -13293,23 +13383,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
             if (untypedBuilder_ != null) {
               return untypedBuilder_.getMessageOrBuilder();
             } else {
               return untyped_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.getDefaultInstance() : untyped_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.getDefaultInstance() : untyped_;
             }
           }
           /**
            * optional .io.prometheus.client.Untyped untyped = 5;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.UntypedOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.UntypedOrBuilder> 
               internalGetUntypedFieldBuilder() {
             if (untypedBuilder_ == null) {
               untypedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.UntypedOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Untyped.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.UntypedOrBuilder>(
                       getUntyped(),
                       getParentForChildren(),
                       isClean());
    @@ -13318,9 +13408,9 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
             return untypedBuilder_;
           }
     
    -      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram histogram_;
    +      private io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram histogram_;
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.HistogramOrBuilder> histogramBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.HistogramOrBuilder> histogramBuilder_;
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return Whether the histogram field is set.
    @@ -13332,9 +13422,9 @@ public boolean hasHistogram() {
            * optional .io.prometheus.client.Histogram histogram = 7;
            * @return The histogram.
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram getHistogram() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram getHistogram() {
             if (histogramBuilder_ == null) {
    -          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.getDefaultInstance() : histogram_;
    +          return histogram_ == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.getDefaultInstance() : histogram_;
             } else {
               return histogramBuilder_.getMessage();
             }
    @@ -13342,7 +13432,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram value) {
    +      public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -13359,7 +13449,7 @@ public Builder setHistogram(io.prometheus.metrics.expositionformats.generated.co
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           public Builder setHistogram(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.Builder builderForValue) {
             if (histogramBuilder_ == null) {
               histogram_ = builderForValue.build();
             } else {
    @@ -13372,11 +13462,11 @@ public Builder setHistogram(
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram value) {
    +      public Builder mergeHistogram(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram value) {
             if (histogramBuilder_ == null) {
               if (((bitField0_ & 0x00000020) != 0) &&
                 histogram_ != null &&
    -            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.getDefaultInstance()) {
    +            histogram_ != io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.getDefaultInstance()) {
                 getHistogramBuilder().mergeFrom(value);
               } else {
                 histogram_ = value;
    @@ -13406,7 +13496,7 @@ public Builder clearHistogram() {
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.Builder getHistogramBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.Builder getHistogramBuilder() {
             bitField0_ |= 0x00000020;
             onChanged();
             return internalGetHistogramFieldBuilder().getBuilder();
    @@ -13414,23 +13504,23 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
             if (histogramBuilder_ != null) {
               return histogramBuilder_.getMessageOrBuilder();
             } else {
               return histogram_ == null ?
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.getDefaultInstance() : histogram_;
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.getDefaultInstance() : histogram_;
             }
           }
           /**
            * optional .io.prometheus.client.Histogram histogram = 7;
            */
           private com.google.protobuf.SingleFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.HistogramOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.HistogramOrBuilder> 
               internalGetHistogramFieldBuilder() {
             if (histogramBuilder_ == null) {
               histogramBuilder_ = new com.google.protobuf.SingleFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.HistogramOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Histogram.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.HistogramOrBuilder>(
                       getHistogram(),
                       getParentForChildren(),
                       isClean());
    @@ -13483,12 +13573,12 @@ public Builder clearTimestampMs() {
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13524,7 +13614,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -13577,17 +13667,17 @@ public interface MetricFamilyOrBuilder extends
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType getType();
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType getType();
     
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric getMetric(int index);
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric getMetric(int index);
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    @@ -13595,12 +13685,12 @@ public interface MetricFamilyOrBuilder extends
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    java.util.List 
    +    java.util.List 
             getMetricOrBuilderList();
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
    -    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index);
     
         /**
    @@ -13632,8 +13722,8 @@ public static final class MetricFamily extends
           com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
             com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
             /* major= */ 4,
    -        /* minor= */ 33,
    -        /* patch= */ 5,
    +        /* minor= */ 34,
    +        /* patch= */ 0,
             /* suffix= */ "",
             "MetricFamily");
         }
    @@ -13651,15 +13741,20 @@ private MetricFamily() {
     
         public static final com.google.protobuf.Descriptors.Descriptor
             getDescriptor() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +    }
    +
    +    @java.lang.Override
    +    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
         }
     
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
             internalGetFieldAccessorTable() {
    -      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +      return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
               .ensureFieldAccessorsInitialized(
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily.Builder.class);
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily.Builder.class);
         }
     
         private int bitField0_;
    @@ -13774,26 +13869,26 @@ public java.lang.String getHelp() {
          * optional .io.prometheus.client.MetricType type = 3;
          * @return The type.
          */
    -    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType getType() {
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType.forNumber(type_);
    -      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType.COUNTER : result;
    +    @java.lang.Override public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType getType() {
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType.forNumber(type_);
    +      return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType.COUNTER : result;
         }
     
         public static final int METRIC_FIELD_NUMBER = 4;
         @SuppressWarnings("serial")
    -    private java.util.List metric_;
    +    private java.util.List metric_;
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List getMetricList() {
    +    public java.util.List getMetricList() {
           return metric_;
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public java.util.List 
    +    public java.util.List 
             getMetricOrBuilderList() {
           return metric_;
         }
    @@ -13808,14 +13903,14 @@ public int getMetricCount() {
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric getMetric(int index) {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric getMetric(int index) {
           return metric_.get(index);
         }
         /**
          * repeated .io.prometheus.client.Metric metric = 4;
          */
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricOrBuilder getMetricOrBuilder(
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricOrBuilder getMetricOrBuilder(
             int index) {
           return metric_.get(index);
         }
    @@ -13917,10 +14012,15 @@ public int getSerializedSize() {
             size += com.google.protobuf.CodedOutputStream
               .computeEnumSize(3, type_);
           }
    -      for (int i = 0; i < metric_.size(); i++) {
    -        size += com.google.protobuf.CodedOutputStream
    -          .computeMessageSize(4, metric_.get(i));
    -      }
    +
    +          {
    +            final int count = metric_.size();
    +            for (int i = 0; i < count; i++) {
    +              size += com.google.protobuf.CodedOutputStream
    +                .computeMessageSizeNoTag(metric_.get(i));
    +            }
    +            size += 1 * count;
    +          }
           if (((bitField0_ & 0x00000008) != 0)) {
             size += com.google.protobuf.GeneratedMessage.computeStringSize(5, unit_);
           }
    @@ -13934,10 +14034,10 @@ public boolean equals(final java.lang.Object obj) {
           if (obj == this) {
            return true;
           }
    -      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily)) {
    +      if (!(obj instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily)) {
             return super.equals(obj);
           }
    -      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily) obj;
    +      io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily other = (io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily) obj;
     
           if (hasName() != other.hasName()) return false;
           if (hasName()) {
    @@ -13996,44 +14096,44 @@ public int hashCode() {
           return hash;
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseFrom(
             java.nio.ByteBuffer data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseFrom(
             com.google.protobuf.ByteString data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseFrom(byte[] data)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseFrom(byte[] data)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseFrom(
             byte[] data,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
           return PARSER.parseFrom(data, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14041,26 +14141,26 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
               .parseWithIOException(PARSER, input, extensionRegistry);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input);
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseDelimitedFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseDelimitedFrom(
             java.io.InputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input)
             throws java.io.IOException {
           return com.google.protobuf.GeneratedMessage
               .parseWithIOException(PARSER, input);
         }
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily parseFrom(
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily parseFrom(
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws java.io.IOException {
    @@ -14073,7 +14173,7 @@ public static io.prometheus.metrics.expositionformats.generated.com_google_proto
         public static Builder newBuilder() {
           return DEFAULT_INSTANCE.toBuilder();
         }
    -    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily prototype) {
    +    public static Builder newBuilder(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily prototype) {
           return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
         @java.lang.Override
    @@ -14094,21 +14194,21 @@ protected Builder newBuilderForType(
         public static final class Builder extends
             com.google.protobuf.GeneratedMessage.Builder implements
             // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily)
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamilyOrBuilder {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamilyOrBuilder {
           public static final com.google.protobuf.Descriptors.Descriptor
               getDescriptor() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
           protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
               internalGetFieldAccessorTable() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
                 .ensureFieldAccessorsInitialized(
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily.Builder.class);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily.class, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily.Builder.class);
           }
     
    -      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily.newBuilder()
    +      // Construct using io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily.newBuilder()
           private Builder() {
     
           }
    @@ -14139,17 +14239,17 @@ public Builder clear() {
           @java.lang.Override
           public com.google.protobuf.Descriptors.Descriptor
               getDescriptorForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily getDefaultInstanceForType() {
    -        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily.getDefaultInstance();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily getDefaultInstanceForType() {
    +        return io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily.getDefaultInstance();
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily build() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily result = buildPartial();
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily build() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily result = buildPartial();
             if (!result.isInitialized()) {
               throw newUninitializedMessageException(result);
             }
    @@ -14157,15 +14257,15 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           }
     
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily buildPartial() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily(this);
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily buildPartial() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily result = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily(this);
             buildPartialRepeatedFields(result);
             if (bitField0_ != 0) { buildPartial0(result); }
             onBuilt();
             return result;
           }
     
    -      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily result) {
    +      private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily result) {
             if (metricBuilder_ == null) {
               if (((bitField0_ & 0x00000008) != 0)) {
                 metric_ = java.util.Collections.unmodifiableList(metric_);
    @@ -14177,7 +14277,7 @@ private void buildPartialRepeatedFields(io.prometheus.metrics.expositionformats.
             }
           }
     
    -      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily result) {
    +      private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily result) {
             int from_bitField0_ = bitField0_;
             int to_bitField0_ = 0;
             if (((from_bitField0_ & 0x00000001) != 0)) {
    @@ -14201,16 +14301,16 @@ private void buildPartial0(io.prometheus.metrics.expositionformats.generated.com
     
           @java.lang.Override
           public Builder mergeFrom(com.google.protobuf.Message other) {
    -        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily) {
    -          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily)other);
    +        if (other instanceof io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily) {
    +          return mergeFrom((io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily)other);
             } else {
               super.mergeFrom(other);
               return this;
             }
           }
     
    -      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily other) {
    -        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily.getDefaultInstance()) return this;
    +      public Builder mergeFrom(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily other) {
    +        if (other == io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily.getDefaultInstance()) return this;
             if (other.hasName()) {
               name_ = other.name_;
               bitField0_ |= 0x00000001;
    @@ -14293,8 +14393,8 @@ public Builder mergeFrom(
                   } // case 18
                   case 24: {
                     int tmpRaw = input.readEnum();
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType tmpValue =
    -                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType.forNumber(tmpRaw);
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType tmpValue =
    +                    io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType.forNumber(tmpRaw);
                     if (tmpValue == null) {
                       mergeUnknownVarintField(3, tmpRaw);
                     } else {
    @@ -14304,9 +14404,9 @@ public Builder mergeFrom(
                     break;
                   } // case 24
                   case 34: {
    -                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric m =
    +                io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric m =
                         input.readMessage(
    -                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.parser(),
    +                        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.parser(),
                             extensionRegistry);
                     if (metricBuilder_ == null) {
                       ensureMetricIsMutable();
    @@ -14511,16 +14611,16 @@ public Builder setHelpBytes(
            * @return The type.
            */
           @java.lang.Override
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType getType() {
    -        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType.forNumber(type_);
    -        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType.COUNTER : result;
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType getType() {
    +        io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType result = io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType.forNumber(type_);
    +        return result == null ? io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType.COUNTER : result;
           }
           /**
            * optional .io.prometheus.client.MetricType type = 3;
            * @param value The type to set.
            * @return This builder for chaining.
            */
    -      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricType value) {
    +      public Builder setType(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricType value) {
             if (value == null) { throw new NullPointerException(); }
             bitField0_ |= 0x00000004;
             type_ = value.getNumber();
    @@ -14538,22 +14638,22 @@ public Builder clearType() {
             return this;
           }
     
    -      private java.util.List metric_ =
    +      private java.util.List metric_ =
             java.util.Collections.emptyList();
           private void ensureMetricIsMutable() {
             if (!((bitField0_ & 0x00000008) != 0)) {
    -          metric_ = new java.util.ArrayList(metric_);
    +          metric_ = new java.util.ArrayList(metric_);
               bitField0_ |= 0x00000008;
              }
           }
     
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricOrBuilder> metricBuilder_;
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricOrBuilder> metricBuilder_;
     
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List getMetricList() {
    +      public java.util.List getMetricList() {
             if (metricBuilder_ == null) {
               return java.util.Collections.unmodifiableList(metric_);
             } else {
    @@ -14573,7 +14673,7 @@ public int getMetricCount() {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric getMetric(int index) {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric getMetric(int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);
             } else {
    @@ -14584,7 +14684,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14601,7 +14701,7 @@ public Builder setMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder setMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.set(index, builderForValue.build());
    @@ -14614,7 +14714,7 @@ public Builder setMetric(
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric value) {
    +      public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14631,7 +14731,7 @@ public Builder addMetric(io.prometheus.metrics.expositionformats.generated.com_g
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric value) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric value) {
             if (metricBuilder_ == null) {
               if (value == null) {
                 throw new NullPointerException();
    @@ -14648,7 +14748,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder builderForValue) {
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(builderForValue.build());
    @@ -14662,7 +14762,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addMetric(
    -          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder builderForValue) {
    +          int index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder builderForValue) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               metric_.add(index, builderForValue.build());
    @@ -14676,7 +14776,7 @@ public Builder addMetric(
            * repeated .io.prometheus.client.Metric metric = 4;
            */
           public Builder addAllMetric(
    -          java.lang.Iterable values) {
    +          java.lang.Iterable values) {
             if (metricBuilder_ == null) {
               ensureMetricIsMutable();
               com.google.protobuf.AbstractMessageLite.Builder.addAll(
    @@ -14716,14 +14816,14 @@ public Builder removeMetric(int index) {
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder getMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder getMetricBuilder(
               int index) {
             return internalGetMetricFieldBuilder().getBuilder(index);
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricOrBuilder getMetricOrBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricOrBuilder getMetricOrBuilder(
               int index) {
             if (metricBuilder_ == null) {
               return metric_.get(index);  } else {
    @@ -14733,7 +14833,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricOrBuilderList() {
             if (metricBuilder_ != null) {
               return metricBuilder_.getMessageOrBuilderList();
    @@ -14744,31 +14844,31 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder addMetricBuilder() {
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder addMetricBuilder() {
             return internalGetMetricFieldBuilder().addBuilder(
    -            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.getDefaultInstance());
    +            io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder addMetricBuilder(
    +      public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder addMetricBuilder(
               int index) {
             return internalGetMetricFieldBuilder().addBuilder(
    -            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.getDefaultInstance());
    +            index, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.getDefaultInstance());
           }
           /**
            * repeated .io.prometheus.client.Metric metric = 4;
            */
    -      public java.util.List 
    +      public java.util.List 
                getMetricBuilderList() {
             return internalGetMetricFieldBuilder().getBuilderList();
           }
           private com.google.protobuf.RepeatedFieldBuilder<
    -          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricOrBuilder> 
    +          io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricOrBuilder> 
               internalGetMetricFieldBuilder() {
             if (metricBuilder_ == null) {
               metricBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
    -              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricOrBuilder>(
    +              io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.Metric.Builder, io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricOrBuilder>(
                       metric_,
                       ((bitField0_ & 0x00000008) != 0),
                       getParentForChildren(),
    @@ -14862,12 +14962,12 @@ public Builder setUnitBytes(
         }
     
         // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
    -    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily DEFAULT_INSTANCE;
    +    private static final io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily DEFAULT_INSTANCE;
         static {
    -      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily();
    +      DEFAULT_INSTANCE = new io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily();
         }
     
    -    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily getDefaultInstance() {
    +    public static io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily getDefaultInstance() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -14903,7 +15003,7 @@ public com.google.protobuf.Parser getParserForType() {
         }
     
         @java.lang.Override
    -    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics.MetricFamily getDefaultInstanceForType() {
    +    public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics.MetricFamily getDefaultInstanceForType() {
           return DEFAULT_INSTANCE;
         }
     
    @@ -14974,7 +15074,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           getDescriptor() {
         return descriptor;
       }
    -  private static  com.google.protobuf.Descriptors.FileDescriptor
    +  private static final com.google.protobuf.Descriptors.FileDescriptor
           descriptor;
       static {
         java.lang.String[] descriptorData = {
    @@ -15028,7 +15128,7 @@ public io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_3
           "\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004\022\023\n\017GAUGE_H" +
           "ISTOGRAM\020\005B\212\001\nLio.prometheus.metrics.exp" +
           "ositionformats.generated.com_google_prot" +
    -      "obuf_4_33_5Z:github.com/prometheus/clien" +
    +      "obuf_4_34_0Z:github.com/prometheus/clien" +
           "t_model/go;io_prometheus_client"
         };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor
    diff --git a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java
    index 605aa4cd7..f34853cb6 100644
    --- a/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java
    +++ b/prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/generated/Metrics.java
    @@ -1,6 +1,6 @@
     package io.prometheus.metrics.expositionformats.generated;
     
     public final class Metrics
    -    extends io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_33_5.Metrics {
    +    extends io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_34_0.Metrics {
       private Metrics() {}
     }
    
    From 0860e7742b08ab019d129ea24c348191c3f9e0da Mon Sep 17 00:00:00 2001
    From: Copilot <198982749+Copilot@users.noreply.github.com>
    Date: Mon, 9 Mar 2026 07:41:04 +0100
    Subject: [PATCH 865/870] docs: document DCO sign-off requirement for
     contributions (#1937)
    
    ---------
    
    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: jaydeluca <7630696+jaydeluca@users.noreply.github.com>
    ---
     CONTRIBUTING.md | 29 +++++++++++++++++++++++++++++
     1 file changed, 29 insertions(+)
    
    diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
    index 2abbd91e2..1e478f0dc 100644
    --- a/CONTRIBUTING.md
    +++ b/CONTRIBUTING.md
    @@ -12,6 +12,35 @@ Prometheus uses GitHub to manage reviews of pull requests.
       This will avoid unnecessary work and surely give you and us a good deal
       of inspiration.
     
    +## Signing Off Commits
    +
    +Every commit must include a `Signed-off-by` line, as required by the
    +[Developer Certificate of Origin (DCO)](https://developercertificate.org/).
    +
    +Sign off each commit by passing `--signoff` (or `-s`) to `git commit`:
    +
    +```bash
    +git commit --signoff -m "Your commit message"
    +```
    +
    +To sign off only the most recent commit, use `--amend`:
    +
    +```bash
    +git commit --amend --signoff --no-edit
    +```
    +
    +To sign off multiple commits, rebase (replace `N` with the number of commits):
    +
    +```bash
    +git rebase --signoff HEAD~N
    +```
    +
    +Then force-push the branch:
    +
    +```bash
    +git push --force-with-lease
    +```
    +
     ## Formatting
     
     This repository uses [Google Java Format](https://github.com/google/google-java-format) to format
    
    From 9019ca9c0eb4dc10b5c61631045a4d3eb8e54dda Mon Sep 17 00:00:00 2001
    From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
    Date: Mon, 9 Mar 2026 06:49:33 +0000
    Subject: [PATCH 866/870] chore(deps): update jdx/mise-action action to v3.6.3
     (#1934)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    This PR contains the following updates:
    
    | Package | Type | Update | Change |
    |---|---|---|---|
    | [jdx/mise-action](https://redirect.github.com/jdx/mise-action) |
    action | patch | `v3.6.2` → `v3.6.3` |
    | [jdx/mise-action](https://redirect.github.com/jdx/mise-action) |
    action | patch | `v3.6.1` → `v3.6.3` |
    
    ---
    
    ### Release Notes
    
    
    jdx/mise-action (jdx/mise-action) ### [`v3.6.3`](https://redirect.github.com/jdx/mise-action/releases/tag/v3.6.3) [Compare Source](https://redirect.github.com/jdx/mise-action/compare/v3.6.2...v3.6.3) #### What's Changed - fix: pass cwd to all exec calls in exportMiseEnv() by [@​andrewthauer](https://redirect.github.com/andrewthauer) in [#​390](https://redirect.github.com/jdx/mise-action/pull/390) - chore: release v3.6.3 by [@​mise-en-dev](https://redirect.github.com/mise-en-dev) in [#​391](https://redirect.github.com/jdx/mise-action/pull/391) #### New Contributors - [@​andrewthauer](https://redirect.github.com/andrewthauer) made their first contribution in [#​390](https://redirect.github.com/jdx/mise-action/pull/390) **Full Changelog**:
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/acceptance-tests.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/generate-protobuf.yml | 2 +- .github/workflows/github-pages.yaml | 2 +- .github/workflows/java-version-matrix-tests.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/native-tests.yml | 2 +- .github/workflows/nightly-benchmarks.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test-release-build.yml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 70a571621..5884b998d 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -13,7 +13,7 @@ jobs: with: persist-credentials: false uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 + - uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3.6.3 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8e34ade37..2691884e3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: persist-credentials: false - - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 + - uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3.6.3 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/generate-protobuf.yml b/.github/workflows/generate-protobuf.yml index 9bfe252a1..3c24ddad3 100644 --- a/.github/workflows/generate-protobuf.yml +++ b/.github/workflows/generate-protobuf.yml @@ -19,7 +19,7 @@ jobs: ref: ${{ github.ref }} # zizmor: ignore[artipacked] -- needs credentials to push persist-credentials: true - - uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1 + - uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3.6.3 with: version: v2026.2.11 sha256: 3e1baedb9284124b770d2d561a04a98c343d05967c83deb8b35c7c941f8d9c9a diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index ac2e68b78..d774424ef 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -37,7 +37,7 @@ jobs: persist-credentials: false fetch-tags: "true" fetch-depth: 0 - - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 + - uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3.6.3 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/java-version-matrix-tests.yml b/.github/workflows/java-version-matrix-tests.yml index 9980980c2..1d58513cc 100644 --- a/.github/workflows/java-version-matrix-tests.yml +++ b/.github/workflows/java-version-matrix-tests.yml @@ -32,7 +32,7 @@ jobs: persist-credentials: false - name: Set up mise - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 + uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3.6.3 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index eceb1ae19..37685e994 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,7 +21,7 @@ jobs: fetch-depth: 0 # needed for git diff --merge-base in lint:links - name: Setup mise - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 + uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3.6.3 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 926086658..fb49ce3ea 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -13,7 +13,7 @@ jobs: with: persist-credentials: false uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 + - uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3.6.3 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/nightly-benchmarks.yml b/.github/workflows/nightly-benchmarks.yml index db2f5c2d5..4954f8015 100644 --- a/.github/workflows/nightly-benchmarks.yml +++ b/.github/workflows/nightly-benchmarks.yml @@ -34,7 +34,7 @@ jobs: fetch-depth: 0 - name: Setup mise - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 + uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3.6.3 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 437f2fc07..0db236d00 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,7 @@ jobs: with: persist-credentials: false - - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 + - uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3.6.3 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 diff --git a/.github/workflows/test-release-build.yml b/.github/workflows/test-release-build.yml index dbd1354f1..d58b682a7 100644 --- a/.github/workflows/test-release-build.yml +++ b/.github/workflows/test-release-build.yml @@ -18,7 +18,7 @@ jobs: persist-credentials: false fetch-tags: "true" fetch-depth: 0 - - uses: jdx/mise-action@e79ddf65a11cec7b0e882bedced08d6e976efb2d # v3.6.2 + - uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3.6.3 with: version: v2026.2.24 sha256: c6e8b1abbd02d4beb7f38c98174e647b4ae40e89422465bc3b49e48c0bdf9ba9 From e854af48392c5ad5535a153bafa62253d2dced24 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 17:57:25 +0100 Subject: [PATCH 867/870] chore(deps): update dependency maven to v3.9.13 (#1938) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [maven](https://maven.apache.org/) ([source](https://redirect.github.com/apache/maven)) | `3.9.12` → `3.9.13` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.apache.maven:apache-maven/3.9.13?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.apache.maven:apache-maven/3.9.12/3.9.13?slim=true) | --- ### Release Notes
    apache/maven (maven) ### [`v3.9.13`](https://redirect.github.com/apache/maven/compare/maven-3.9.12...maven-3.9.13) [Compare Source](https://redirect.github.com/apache/maven/compare/maven-3.9.12...maven-3.9.13)
    --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .mvn/wrapper/maven-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index 5f1f57004..1027a01fe 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1,2 +1,2 @@ distributionType=only-script -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.13/apache-maven-3.9.13-bin.zip From d9d8dabb975ff1ff15f118e141da6036c255f371 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Thu, 12 Mar 2026 07:46:05 -0400 Subject: [PATCH 868/870] feat: Add OpenMetrics2 configuration support (#1939) --- .../config/OpenMetrics2Properties.java | 118 +++++++++++++++++ .../metrics/config/PrometheusProperties.java | 27 +++- .../config/PrometheusPropertiesLoader.java | 4 +- .../config/OpenMetrics2PropertiesTest.java | 120 ++++++++++++++++++ .../config/PrometheusPropertiesTest.java | 59 +++++++++ 5 files changed, 325 insertions(+), 3 deletions(-) create mode 100644 prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/OpenMetrics2Properties.java create mode 100644 prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/OpenMetrics2PropertiesTest.java diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/OpenMetrics2Properties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/OpenMetrics2Properties.java new file mode 100644 index 000000000..a92536036 --- /dev/null +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/OpenMetrics2Properties.java @@ -0,0 +1,118 @@ +package io.prometheus.metrics.config; + +import javax.annotation.Nullable; + +/** + * Properties starting with io.prometheus.openmetrics2. These properties are experimental and + * subject to change. + */ +public class OpenMetrics2Properties { + + private static final String PREFIX = "io.prometheus.openmetrics2"; + private static final String CONTENT_NEGOTIATION = "content_negotiation"; + private static final String COMPOSITE_VALUES = "composite_values"; + private static final String EXEMPLAR_COMPLIANCE = "exemplar_compliance"; + private static final String NATIVE_HISTOGRAMS = "native_histograms"; + + @Nullable private final Boolean contentNegotiation; + @Nullable private final Boolean compositeValues; + @Nullable private final Boolean exemplarCompliance; + @Nullable private final Boolean nativeHistograms; + + private OpenMetrics2Properties( + @Nullable Boolean contentNegotiation, + @Nullable Boolean compositeValues, + @Nullable Boolean exemplarCompliance, + @Nullable Boolean nativeHistograms) { + this.contentNegotiation = contentNegotiation; + this.compositeValues = compositeValues; + this.exemplarCompliance = exemplarCompliance; + this.nativeHistograms = nativeHistograms; + } + + /** Gate OM2 features behind content negotiation. Default is {@code false}. */ + public boolean getContentNegotiation() { + return contentNegotiation != null && contentNegotiation; + } + + /** Single-line histogram/summary with {@code st@}. Default is {@code false}. */ + public boolean getCompositeValues() { + return compositeValues != null && compositeValues; + } + + /** Mandatory timestamps, no 128-char limit for exemplars. Default is {@code false}. */ + public boolean getExemplarCompliance() { + return exemplarCompliance != null && exemplarCompliance; + } + + /** Exponential buckets support for native histograms. Default is {@code false}. */ + public boolean getNativeHistograms() { + return nativeHistograms != null && nativeHistograms; + } + + /** + * Note that this will remove entries from {@code propertySource}. This is because we want to know + * if there are unused properties remaining after all properties have been loaded. + */ + static OpenMetrics2Properties load(PropertySource propertySource) + throws PrometheusPropertiesException { + Boolean contentNegotiation = Util.loadBoolean(PREFIX, CONTENT_NEGOTIATION, propertySource); + Boolean compositeValues = Util.loadBoolean(PREFIX, COMPOSITE_VALUES, propertySource); + Boolean exemplarCompliance = Util.loadBoolean(PREFIX, EXEMPLAR_COMPLIANCE, propertySource); + Boolean nativeHistograms = Util.loadBoolean(PREFIX, NATIVE_HISTOGRAMS, propertySource); + return new OpenMetrics2Properties( + contentNegotiation, compositeValues, exemplarCompliance, nativeHistograms); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + + @Nullable private Boolean contentNegotiation; + @Nullable private Boolean compositeValues; + @Nullable private Boolean exemplarCompliance; + @Nullable private Boolean nativeHistograms; + + private Builder() {} + + /** See {@link #getContentNegotiation()} */ + public Builder contentNegotiation(boolean contentNegotiation) { + this.contentNegotiation = contentNegotiation; + return this; + } + + /** See {@link #getCompositeValues()} */ + public Builder compositeValues(boolean compositeValues) { + this.compositeValues = compositeValues; + return this; + } + + /** See {@link #getExemplarCompliance()} */ + public Builder exemplarCompliance(boolean exemplarCompliance) { + this.exemplarCompliance = exemplarCompliance; + return this; + } + + /** See {@link #getNativeHistograms()} */ + public Builder nativeHistograms(boolean nativeHistograms) { + this.nativeHistograms = nativeHistograms; + return this; + } + + /** Enable all OpenMetrics 2.0 features */ + public Builder enableAll() { + this.contentNegotiation = true; + this.compositeValues = true; + this.exemplarCompliance = true; + this.nativeHistograms = true; + return this; + } + + public OpenMetrics2Properties build() { + return new OpenMetrics2Properties( + contentNegotiation, compositeValues, exemplarCompliance, nativeHistograms); + } + } +} diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java index 055fe4aa3..a9045d711 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusProperties.java @@ -2,6 +2,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.function.Consumer; import javax.annotation.Nullable; /** @@ -21,6 +22,7 @@ public class PrometheusProperties { private final ExporterHttpServerProperties exporterHttpServerProperties; private final ExporterOpenTelemetryProperties exporterOpenTelemetryProperties; private final ExporterPushgatewayProperties exporterPushgatewayProperties; + private final OpenMetrics2Properties openMetrics2Properties; /** * Map that stores metric-specific properties keyed by metric name in exposition format @@ -111,7 +113,8 @@ public static Builder builder() { ExporterFilterProperties exporterFilterProperties, ExporterHttpServerProperties httpServerConfig, ExporterPushgatewayProperties pushgatewayProperties, - ExporterOpenTelemetryProperties otelConfig) { + ExporterOpenTelemetryProperties otelConfig, + OpenMetrics2Properties openMetrics2Properties) { this.defaultMetricsProperties = defaultMetricsProperties; this.metricProperties = metricProperties; this.exemplarProperties = exemplarProperties; @@ -120,6 +123,7 @@ public static Builder builder() { this.exporterHttpServerProperties = httpServerConfig; this.exporterPushgatewayProperties = pushgatewayProperties; this.exporterOpenTelemetryProperties = otelConfig; + this.openMetrics2Properties = openMetrics2Properties; } /** @@ -167,6 +171,10 @@ public ExporterOpenTelemetryProperties getExporterOpenTelemetryProperties() { return exporterOpenTelemetryProperties; } + public OpenMetrics2Properties getOpenMetrics2Properties() { + return openMetrics2Properties; + } + public static class Builder { private MetricsProperties defaultMetricsProperties = MetricsProperties.builder().build(); private final MetricPropertiesMap metricProperties = new MetricPropertiesMap(); @@ -180,6 +188,8 @@ public static class Builder { ExporterPushgatewayProperties.builder().build(); private ExporterOpenTelemetryProperties otelConfig = ExporterOpenTelemetryProperties.builder().build(); + private OpenMetrics2Properties openMetrics2Properties = + OpenMetrics2Properties.builder().build(); private Builder() {} @@ -231,6 +241,18 @@ public Builder exporterOpenTelemetryProperties( return this; } + public Builder enableOpenMetrics2(Consumer configurator) { + OpenMetrics2Properties.Builder openMetrics2Builder = OpenMetrics2Properties.builder(); + configurator.accept(openMetrics2Builder); + this.openMetrics2Properties = openMetrics2Builder.build(); + return this; + } + + public Builder openMetrics2Properties(OpenMetrics2Properties openMetrics2Properties) { + this.openMetrics2Properties = openMetrics2Properties; + return this; + } + public PrometheusProperties build() { return new PrometheusProperties( defaultMetricsProperties, @@ -240,7 +262,8 @@ public PrometheusProperties build() { exporterFilterProperties, exporterHttpServerProperties, pushgatewayProperties, - otelConfig); + otelConfig, + openMetrics2Properties); } } } diff --git a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java index 9119c2f65..018ea2c5d 100644 --- a/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java +++ b/prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java @@ -40,6 +40,7 @@ public static PrometheusProperties load(Map externalProperties) ExporterPushgatewayProperties.load(propertySource); ExporterOpenTelemetryProperties exporterOpenTelemetryProperties = ExporterOpenTelemetryProperties.load(propertySource); + OpenMetrics2Properties openMetrics2Properties = OpenMetrics2Properties.load(propertySource); validateAllPropertiesProcessed(propertySource); return new PrometheusProperties( defaultMetricsProperties, @@ -49,7 +50,8 @@ public static PrometheusProperties load(Map externalProperties) exporterFilterProperties, exporterHttpServerProperties, exporterPushgatewayProperties, - exporterOpenTelemetryProperties); + exporterOpenTelemetryProperties, + openMetrics2Properties); } // This will remove entries from propertySource when they are processed. diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/OpenMetrics2PropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/OpenMetrics2PropertiesTest.java new file mode 100644 index 000000000..c3a0b9fca --- /dev/null +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/OpenMetrics2PropertiesTest.java @@ -0,0 +1,120 @@ +package io.prometheus.metrics.config; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Test; + +class OpenMetrics2PropertiesTest { + + @Test + void load() { + OpenMetrics2Properties properties = + load( + new HashMap<>( + Map.of( + "io.prometheus.openmetrics2.content_negotiation", + "true", + "io.prometheus.openmetrics2.composite_values", + "true", + "io.prometheus.openmetrics2.exemplar_compliance", + "true", + "io.prometheus.openmetrics2.native_histograms", + "true"))); + assertThat(properties.getContentNegotiation()).isTrue(); + assertThat(properties.getCompositeValues()).isTrue(); + assertThat(properties.getExemplarCompliance()).isTrue(); + assertThat(properties.getNativeHistograms()).isTrue(); + } + + @Test + void loadInvalidValue() { + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> + load( + new HashMap<>( + Map.of("io.prometheus.openmetrics2.content_negotiation", "invalid")))) + .withMessage( + "io.prometheus.openmetrics2.content_negotiation: Expecting 'true' or 'false'. Found:" + + " invalid"); + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> + load( + new HashMap<>( + Map.of("io.prometheus.openmetrics2.composite_values", "invalid")))) + .withMessage( + "io.prometheus.openmetrics2.composite_values: Expecting 'true' or 'false'. Found:" + + " invalid"); + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> + load( + new HashMap<>( + Map.of("io.prometheus.openmetrics2.exemplar_compliance", "invalid")))) + .withMessage( + "io.prometheus.openmetrics2.exemplar_compliance: Expecting 'true' or 'false'. Found:" + + " invalid"); + assertThatExceptionOfType(PrometheusPropertiesException.class) + .isThrownBy( + () -> + load( + new HashMap<>( + Map.of("io.prometheus.openmetrics2.native_histograms", "invalid")))) + .withMessage( + "io.prometheus.openmetrics2.native_histograms: Expecting 'true' or 'false'. Found:" + + " invalid"); + } + + private static OpenMetrics2Properties load(Map map) { + Map regularProperties = new HashMap<>(map); + PropertySource propertySource = new PropertySource(regularProperties); + return OpenMetrics2Properties.load(propertySource); + } + + @Test + void builder() { + OpenMetrics2Properties properties = + OpenMetrics2Properties.builder() + .contentNegotiation(true) + .compositeValues(false) + .exemplarCompliance(true) + .nativeHistograms(false) + .build(); + assertThat(properties.getContentNegotiation()).isTrue(); + assertThat(properties.getCompositeValues()).isFalse(); + assertThat(properties.getExemplarCompliance()).isTrue(); + assertThat(properties.getNativeHistograms()).isFalse(); + } + + @Test + void builderEnableAll() { + OpenMetrics2Properties properties = OpenMetrics2Properties.builder().enableAll().build(); + assertThat(properties.getContentNegotiation()).isTrue(); + assertThat(properties.getCompositeValues()).isTrue(); + assertThat(properties.getExemplarCompliance()).isTrue(); + assertThat(properties.getNativeHistograms()).isTrue(); + } + + @Test + void defaultValues() { + OpenMetrics2Properties properties = OpenMetrics2Properties.builder().build(); + assertThat(properties.getContentNegotiation()).isFalse(); + assertThat(properties.getCompositeValues()).isFalse(); + assertThat(properties.getExemplarCompliance()).isFalse(); + assertThat(properties.getNativeHistograms()).isFalse(); + } + + @Test + void partialConfiguration() { + OpenMetrics2Properties properties = + OpenMetrics2Properties.builder().contentNegotiation(true).compositeValues(true).build(); + assertThat(properties.getContentNegotiation()).isTrue(); + assertThat(properties.getCompositeValues()).isTrue(); + assertThat(properties.getExemplarCompliance()).isFalse(); + assertThat(properties.getNativeHistograms()).isFalse(); + } +} diff --git a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java index 3e891202a..2c6e11daf 100644 --- a/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java +++ b/prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java @@ -128,4 +128,63 @@ void testMetricNameStartingWithNumber() { assertThat(result.getMetricProperties("123metric")).isSameAs(customProps); assertThat(result.getMetricProperties("_23metric")).isSameAs(customProps); } + + @Test + void testOpenMetrics2ConsumerPattern() { + PrometheusProperties config = + PrometheusProperties.builder() + .enableOpenMetrics2(om2 -> om2.contentNegotiation(true).compositeValues(false)) + .build(); + assertThat(config.getOpenMetrics2Properties().getContentNegotiation()).isTrue(); + assertThat(config.getOpenMetrics2Properties().getCompositeValues()).isFalse(); + assertThat(config.getOpenMetrics2Properties().getExemplarCompliance()).isFalse(); + assertThat(config.getOpenMetrics2Properties().getNativeHistograms()).isFalse(); + } + + @Test + void testOpenMetrics2EnableAll() { + PrometheusProperties config = + PrometheusProperties.builder() + .enableOpenMetrics2(OpenMetrics2Properties.Builder::enableAll) + .build(); + assertThat(config.getOpenMetrics2Properties().getContentNegotiation()).isTrue(); + assertThat(config.getOpenMetrics2Properties().getCompositeValues()).isTrue(); + assertThat(config.getOpenMetrics2Properties().getExemplarCompliance()).isTrue(); + assertThat(config.getOpenMetrics2Properties().getNativeHistograms()).isTrue(); + } + + @Test + void testOpenMetrics2DirectAssignment() { + OpenMetrics2Properties om2Props = + OpenMetrics2Properties.builder().contentNegotiation(true).nativeHistograms(true).build(); + PrometheusProperties config = + PrometheusProperties.builder().openMetrics2Properties(om2Props).build(); + assertThat(config.getOpenMetrics2Properties().getContentNegotiation()).isTrue(); + assertThat(config.getOpenMetrics2Properties().getCompositeValues()).isFalse(); + assertThat(config.getOpenMetrics2Properties().getExemplarCompliance()).isFalse(); + assertThat(config.getOpenMetrics2Properties().getNativeHistograms()).isTrue(); + } + + @Test + void testOpenMetrics2Defaults() { + PrometheusProperties config = PrometheusProperties.builder().build(); + assertThat(config.getOpenMetrics2Properties().getContentNegotiation()).isFalse(); + assertThat(config.getOpenMetrics2Properties().getCompositeValues()).isFalse(); + assertThat(config.getOpenMetrics2Properties().getExemplarCompliance()).isFalse(); + assertThat(config.getOpenMetrics2Properties().getNativeHistograms()).isFalse(); + } + + @Test + void testOpenMetrics2PropertiesLoading() { + Map properties = new HashMap<>(); + properties.put("io.prometheus.openmetrics2.content_negotiation", "true"); + properties.put("io.prometheus.openmetrics2.composite_values", "false"); + properties.put("io.prometheus.openmetrics2.exemplar_compliance", "true"); + properties.put("io.prometheus.openmetrics2.native_histograms", "false"); + PrometheusProperties config = PrometheusPropertiesLoader.load(properties); + assertThat(config.getOpenMetrics2Properties().getContentNegotiation()).isTrue(); + assertThat(config.getOpenMetrics2Properties().getCompositeValues()).isFalse(); + assertThat(config.getOpenMetrics2Properties().getExemplarCompliance()).isTrue(); + assertThat(config.getOpenMetrics2Properties().getNativeHistograms()).isFalse(); + } } From cc17d6e4346c9d51e054010fddc75cf8935cbc7d Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 12 Mar 2026 17:09:02 +0100 Subject: [PATCH 869/870] fix: reduce lychee retries to avoid compounding GitHub 429s (#1940) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Reduce `max_retries` from 6 to 2 and increase `retry_wait_time` from 5s to 10s - 6 retries with 5s wait compounds 429 rate limiting from GitHub — many rapid retries keep triggering rate limits - Fewer retries with longer wait between them is more effective at recovering from 429s ## Test plan - [ ] Link check CI workflow passes without hitting sustained 429 errors --- .github/config/lychee.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/config/lychee.toml b/.github/config/lychee.toml index 864350fb5..0f338a7d3 100644 --- a/.github/config/lychee.toml +++ b/.github/config/lychee.toml @@ -2,8 +2,8 @@ # See https://lychee.cli.rs/config/ timeout = 30 -retry_wait_time = 5 -max_retries = 6 +retry_wait_time = 10 +max_retries = 2 max_concurrency = 4 # Check link anchors From b81332e3a09e465f956f118a2403e64b83771ae5 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 12 Mar 2026 17:09:36 +0100 Subject: [PATCH 870/870] fix: use /tree/ instead of /blob/ for directory URL (#1944) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Fix tail sampling processor link in `docs/content/otel/tracing.md` to use `/tree/` instead of `/blob/` - The link points to a directory, not a file. GitHub redirects `/blob/` → `/tree/` (301), but link checkers that remap to `raw.githubusercontent.com` get 400 for directories ## Test plan - [ ] Link checker passes Signed-off-by: Gregor Zeitlinger --- docs/content/otel/tracing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/otel/tracing.md b/docs/content/otel/tracing.md index 0e3fb72fa..33180d34a 100644 --- a/docs/content/otel/tracing.md +++ b/docs/content/otel/tracing.md @@ -56,7 +56,7 @@ Exemplars are only selected every [`minRetentionPeriodSeconds`]({{< relref "../config/config.md#exemplar-properties" >}}) seconds. Here's an example of how to configure OpenTelemetry's -[tail sampling processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/tailsamplingprocessor/) +[tail sampling processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/tailsamplingprocessor/) to sample all Spans marked with `exemplar="true"`, and then discard 90% of the traces: ```yaml